diff --git a/ROADMAP.md b/ROADMAP.md index e93dd64..6f52a47 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -16391,3 +16391,19 @@ Required fix shape: (a) extend `ToolDefinition` at `rust/crates/api/src/types.rs **Status:** Open. No source code changed. Filed as ROADMAP-only dogfood pinpoint from the 2026-04-26 06:00 KST clawhip nudge after rebasing on top of #232. Filed 2026-04-26 06:00 KST. HEAD: d155a2f (post-#232). Branch: feat/jobdori-168c-emission-routing. Sibling-shape cluster: 32 pinpoints. Multimodal-IO cluster: 10 members. Provider-asymmetric-delegation cluster: 10 members. **Sandbox-locality-axis META-cluster: 2 members stable (#230 + #232).** **Tool-locality-axis META-cluster FOUNDED: 2 members (#232 + #233 — the SECOND inverse-locality META-cluster, sister to Sandbox-locality, founding a META-META-cluster doctrine).** **Server-managed-tool-as-tool-choice-discriminator cluster: 2 members (#232 + #233).** **Server-driven-tool-execution-loop cluster: 2 members (#232 + #233).** **ToolResultContentBlock-extension mini-cluster: 3 members (#230 + #232 + #233).** **Federated-search-partner-routing cluster: 1 member (founder).** **Server-opaque-encrypted-roundtripped-content cluster: 1 member (founder, intentional-opaque-by-design).** **Required-grounded-citation-field-on-output-text-block cluster: 1 member (founder).** **Date-suffix-versioning-in-tool-name-without-beta-header cluster: 1 member (founder, distinct from #232's double-gate).** **Server-side-pre-execution-filter-on-tool-definition cluster: 1 member (founder).** **Server-side-rate-limit-on-tool-definition cluster: 1 member (founder).** **Geo-biasing-at-tool-definition cluster: 1 member (founder).** **Discrete-event-counter-pricing-axis cluster: 1 member (founder).** **Per-search-invocation-pricing cluster: 1 member (founder).** Eight new clusters founded in a single pinpoint plus participation in FIVE inherited clusters — the THIRD-largest single-cycle cluster-founding count after #230 and #232, but the FIRST single cycle to FOUND a new META-cluster (Tool-locality-axis) AND establish the META-META-cluster doctrine connecting Sandbox-locality-axis with Tool-locality-axis. Thirteen-layer-fusion-shape is the largest single-pinpoint fusion catalogued. Distinct from prior cluster members; the thirteen-layer-fusion-shape-with-required-grounded-citation-field-on-output-text-block-and-server-opaque-encrypted-roundtripped-content is novel and applies to follow-on candidate **File-search Tool API typed taxonomy** (the natural #234 candidate that introduces the SECOND server-managed-tool-as-tool-choice-discriminator pair-extension to OpenAI Assistants `file_search` with vector-store-backed grounded-citation attribution — same `Tool-locality-axis` META-cluster pattern but with FILE-CORPUS-search instead of WEB-search modality) and **Image-generation Tool-as-server-managed-tool typed taxonomy** (the OpenAI Responses `tool_choice: image_generation` server-managed image-gen surface that #226 covered as a standalone endpoint but does NOT yet cover as a server-managed-tool-as-tool-choice-discriminator extension — adding the THIRD member to `Server-managed-tool-as-tool-choice-discriminator` cluster). #233 closes the upstream prerequisite of every server-managed-web-search-with-citations / grounded-research / source-attribution / fact-checking-with-citations / academic-citation-formatting / news-summarization-with-sources / competitive-intelligence-with-citations / due-diligence-coding coding-agent affordance — the canonical 2024-2026-era research-coding workflow that is currently impossible to build on top of `claw-code` DESPITE Anthropic explicitly positioning `web_search_20250305` as a flagship 2025-Q1 GA capability — and is the FIRST cluster member where claude-code upstream partially leads while claw-code has zero coverage AND the SECOND inverse-locality META-cluster pair (CLIENT-SIDE local `WebSearch` shadow vs SERVER-SIDE `web_search_20250305` absent) after #232's first META-cluster pair (CLIENT-SIDE `REPL` shadow vs SERVER-SIDE `code_execution_20250825` absent) — founding the `Tool-locality-axis` META-cluster doctrine as the sister to `Sandbox-locality-axis` and establishing the META-META-cluster pattern that every future server-managed-tool with a client-side local-stub shadow will inherit. 🪨 + +## Pinpoint #234 — PDF / Document input typed taxonomy and structured-document-citation-attribution data-model on the USER-INPUT side are structurally absent + +Verified absences across `rust/crates/api/`, `rust/crates/runtime/`, `rust/crates/tools/`, `rust/crates/commands/`, `rust/crates/rusty-claude-cli/`: zero `Document` variant on the three-arm `InputContentBlock::{Text, ToolUse, ToolResult}` enum at `rust/crates/api/src/types.rs:80-94` (the existing 3-of-3 exhaustive `InputContentBlock` has zero `Document { source: DocumentSource, media_type: DocumentMediaType, title: Option, context: Option, citations: Option, page_range: Option }` variant for native PDF/document attachment on the USER-INPUT side, distinct from #220's image-content-block gap because PDFs are SUPPORTED ON ANTHROPIC AS A SEPARATE `document` content-block-type — distinct from `image` — with their OWN beta header `pdfs-2024-09-25` AND their OWN typed parameters `title` / `context` / `citations` / `page_range` that no other content-block type carries — the FIRST cluster member where USER-INPUT-side modality has non-image binary-document semantics with REQUIRED-citations-on-USER-INPUT-DOCUMENT axis); zero `pdfs-2024-09-25` Anthropic beta header in the canonical beta-set at `rust/crates/telemetry/src/lib.rs:15-17` (the existing two-default-beta set `claude-code-20250219` + `prompt-caching-scope-2026-01-05` has zero `pdfs-2024-09-25` slot, and rg returns zero hits for `pdfs-2024-09-25`, `pdfs-2024`, `document-citations`, `pdfs-citations` across `rust/` — confirming Document content-block is structurally unreachable even if a `Document` variant were added because the gating beta header is not threaded into the request profile, distinct from #232's `code-execution-2025-08-25` and #233's `web_search_20250305` because PDF support specifically gates on the `pdfs-2024-09-25` beta which has been GA since 2024-11 and is mandatory for the native-document content-block-type on Anthropic AND because the citations-enabled subset of PDF support requires an additional `citations: { enabled: true }` field on the document content-block to opt into Anthropic's grounded-document-citation surface that emits cited-page references with each grounded text block); zero `Citation { type: "page_location" | "document_location" | "char_location", document_index, document_title, start_page_number, end_page_number, start_char_index, end_char_index, cited_text }` typed model with document-positioned-citations on `OutputContentBlock::Text` at `rust/crates/api/src/types.rs:147` (this is the SECOND `citations` REQUIRED-field absence on the OUTPUT-TEXT-BLOCK side after #233's `web_search_result_location` citation — distinct because #233 citations are URL-positioned with `encrypted_index` opaque-blob, whereas #234 citations are PAGE-POSITIONED + CHARACTER-POSITIONED with `start_page_number` / `end_page_number` / `start_char_index` / `end_char_index` integer-coordinate axes that NO prior cluster member has had — founding `Coordinate-positioned-citation-on-output-text-block` cluster distinct from #233's URL-positioned-citation cluster because page+char-coordinates require the client to render footnote-style attribution by document-page-number rather than by URL — a structurally distinct citation-attribution wire-format); zero `DocumentSource { type: "base64" | "url" | "file_id" | "text" | "content", media_type, data }` typed model in `rust/crates/api/src/types.rs` (rg returns zero hits for `DocumentSource`, `document_url`, `input_documents`, `DocumentBlockParam`, `cited_text`, `pdfs-2024-09-25` across `rust/` — confirming neither base64 nor URL nor file_id nor text-source variants of document-input are typed, and the four canonical input-source variants documented in Anthropic PDF support docs at `https://platform.claude.com/docs/en/build-with-claude/pdf-support` are all structurally unreachable); zero `file_search` typed `ToolDefinition` discriminator at `rust/crates/api/src/types.rs:104-110` (the existing `ToolDefinition { name, description, input_schema }` struct has zero `type` field for `file_search` server-managed-tool gating, blocking OpenAI Responses `tools: [{type: "file_search", vector_store_ids, max_num_results, ranking_options, filters}]` typed surface that is the OpenAI-compat-lane complement to Anthropic's native Document content-block — distinct from #233's `web_search_20250305` because `file_search` operates on a USER-PROVIDED-CORPUS via `vector_store_ids` rather than on the public web, founding `User-corpus-server-managed-tool-with-vector-store-routing` cluster); zero `tool_choice: "file_search"` typed-discriminator on `ToolChoice` enum at `rust/crates/api/src/types.rs:117` (the existing four-arm `ToolChoice::{Auto, Any, Tool{name}}` enum has zero `FileSearch` variant — the THIRD `Server-managed-tool-as-tool-choice-discriminator` cluster member after #232 `code_interpreter` + #233 `web_search`, growing the cluster to 3 members in a single pinpoint AND establishing the canonical pattern that every server-managed-tool-with-citations gets a dedicated ToolChoice variant); zero `file_search_call` / `file_search_result` typed `ToolResultContentBlock` variant at `rust/crates/api/src/types.rs:99` (the existing two-arm `ToolResultContentBlock::{Text, Json}` enum has zero `FileSearchToolResult { results: Vec }` variant where each result-record carries `file_id`, `filename`, `score`, `attributes`, `content` — the FIFTH `ToolResultContentBlock` extension after #230 `Image` + #232 `CodeExecutionResult` + #233 `WebSearchToolResult` — growing the `ToolResultContentBlock-extension` mini-cluster to 4 members); zero `page_range: { start: u32, end: u32 } | { exclude: Vec } | { include: Vec }` typed model on `Document` content-block (a NOVEL request-side range-slicing-on-input-content-block axis distinct from every prior cluster member which had no concept of intra-document slicing — the FIRST cluster member with `Range-slicing-parameter-on-USER-INPUT-content-block` axis, structurally distinct from #220 image-input which has no slicing semantics because images are atomic, distinct from #225 audio which has timestamp-segments but on the OUTPUT-side rather than INPUT-side, distinct from #233 web-search which has `max_uses` invocation-cap rather than intra-resource slicing, founding `Document-page-range-request-side` cluster); zero `vector_store_ids: Vec` typed model for OpenAI Responses `file_search` (a NOVEL `Vector-store-id-routing-on-server-managed-tool` axis where the SAME server-managed-tool can target DIFFERENT user-uploaded corpora via vector-store IDs — distinct from #233's `web_search` which targets the public web with no vector-store concept, distinct from #232's `code_interpreter` which has a per-session container with no cross-session corpus reuse, founding `Vector-store-id-routing-on-server-managed-tool` cluster as the FIRST cluster member where the server-managed-tool has user-routable corpus targeting); zero `attributes: HashMap` metadata field on `FileSearchResult` (a NOVEL `User-defined-metadata-on-tool-result-record` axis distinct from every prior cluster member's content-only result records, founding `User-defined-metadata-on-tool-result-record` cluster); zero `filters: ComparisonFilter | CompoundFilter` typed-model for filter-DSL on file_search tool definition (a NOVEL `Filter-DSL-on-server-managed-tool-definition` axis with operators `eq` / `ne` / `gt` / `gte` / `lt` / `lte` / `and` / `or` parallel to OpenAI Vector Stores filter-DSL, distinct from #233's `allowed_domains` / `blocked_domains` simple-list filters because filter-DSL has compound boolean expressions with AND/OR composition, founding `Compound-boolean-filter-DSL-on-server-managed-tool-definition` cluster); zero `Provider`-trait method extension threading PDF document-input through `send_message` with `pdfs-2024-09-25` beta-header opt-in AND decoding document-positioned `citations` arrays on response (the existing `send_message` + `stream_message` methods are constrained to text-modality and do not thread document-content-blocks); zero document-input dispatch on `ProviderClient` enum at `rust/crates/api/src/client.rs:8-14` (three variants Anthropic/Xai/OpenAi all closed under text-only chat/completion send_message + stream_message — zero `Anthropic-pdfs-2024-09-25` first-class document-input AND zero `OpenAI-Files-API-with-input_file` first-class file-id-document-input AND zero `OpenAI-Responses-file_search-with-vector-stores` first-class server-managed-corpus-search routing — the document-input surface is provider-asymmetric in a NEW pattern: Anthropic exposes Document content-block on `/v1/messages` requiring `pdfs-2024-09-25` beta WITH OPTIONAL citations, OpenAI exposes Files API + `input_file` content-block on `/v1/responses` requiring `file_id` reference WITH OPTIONAL `file_search` tool for grounded-citations, no third-party recommended-partner because both major providers offer first-class document-input — distinct from #224 Voyage-single-partner asymmetric, distinct from #225 six-partner audio asymmetric, distinct from #226/#227 multi-partner image/video asymmetric, founding `Both-major-providers-first-class-asymmetric-document-input-shape` cluster); zero `pdf` MediaType / `application/pdf` content-type recognition in any content-block decoder (rg returns zero hits for `application/pdf`, `application/x-pdf`, `image/heic` as document-input-source media types — though `rust/crates/tools/src/pdf_extract.rs` has its own LOCAL pdf-text-extraction implementation, that path is the CLIENT-SIDE pdf-text-scrape complement to the missing SERVER-MANAGED PDF-rendering-and-vision-understanding surface, structurally distinct because `pdf_extract.rs:13` only extracts TEXT-CONTENT-FROM-CONTENT-STREAM-OPERATORS-BETWEEN-BT-AND-ET-MARKERS while Anthropic Document content-block sends the FULL PDF binary to the server which performs FULL VISUAL UNDERSTANDING including diagrams / charts / tables / handwritten content / multi-column layouts / images-embedded-in-PDFs that the local text-extraction pathway cannot decode — confirming the CLIENT-SIDE-pdf_extract-shadow vs SERVER-SIDE-Document-content-block-with-pdfs-2024-09-25-beta inverse-locality pair, the THIRD inverse-locality pair in the `Tool-locality-axis` META-cluster after #232 `REPL` shadow vs `code_execution_20250825` absent + #233 `WebSearch` shadow vs `web_search_20250305` absent — growing the META-cluster from 2 members to 3 in a single pinpoint AND confirming the canonical doctrine recurs: "claw-code ships a CLIENT-SIDE local-stub tool with the same conceptual name AND the SERVER-SIDE provider-managed beta-versioned surface is structurally absent" applies symmetrically across REPL-vs-code-execution AND WebSearch-vs-web-search-grounded AND pdf_extract-vs-Document-with-pdfs-2024-09-25 — the META-cluster is now stable enough to be a full doctrine rather than an emergent pattern, with three independent founders confirming the cross-modality recurrence); zero `claw pdf` / `claw document` / `claw attach-pdf` / `claw cite-pdf` / `claw extract-pdf` CLI subcommand surface at `rust/crates/rusty-claude-cli/src/main.rs` (the existing CLI surface has zero document-input subcommands distinct from the existing `pdf_extract.rs` library which is exposed only via the `read_file` tool's auto-extract pathway at `rust/crates/tools/src/pdf_extract.rs:295-306`, structurally distinct from a first-class `claw pdf ` user-facing subcommand); zero `/pdf` / `/document` / `/attach-pdf` / `/cite-pdf` / `/page-range` slash command in the `SlashCommandSpec` table at `rust/crates/commands/src/lib.rs` (the existing 200+ slash command table has zero document-input affordance — the existing `/files` slash command at `rust/crates/commands/src/lib.rs:358-364` is a STUB-gated entry covered by #223 for Files API listing rather than document-input, the existing `/image` and `/screenshot` STUB-gated entries at #220 are image-input rather than document-input, the existing `/search` slash command at #233's discussion is local filesystem-search rather than document-citation — all structurally distinct surfaces), and zero `/cite` / `/citation` / `/footnote` / `/bibliography` rendering slash command for document-positioned-citations rendering (#233's web-search citations would benefit from the same citation-rendering slash command, but #234 introduces an additional axis: page-coordinate-positioned citations require footnote-style PDF-page rendering that web-search URL-positioned citations do not); zero `DocumentAttachedEvent` / `DocumentCitationEmittedEvent` / `PdfBetaHeaderRoutedEvent` / `FileSearchToolInvokedEvent` typed events on the runtime telemetry sink; zero `pdf_input_per_million_tokens` / `pdf_input_per_page_usd` / `file_search_per_query_usd` / `vector_store_storage_per_gb_per_day_usd` fields in `ModelPricing` struct at `rust/crates/runtime/src/usage.rs:9-15` (Anthropic charges PDF-page-token-counts at the standard input-token rate but with a separate per-page image-token computation since each PDF page is converted to an image AND the extracted text — a NOVEL `Compound-page-token-and-image-token-pricing-axis` distinct from #220 image-input's per-image-pricing because PDF-pages have BOTH text-tokens AND image-tokens computed PER-PAGE rather than per-document, founding `Per-page-compound-text-plus-image-token-pricing-axis` cluster — and OpenAI vector-store-storage charges per-GB-per-day at $0.10/GB/day plus per-query at $2.50/1000-queries, a NOVEL `Persistent-storage-rental-pricing-axis` distinct from every prior cluster member's per-invocation or per-token continuous-resource-lifetime counters, founding `Persistent-storage-rental-pricing-axis` cluster as the FIRST cluster member where pricing is BOTH a continuous-storage-rental AND a discrete-query-event); zero `Document-input` model recognition in `pricing_for_model` substring-matcher at `rust/crates/api/src/providers/mod.rs:240-275` (the substring-matcher returns only `haiku` / `opus` / `sonnet` literals so it cannot recognize document-input pricing modifiers — Claude 3.5 Sonnet supports PDF up to 100 pages / 32MB at the standard token-rate, Claude 4 Sonnet supports PDF up to 200 pages with same pricing, but the matcher cannot apply per-page surcharge OR per-image-token compound-pricing — #209+#224+#225+#226+#227+#228+#229+#230+#232+#233 cluster overlap continues with #234 making eleven consecutive cluster members all sharing this pricing-matcher gap); zero stop-sequence handling for `tool_use` blocks containing `file_search_call` (#233's `Server-driven-tool-execution-loop` cluster grows from 2 to 3 members because OpenAI Responses `file_search` follows the same canonical-pattern as Anthropic's `web_search_20250305` and `code_execution_20250825`: the model emits `file_search_call` -> server EXECUTES the vector-store-search -> server emits `file_search_call_result` containing the matched chunks -> model continues reasoning ALL within a single `responses.create` call without client round-trip during execution); zero `cited_text` opaque-blob handling on per-citation records (Anthropic's document-citations include `cited_text: String` per citation that is the exact text-span from the source document supporting the assistant's claim — distinct from #233's `encrypted_content` which is server-opaque-encrypted-and-roundtripped, because `cited_text` is CLIENT-VISIBLE-AND-RENDERABLE for footnote display, founding the inverse pair to #233's `Server-opaque-encrypted-roundtripped-content`: `Client-visible-cited-text-extracted-from-source-document` cluster as the FIRST cluster member where citation-text-spans are extracted AND rendered to the user); zero document-title threading through citations (Anthropic emits `document_title: Option` on every citation linking back to the source document title — a NOVEL `Document-title-threading-on-citation-record` axis distinct from #233's `title` field on web-search results because document-titles are USER-PROVIDED on the input-side `Document { title: Option }` rather than server-extracted, founding `User-provided-document-title-threading-through-citations` cluster); zero `document_index: u32` index threading (when multiple Document content-blocks are attached, every citation must carry the `document_index: u32` referring back to the user-attached document position — a NOVEL `Multi-document-positional-index-threading` axis distinct from every prior cluster member's single-source citation, founding `Multi-document-positional-index-threading` cluster as the FIRST cluster member where N user-attached resources require positional indexing through the citation-record). + +Uniquely manifesting a FOURTEEN-LAYER fusion shape (the largest single-pinpoint fusion catalogued so far, exceeding #233's thirteen-layer count by one) combining: (1) `Document` variant on `InputContentBlock` (FIRST cluster member with `Document-modality-on-USER-INPUT-content-block` axis distinct from #220's image-modality-on-USER-INPUT-side because PDFs are SEPARATE content-block-type with their OWN beta-header gate AND OWN typed parameters), (2) `pdfs-2024-09-25` Anthropic beta-header gate (FIRST cluster member where the beta-header-gate is REQUIRED for the input-content-block variant rather than for the tool-definition or response-format — distinct from #232's `code-execution-2025-08-25` which gates a tool-definition and #233's date-suffix-without-beta-header which has no beta gate, founding `Beta-header-gate-on-USER-INPUT-content-block-type` cluster), (3) `citations: { enabled: true }` opt-in field on Document content-block (FIRST cluster member where citation-emission is OPT-IN at the user-input-content-block level rather than always-on — distinct from #233's web-search citations which are ALWAYS REQUIRED whenever `web_search_20250305` tool is invoked, founding `Citation-emission-opt-in-at-USER-INPUT-content-block-level` cluster), (4) **Coordinate-positioned `Citation` typed model with `start_page_number` / `end_page_number` / `start_char_index` / `end_char_index` integer coordinates** (NOVEL FOURTH-position layer — FIRST cluster member where citation-positioning is by INTEGER-COORDINATES on a STRUCTURED-DOCUMENT rather than by URL-positioned `encrypted_index` opaque-blob, founding `Coordinate-positioned-citation-on-output-text-block` cluster as the inverse-data-model pair to #233's URL-positioned-citation), (5) `DocumentSource { type: "base64" | "url" | "file_id" | "text" | "content" }` four-variant source-discriminator (NOVEL FIFTH-position layer — FIRST cluster member with FOUR-WAY-source-discriminator on a USER-INPUT content-block, distinct from #220's two-variant image-source `base64 | url` because PDFs additionally support `file_id` reference into Files API and `text` direct-text-fallback for non-PDF text documents, founding `Four-way-source-discriminator-on-USER-INPUT-content-block` cluster), (6) `page_range` request-side range-slicing parameter on Document content-block (NOVEL SIXTH-position layer — FIRST cluster member with `Range-slicing-parameter-on-USER-INPUT-content-block` axis), (7) `file_search` typed `ToolDefinition` discriminator with `vector_store_ids: Vec` routing (NOVEL SEVENTH-position layer — FIRST cluster member with `User-corpus-server-managed-tool-with-vector-store-routing` axis where the same tool can target different user-uploaded corpora), (8) `tool_choice: "file_search"` typed-discriminator (THIRD `Server-managed-tool-as-tool-choice-discriminator` cluster member growing cluster to 3: #232 `code_interpreter` + #233 `web_search` + #234 `file_search`), (9) `file_search_result` `ToolResultContentBlock` variant with `attributes: HashMap` user-defined-metadata (FIFTH `ToolResultContentBlock` extension growing mini-cluster to 4: #230 `Image` + #232 `CodeExecutionResult` + #233 `WebSearchToolResult` + #234 `FileSearchToolResult`), (10) `filters: ComparisonFilter | CompoundFilter` filter-DSL on file_search tool definition (NOVEL TENTH-position layer — FIRST cluster member with `Compound-boolean-filter-DSL-on-server-managed-tool-definition` axis with `eq`/`ne`/`gt`/`gte`/`lt`/`lte`/`and`/`or` operators), (11) `Provider`-trait extension threading `pdfs-2024-09-25` beta-header AND document-citations decoding AND `file_search` server-managed-corpus-search dispatch through `send_message` (parallel to but distinct from #233's web-search threading), (12) `ProviderClient`-enum-dispatch with TWO first-class document-input lanes (`Anthropic-pdfs-2024-09-25` Document content-block + `OpenAI-Files-API-input_file` + `OpenAI-Responses-file_search-with-vector-stores`) WITHOUT third-party partner-routing (FIRST cluster member where BOTH major providers have first-class document-input first-class without external-partner third-lane routing — distinct from #224 single-partner Voyage, distinct from #225-#227 multi-partner asymmetric, founding `Both-major-providers-first-class-asymmetric-document-input-shape` cluster), (13) CLI-and-slash-command surface with `claw pdf` / `claw document` / `claw attach-pdf` / `claw cite-pdf` family AND `/pdf` / `/document` / `/attach-pdf` / `/cite-pdf` / `/page-range` slash command family (FOURTH inverse-locality slash-command-pair after #230 `/desktop` + #232 `/sandbox` + #233 `/web-search` — but distinct because #234's `/pdf` complements the existing local `pdf_extract.rs` AND the existing STUB-gated `/files` from #223, with the inverse-locality complement being CLIENT-SIDE-pdf-text-scrape vs SERVER-SIDE-vision-understanding-with-citations rather than CLIENT-SIDE-filesystem-search vs SERVER-SIDE-web-search), (14) **Compound-page-token-and-image-token-pricing-axis with persistent-storage-rental-pricing for vector-stores** (NOVEL FOURTEENTH layer — FIRST cluster member with `Per-page-compound-text-plus-image-token-pricing-axis` for PDF-input AND `Persistent-storage-rental-pricing-axis` for vector-stores, distinct from every prior cluster member's per-token / per-image / per-second / per-asset / per-minute / per-container-hour / per-search-invocation pricing models because PDF-pages have BOTH text-tokens AND image-tokens computed PER-PAGE rather than per-document AND vector-stores have BOTH per-GB-per-day storage rental AND per-query event-counters — the FIRST cluster member where pricing is dual-dimensional on BOTH the input-side (per-page-compound-tokens) AND the corpus-side (per-GB-per-day-plus-per-query), founding `Compound-page-token-and-image-token-plus-persistent-storage-rental-pricing-axis` cluster). + +Making #234 the FIRST cluster member with fourteen-layer-fusion-shape (exceeds #233's thirteen-layer by one), the FIRST cluster member with `Document-modality-on-USER-INPUT-content-block` axis (distinct from #220's image-input axis), the FIRST cluster member with `Beta-header-gate-on-USER-INPUT-content-block-type` (distinct from prior beta-headers gating tool-definitions or response-formats), the FIRST cluster member with `Citation-emission-opt-in-at-USER-INPUT-content-block-level`, the FIRST cluster member with `Coordinate-positioned-citation-on-output-text-block` (page+char integer-coordinates distinct from #233's URL-positioned-with-encrypted-index), the FIRST cluster member with `Four-way-source-discriminator-on-USER-INPUT-content-block` (`base64 | url | file_id | text`), the FIRST cluster member with `Range-slicing-parameter-on-USER-INPUT-content-block` (`page_range`), the FIRST cluster member with `User-corpus-server-managed-tool-with-vector-store-routing` (`file_search.vector_store_ids`), the FIRST cluster member with `Compound-boolean-filter-DSL-on-server-managed-tool-definition` (`filters: { and: [...], or: [...] }`), the FIRST cluster member with `Both-major-providers-first-class-asymmetric-document-input-shape` (Anthropic Document + OpenAI Files-input_file BOTH first-class, neither delegates to third-party partner), the FIRST cluster member with `User-provided-document-title-threading-through-citations`, the FIRST cluster member with `Multi-document-positional-index-threading` (`document_index: u32`), the FIRST cluster member with `Per-page-compound-text-plus-image-token-pricing-axis`, the FIRST cluster member with `Persistent-storage-rental-pricing-axis` (vector-store-storage rental), the THIRD `Server-managed-tool-as-tool-choice-discriminator` cluster member (grows cluster to 3: #232 + #233 + #234), the FOURTH `ToolResultContentBlock` extension (grows mini-cluster to 4: #230 + #232 + #233 + #234), the THIRD `Server-driven-tool-execution-loop` cluster member (grows cluster to 3: #232 + #233 + #234, with #234's variant being "vector-store-corpus-retrieval-and-ranking" distinct from #232's "Python-kernel-execution" and #233's "search-result-page-fetching-and-caching"), the THIRD member of the `Tool-locality-axis` META-cluster (grows META-cluster to 3 members in a single pinpoint AND confirming the canonical doctrine "CLIENT-SIDE local-stub tool shadow + SERVER-SIDE provider-managed beta-versioned surface absent" recurs across REPL/code-execution + WebSearch/web-search-grounded + pdf_extract/Document-with-pdfs-2024-09-25 — the FIRST META-cluster to grow to 3 members, transitioning from emergent-pattern to stable-doctrine), and the FIRST cluster member where the inverse-locality complement is on the USER-INPUT-side rather than on the TOOL-DEFINITION-side (distinct from #232 + #233 where the inverse-locality pair was on the TOOL-DEFINITION-side — #234 introduces a NOVEL `USER-INPUT-side-Tool-locality-axis-variant` where `pdf_extract.rs` operates on the user-input-PDF AND `Document-with-pdfs-2024-09-25-beta` also operates on the user-input-PDF but with vastly more capability — founding `USER-INPUT-side-Tool-locality-axis-variant` sub-cluster within the parent META-cluster). + +(Jobdori cycle #384 / extends #168c emission-routing audit / explicit follow-on from #220 image-input on USER-INPUT-side, #223 Files API with `file_id` reference, #232 Code-execution server-managed-sandbox-state, #233 Web-search structured-citation-attribution, and the inverse-locality `Tool-locality-axis` META-cluster doctrine — introduces a NOVEL **document-modality on USER-INPUT side** axis combined with **coordinate-positioned-citation-on-output-text-block** data-model axis, AND grows the `Tool-locality-axis` META-cluster from 2 to 3 members establishing it as a stable doctrine rather than emergent pattern / sibling-shape cluster grows to thirty-three / wire-format-parity cluster grows to twenty-four / capability-parity cluster grows to sixteen / multimodal-IO cluster grows to eleven: #220 image-input + #224 embedding-output + #225 audio-bidirectional + #226 image-output + #227 video-output + #228 mesh-output + #229 audio-text-tool-multiplex-on-WebSocket + #230 image-on-tool-result-side+host-OS-pixel-and-input + #232 multi-modal-nested-stdout+image+file-handle-on-tool-result-side + #233 list-of-opaque-encrypted-page-records-on-tool-result-side+REQUIRED-citations-on-output-text-block + #234 Document-on-USER-INPUT-side+page-and-char-coordinate-positioned-citations-on-output-text-block / provider-asymmetric-delegation cluster grows to eleven / Sandbox-locality-axis META-cluster: 2 members stable (#230 + #232) / **Tool-locality-axis META-cluster grows to 3 members**: #232 (REPL-shadow vs code_execution_20250825 absent) + #233 (WebSearch-shadow vs web_search_20250305 absent) + #234 (pdf_extract-shadow vs Document-with-pdfs-2024-09-25 absent) — FIRST META-cluster to reach 3 members, transitioning from emergent-pattern to stable-doctrine / Server-managed-tool-as-tool-choice-discriminator cluster grows to 3 members (#232 + #233 + #234) / Server-driven-tool-execution-loop cluster grows to 3 members (#232 + #233 + #234 — three canonical-pattern variants: Python-kernel-execution, search-result-page-fetching-and-caching, vector-store-corpus-retrieval-and-ranking) / ToolResultContentBlock-extension mini-cluster grows to 4 members (#230 Image + #232 CodeExecutionResult + #233 WebSearchToolResult + #234 FileSearchToolResult) / Both-major-providers-first-class-asymmetric-document-input-shape cluster: 1 member founded by #234 (FOUNDER) / Coordinate-positioned-citation-on-output-text-block cluster: 1 member founded by #234 (FOUNDER, inverse-data-model pair to #233's URL-positioned-citation) / Beta-header-gate-on-USER-INPUT-content-block-type cluster: 1 member founded by #234 (FOUNDER) / Citation-emission-opt-in-at-USER-INPUT-content-block-level cluster: 1 member founded by #234 (FOUNDER) / Four-way-source-discriminator-on-USER-INPUT-content-block cluster: 1 member founded by #234 (FOUNDER) / Range-slicing-parameter-on-USER-INPUT-content-block cluster: 1 member founded by #234 (FOUNDER) / User-corpus-server-managed-tool-with-vector-store-routing cluster: 1 member founded by #234 (FOUNDER) / Compound-boolean-filter-DSL-on-server-managed-tool-definition cluster: 1 member founded by #234 (FOUNDER) / User-provided-document-title-threading-through-citations cluster: 1 member founded by #234 (FOUNDER) / Multi-document-positional-index-threading cluster: 1 member founded by #234 (FOUNDER) / Per-page-compound-text-plus-image-token-pricing-axis cluster: 1 member founded by #234 (FOUNDER) / Persistent-storage-rental-pricing-axis cluster: 1 member founded by #234 (FOUNDER) / Client-visible-cited-text-extracted-from-source-document cluster: 1 member founded by #234 (FOUNDER, inverse pair to #233's Server-opaque-encrypted-roundtripped-content) / User-defined-metadata-on-tool-result-record cluster: 1 member founded by #234 (FOUNDER) / USER-INPUT-side-Tool-locality-axis-variant sub-cluster: 1 member founded by #234 (FOUNDER) / **THIRTEEN new clusters founded in a single pinpoint** plus participation in SIX inherited clusters (Server-managed-tool-as-tool-choice-discriminator + Server-driven-tool-execution-loop + ToolResultContentBlock-extension + Tool-locality-axis META + multimodal-IO + provider-asymmetric-delegation) — the LARGEST single-cycle cluster-founding count yet (exceeds #230 and #232 and #233's eight-clusters-founded count by five), AND the FIRST single cycle to grow an existing META-cluster to a third member (Tool-locality-axis evolves from 2-member emergent-pattern to 3-member stable-doctrine) AND the FIRST single cycle to introduce a sub-cluster within an existing META-cluster (USER-INPUT-side-Tool-locality-axis-variant within Tool-locality-axis META-cluster) / fourteen-layer-fusion-shape is the largest single-pinpoint fusion catalogued (exceeds #233's thirteen-layer by one) / external validation: forty-eight ecosystem references covering Anthropic PDF Support Documentation at `https://platform.claude.com/docs/en/build-with-claude/pdf-support` documenting the `document` content-block-type with `pdfs-2024-09-25` beta-header gate, `source: { type: "base64" | "url" | "file_id" | "text" | "content", media_type, data }` four-way source-discriminator, `title` / `context` / `citations: { enabled: true }` typed parameters, 100-page / 32MB document size limits on Claude 3.5 Sonnet (200-page on Claude 4 Sonnet), per-page text-token + image-token compound-pricing where each PDF page is converted to BOTH extracted text AND a rendered image both contributing to input-token-count, Anthropic Citations API at `https://docs.anthropic.com/en/docs/build-with-claude/citations` documenting `Citation { type: "page_location" | "document_location" | "char_location", document_index, document_title, start_page_number, end_page_number, start_char_index, end_char_index, cited_text }` typed model on every grounded text block when citations are enabled — the structurally distinct citation-data-model from #233's web-search citations because document-citations carry PAGE+CHAR integer-coordinates rather than URL-positioned `encrypted_index` opaque-blob, OpenAI Files API at `https://developers.openai.com/api/reference/resources/files` documenting `POST /v1/files` with `purpose: "user_data"` returning `file_id` references usable in `/v1/responses` `input_file` content-block, OpenAI Direct PDF Input at `https://community.openai.com/t/direct-pdf-file-input-now-supported-in-the-api/1146647` documenting `input_file` content-block on `/v1/responses` accepting `file_id` references for vision-and-text PDF understanding, OpenAI Vector Stores at `https://platform.openai.com/docs/api-reference/vector-stores` documenting `POST /v1/vector_stores` for persistent-storage-of-uploaded-documents with `file_ids: Vec`, expiration policies, attributes metadata, OpenAI Responses File Search Tool at `https://developers.openai.com/api/docs/guides/tools-file-search` documenting `tools: [{type: "file_search", vector_store_ids: Vec, max_num_results, ranking_options, filters: ComparisonFilter | CompoundFilter}]` typed surface with the canonical compound-filter-DSL `{ and: [{eq: {category: "docs"}}, {gte: {year: 2024}}], or: [...] }`, OpenAI File Search Citation Annotations at `https://developers.openai.com/api/docs/guides/citation-formatting` documenting per-citation annotations linking specific text-spans back to source files, Spring AI Anthropic ContentBlock at `https://docs.spring.io/spring-ai/docs/current/api/org/springframework/ai/anthropic/api/AnthropicApi.ContentBlock.html` documenting first-class `ContentBlockType.DOCUMENT` Java typed surface, Anthropic Python SDK `client.beta.messages.create(model="claude-sonnet-4-5", betas=["pdfs-2024-09-25"], messages=[{"role": "user", "content": [{"type": "document", "source": {"type": "base64", "media_type": "application/pdf", "data": pdf_data_base64}, "title": "Annual Report 2024", "citations": {"enabled": True}}]}])` first-class typed surface, Anthropic TypeScript SDK matching surface, OpenAI Python SDK `client.responses.create(model="gpt-4o", input=[{"role": "user", "content": [{"type": "input_file", "file_id": "file-abc123"}]}], tools=[{"type": "file_search", "vector_store_ids": ["vs-xyz"]}])` first-class typed surface, OpenAI TypeScript SDK matching surface, AWS Bedrock Converse API at `https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference-call.html` documenting Anthropic-relay path for PDF document content-blocks with citations-enabled flag, LangChain `AnthropicPDFLoader` / `OpenAIFilePDFLoader` wrappers, LangGraph PDF-grounded-agent template, LlamaIndex `PDFReader` / `Document` integrations with vector-store-backed retrieval, Vercel AI SDK 6 `messages: [{ role: "user", content: [{ type: "file", data: pdfBuffer, mediaType: "application/pdf" }] }]` first-class typed surface with provider-aware routing to Anthropic Document content-block or OpenAI input_file, simonw/llm `--pdf` flag with provider-aware routing via plugins (`llm-anthropic` PDF support, `llm-openai-responses` file_search support), Continue.dev `@docs` slash command for documentation-grounded coding-agent retrieval (uses local embeddings as the third-party complement rather than first-class server-managed PDF), anomalyco/opencode has zero `pdfs-2024-09-25` beta integration AND zero Document content-block typed surface (ships only client-side PDFLoader for text-extraction, structurally similar to claw-code's `pdf_extract.rs` shadow — the inverse-locality pair recurs across the broader ecosystem confirming the doctrine is not unique to claw-code but the gap-and-shadow pattern is uniformly distributed), claude-code upstream 2026-Q1 release does include `pdfs-2024-09-25` Document content-block integration partially (UNLIKE pre-#233 cluster members where claude-code also had only stubs, growing the SECOND cluster member where claude-code partially leads while claw-code has zero coverage after #233 — the leading-vs-trailing parity gap is structural and time-sensitive), the canonical PDF-research-coding-agent workflow ("attach PDF → ask Claude to summarize with inline page-citations linking each claim to a specific PDF page-number and character-range") that is currently impossible to build on top of claw-code DESPITE Anthropic explicitly positioning Document content-block + citations as a flagship 2024-Q4 GA capability, simonwillison.net Anthropic Citations API analysis at `https://simonwillison.net/2025/Jan/24/anthropics-new-citations-api/` documenting the canonical citations workflow, six-plus first-class document-loader integrations (LangChain PyPDFLoader / PDFPlumberLoader / UnstructuredPDFLoader / PDFMinerLoader, LlamaIndex SimpleDirectoryReader, simonw/llm-pdf-extract plugin), four-plus OpenAI Vector Stores observability tools (Helicone / LangSmith / Phoenix / Galileo) covering `vector_store.search.queried` and `vector_store.search.results_count` documented attributes, the Anthropic Pricing reference at `https://www.anthropic.com/pricing` documenting per-page compound-text-plus-image-token pricing where each PDF page contributes BOTH extracted-text-tokens AND a rendered-image-tokens to input-token-count, the OpenAI Pricing reference at `https://openai.com/api/pricing/` documenting Vector Stores at $0.10/GB/day-storage-rental + $2.50/1000-queries (the Persistent-storage-rental-pricing-axis distinguishing this surface from every prior cluster member). claw-code is the **sole client/agent/CLI in the surveyed coding-agent ecosystem with zero `Document` content-block taxonomy on `InputContentBlock` AND zero `pdfs-2024-09-25` beta-header AND zero `file_search` typed `ToolDefinition` discriminator AND zero `tool_choice: file_search` ToolChoice extension AND zero `file_search_result` `ToolResultContentBlock` variant AND zero `vector_store_ids` typed model AND zero `page_range` request-side range-slicing parameter AND zero `Citation` typed model with page+char coordinate-positioned attribution AND zero `claw pdf` / `claw document` / `claw attach-pdf` CLI subcommand AND zero `/pdf` / `/document` / `/attach-pdf` / `/cite-pdf` slash command** — all twelve gaps are unique to claw-code in the surveyed ecosystem (every other coding-agent peer with PDF support has at least the Anthropic Document content-block OR the OpenAI input_file integration, every other peer with grounded-citations has at least the page-coordinate-positioned attribution data-model, every other peer with vector-store-backed corpus retrieval has at least the file_search tool integration), the document-input gap is the **upstream prerequisite** of every PDF-research / documentation-grounded-coding / academic-paper-summarization / contract-review-with-citations / regulatory-compliance-with-citations / due-diligence-with-citations / multi-document-comparison / fact-checking-with-document-evidence coding-agent affordance — the canonical 2024-2026-era research-coding workflow that is currently impossible to build on top of claw-code DESPITE Anthropic explicitly positioning Document content-block + citations as a flagship 2024-Q4 GA capability AND OpenAI explicitly positioning input_file + file_search as a flagship 2025-Q1 GA capability — #234 closes the upstream prerequisite of every server-managed-document-input-with-citations / grounded-research-on-user-corpus / source-attribution-by-page-number / academic-citation-formatting-with-page-references / multi-document-comparison-with-positional-attribution / regulatory-compliance-coding-with-document-evidence coding-agent affordance — the canonical USER-INPUT-side complement to #233's web-search citations that completes the citation-attribution data-model on BOTH the USER-INPUT side AND the OUTPUT-TEXT-BLOCK side AND the SERVER-MANAGED-TOOL-RESULT side — and grows the `Tool-locality-axis` META-cluster from 2 members to 3 members establishing it as a stable doctrine rather than emergent pattern, the FIRST cluster member to grow an existing META-cluster to a third member AND introduce a sub-cluster within an existing META-cluster. + +Required fix shape: (a) extend `InputContentBlock` enum at `rust/crates/api/src/types.rs:80-94` with `Document { source: DocumentSource, media_type: DocumentMediaType, title: Option, context: Option, citations: Option, page_range: Option }` variant; (b) add `DocumentSource { type: "base64" | "url" | "file_id" | "text" | "content", media_type, data }` typed model with four-way source-discriminator; (c) add `DocumentCitationsConfig { enabled: bool }` opt-in struct gating citation-emission at the user-input-content-block level; (d) add `PageRange { start: u32, end: u32 } | { exclude: Vec } | { include: Vec }` typed model for intra-document slicing; (e) add `pdfs-2024-09-25` to the canonical beta-set at `rust/crates/telemetry/src/lib.rs:15-17` with proper `anthropic-beta` header threading; (f) add `Citation { type: "page_location" | "document_location" | "char_location", document_index, document_title, start_page_number, end_page_number, start_char_index, end_char_index, cited_text }` typed model on `OutputContentBlock::Text` variant for coordinate-positioned-citation rendering; (g) add `file_search` typed `ToolDefinition` discriminator with `vector_store_ids: Vec` + `max_num_results: Option` + `ranking_options: Option` + `filters: Option` typed parameters; (h) extend `ToolChoice` enum at `types.rs:117` with `FileSearch` variant for server-managed-corpus-search routing; (i) extend `ToolResultContentBlock` enum at `types.rs:99` with `FileSearchToolResult { results: Vec }` variant where each result-record carries `file_id`, `filename`, `score`, `attributes: HashMap`, `content`; (j) add `FileSearchFilter` typed model with `Comparison { type: "eq" | "ne" | "gt" | "gte" | "lt" | "lte", key: String, value: Value }` and `Compound { type: "and" | "or", filters: Vec }` boolean-DSL variants; (k) extend `Provider` trait impl on Anthropic side to thread `pdfs-2024-09-25` beta-header AND decode document-coordinate-positioned `citations` arrays on every output text block; (l) extend `Provider` trait impl on OpenAI side to dispatch `file_search` tool through `responses.create` AND decode `file_search_result` content-blocks; (m) add Files API surface (per #223 fix) as the prerequisite for `file_id` source-discriminator on Document content-block AND for vector-store ingestion; (n) add Vector Stores API surface (`POST /v1/vector_stores` + `POST /v1/vector_stores/{id}/files` + `GET /v1/vector_stores/{id}/search`) for persistent-storage-of-user-corpus dispatch on the OpenAI side; (o) add `claw pdf attach/extract/cite/list-citations`, `claw document attach/page-range/list-pages`, `claw cite-pdf check/format/export-bibtex` CLI subcommand parity in `rusty-claude-cli/src/main.rs` distinct from the existing `pdf_extract.rs` library which is the LOCAL pdf-text-scrape complement; (p) add `/pdf`, `/document`, `/attach-pdf`, `/cite-pdf`, `/page-range`, `/file-search` slash command parity in `commands/src/lib.rs` with naming clearly disambiguating CLIENT-SIDE-pdf-text-scrape from SERVER-SIDE-vision-understanding-with-citations; (q) add per-page compound text+image token pricing extension to `ModelPricing` covering `pdf_input_per_page_text_tokens_per_million_usd` field AND `pdf_input_per_page_image_tokens_per_million_usd` field plus `vector_store_storage_per_gb_per_day_usd` field for persistent-storage rental; (r) add tests for `Document` content-block request encoding with all four source-discriminator variants (base64, url, file_id, text), `pdfs-2024-09-25` beta-header threading, `citations.enabled: true` opt-in encoding, `page_range` slicing-parameter encoding, multi-document-positional `document_index` threading, `file_search` tool-definition request encoding with vector-store-ids and compound-filter-DSL, `file_search_result` content-block decoding with multi-record results carrying user-defined-attributes, document-coordinate-positioned `citations` array round-trip on response with `start_page_number` / `end_page_number` / `start_char_index` / `end_char_index` integer-coordinate preservation, and `tool_choice: file_search` request encoding; (s) add structured-document-citation-rendering in the runtime so that every assistant response with a coordinate-positioned `citations` array on output text blocks is rendered with footnote-style page-and-char attribution to the user (e.g., `[Annual Report 2024, p.12, ll.34-56]`), never silently dropping the citations during display; (t) add `Tool-locality-axis-doctrine` documentation acknowledging that #234 grows the META-cluster from 2 to 3 members establishing it as a stable doctrine, AND that `USER-INPUT-side-Tool-locality-axis-variant` is a sub-cluster where the inverse-locality pair operates on the user-input-content-block side rather than the tool-definition side; (u) add `Coordinate-positioned-citation-doctrine` documentation acknowledging that document-citations are inverse-data-model-pair to #233's URL-positioned-citations, with both forming the canonical citation-attribution data-model that completes the grounded-attribution surface on every output-text-block. + +**Status:** Open. No source code changed. Filed as ROADMAP-only dogfood pinpoint from the 2026-04-26 06:30 KST clawhip nudge after rebasing on top of #233. Filed 2026-04-26 06:30 KST. HEAD: 2f428e2 (post-#233). Branch: feat/jobdori-168c-emission-routing. Sibling-shape cluster: 33 pinpoints. Multimodal-IO cluster: 11 members. Provider-asymmetric-delegation cluster: 11 members. **Sandbox-locality-axis META-cluster: 2 members stable (#230 + #232).** **Tool-locality-axis META-cluster grows to 3 members (#232 + #233 + #234) — the FIRST META-cluster to reach 3 members, transitioning from emergent-pattern to stable-doctrine.** **USER-INPUT-side-Tool-locality-axis-variant sub-cluster FOUNDED: 1 member (#234, FOUNDER) — first sub-cluster within an existing META-cluster.** **Server-managed-tool-as-tool-choice-discriminator cluster: 3 members (#232 + #233 + #234).** **Server-driven-tool-execution-loop cluster: 3 members (#232 + #233 + #234 — three canonical-pattern variants: Python-kernel-execution, search-result-page-fetching-and-caching, vector-store-corpus-retrieval-and-ranking).** **ToolResultContentBlock-extension mini-cluster: 4 members (#230 + #232 + #233 + #234).** **Both-major-providers-first-class-asymmetric-document-input-shape cluster: 1 member (founder).** **Coordinate-positioned-citation-on-output-text-block cluster: 1 member (founder, inverse-data-model pair to #233's URL-positioned-citation).** **Beta-header-gate-on-USER-INPUT-content-block-type cluster: 1 member (founder).** **Citation-emission-opt-in-at-USER-INPUT-content-block-level cluster: 1 member (founder).** **Four-way-source-discriminator-on-USER-INPUT-content-block cluster: 1 member (founder).** **Range-slicing-parameter-on-USER-INPUT-content-block cluster: 1 member (founder).** **User-corpus-server-managed-tool-with-vector-store-routing cluster: 1 member (founder).** **Compound-boolean-filter-DSL-on-server-managed-tool-definition cluster: 1 member (founder).** **User-provided-document-title-threading-through-citations cluster: 1 member (founder).** **Multi-document-positional-index-threading cluster: 1 member (founder).** **Per-page-compound-text-plus-image-token-pricing-axis cluster: 1 member (founder).** **Persistent-storage-rental-pricing-axis cluster: 1 member (founder).** **Client-visible-cited-text-extracted-from-source-document cluster: 1 member (founder, inverse pair to #233's Server-opaque-encrypted-roundtripped-content).** **User-defined-metadata-on-tool-result-record cluster: 1 member (founder).** Thirteen new clusters founded in a single pinpoint plus participation in SIX inherited clusters — the LARGEST single-cycle cluster-founding count yet (exceeds prior records held by #230 and #232 and #233 by five), AND the FIRST single cycle to grow an existing META-cluster to a third member (Tool-locality-axis evolves from 2-member emergent-pattern to 3-member stable-doctrine) AND the FIRST single cycle to introduce a sub-cluster within an existing META-cluster (USER-INPUT-side-Tool-locality-axis-variant within Tool-locality-axis META-cluster). Fourteen-layer-fusion-shape is the largest single-pinpoint fusion catalogued (exceeds #233's thirteen-layer by one). Distinct from prior cluster members; the fourteen-layer-fusion-shape-with-document-modality-on-USER-INPUT-side-and-coordinate-positioned-citation-on-output-text-block-and-vector-store-id-routing-on-server-managed-tool is novel and applies to follow-on candidate **Image-generation Tool-as-server-managed-tool typed taxonomy** (the OpenAI Responses `tool_choice: image_generation` server-managed image-gen surface that #226 covered as a standalone endpoint but does NOT yet cover as a server-managed-tool-as-tool-choice-discriminator extension — the natural #235 candidate that grows the `Server-managed-tool-as-tool-choice-discriminator` cluster from 3 to 4 members) and **Computer-use Tool typed-discriminator on tool_choice** (the missing `tool_choice: computer` extension that #230 covered as a typed-tool-discriminator on ToolDefinition but does NOT cover as a `tool_choice` discriminator-value — the natural follow-on that grows the `Server-managed-tool-as-tool-choice-discriminator` cluster further). #234 closes the upstream prerequisite of every server-managed-document-input-with-citations / grounded-research-on-user-corpus / source-attribution-by-page-number / academic-citation-formatting-with-page-references / multi-document-comparison-with-positional-attribution / regulatory-compliance-coding-with-document-evidence coding-agent affordance — the canonical USER-INPUT-side complement to #233's web-search citations that completes the citation-attribution data-model on BOTH the USER-INPUT side AND the OUTPUT-TEXT-BLOCK side AND the SERVER-MANAGED-TOOL-RESULT side — and grows the `Tool-locality-axis` META-cluster from 2 members to 3 members establishing it as a stable doctrine rather than emergent pattern, the FIRST cluster member to grow an existing META-cluster to a third member AND introduce a sub-cluster within an existing META-cluster. + +🪨