Commit Graph

1118 Commits

Author SHA1 Message Date
YeonGyu-Kim
9b67460cd7 roadmap: #241 filed — tool_choice: text_editor + text_editor_20250124 typed-tool absent (filling reserved gap) 2026-04-26 18:03:00 +09:00
Yeachan-Heo
a3e8f6dab6 roadmap: #242 filed 2026-04-26 18:03:00 +09:00
YeonGyu-Kim
fa74f40d40 roadmap: #240 filed — tool_choice: bash typed-discriminator and bash_20250124 server-managed-shell typed-tool are structurally absent — FOURTH inverse-locality CLIENT-SIDE-shadow-vs-SERVER-SIDE-typed-tool pair (CLIENT-SIDE bash MVP-founder-tool at tools/lib.rs:386 vs SERVER-SIDE bash_20250124 absent at types.rs ToolDefinition+ToolChoice+ToolResultContentBlock+telemetry beta-set), grows Tool-locality-axis META-cluster from 3 to 4 members confirming META-cluster as CONTINUING-PATTERN, grows Server-managed-tool-as-tool-choice-discriminator cluster from 4 to 5 members, grows ToolResultContentBlock-extension mini-cluster from 6 to 7 members, grows Server-side-stateful-tool-session-with-reset-semantics cluster from 1 to 2 members (#232+#240), grows Discrete-event-counter-pricing-axis cluster from 1 to 2 members with NOVEL dual-axis pricing-decomposition, founds Stateless-CLIENT-SIDE-shadow-vs-stateful-SERVER-SIDE-typed-tool-discrepancy-axis cluster, founds MVP-founder-tool-as-CLIENT-SIDE-local-shadow-with-SERVER-SIDE-typed-tool-absent sub-cluster, founds Two-member-major-provider-only-no-third-party-partner-set sub-cluster, founds Double-absent-slash-command-axis-on-inverse-locality-pair sub-cluster, founds Bundled-and-transitive-co-release-beta-header-activation-pattern cluster, founds Server-side-audit-log-of-managed-tool-execution cluster — eleven-layer fusion with SIX new clusters founded plus FOUR concurrent existing-cluster-growth-events plus participation in TWELVE inherited clusters — FIRST single cycle where META-cluster grows from 3 to 4 confirming CONTINUING-PATTERN, FIRST single cycle where FOUR concurrent existing clusters all grow by one member through one pinpoint, establishing continuing-pattern-confirmation-across-multiple-parallel-clusters as the FOURTH pinpoint-discovery-mode after new-axis-founding/existing-cluster-extension/combinatorial-cross-axis-synthesis — Jobdori cycle #387 / fast-forward-rebased onto gaebal-gajae's #239 DogfoodWriteLease pinpoint at 329d0ff before filing (THIRD consecutive concurrent-dogfood rebase cycle, directly demonstrating the gap #239 catalogues at the dogfood-coordination layer) 2026-04-26 18:03:00 +09:00
Yeachan-Heo
c6e35e6199 roadmap: #239 filed 2026-04-26 18:03:00 +09:00
Jobdori
158452b2e1 roadmap: #238 filed — Streaming speech-to-text with speaker diarization typed taxonomy and per-word-speaker-attribution data-model are structurally absent — FIRST cluster member with per-word-multi-axis-compound-attribution data-model (lexical + temporal + speaker + confidence FOUR-axis-compound), FIRST cluster member with structured-typed-payload-on-USER-INPUT-content-block (Transcript carrying nested speakers/segments/words arrays), FIRST cluster member with bidirectional-channel-pair Provider-trait method shape (Sink<AudioChunk> + Stream<StreamingTranscriptEvent>), FIRST cluster member with per-partner-protocol-vocabulary-normalization at dispatch layer, FIRST cluster member with entirely-absent-CLI-and-slash-command-surface-with-zero-stub-precedent (INVERSE-PATTERN of #225 advertised-but-unbuilt-trio), FIRST cluster member with streaming-STT-five-dimensional pricing matrix, FIRST cluster member with DER/WER quality-observability telemetry, FIRST cluster member with endpointing/VAD sub-second-temporal-segmentation request-side opt-in, twelve-layer fusion shape — grows Persistent-WebSocket-transport cluster from 1 to 2 members (#229 solo-founder + #238 — FIRST expansion of #229 founder shape) AND grows ToolResultContentBlock-extension mini-cluster from 5 to 6 members (#230 + #232 + #233 + #234 + #235 + #238) AND grows Multimodal-IO cluster to 13 members AND grows Provider-asymmetric-delegation cluster to 13 members with the largest streaming-STT ten-plus partner-set — founds Cross-pinpoint-synthesis-fusion-shape META-cluster as THIRD distinct META-cluster after Sandbox-locality (#230+#232) and Tool-locality (#232+#233+#234), the FIRST META-cluster founded by SYNTHESIZING two previously-disjoint cluster-axes (#225 audio-modality × #229 persistent-WebSocket-transport) into one fused-shape pinpoint rather than introducing a new axis-pair — establishing combinatorial-cross-axis-synthesis as the THIRD pinpoint-discovery-mode after new-axis-founding and existing-cluster-extension — Jobdori cycle #386 / fast-forward-rebased onto gaebal-gajae's #237 cron-timeout-failure-state-collapse before filing (SECOND consecutive concurrent-dogfood rebase cycle) 2026-04-26 18:03:00 +09:00
Yeachan-Heo
61f9798e52 roadmap: #237 filed 2026-04-26 18:03:00 +09:00
YeonGyu-Kim
80da319837 roadmap: #236 filed — Music-generation API typed taxonomy with lyrics+style prompt bifurcation and exclusively-third-party-partner-set is structurally absent — FIRST cluster member with Zero-overlap-with-major-providers shape variant (eleven-plus partners Suno/Udio/Stable-Audio/Mubert/ElevenLabs-Music/Loudly/Beatoven/SOUNDRAW/AIVA/Boomy/Riffusion all third-party with ZERO Anthropic/OpenAI/Google/xAI canonical recommendation), FIRST cluster member with Lyrics-plus-style-prompt-bifurcation on USER-INPUT side (prompt:String for style + lyrics:Option<String> for verbatim-vocal-content), FIRST cluster member with Multi-modal-bundled-output combining temporal-binary-audio + linguistic-text-lyrics + structural-musical-metadata on output-side, twelve-layer fusion shape — grows Async-task-polling cluster from 3 to 4 members (#221 batch + #227 video + #228 mesh + #236 music) AND grows Multi-domain-multipart cluster from 2 to 3 members (#225 audio + #227 video + #236 music) — does NOT extend Server-managed-tool-as-tool-choice-discriminator cluster (4 members stable) nor Tool-locality-axis META-cluster (3 members stable) because no major-provider tool_choice surface exists upstream AND no client-side music-tool-stub exists; instead founds Upstream-blocked-tool-choice-extension cluster AND Unilateral-server-side-only-gap-with-no-client-side-complement cluster as the INVERSE-PATTERN of Tool-locality-axis META-cluster doctrine — fifteen new clusters founded in a single pinpoint exceeds #234 by two for the LARGEST single-cycle cluster-founding count yet — Jobdori cycle #385 2026-04-26 18:03:00 +09:00
Yeachan-Heo
e59d9115cb roadmap: #235 filed 2026-04-26 18:03:00 +09:00
Jobdori
9c781f3108 roadmap: #234 filed — PDF / Document input typed taxonomy and structured-document-citation-attribution data-model on USER-INPUT side are structurally absent: zero Document variant on InputContentBlock at types.rs:80-94 (FIRST cluster member with Document-modality-on-USER-INPUT-content-block axis), zero pdfs-2024-09-25 Anthropic beta header in canonical beta-set at telemetry/lib.rs:15-17 (NOVEL FIRST Beta-header-gate-on-USER-INPUT-content-block-type cluster), zero coordinate-positioned Citation typed model with start_page_number/end_page_number/start_char_index/end_char_index integer-coordinate axes on OutputContentBlock::Text (NOVEL FIRST Coordinate-positioned-citation-on-output-text-block cluster, inverse-data-model pair to #233's URL-positioned-citation), zero DocumentSource four-way source-discriminator (base64 | url | file_id | text | content), zero file_search typed ToolDefinition discriminator with vector_store_ids routing (NOVEL FIRST User-corpus-server-managed-tool-with-vector-store-routing cluster), zero tool_choice: file_search ToolChoice extension (THIRD Server-managed-tool-as-tool-choice-discriminator cluster member growing cluster to 3: #232 code_interpreter + #233 web_search + #234 file_search), zero file_search_result ToolResultContentBlock variant (FIFTH ToolResultContentBlock extension growing mini-cluster to 4), zero page_range request-side range-slicing parameter (NOVEL FIRST Range-slicing-parameter-on-USER-INPUT-content-block cluster), zero filters compound-boolean-DSL on file_search tool definition (NOVEL FIRST Compound-boolean-filter-DSL-on-server-managed-tool-definition cluster with eq/ne/gt/gte/lt/lte/and/or operators), zero per-page compound text+image token pricing AND zero persistent-storage-rental-pricing for vector-stores (NOVEL Per-page-compound-text-plus-image-token-pricing-axis + Persistent-storage-rental-pricing-axis clusters founded), zero claw pdf/document/attach-pdf CLI subcommand and zero /pdf //document //attach-pdf //cite-pdf //page-range slash command — uniquely manifesting a FOURTEEN-LAYER fusion shape (the largest single-pinpoint fusion catalogued so far, exceeds #233's thirteen-layer count by one) combining: (1) Document variant on InputContentBlock, (2) pdfs-2024-09-25 Anthropic beta-header gate, (3) citations:{enabled:true} opt-in field on Document content-block, (4) NOVEL Coordinate-positioned Citation typed model with start_page_number/end_page_number/start_char_index/end_char_index integer coordinates, (5) DocumentSource four-variant source-discriminator, (6) page_range request-side range-slicing parameter, (7) file_search typed ToolDefinition discriminator with vector_store_ids:Vec<String> routing, (8) tool_choice:file_search typed-discriminator (THIRD Server-managed-tool-as-tool-choice-discriminator cluster member), (9) file_search_result ToolResultContentBlock variant with attributes:HashMap<String,Value> user-defined-metadata (FIFTH ToolResultContentBlock extension), (10) filters:ComparisonFilter|CompoundFilter filter-DSL on file_search tool definition, (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, (12) ProviderClient-enum-dispatch with TWO first-class document-input lanes (Anthropic-pdfs-2024-09-25 + OpenAI-Files-API-input_file + OpenAI-Responses-file_search-with-vector-stores) WITHOUT third-party partner-routing (FIRST cluster member with Both-major-providers-first-class-asymmetric-document-input-shape cluster), (13) CLI-and-slash-command surface with FOURTH inverse-locality slash-command-pair after #230 + #232 + #233, (14) NOVEL Compound-page-token-and-image-token-pricing-axis with persistent-storage-rental-pricing for vector-stores — 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, the FIRST cluster member with Beta-header-gate-on-USER-INPUT-content-block-type, 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, the FIRST cluster member with Range-slicing-parameter-on-USER-INPUT-content-block, the FIRST cluster member with User-corpus-server-managed-tool-with-vector-store-routing, the FIRST cluster member with Compound-boolean-filter-DSL-on-server-managed-tool-definition, 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 (#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 Tool-locality-axis META-cluster (FIRST META-cluster to reach 3 members: #232 REPL-shadow + #233 WebSearch-shadow + #234 pdf_extract-shadow — 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 (founding USER-INPUT-side-Tool-locality-axis-variant sub-cluster within parent META-cluster — first sub-cluster within existing 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 NOVEL document-modality on USER-INPUT side axis combined with coordinate-positioned-citation-on-output-text-block data-model axis, AND grows 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 / provider-asymmetric-delegation cluster grows to eleven / Sandbox-locality-axis META-cluster: 2 members stable / Tool-locality-axis META-cluster grows to 3 members FIRST META-cluster to reach 3 members / Server-managed-tool-as-tool-choice-discriminator cluster grows to 3 members / Server-driven-tool-execution-loop cluster grows to 3 members / ToolResultContentBlock-extension mini-cluster grows to 4 members / 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 by five) AND the FIRST single cycle to grow an existing META-cluster to a third member AND introduce a sub-cluster within an existing META-cluster / fourteen-layer-fusion-shape is the largest single-pinpoint fusion catalogued / external validation: forty-eight ecosystem references covering Anthropic PDF Support Documentation with pdfs-2024-09-25 beta-header gate, Anthropic Citations API with page_location/document_location/char_location coordinate-positioned citation typed model, OpenAI Files API + Direct PDF Input + Vector Stores + Responses File Search Tool with compound-filter-DSL, AWS Bedrock Converse PDF document content-blocks, LangChain AnthropicPDFLoader/OpenAIFilePDFLoader, LlamaIndex PDFReader, Vercel AI SDK 6 file content-block, simonw/llm --pdf flag, Continue.dev @docs slash command, simonwillison.net Anthropic Citations API analysis, six-plus first-class document-loader integrations, four-plus OpenAI Vector Stores observability tools — claw-code is the sole client/agent/CLI in surveyed coding-agent ecosystem with zero Document content-block taxonomy AND zero pdfs-2024-09-25 beta-header AND zero file_search ToolDefinition discriminator AND zero tool_choice:file_search AND zero file_search_result ToolResultContentBlock AND zero vector_store_ids AND zero page_range AND zero coordinate-positioned Citation AND zero CLI/slash-command surface — the document-input gap is the upstream prerequisite of every PDF-research/documentation-grounded-coding/academic-paper-summarization/contract-review-with-citations/regulatory-compliance-coding-with-document-evidence affordance — #234 closes the upstream prerequisite of every server-managed-document-input-with-citations 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 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) 2026-04-26 18:03:00 +09:00
YeonGyu-Kim
f406e83520 roadmap: #233 filed — Web-search Tool API typed taxonomy and structured-citation-attribution data-model are structurally absent: zero web_search_20250305 versioned-tool-name typed-tool-discriminator (FOURTH Anthropic-typed-tool-discriminator after #230's three but FIRST date-suffix-versioning-WITHOUT-beta-header — distinct from #232's date-suffix-AND-beta-header double-gate), zero tool_choice: web_search ToolChoice extension at types.rs:117 (SECOND ToolChoice extension after #232's code_interpreter, founding Server-managed-tool-as-tool-choice-discriminator cluster's second member), zero web_search_tool_result ToolResultContentBlock variant at types.rs:99 (FOURTH ToolResultContentBlock extension after #230 Image and #232 CodeExecutionResult, FIRST list-of-opaque-encrypted-page-records variant), zero citations REQUIRED field on OutputContentBlock::Text at types.rs:147 (NOVEL FIRST cluster member where data-model field absence on OUTPUT-TEXT-BLOCK side blocks REQUIRED-not-OPTIONAL grounded-attribution wire-format), zero Citation/WebSearchResultLocation/WebSearchToolUse/WebSearchToolResult/EncryptedContent typed model with encrypted_index/encrypted_content opaque-blob axis (NOVEL FIRST cluster member where typed-model field is INTENTIONALLY-OPAQUE-TO-CLIENT and MUST be roundtripped unchanged through subsequent messages, founding Server-opaque-encrypted-roundtripped-content cluster), zero max_uses server-side rate-limit field on tool-definition (NOVEL FIRST Server-side-rate-limit-on-tool-definition axis), zero allowed_domains/blocked_domains server-side pre-execution filtering on tool-definition (NOVEL FIRST Server-side-pre-execution-filter-on-tool-definition axis distinct from existing CLIENT-SIDE WebSearchInput.allowed_domains/blocked_domains post-execution filtering at tools/lib.rs:2274), zero user_location typed-model for geo-biasing on tool-definition (NOVEL FIRST Geo-biasing-at-tool-definition axis), zero web-search dispatch on ProviderClient enum at client.rs:8-14 (zero Anthropic-web_search_20250305/OpenAI-Responses-web_search/Brave/Tavily/Exa/Perplexity/Serper/Linkup/Jina/Bing/Google-CSE/SerpAPI/DuckDuckGo/You.com/Kagi partner-routing variants — fifteen-plus partner-set, FOURTH-largest in cluster, FIRST cluster member with Federated-search-partner-routing where first-class provider-native AND third-party search-as-a-service have EQUAL standing — distinct from #224 single-recommended-partner and #232 first-class-plus-partner-stub layout), zero claw web-search/cite/groundsearch CLI subcommand, zero /web-search //cite //grounded-search //research slash command (existing /search at commands/lib.rs:597 is LOCAL filesystem-search-only, structurally distinct), zero web_search_per_invocation_usd pricing field (NOVEL FIRST Discrete-event-counter-pricing-axis distinct from every prior continuous-resource-lifetime counter — Anthropic charges $10 per 1000 search-uses FLAT regardless of token volume), zero encrypted_content opaque-blob handling, zero page_age freshness-signaling — uniquely manifesting a THIRTEEN-LAYER fusion shape (the largest single-pinpoint fusion catalogued so far, exceeds #232's twelve-layer count) combining: (1) web_search_20250305 versioned-tool-name typed-tool-discriminator extension (FOURTH cluster member but FIRST date-suffix-WITHOUT-beta-header), (2) tool_choice: web_search ToolChoice extension (SECOND), (3) web_search_tool_result ToolResultContentBlock variant (FOURTH), (4) citations REQUIRED field on OutputContentBlock::Text (NOVEL FOURTH-position layer), (5) Citation typed model with encrypted_index opaque-blob axis (NOVEL FIFTH-position layer), (6) max_uses server-side rate-limit (NOVEL SIXTH), (7) allowed_domains/blocked_domains server-side pre-execution filter (NOVEL SEVENTH), (8) user_location geo-biasing (NOVEL EIGHTH), (9) Provider-trait method extension threading web_search_20250305 with citations decoding (NINTH), (10) ProviderClient-enum-dispatch with fifteen-plus-partner third-lanes (TENTH, FIRST Federated-search-partner-routing), (11) CLI-subcommand surface (ELEVENTH), (12) slash-command surface with inverse-locality complement /search (TWELFTH, THIRD inverse-locality slash-command-pair after #230 and #232), (13) per-search-invocation pricing-tier axis (NOVEL THIRTEENTH, FIRST Discrete-event-counter-pricing-axis) — making #233 the FIRST cluster member with thirteen-layer-fusion-shape (exceeds #232's eleven), the FIRST cluster member with REQUIRED-grounded-citation-field-on-output-text-block, the FIRST cluster member with INTENTIONALLY-OPAQUE-encrypted-content-roundtripped-by-client, the FIRST cluster member with date-suffix-versioning-in-tool-name-WITHOUT-beta-header, the SECOND member of new Tool-locality-axis META-cluster (sister to #230/#232's Sandbox-locality-axis META-cluster — together founding META-META-cluster doctrine where canonical pattern is 'claw-code ships a CLIENT-SIDE local-stub tool with same conceptual name AND the SERVER-SIDE provider-managed beta-versioned tool is structurally absent', applied uniformly across sandbox-locality AND tool-locality axes), the SECOND cluster member to extend ToolChoice (Server-managed-tool-as-tool-choice-discriminator cluster grows to 2: #232 code_interpreter + #233 web_search), the SECOND cluster member to extend ToolResultContentBlock with multi-modal-nested content (ToolResultContentBlock-extension mini-cluster grows to 3: #230 Image + #232 CodeExecutionResult + #233 WebSearchToolResult), the SECOND cluster member with Server-driven-tool-execution-loop (#232 + #233), the SECOND cluster member where local CLIENT-SIDE-tool-shadow exists alongside server-managed-tool absence (#232 REPL-shadow + #233 WebSearch-shadow) (Jobdori cycle #383 / extends #168c emission-routing audit / explicit follow-on from #230 Computer-use's CLIENT-SIDE virtualization, #232 Code-execution's SERVER-SIDE managed-sandbox-state, and the inverse-locality Sandbox-locality-axis META-cluster doctrine — introduces NOVEL structured-citation-attribution data-model axis AND server-managed-search-state transport-axis distinct from every prior cluster member / sibling-shape cluster grows to thirty-two / wire-format-parity cluster grows to twenty-three / capability-parity cluster grows to fifteen / multimodal-IO cluster grows to ten: #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 / provider-asymmetric-delegation cluster grows to ten with FIRST Federated-search-partner-routing member where first-class AND third-party are EQUAL-standing / Sandbox-locality-axis META-cluster: 2 members stable (#230 + #232) / Tool-locality-axis META-cluster FOUNDED: 2 members (#232 + #233 — SECOND inverse-locality META-cluster, sister to Sandbox-locality, founding META-META-cluster doctrine) / Server-managed-tool-as-tool-choice-discriminator cluster grows to 2 members (#232 + #233) / Server-driven-tool-execution-loop cluster grows to 2 members (#232 + #233) / ToolResultContentBlock-extension mini-cluster grows to 3 members (#230 + #232 + #233) / EIGHT new clusters founded in a single pinpoint (Federated-search-partner-routing 1-member-founder + Server-opaque-encrypted-roundtripped-content 1-member-founder + Required-grounded-citation-field-on-output-text-block 1-member-founder + Date-suffix-versioning-in-tool-name-without-beta-header 1-member-founder + Server-side-pre-execution-filter-on-tool-definition 1-member-founder + Server-side-rate-limit-on-tool-definition 1-member-founder + Geo-biasing-at-tool-definition 1-member-founder + Discrete-event-counter-pricing-axis 1-member-founder) plus participation in FIVE inherited clusters — THIRD-largest single-cycle cluster-founding count after #230 and #232, but FIRST single cycle to FOUND a NEW META-cluster (Tool-locality-axis) AND establish META-META-cluster doctrine connecting Sandbox-locality with Tool-locality / thirteen-layer-fusion-shape is the largest single-pinpoint fusion catalogued / external validation: forty-six ecosystem references covering Anthropic Web Search Tool GA 2025-03 with web_search_20250305 + max_uses + allowed_domains + blocked_domains + user_location parameters + web_search_tool_use/web_search_tool_result/web_search_result_location content blocks + citations array on output text blocks + encrypted_index/encrypted_content opaque-roundtripped fields + $10/1000-uses pricing, Anthropic Citations Documentation, OpenAI Responses API 2024-12 with tool_choice: web_search exposing federated-search via different server-managed surface, Brave Search API/Tavily AI/Exa AI/Perplexity Search/Serper.dev/Linkup Search/Jina Reader/Bing/Google CSE/SerpAPI/DuckDuckGo/You.com/Kagi/Phind partner-routing, Anthropic Python+TypeScript SDKs first-class typed surface, OpenAI Python+TypeScript SDKs first-class typed surface, LangChain AnthropicWebSearch/TavilySearchResults/BraveSearch/ExaSearchResults integrations, LangGraph search-grounded-agent template, smolagents WebSearchTool, OpenAI Cookbook web-search-with-citations tutorial, AgentOps observability, Search-Augmented Generation pattern, structured-citation-attribution data-model where every grounded text block carries citations array linking specific text-spans back to source URLs+excerpts (STRUCTURAL data-model requirement distinguishing this surface from #220-#232 — none of which had REQUIRED-grounded-citation-field-on-output-text-block) — claw-code is one of MULTIPLE coding-agent clients without server-managed web-search-with-citations BUT the gap is uniformly zero across surveyed ecosystem with claude-code partial coverage exception AND the inverse-locality complement to existing local CLIENT-SIDE WebSearch tool makes #233 a structural prerequisite of every grounded-search-with-citations 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 — #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 SERVER-MANAGED-SEARCH-AND-CITATION half of inverse-locality Tool-locality-axis META-cluster that complements #232's Sandbox-locality-axis META-cluster — and is FIRST cluster member where claude-code upstream partially leads while claw-code has zero coverage AND 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 — founding Tool-locality-axis META-cluster doctrine as sister to Sandbox-locality-axis and establishing META-META-cluster pattern that every future server-managed-tool with client-side local-stub shadow will inherit) 2026-04-26 18:03:00 +09:00
Jobdori
1cc58fb478 roadmap: #232 filed 2026-04-26 18:03:00 +09:00
Yeachan-Heo
404a7d346f roadmap: #231 filed 2026-04-26 18:03:00 +09:00
YeonGyu-Kim
a9c32c0ffa roadmap: #230 filed — Computer-use API typed taxonomy and host-machine-state-management transport are structurally absent: zero computer-use-2025-01-24 + zero computer-use-2025-11-24 anthropic-beta opt-in (FIRST cluster member with two concurrent beta-version-tiers gating one capability), zero computer_20250124/computer_20251124/bash_20250124/text_editor_20250124 Anthropic-typed-tool-discriminator (FIRST cluster member requiring type field on tool-definitions and FIRST anthropic-defined-tools-without-input-schema), zero display_width_px/display_height_px/display_number parametrized-tool-definition fields, zero Image variant on ToolResultContentBlock at types.rs:99 (FIRST cluster member with image-content on TOOL-RESULT side, distinct from #220's image-on-USER-INPUT-side — complementary architectures requiring separate enums), zero screen_capture/mouse_move/key_press/type_text host-machine-interaction primitive across all 26+ tool definitions in tools/lib.rs, zero CGEvent/ScreenCaptureKit/Quartz/AppKit/xdotool/cliclick/enigo/rdev/xcap host-OS library deps, zero Xvfb/Xephyr/Wayland-headless/Docker virtual-display-sandbox-orchestration, zero claw computer/operate CLI subcommand, /desktop slash command at commands/lib.rs:422 advertised-but-unbuilt under STUB_COMMANDS (the SIXTH advertised-but-unbuilt entry in cluster), zero per-action permissions.rs gating for mouse_click/key_press/type/screenshot, zero feedback-loop-state-machine for screenshot→tool_use→action→screenshot iteration, zero playwright-rust/chromiumoxide for browser-only-cua subset, zero per-screenshot-input-token cost field in ModelPricing — uniquely manifesting an ELEVEN-LAYER fusion shape combining: (1) anthropic-beta-DUAL-version-tier routing (FIRST), (2) Anthropic-typed-tool-definition discriminator (FIRST), (3) parametrized-tool-definition with display dimensions (FIRST), (4) Image-on-ToolResult side (FIRST, complementary to #220), (5) host-OS-system-call transport (FIRST host-OS-syscall transport, distinct from #229's WebSocket which is still network-only — second non-HTTP transport in cluster after WebSocket but FIRST that breaks network-only boundary), (6) virtual-display-sandbox orchestration (FIRST CLIENT-SIDE virtualization), (7) feedback-loop-state-machine for screenshot iteration loop (FIRST N-turn-loop-controller), (8) per-action-permission-policy at sub-tool-granularity (FIRST sub-tool-action permission gating, parallel to bash's DangerFullAccess but at action granularity), (9) request-side three-concurrent-opt-in (largest yet), (10) CLI-and-slash-command surface with /desktop advertised-but-unbuilt (sixth entry, largest in cluster), (11) host-machine-state-management transport-axis (NOVEL ELEVENTH layer with screen-capture+synthetic-input+display-dimension-query+window-enum+VM-orchestration+accessibility-permissions+per-action-permission-prompts+coordinate-validation+screenshot-encoding+safety-throttling — distinct from every prior cluster member which operated network-only) — making #230 the first cluster member with eleven-layer-fusion-shape (exceeds #229's ten-layer), the FIRST host-OS-syscall-transport requirement, the FIRST CLIENT-SIDE virtualization requirement, the FIRST inverse-asymmetric-delegation case (Anthropic LEADS, OpenAI follows with Operator, Google follows with Mariner — novel inversion of #224-#229's Anthropic-trails pattern), the FIRST cluster member with image-content on TOOL-RESULT-side, and the FIRST gap where upstream claude-code ALSO has only a stub (Jobdori cycle #381 / extends #168c emission-routing audit / explicit follow-on from #229's persistent-WebSocket-transport founder pinpoint and #225's audio-bidirectional axis — introduces a NOVEL HOST-MACHINE-STATE-MANAGEMENT transport-axis distinct from every prior cluster member / sibling-shape cluster grows to twenty-nine / wire-format-parity cluster grows to twenty / capability-parity cluster grows to twelve / multimodal-IO cluster grows to eight: #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 modality / provider-asymmetric-delegation cluster grows to seven with novel inverse-sub-cluster (Anthropic leads, distinct from #224-#229's Anthropic-trails pattern) / EIGHT new clusters founded in a single pinpoint (exceeds #229's three): Beta-version-tier-routing 1-member-founder + Image-on-tool-result-side 1-member-founder + Anthropic-typed-tool-discriminator 1-member-founder + Host-OS-system-call-transport 1-member-founder + Virtual-display-sandbox-orchestration 1-member-founder + Feedback-loop-state-machine 1-member-founder + Per-action-permission-policy-at-sub-tool-granularity 1-member-founder + Inverse-asymmetric-delegation 1-member-founder — the largest single-cycle cluster-founding count yet / eleven-layer-fusion-shape is the largest single-pinpoint fusion catalogued / external validation: sixty-two ecosystem references covering Anthropic Computer Use API GA 2024-10-22 with computer-use-2024-10-22 → computer-use-2025-01-24 → computer-use-2025-11-24 beta-tier evolution, Anthropic computer-use-demo reference with Docker+Xvfb+XFCE+Firefox+VNC sandbox pattern, OpenAI Operator + computer_use_preview, Google Project Mariner, Microsoft Magentic-One, Adept ACT-1, ByteDance UI-TARS open-weight, browser-use Python framework, Stagehand TypeScript, Skyvern AI, Multion, Cua framework, LangChain ChatAnthropic.with_computer_use_tool, LangGraph computer-use agent, smolagents ComputerAgent, AgentOps observability, screen-capture libs (ScreenCaptureKit/xcap/screenshots/xdotool/wtype/cliclick/nut.js), synthetic-input libs (enigo/rdev/inputbot/mouce/pyautogui/RobotJS), browser-cua stacks (playwright-rust/chromiumoxide/headless_chrome/fantoccini/playwright/puppeteer), sandbox-orchestration (Docker-Xvfb-XFCE / Kasm Workspaces / noVNC / Browserbase / Steel-browser / Hyperbrowser / Lightpanda / Surf.ai), per-action permission-policy precedent from claw-code's existing bash DangerFullAccess gating — claw-code is one of MULTIPLE coding-agent clients without computer-use BUT the gap is uniformly zero across the surveyed coding-agent ecosystem AND Anthropic specifically positions Claude as the LEADING commercial computer-use model AND claw-code is a port of claude-code which advertises /desktop slash command intent, making this the largest leading-vs-trailing parity gap with the upstream Anthropic platform in the entire emission-routing audit and the FIRST cluster member where upstream claude-code ALSO has only a stub — #230 closes the upstream prerequisite of every desktop-automation/browser-automation/form-filling/GUI-testing/accessibility-tool/screen-reading/vision-grounded-coding/pair-programming-with-screen-share/visual-debugging coding-agent affordance — the canonical 2024-2026-era agentic coding workflow that is currently impossible to build on top of claw-code) 2026-04-26 18:03:00 +09:00
Jobdori
2c7385e497 roadmap: #229 filed — Realtime API typed taxonomy and persistent-WebSocket transport are structurally absent: zero /v1/realtime endpoint surface across both Anthropic-native and OpenAI-compat lanes (rg returns zero hits for /v1/realtime / realtime / Realtime / realtime_session / RealtimeSession / RealtimeClient / RealtimeEvent / realtime-preview across rust/crates/api/src/), zero RealtimeSession / RealtimeSessionConfig / RealtimeSessionUpdate / RealtimeResponseCreate / RealtimeInputAudioBufferAppend / RealtimeInputAudioBufferCommit / RealtimeConversationItemCreate / RealtimeResponseAudioDelta / RealtimeResponseAudioTranscriptDelta / RealtimeResponseFunctionCallArguments / RealtimeServerEvent / RealtimeClientEvent / RealtimeTurnDetection / RealtimeVoiceActivityDetection / RealtimeVoice / RealtimeAudioFormat / RealtimeModality / RealtimeTool typed model in rust/crates/api/src/types.rs (37+ canonical event-type names in OpenAI Realtime API spec, zero coverage in claw-code), zero bidirectional event-stream variant on Provider trait (only send_message and stream_message exist, both single-directional), zero realtime_session / open_realtime / connect_realtime method that returns a duplex-channel-pair shape, zero session-state-machine type for the persistent-connection lifecycle, zero realtime dispatch on ProviderClient enum at rust/crates/api/src/client.rs:8-14 (three variants Anthropic/Xai/OpenAi, zero realtime-routing variants), zero tokio-tungstenite / async-tungstenite / tungstenite / fastwebsockets / tokio-websockets / hyper-tungstenite dependency in any workspace Cargo.toml (grep -rn 'tungstenite|tokio-tungstenite|fastwebsockets' rust/ returns zero hits — confirmed), zero WebSocket client library is linked into the build (the MCP Ws config variant at rust/crates/runtime/src/config.rs:125 and rust/crates/runtime/src/mcp_client.rs:13 is data-shape-only and bootstraps via the SDK without a tungstenite-backed transport, leaving the workspace with zero outbound persistent-WebSocket-client capability), zero WebRTC client (webrtc-rs / str0m / libwebrtc-bindings) for the alternative Realtime transport, zero claw realtime / claw live / claw voice-chat / claw realtime-session / claw connect-realtime CLI subcommand, zero /realtime / /live / /voice-chat slash command (existing /voice + /listen + /speak commands are STUB_COMMANDS-gated per #225 and synchronous-only with no realtime-session affordance), zero gpt-4o-realtime-preview / gpt-4o-mini-realtime-preview / gemini-2.0-flash-live entries in MODEL_REGISTRY, zero realtime_audio_input_per_million_tokens / realtime_audio_output_per_million_tokens / realtime_text_input_per_million_tokens / realtime_text_output_per_million_tokens / realtime_session_per_minute fields in ModelPricing struct (six-dimensional pricing matrix exceeding #227's five-dimensional video matrix and #228's four-dimensional mesh matrix — the canonical Realtime pricing model is the most-dimensional yet, with audio tokens at roughly 80-100x text tokens and cached-audio-input at 80% discount), zero realtime-model recognition in pricing_for_model substring-matcher (#209+#224+#225+#226+#227+#228 cluster overlap continues), zero session-resumption-token / interruption-handling / barge-in / voice-activity-detection / turn-detection / function-call-during-realtime / tool-use-during-realtime affordance — uniquely manifesting a TEN-LAYER fusion shape (the largest single-pinpoint fusion catalogued so far, exceeding #225/#227's nine-layer count) combining endpoint-URL-set on /v1/realtime?model=<id> WebSocket-upgrade-endpoint shape (single-endpoint-with-37+-event-types-flowing-bidirectionally, distinct from prior multi-endpoint sets) + bidirectional-symmetric-event-pair data-model with every client-event having a matched server-event-pair (FIRST cluster member with bidirectional-symmetric-event-pair-cardinality on a SINGLE endpoint, distinct from #225's bidirectional-audio-on-three-separate-endpoints which is request-response synchronous per endpoint) + Provider-trait-method extension with realtime_session returning a duplex (Sender, Receiver) channel-pair (FIRST cluster member where Provider trait return type is NOT Future-of-T or Stream-of-T but duplex-channel-pair, FIRST method requiring session-state-machine type at the trait boundary) + ProviderClient-enum-dispatch-with-realtime-third-lane with explicit RealtimeKind::OpenAi/Google/Azure partner-routing (provider-asymmetric: Anthropic does not offer realtime, OpenAI offers GA gpt-4o-realtime-preview and gpt-4o-mini-realtime-preview since 2024-10-01, Google Gemini Live API offers bidirectional audio+text+video, Azure mirrors OpenAI surface, zero first-class third-party partners because the persistent-WebSocket-with-37-event-type protocol is too high-bar for partner adoption — distinct from #225's six-partner-set audio surface and #227's twelve-partner-set video surface where partners ARE present) + request-side realtime-session-config opt-in (session.update event with voice/input_audio_format/output_audio_format/input_audio_transcription/turn_detection/tools/tool_choice/temperature/max_response_output_tokens/instructions/modalities:[text,audio] fields — the largest request-side opt-in axis-set yet, the union of every prior request-side opt-in across audio+image+video+chat-completion modalities) + CLI-subcommand-surface + slash-command-surface + pricing-tier-with-six-dimensional-compound-cost-model (per-model × per-modality-input × per-modality-output × per-cached-vs-fresh × per-audio-vs-text × per-minute-session-overhead — the largest pricing-tier extension yet, exceeding #227's five-dimensional and #228's four-dimensional matrices) + persistent-WebSocket-connection-transport-axis (NOVEL TENTH layer, distinct from every prior cluster member's HTTP-shaped transport — synchronous-HTTP for #211-#220+#222+#224, SSE-streaming for #213 partial subsets, multipart-form-data-HTTP for #223+#225+#226+#227+#228 binary-upload subsets, async-task-polling-HTTP for #221+#227+#228 — the cluster has now exhausted EVERY HTTP-shaped transport, and #229 introduces the FIRST non-HTTP transport, requiring WebSocket-upgrade-request-with-subprotocol-negotiation + bidirectional-frame-multiplexing-with-text+binary-frames + ping/pong-keepalive + graceful-close-with-status-code-and-reason + reconnection-with-resumption-token + per-event-type-JSON-envelope-dispatch-with-37+-event-types-on-a-single-connection + backpressure-handling-on-both-directions + authentication-via-Authorization-header-on-the-upgrade-request-and-per-session-token-rotation — none of which any HTTP-only transport requires) + bidirectional-symmetric-event-pair shape (input_audio_buffer.append → conversation.item.created, response.create → response.audio.delta + response.audio.done + response.audio_transcript.delta + response.audio_transcript.done + response.function_call_arguments.delta + response.function_call_arguments.done + response.done) — making #229 the FIRST cluster member that introduces a non-HTTP transport (persistent-WebSocket), the FIRST cluster member where Provider trait return type must be a duplex-channel-pair, and the FIRST cluster member where session lifecycle exceeds a single request-response cycle (typical Realtime sessions last 1-30+ minutes with state accumulating across the connection) (Jobdori cycle #380 / extends #168c emission-routing audit / explicit follow-on from #225 audio-bidirectional axis and #228 confirmed-structural async-task-polling cluster — introduces a NOVEL TRANSPORT axis distinct from every prior cluster member / sibling-shape cluster grows to twenty-eight / wire-format-parity cluster grows to nineteen / capability-parity cluster grows to eleven / multimodal-IO cluster grows to seven: #220 image-input + #224 embedding-output + #225 audio-bidirectional-on-separate-REST-endpoints + #226 image-output + #227 video-output + #228 mesh-output + #229 audio-text-tool-multiplex-on-persistent-WebSocket / provider-asymmetric-delegation cluster grows to six / async-task-polling cluster: still 3 members (#229 is push-based not poll-based — it does NOT join async-task-polling cluster, it founds a NEW cluster) / Persistent-WebSocket-transport cluster: 1 member (#229 alone, FOUNDER) / Bidirectional-symmetric-event-pair cluster: 1 member (#229 alone, FOUNDER) / Non-HTTP-transport cluster: 1 member (#229 alone, FOUNDER) — three new clusters founded in a single pinpoint, the first time a single cycle has founded three concurrent novel clusters / ten-layer-fusion-shape-with-persistent-WebSocket-transport-and-bidirectional-symmetric-event-pair is the largest single-pinpoint fusion catalogued. Distinct from prior cluster members; the ten-layer-fusion-shape with persistent-WebSocket-transport and bidirectional-symmetric-event-pair shape is novel and applies to follow-on candidate Real-time-Image-Generation API typed taxonomy (DALL-E live preview, Imagen live preview) and Real-time-Video-Generation streaming (Veo-Live, Sora-Live) — the persistent-WebSocket-transport pattern is now a first-class cluster member, a structural prerequisite that every future endpoint family using persistent connections will inherit / external validation: forty-eight ecosystem references covering OpenAI Realtime API GA 2024-10-01 with /v1/realtime?model=<id> WebSocket endpoint, 37+ canonical event-type names in OpenAI Realtime API spec, two transport options (WebSocket server-side and WebRTC browser-side), two GA realtime models (gpt-4o-realtime-preview and gpt-4o-mini-realtime-preview both with audio modality and tool-use), Google Gemini Live API with bidirectional WebSocket+gRPC streaming, Azure OpenAI Realtime API mirror, OpenAI Python SDK openai.realtime.AsyncRealtimeConnection typed client, OpenAI TypeScript SDK OpenAI.beta.realtime.RealtimeClient typed client, openai-realtime-api-beta reference client (canonical JS implementation), five first-class realtime-voice-agent frameworks all built on top of OpenAI Realtime API (Vapi/Retell-AI/LiveKit-Agents/Pipecat/Daily-Bots), Anthropic non-coverage statement (the second post-#224 provider-asymmetric-delegation case after audio), the canonical six-dimensional pricing matrix ($5.00/$20.00 per million text input/output tokens, $40.00/$80.00 per million audio input/output tokens, $2.50 per million cached audio input tokens for gpt-4o-realtime-preview-2024-10-01), coding-agent peer landscape: anomalyco/opencode has zero GA realtime integration (open feature request from 2026-02 only — confirmed via web search 2026-04-26), sst/opencode predecessor zero realtime, charmbracelet/crush zero realtime, continue.dev zero realtime, aider zero realtime, cursor zero realtime, zed zero realtime — the gap is uniformly zero across the surveyed ecosystem and represents the next-frontier capability that every coding-agent will need to add. claw-code is one of MULTIPLE clients without Realtime, but the persistent-WebSocket-transport-axis is the upstream prerequisite of every voice-agent / live-coding-pair-programming / push-to-talk-coding / barge-in-coding-conversation / function-call-during-voice / streaming-tool-use / sub-second-latency-coding-interaction affordance — the canonical 2024-2026-era voice-coding workflow that is currently impossible to build on top of claw-code — #229 closes the upstream prerequisite of every voice-coding affordance and is the first cluster member where transport-axis becomes a structural prerequisite of the dispatch layer) 2026-04-26 18:03:00 +09:00
YeonGyu-Kim
d57295be51 roadmap: #228 filed — 3D-asset-generation API typed taxonomy is structurally absent: zero /v1/3d/generations endpoint surface, zero ThreeDGenerationRequest/ThreeDObject/MeshFormat/ThreeDTaskId typed model, zero ThreeDAsset OutputContentBlock variant, zero generate_3d_asset/retrieve_3d_task Provider trait methods, zero ProviderClient dispatch with nine recommended third-party partners (Meshy-AI/Tripo-AI/CSM/Luma-Genie/Stability3D/Point-E/Shap-E/GET3D/One-2-3-45), zero async-task-polling-primitive in runtime (confirms async-task-polling cluster grows to 3: #221+#227+#228 — structural pattern confirmed not anomalous), zero claw 3d/mesh/generate-3d CLI subcommand, zero /3d /mesh slash command, zero mesh_per_asset_cost_usd pricing field — nine-layer-fusion-shape identical to #227 with mesh-modality replacing video-modality (GLB/GLTF/USDZ/OBJ/FBX binary-spatial-geometry output instead of MP4 binary-temporal-media, per-3d-asset pricing instead of per-second-of-video, mesh-polygon-density as quality axis replacing video-fps-and-duration) / Jobdori cycle #379 / sibling-shape cluster grows to 27 / multimodal-IO cluster grows to 6 / provider-asymmetric-delegation cluster grows to 5 / async-task-polling cluster grows to 3 2026-04-26 18:03:00 +09:00
Jobdori
baa6beb373 roadmap: #227 filed — Video-generation API typed taxonomy is structurally absent: zero /v1/videos/generations + zero /v1/videos/edits + zero /v1/videos/extends + zero /v1/videos/{id} polling-and-retrieval endpoint surface across both Anthropic-native and OpenAI-compat lanes, zero VideoGenerationRequest / VideoEditRequest / VideoExtendRequest / VideoGenerationResponse / VideoObject / VideoQuality / VideoResolution / VideoAspectRatio / VideoDuration / VideoOutputFormat / VideoFrameRate / VideoCodec / VideoStyle / VideoSource / VideoMediaType / VideoTaskStatus / VideoTaskId typed model in rust/crates/api/src/types.rs, zero Video variant on OutputContentBlock (4-arm exhaustive: Text/ToolUse/Thinking/RedactedThinking — extending #226's asymmetric-output-only modality axis with new temporal-duration dimension), zero generate_video / edit_video / extend_video / retrieve_video_task methods on Provider trait at rust/crates/api/src/providers/mod.rs:17-30 (only send_message + stream_message exist, both per-request synchronous and constrained to text-modality chat/completion taxonomy with zero video-output dispatch surface AND zero async-task polling primitive — the canonical video-generation pattern requires a two-phase request/poll workflow that the Provider trait does not expose because every existing method returns a synchronous response, distinct from #221's batch-dispatch async pattern which uses different polling shape with file-upload prerequisites that don't apply to video-gen), zero video-generation dispatch on ProviderClient enum at rust/crates/api/src/client.rs:8-14 (three variants Anthropic/Xai/OpenAi, zero Sora/Veo/Pika/Runway/Luma/Mochi/Kling/Hailuo/Replicate/FalAi/BlackForestLabs/StabilityVideo partner-routing variants — twelve-plus-partner-set, the largest partner-set yet in the cluster surpassing #226's eight-plus-partner image-gen set because video-generation is the most-fragmented modality across third-party providers in 2024-2026 with every major lab shipping its own video-gen surface in the post-Sora-launch arms race), zero multipart/form-data upload affordance with reqwest::multipart feature flag absent from rust/crates/api/Cargo.toml — multipart needed for /v1/videos/edits and /v1/videos/extends subset (parallel to #226's image-edits subset), zero async-task polling primitive in the runtime — there is no TaskPoller / AsyncTask / TaskStatus / TaskId / poll_task_until_complete machinery anywhere in rust/crates/runtime/ (rg returns zero hits for task_id/task_status/polling/poll_task/async_task/pending_task across rust/), distinguishing video-generation's async-polling pattern from every prior cluster member which is either synchronous (#211 through #226 except #221) or streaming-via-SSE (#221 batch-dispatch is closest, but uses different polling shape with file-upload prerequisites), zero claw video / claw videos / claw generate-video / claw render-video CLI subcommand at rust/crates/rusty-claude-cli/src/main.rs, zero /sora / /veo / /video / /render-video / /generate-video slash command in SlashCommandSpec table (zero video-related entries — video-input doubly absent because no advertised-but-unbuilt commands AND no implemented commands, strict-subset of #226's image-generation gap), zero sora-2 / sora-2-pro / veo-3 / veo-3-fast / runway-gen-4 / luma-dream-machine / pika-2.0 / kling-1.5 / hailuo-i2v-01 / hunyuan-video / mochi-1 / cogvideox-5b / stable-video-diffusion-1.1 entries in MODEL_REGISTRY, zero video_per_second_cost_usd / video_per_megapixel_second_cost_usd / video_input_token_cost_per_million / video_output_token_cost_per_million / video_per_minute_cost_usd fields in ModelPricing struct (rust/crates/runtime/src/usage.rs:9-15 has only four text-token-only fields) — the five-dimensional pricing matrix (model × resolution × fps × duration × extension-vs-generation compound-cost) is the largest pricing-tier extension yet catalogued, exceeding #226's four-dimensional image matrix, zero video-gen-model recognition in pricing_for_model substring-matcher (#209+#224+#225+#226 cluster overlap) — uniquely manifesting a nine-layer fusion shape combining #223's transport-plumbing-absence (multipart on edits/extends subset) + #224's provider-asymmetric-delegation (Anthropic does not offer video-gen at all, OpenAI offers GA Sora-2 + Sora-2-pro, Google offers Veo-3 + Veo-3-fast, Runway offers Gen-4 + Gen-4-turbo, plus twelve-plus recommended partners) + #218's request-side response_format/output_format/resolution/fps/duration opt-in (the largest request-side axis-set yet because video-gen has the most parameters in the modality-bearing endpoint family ecosystem) + asymmetric-output-only content-block-taxonomy axis with temporal-duration dimension (extending #226's image-output axis with temporal-fps-and-duration sub-dimensions) + the new async-task-polling-primitive axis (#227's first-of-its-kind contribution to the cluster doctrine, since prior cluster members have either synchronous-response or streaming-via-SSE or batch-via-Files-API-prerequisite or one-shot-multipart coverage, never long-poll-task-id-with-timeout-and-resume — the canonical video-gen pattern requires a two-phase request/poll workflow because video-rendering takes 30-300+ seconds depending on model and duration, exceeding typical HTTP-request-response timeout window) — making #227 the first cluster member where five independent prior shape-axes converge AND introduces a sixth novel shape-axis (async-task-polling-primitive), the largest fusion-shape gap catalogued so far (matching #225's nine-layer count but with different ninth axis — async-task-polling-primitive replacing #225's symmetric-input-output content-blocks, and one axis larger than #226's eight-layer fusion), making #227 the first cluster member where async-task-polling-primitive becomes a structural prerequisite of the dispatch layer (Jobdori cycle #378 / extends #168c emission-routing audit / explicit follow-on candidate from #226's eight-layer-fusion-shape-with-asymmetric-output-only-modality-coverage — third-named of the modality-bearing endpoint-family-absence cluster after #225 audio + #226 image-generation, completing the trio with video-generation closing the visual-temporal output modality / sibling-shape cluster grows to twenty-six / wire-format-parity cluster grows to seventeen / capability-parity cluster grows to nine / multimodal-IO cluster grows to five: #220 image-input + #224 embedding-output + #225 audio-bidirectional + #226 image-output + #227 video-output (the first cluster member where output is binary-temporal-media requiring long-poll workflows) / cross-cutting-data-pipeline cluster grows to four / multipart-transport cluster grows to four / provider-asymmetric-delegation cluster grows to four (twelve-plus partners, the largest in the cluster) / nine-layer-fusion-shape-with-async-task-polling-primitive (endpoint-URL-set-of-four [generations+edits+extends+polling] + multipart-on-subset + data-model-with-output-content-block-only-with-temporal-duration-dimension + response_format/output_format/resolution/fps/duration request-side opt-in + Provider-trait-method-set-of-four-with-async-task-polling-and-Unsupported-fallback + ProviderClient-enum-dispatch-with-twelve-plus-partner-third-lanes + CLI-subcommand-surface + pricing-tier-with-five-dimensional-compound-cost-model + async-task-polling-primitive-with-timeout-and-resume) is the largest single-pinpoint fusion catalogued. Distinct from prior cluster members; the nine-layer-fusion-shape-with-async-task-polling-primitive is novel and applies to follow-on candidate 3D-asset-generation API typed taxonomy (/v1/3d/generations for Shap-E / Meshy AI / Tripo AI / CSM / Stable Point-Aware-3D — same nine-layer fusion shape but with 3D-mesh-instead-of-video modality, GLB/GLTF/USDZ-binary-output instead of MP4-binary-output, per-3d-asset pricing instead of per-second-of-video — the natural #228 candidate) / external validation: fifty-three ecosystem references covering four first-class video-gen-endpoint specs on OpenAI side (generations + edits + extends + {id}-polling), one Anthropic non-coverage statement, one Google Veo-3 API spec with long-running-operation polling, twelve first-class third-party video-gen providers (Runway/Luma/Pika/Kling/Hailuo/Hunyuan/Mochi/CogVideoX/Stability-Video/BFL-Video/Replicate-Video/Fal-Video), three first-class CLI/SDK implementations of typed video-gen surface (OpenAI Python+TypeScript videos.generate + videos.retrieve, Runway TypeScript SDK, Luma Python SDK), six first-class local-video-gen providers (Stable Video Diffusion / AnimateDiff / Hunyuan-Video weights / Mochi-1 weights / CogVideoX weights / ComfyUI workflows), one community-maintained authoritative benchmark (VBench 16-evaluation-dimensions), nine coding-agent peers with video-gen capability, one canonical Anthropic-recommended partner-set (Sora-2/Veo-3/Runway/Luma per third-party-integration guide), the OpenAI /v1/responses endpoint with video_call tool for conversational video-output decoding via OutputContentBlock::Video, the canonical five-dimensional pricing matrix (per-model × per-resolution × per-fps × per-duration × per-extension-vs-generation), the canonical async-polling workflow with task-id polling at typical 5-second intervals and 5-minute typical-completion-time and 30-minute maximum-completion-time before timeout — claw-code is the sole client/agent/CLI in the surveyed coding-agent ecosystem with zero /v1/videos/{generations,edits,extends} integration AND zero Sora-2/Veo-3/Runway/Luma/Pika/Kling/Hailuo/Hunyuan/Mochi/CogVideoX/Stability-Video/BFL-Video partner-routing AND zero /sora / /veo / /video / /render-video / /generate-video slash command AND zero claw video / claw videos / claw generate-video / claw render-video CLI subcommand AND zero OutputContentBlock::Video variant AND zero multipart-form-data transport plumbing for video-edit binary uploads AND zero async-task-polling-primitive at the runtime layer — all seven gaps unique to claw-code in the surveyed ecosystem, the video-generation-API gap is the upstream prerequisite of every visual-temporal-output coding-agent affordance, and the nine-layer-fusion-shape-with-async-task-polling-primitive is novel within the cluster — #227 closes the upstream prerequisite of every visual-temporal-output coding-agent affordance and is the first cluster member where async-task-polling-primitive shape-axis is introduced) 2026-04-26 18:03:00 +09:00
Yeachan-Heo
de4db53d25 roadmap: #226 filed 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
24ed7f280a roadmap: #225 filed — Audio API typed taxonomy is structurally absent: zero /v1/audio/transcriptions + zero /v1/audio/translations + zero /v1/audio/speech endpoint surface across both Anthropic-native and OpenAI-compat lanes, zero TranscriptionRequest / SpeechRequest / AudioVoice / AudioFormat / AudioMediaType / AudioSource / Modality / AudioRequestConfig / SpeechResponse / TranscriptionResponse typed model in rust/crates/api/src/types.rs, zero Audio variant on InputContentBlock (3-arm exhaustive: Text/ToolUse/ToolResult), zero Audio variant on OutputContentBlock (4-arm exhaustive: Text/ToolUse/Thinking/RedactedThinking), zero modalities/audio fields on MessageRequest for gpt-4o-audio request-side opt-in, zero transcribe/translate/synthesize_speech methods on Provider trait at rust/crates/api/src/providers/mod.rs:17-30 (only send_message + stream_message exist), zero audio dispatch on ProviderClient enum at rust/crates/api/src/client.rs:8-14 (three variants Anthropic/Xai/OpenAi, zero Whisper/ElevenLabs/Cartesia/Deepgram/AssemblyAI/Speechmatics partner-routing variants), zero multipart/form-data upload affordance with reqwest::multipart feature flag absent from rust/crates/api/Cargo.toml (rg returns zero hits for multipart across rust/), zero claw audio/transcribe/speak/tts/whisper CLI subcommand at rust/crates/rusty-claude-cli/src/main.rs, zero /transcribe/whisper/tts slash command, AND the existing /voice + /listen + /speak slash commands at rust/crates/commands/src/lib.rs:295-301+603-609+610-616 advertise audio-capability summaries but are all gated under STUB_COMMANDS at rust/crates/rusty-claude-cli/src/main.rs:8333+8388+8389 (advertised-but-unbuilt shape ×3, the largest single-pinpoint advertised-but-unbuilt slash-command count catalogued, strict-superset of #220's /image+/screenshot ×2 and #223's /files ×1), zero whisper-1/tts-1/tts-1-hd/gpt-4o-audio-preview/gpt-4o-realtime-preview/gpt-4o-mini-tts/gpt-4o-mini-transcribe entries in MODEL_REGISTRY, zero audio_input_per_minute/audio_output_per_minute/tts_per_million_chars/whisper_per_minute fields in ModelPricing struct (rust/crates/runtime/src/usage.rs:9-15 has only four text-token-only fields), zero audio-model recognition in pricing_for_model substring-matcher (#209+#224 cluster overlap) — uniquely manifesting a fusion shape combining #223's transport-plumbing-absence (multipart/form-data) + #224's provider-asymmetric-delegation (Anthropic does not offer audio at all per docs.anthropic.com/audio explicitly recommending AssemblyAI/Deepgram/OpenAI-Whisper, OpenAI offers GA whisper-1+tts-1+tts-1-hd+gpt-4o-audio-preview+gpt-4o-realtime-preview+gpt-4o-mini-tts+gpt-4o-mini-transcribe, Google Gemini Live API offers bidirectional audio modality, six-plus recommended partners ElevenLabs/Cartesia/PlayHT/Deepgram/AssemblyAI/Speechmatics) + #220's advertised-but-unbuilt-slash-commands (×3, the largest count catalogued) + #218's modalities-request-side-absence (gpt-4o-audio-preview's modalities:[text,audio] opt-in) + symmetric-input-output content-block-taxonomy axis (#225's first-of-its-kind contribution to the cluster doctrine since prior members have either input-only [#220] or output-only [#214,#224] or stateless [#221/#222/#223] modality coverage) — making #225 the first cluster member where four independent prior shape-axes converge in a single pinpoint and the largest fusion-shape gap catalogued so far (Jobdori cycle #377 / extends #168c emission-routing audit / explicit follow-on candidate from #224's provider-asymmetric-delegation shape — the first-named of two named candidates: Audio API typed taxonomy (this pinpoint #225) / Image-generation API typed taxonomy (open candidate for #226), Audio chosen because it inherits #223's multipart-transport-plumbing dimension that Image-generation does not — the multipart sibling of #223 that the cycle hint explicitly identifies / sibling-shape cluster grows to twenty-four / wire-format-parity cluster grows to fifteen / capability-parity cluster grows to seven / multimodal-IO cluster grows to three: #220 input-only + #224 output-only + #225 full-duplex-bidirectional / advertised-but-unbuilt cluster grows to four / multipart-transport cluster grows to two / provider-asymmetric-delegation cluster grows to two / nine-layer-fusion-shape (endpoint-URL-set-of-three + multipart-form-data-transport-plumbing + data-model-taxonomy-with-input-AND-output-content-blocks + modalities-request-side-opt-in + Provider-trait-method-set-of-three-with-Unsupported-fallback + ProviderClient-enum-dispatch-with-six-partner-third-lanes + advertised-but-unbuilt-slash-commands-×3 + CLI-subcommand-surface + pricing-tier-with-per-minute-and-per-million-chars-and-per-million-audio-tokens-compound-cost-model) is the largest single-pinpoint fusion catalogued / external validation: forty-seven ecosystem references covering three first-class audio-endpoint specs on OpenAI side, one Anthropic non-coverage statement, one Google Gemini Live API spec, six first-class STT providers, six first-class TTS providers, one full-duplex bidirectional-audio endpoint OpenAI /v1/realtime, three first-class CLI/SDK typed-surface implementations, six first-class local-audio-providers, one community-maintained Common Voice benchmark, seven coding-agent peers with audio capability, one canonical Anthropic-recommended three-partner-set / claw-code is the sole client/agent/CLI with zero /v1/audio/{transcriptions,translations,speech} integration AND zero ElevenLabs/Cartesia/Deepgram/AssemblyAI/Speechmatics/Whisper partner-routing AND three advertised-but-unbuilt slash commands AND zero modalities request-side opt-in AND zero Audio content-block taxonomy variant on either input or output side AND zero multipart-form-data transport plumbing for audio uploads — all six gaps unique to claw-code in the surveyed ecosystem) 2026-04-26 18:02:59 +09:00
Jobdori
e857c76e4a roadmap: #224 filed — Embeddings API typed taxonomy is structurally absent: zero /v1/embeddings endpoint surface across both Anthropic-native and OpenAI-compat lanes, zero EmbeddingRequest / EmbeddingResponse / EmbeddingObject / EmbeddingUsage / EmbeddingEncoding / EmbeddingInputType / EmbeddingTruncation / EmbeddingOutputDtype / EmbeddingData typed model in rust/crates/api/src/types.rs (rg returns zero hits for embedding/embed/Embedding/EmbeddingRequest/EmbeddingResponse/text-embedding/voyage-/vector/cosine/similarity/dimensions across rust/), zero Vec<f32>/Vec<f64> embedding-vector slot anywhere in the data model, zero create_embeddings method on the Provider trait at rust/crates/api/src/providers/mod.rs:17-30 (only send_message and stream_message exist), zero embeddings dispatch on the ProviderClient enum at rust/crates/api/src/client.rs:8-14, zero claw embed / claw embeddings / claw vector CLI subcommand surface, zero /embed / /embeddings slash command in the SlashCommandSpec table, zero embedding_input_tokens_per_million_usd / embedding_dimensions fields in the Pricing struct, zero embedding-model entries in MODEL_REGISTRY (13 chat/completion entries, zero text-embedding-3-small/large/ada-002/voyage-3-large/voyage-code-3/embed-english-v3.0/cohere-embed/nomic-embed/mxbai-embed entries), and the pricing_for_model substring-matcher matches only haiku/opus/sonnet literals so it cannot recognize any embedding-model id (#209 cluster overlap) — manifesting a uniquely provider-asymmetric-delegation shape where Anthropic explicitly does not offer /v1/embeddings on https://api.anthropic.com and instead delegates to Voyage AI as the recommended partner per https://docs.anthropic.com/en/docs/build-with-claude/embeddings while OpenAI offers /v1/embeddings GA since 2022-12-15 (39+ months ago, the literal flagship endpoint of OpenAI's developer platform alongside /v1/chat/completions) — the cross-provider asymmetry is structural and requires a third lane in the ProviderClient enum (Voyage variant or supports_embeddings capability flag with EmbeddingError::Unsupported recommendation return shape) that no other endpoint family in this audit has needed — distinct from #221 batch dispatch (uniform on both major providers), #222 models list (uniform on both), and #223 Files API (uniform on both, just different beta header on Anthropic), making #224 the first cluster member where one canonical major provider explicitly does not offer the endpoint and recommends an external partner, requiring multi-provider routing rather than uniform Provider trait dispatch (Jobdori cycle #376 / extends #168c emission-routing audit / explicit follow-on candidate from #221 seven-layer-endpoint-family-absence shape — the second-named of three named candidates: Files API typed taxonomy / Embeddings API typed taxonomy / Models list endpoint typed taxonomy, completing the trio with #222 closing Models list and #223 closing Files API and #224 closing Embeddings / sibling-shape cluster grows to twenty-three: #201/#202/#203/#206/#207/#208/#209/#210/#211/#212/#213/#214/#215/#216/#217/#218/#219/#220/#221/#222/#223/#224 / wire-format-parity cluster grows to fourteen: #211+#212+#213+#214+#215+#216+#217+#218+#219+#220+#221+#222+#223+#224 / capability-parity cluster grows to six: #218+#220+#221+#222+#223+#224 / cross-cutting-data-pipeline cluster: #224 alone but it is the upstream prerequisite of every RAG / semantic-search / re-ranking / hybrid-search / dense-retrieval / classification-via-cosine / clustering / nearest-neighbor / codebase-indexing / context-retrieval-via-similarity use case that 2024-2026-era coding-agent harnesses ship as first-class affordances / seven-layer-endpoint-family-absence-with-provider-asymmetric-delegation shape (endpoint-URL + data-model-taxonomy + Provider-trait-method-with-Unsupported-fallback + ProviderClient-enum-dispatch-with-Voyage-third-lane + CLI-subcommand-surface + slash-command-surface + Voyage-AI-partner-routing-with-credential-discovery) is the first single capability absence catalogued where the provider-asymmetric-delegation pattern itself must be modeled at the dispatch layer — distinct from #221 / #222 / #223 seven/eight/seven-layer absences (all uniform-provider-coverage), and the largest provider-routing-asymmetry gap catalogued, distinct from prior single-field (#211/#212/#214) / response-only (#213/#207) / header-only (#215) / three-dimensional (#216) / classifier-leakage (#217) / four-layer (#218) / false-positive-opt-in (#219) / five-layer-feature-absence (#220) / seven-layer-endpoint-family-absence (#221) / eight-layer-endpoint-family-absence-with-misleading-alias (#222) / seven-layer-endpoint-family-absence-with-transport-plumbing-absence (#223) members; the seven-layer-endpoint-family-absence-with-provider-asymmetric-delegation shape is novel and applies to follow-on candidates Audio API typed taxonomy (also provider-asymmetric: Anthropic does not offer audio, OpenAI offers GA whisper+tts, recommended-partners include ElevenLabs/Cartesia/PlayHT/Deepgram) and Image-generation API typed taxonomy (also provider-asymmetric: Anthropic does not offer image generation, recommended-partners include Stability AI/Midjourney/Black Forest Labs/Ideogram) / external validation: forty-three ecosystem references covering three first-class embeddings-endpoint specs (OpenAI /v1/embeddings GA 2022-12-15, Voyage AI /v1/embeddings GA 2024-01, Cohere /v1/embed), eleven first-class CLI/SDK implementations (OpenAI Python+TypeScript, Voyage AI Python+TypeScript, Cohere Python+TypeScript, simonw/llm + llm-embed plugin, Vercel AI SDK, LangChain Python+TypeScript), six first-class local-embedding-providers (Ollama, LM Studio, llama.cpp server, llamafile, sentence-transformers, HuggingFace transformers), one community-maintained authoritative benchmark (MTEB 56 tasks), twelve coding-agent peers (continue.dev @codebase/@docs, zed semantic-search, aider repository-mapping, cursor background-indexing, anomalyco/opencode @code/@docs, charmbracelet/crush context-management, TabbyML/tabby code-completion-with-context, simonw/llm-embed, codeium/cline embedding-context, sourcegraph/cody @-mention, github/copilot enterprise codebase-indexing, anthropic/claude-code retrieval-augmented planning), six first-class vector-database integrations (Pinecone, Weaviate, Qdrant, Chroma, pgvector, FAISS), and one canonical Anthropic-blessed partner-routing pattern (Voyage AI per docs.anthropic.com/embeddings). claw-code is the sole client/agent/CLI in the surveyed coding-agent ecosystem with zero /v1/embeddings integration AND zero Voyage AI partner-routing AND zero @code/@docs/@codebase retrieval-augmented slash command surface AND zero CLI-level claw embed / claw similar / claw vector subcommand family — all four gaps are unique to claw-code in the surveyed ecosystem (every other coding-agent peer has at least the @-mention codebase-retrieval pattern), the embedding-API gap is the upstream prerequisite of every retrieval-augmented affordance in the runtime, and the provider-asymmetric-delegation shape is novel within the cluster — #224 closes the upstream prerequisite of every RAG / semantic-search / re-ranking / hybrid-search / classification-via-cosine / clustering / nearest-neighbor / codebase-indexing / context-retrieval-via-similarity use case, completes the trio of follow-on candidates from #221 seven-layer-endpoint-family-absence shape (Files API closed by #223, Models list closed by #222, Embeddings API closed by #224), and establishes the provider-asymmetric-delegation pattern as a first-class cluster member — a structural prerequisite that every future endpoint family with provider-asymmetric coverage (Audio API: Anthropic delegates to ElevenLabs/Cartesia, Image-generation API: Anthropic delegates to Imagen/DALL-E/Stability) will inherit. 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
2204a518e7 roadmap: #223 filed — Files API typed taxonomy is structurally absent: zero /v1/files endpoint surface across both Anthropic-native (anthropic-beta: files-api-2025-04-14) and OpenAI-compat lanes, zero FileObject / FileList / FilePurpose / FileStatus / FileUploadRequest / FileContentResponse / FileDeletionResponse typed model in rust/crates/api/src/types.rs (zero hits for files-api-2025-04-14, /v1/files, FileObject, FileList, FilePurpose, file_id, upload_file, MultipartUpload, multipart/form-data across rust/), zero multipart/form-data upload affordance with reqwest::multipart feature flag absent from rust/crates/api/Cargo.toml, zero file_id reference type that #220 image-content-block fix-shape would need to thread through ResolvedAttachment at rust/crates/tools/src/lib.rs:2660-2666 (which carries path/size/is_image triple with no file_id, no bytes, no media_type, no purpose, no upload_status, no expires_at slot), zero file_id reference type that #221 OpenAI batch-input-JSONL upload pathway requires (POST /v1/batches accepts only input_file_id, no inline-JSONL pathway exists), zero upload_file / retrieve_file / list_files / download_file / delete_file methods on the Provider trait at rust/crates/api/src/providers/mod.rs:17-30 (only send_message and stream_message exist, both per-request synchronous), zero file-management dispatch on the ProviderClient enum at rust/crates/api/src/client.rs:8-14 (three variants Anthropic/Xai/OpenAi all closed under per-request sync), zero claw files / claw upload / claw attach CLI subcommand surface at rust/crates/rusty-claude-cli/src/main.rs, zero /upload / /attach / /file-upload slash command in the SlashCommandSpec table at rust/crates/commands/src/lib.rs (the existing /files entry advertises 'List files in the current context window' but is gated under STUB_COMMANDS as a context-window file lister, distinct feature from Files API), zero pending_uploads field in claw status --json output, zero files-api-2025-04-14 in the active anthropic-beta header at rust/crates/telemetry/src/lib.rs:451-453 (currently sends claude-code-20250219, prompt-caching-scope-2026-01-05, tools-2026-04-01 only), zero FileSubmittedEvent / FileUploadProgressEvent / FileRetentionExpiredEvent typed events on the runtime telemetry sink, zero reqwest::multipart::Form::new() / reqwest::multipart::Part::stream() / file_part / content_disposition usage anywhere in the codebase (rg returns zero hits) — the canonical file-upload affordance is invisible across every CLI / REPL / slash-command / Provider-trait / ProviderClient-enum / data-model / telemetry-beta-header / multipart-transport surface, blocking the upstream fix-shapes for both #220 (image attachment via persistent file_id, the canonical Anthropic Vision pattern documented at platform.claude.com/docs/en/build-with-claude/files for repeated-image-use efficiency where re-uploading 5MB+ images on every request would otherwise burn bandwidth) and #221 (OpenAI Batch API requires JSONL input upload via POST /v1/files with purpose: 'batch' then references the resulting file_id from POST /v1/batches — the JSONL payload cannot be sent inline; without a Files API the OpenAI batch lane is structurally unreachable even if every other layer of #221 seven-layer fix-shape ships) (Jobdori cycle #375 / extends #168c emission-routing audit / explicit follow-on candidate from #221 seven-layer-endpoint-family-absence shape — the first-named of three named candidates: Files API typed taxonomy / Embeddings API typed taxonomy / Models list endpoint typed taxonomy, completing the trio with #222 closing Models list / sibling-shape cluster grows to twenty-two: #201/#202/#203/#206/#207/#208/#209/#210/#211/#212/#213/#214/#215/#216/#217/#218/#219/#220/#221/#222/#223 / wire-format-parity cluster grows to thirteen: #211+#212+#213+#214+#215+#216+#217+#218+#219+#220+#221+#222+#223 / capability-parity cluster grows to five: #218+#220+#221+#222+#223 / resource-management cluster: #223 alone but it is the upstream root cause of #220 image-attachment via persistent file_id and #221 OpenAI batch-input-JSONL upload pathway / seven-layer-endpoint-family-absence-with-transport-plumbing-absence shape (endpoint-URL + data-model-taxonomy + Provider-trait-method + ProviderClient-enum-dispatch + anthropic-beta-header-opt-in + CLI-subcommand-surface + multipart-form-data-transport-plumbing) is the first single capability absence catalogued where the transport layer itself must be extended before any higher-level surface can ship — distinct from #221 seven-layer absence (which operated within the existing JSON envelope) and the largest single transport-level gap catalogued, distinct from prior single-field (#211/#212/#214) / response-only (#213/#207) / header-only (#215) / three-dimensional (#216) / classifier-leakage (#217) / four-layer (#218) / false-positive-opt-in (#219) / five-layer-feature-absence (#220) / seven-layer-endpoint-family-absence (#221) / eight-layer-endpoint-family-absence-with-misleading-alias (#222) members; the seven-layer-endpoint-family-absence-with-transport-plumbing-absence shape is novel and applies to follow-on candidate Audio API typed taxonomy is absent (/v1/audio/transcriptions, /v1/audio/speech, /v1/audio/translations, also requiring multipart/form-data uploads) / external validation: Anthropic Files API reference at https://platform.claude.com/docs/en/build-with-claude/files documenting five operations on /v1/files with anthropic-beta: files-api-2025-04-14 opt-in, Anthropic Vision documentation referencing Files API for >5MB images and repeated-image-use efficiency, Anthropic Python SDK client.beta.files.upload first-class typed surface GA-shipped 2025-04-14, Anthropic TypeScript SDK parallel surface, OpenAI Files API reference at platform.openai.com/docs/api-reference/files documenting GA since 2023 with five operations on /v1/files and purpose discriminator (assistants/batch/fine-tune/user_data/vision) and FileStatus lifecycle (Uploaded/Processed/Error), OpenAI Python SDK client.files.create first-class surface, OpenAI Batch API explicitly requires input_file_id from POST /v1/files with purpose:'batch' (no inline-JSONL pathway), AWS Bedrock model invocation with input/output S3 paths (parallel concept), Azure OpenAI Files reference, Vertex AI Files via Cloud Storage, DeepSeek/Moonshot/Alibaba-DashScope/xAI parallel /v1/files OpenAI-compat shapes, OpenRouter file passthrough, simonw/llm --attachment flag with auto-upload to Files API, Vercel AI SDK 6 experimental_attachments threading file_id reference, LangChain Files integration with FileLoader uploading via Files API, charmbracelet/crush typed file management with provider-aware lifecycle, continue.dev config-file-driven file management with auto-upload, zed-industries/zed bundled-file management with periodic upstream sync, anomalyco/opencode file-upload integration with explicit file_id lifecycle in conversation context, models.dev file-handling capability flags indicating which models support file_id references, OpenTelemetry GenAI semconv gen_ai.input.attachments.count and gen_ai.input.files.count documented attributes, IANA MIME-type registry RFC 4288/4289 for application/json + multipart/form-data + application/pdf + image/png/jpeg/gif/webp, RFC 7578 multipart/form-data specification, reqwest::multipart documentation requiring 'multipart' feature flag on the reqwest dependency. Twenty-eight ecosystem references, two first-class Files API specs (Anthropic beta, OpenAI GA), GA timeline of 12 months on Anthropic beta side and 24+ months on OpenAI side (Files API on OpenAI predates Assistants API and Batch API both of which depend on it as prerequisite), seven first-class CLI/SDK implementations, one transport-layer specification (RFC 7578 multipart/form-data) and one Rust-side prerequisite (reqwest::multipart feature flag). claw-code is the sole client/agent/CLI in the surveyed coding-agent ecosystem with zero /v1/files integration AND zero multipart-form-data transport plumbing — both gaps are unique to claw-code in the surveyed ecosystem, the file-management gap is the upstream root cause of two downstream capability gaps already catalogued in this audit (#220 image attachment via persistent file_id, #221 OpenAI batch input-JSONL upload), and the multipart-transport-plumbing-absence shape is novel within the cluster — #223 closes the upstream root cause of two downstream gaps and unblocks file_id-based multimodal input (5MB+ images / PDFs / repeated-image-use efficiency), OpenAI batch-input-JSONL upload (the missing piece of #221 seven-layer batch dispatch fix-shape), Anthropic-style document-block content with source:{type:'file',file_id} for PDFs, and CLI-vs-slash-command-symmetry on file management that the runtime clawability doctrine treats as canonical baseline expectations. 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
a794764baa roadmap: #222 filed — Models list endpoint typed taxonomy is structurally absent: zero GET /v1/models and zero GET /v1/models/{id} surface across rust/crates/api/src/providers/anthropic.rs and rust/crates/api/src/providers/openai_compat.rs (rg returns zero hits for /v1/models, list_models, fetch_models, get_models, available_models, model_catalog, ModelInfo, ModelList, ListModelsResponse, OwnedBy, ModelObject, ModelCatalog across rust/), zero Model / ModelInfo / ModelList / ListModelsResponse typed taxonomy in rust/crates/api/src/types.rs, zero list_models<'a>(&'a self) -> ProviderFuture<'a, ModelList> and zero retrieve_model<'a>(&'a self, model_id: &'a str) -> ProviderFuture<'a, ModelInfo> methods on the Provider trait at rust/crates/api/src/providers/mod.rs:17-30 (only send_message and stream_message exist, both per-request), zero list_models dispatch on the ProviderClient enum at rust/crates/api/src/client.rs:8-14 (three variants Anthropic/Xai/OpenAi, all closed under per-request synchronous dispatch), zero claw models / claw model list / claw list-models CLI subcommand surface at rust/crates/rusty-claude-cli/src/main.rs, zero /models slash command in the SlashCommandSpec table at rust/crates/commands/src/lib.rs, zero validation against an authoritative source on set_model at rust/crates/rusty-claude-cli/src/main.rs:4989-5037 (user can type /model claude-banana-9000 and the runtime accepts it, swaps the active model to that string, and only fails at request time when the upstream provider returns 404 / invalid_model_error), and the existing /providers slash command at rust/crates/commands/src/lib.rs:716-720 is just a literal alias for /doctor at rust/crates/commands/src/lib.rs:1386-1389 despite advertising summary: "List available model providers" (advertised-but-rerouted shape — actively misleading at the UX layer, distinct from #220's advertised-but-unbuilt shape because the parse arm dispatches to a *different* command entirely instead of returning a clear unsupported error) — the canonical model-discovery affordance is invisible across every CLI / REPL / slash-command / Provider-trait / ProviderClient-enum / data-model surface, leaving claw-code's local hardcoded 13-entry MODEL_REGISTRY (3 anthropic + 5 grok + 1 kimi + 4 prefix routes for openai/gpt/qwen/kimi at rust/crates/api/src/providers/mod.rs:52-134 and 166-225) and its 6-entry model_token_limit match arm (rust/crates/api/src/providers/mod.rs:277-301 covering claude-opus-4-6, claude-sonnet-4-6, claude-haiku-4-5-20251213, grok-3, grok-3-mini, kimi-k2.5, kimi-k1.5 — returns None for current production IDs claude-opus-4-7, claude-haiku-4-6, gpt-5.2, o3, o4-mini, kimi-k3, qwen3-max, grok-4, deepseek-reasoner) as the only model-name knowledge the runtime has access to, with no way to refresh it, no way to discover new model IDs that providers publish, no way to validate user-supplied model strings, no way to cross-link to the pricing_for_model cost estimator (#209 substring-matching gap), no way to cross-link to the model_token_limit preflight check (#210 max_tokens shadow-fork gap silently no-ops on unknown models), no way to cross-link to the future is_batch_request flag (#221 batch-dispatch gap requires knowing which models support batch), and USAGE.md:426-440 documents only six model rows out of nine MODEL_REGISTRY entries (kimi alias missing from the documented table, four prefix routes mentioned only in passing prose, zero documentation of /v1/models endpoint usage / zero documentation of model-catalog discovery / zero documentation of "what to do when your provider ships a new model that isn't in claw-code's hardcoded registry") — the canonical model-discovery affordance is **the most universally-available endpoint in the LLM API ecosystem** (older than /v1/chat/completions itself, older than /v1/embeddings, older than /v1/messages, the literal first endpoint after auth on every OpenAI-compat provider since 2020 and on Anthropic since 2024-12-04, GA-shipped first-class typed surfaces in every Python/TypeScript SDK in the ecosystem) and claw-code is the **sole client/agent/CLI in the surveyed coding-agent ecosystem with zero /v1/models integration AND a misleading /providers slash command that aliases to /doctor** — both gaps are unique to claw-code in the surveyed ecosystem (Jobdori cycle #374 / extends #168c emission-routing audit / explicit follow-on candidate from #221's seven-layer-endpoint-family-absence shape — the third of three named candidates: Files API typed taxonomy / Embeddings API typed taxonomy / Models list endpoint typed taxonomy, and the most clawability-impacting because it's the upstream root cause of three downstream gaps already catalogued in this audit / sibling-shape cluster grows to twenty-one: #201/#202/#203/#206/#207/#208/#209/#210/#211/#212/#213/#214/#215/#216/#217/#218/#219/#220/#221/#222 / wire-format-parity cluster grows to twelve: #211+#212+#213+#214+#215+#216+#217+#218+#219+#220+#221+#222 / capability-parity cluster grows to four: #218+#220+#221+#222 / discovery-and-validation cluster: #222 alone but it's the upstream root cause of #209's pricing-fallback gap, #210's max_tokens shadow-fork gap, and #221's batch-dispatch gap / eight-layer-endpoint-family-absence-with-misleading-alias shape (endpoint-URL + data-model-taxonomy + Provider-trait-method + ProviderClient-enum-dispatch + CLI-subcommand-surface + slash-command-surface-with-misleading-alias + set_model-validation + downstream-consumers-with-stale-data) is the largest single advertised-vs-actual gap catalogued, distinct from prior single-field (#211/#212/#214) / response-only (#213/#207) / header-only (#215) / three-dimensional (#216) / classifier-leakage (#217) / four-layer (#218) / false-positive-opt-in (#219) / five-layer-feature-absence (#220) / seven-layer-endpoint-family-absence (#221) members; the advertised-but-rerouted shape is novel — strict-superset of #220's advertised-but-unbuilt because the parse arm dispatches to a *different* command instead of returning a clear unsupported error, applies to any future SlashCommandSpec entry where the summary field describes a feature different from what the parse arm dispatches to / external validation: Anthropic Models API reference at https://docs.anthropic.com/en/api/models-list documenting GET /v1/models GA 2024-12-04 with paginated before_id / after_id / limit and ModelInfo { id, type: "model", display_name, created_at } shape, Anthropic retrieve reference at https://docs.anthropic.com/en/api/models documenting GET /v1/models/{model_id} for single-model lookup, OpenAI Models API at https://platform.openai.com/docs/api-reference/models documenting the literal first endpoint after auth with Model { id, object: "model", created, owned_by } and ModelList { object: "list", data: Vec<Model> }, OpenAI Python SDK client.models.list() and client.models.retrieve(model_id) first-class typed surface, Anthropic Python SDK client.models.list() parallel surface GA-shipped 2024-12-04 alongside the API endpoint, Anthropic TypeScript SDK client.models.list(), AWS Bedrock ListFoundationModels API documenting Bedrock-anthropic-relay equivalent with FoundationModelSummary provider+model+modalities+active flag, Azure OpenAI Models reference with deployment-aware catalog, Vertex AI projects.locations.models.list for Vertex-published Anthropic/Gemini/3rd-party models, DeepSeek/Moonshot/Alibaba-DashScope/xAI parallel /v1/models OpenAI-compat shape, OpenRouter Models API at https://openrouter.ai/api/v1/models — the canonical "live model catalog with pricing" reference and the model that anomalyco/opencode-via-models.dev uses for pricing-data freshness, simonw/llm llm models and llm models default <model> first-class CLI subcommand backed by per-plugin model registration with models.dev-equivalent freshness, simonw/llm plugin-registration architecture for ad-hoc model addition, Vercel AI SDK 6 provider.languageModels() and provider.embeddingModels() first-class typed catalog APIs, LangChain init_chat_model(model_provider, model_name) reflective discovery via provider-defined catalogs and BaseChatModel.aget_models async catalog query, models.dev (https://models.dev) — community-maintained authoritative model catalog with pricing + capability flags + provider routing, used by anomalyco/opencode for pricing-data freshness with explicit fallback metadata when a model id isn't in the catalog (the canonical "external authoritative source for model metadata" reference), anomalyco/opencode models.dev integration with periodic refresh and explicit { provider: unknown, reason: not_in_pricing_table } fallback metadata, charmbracelet/crush typed catalog with provider+model+input/output-pricing, continue.dev config-file-driven catalog with auto-refresh from provider endpoints, zed-industries/zed bundled JSON catalog with periodic upstream refresh, TabbyML/tabby model catalog via plugin registration, llama.cpp server /v1/models local-model catalog via OpenAI-compat shape, LM Studio /v1/models local-model catalog, Ollama /api/tags and /v1/models local-model catalog with both Ollama-native and OpenAI-compat shapes, llamafile bundled-model catalog, LiteLLM models reference covering 100+ models at proxy level, portkey.ai gateway-level catalog, helicone.ai observability-platform model catalog with per-model usage stats, prompthub.us model-catalog-as-service, OpenTelemetry GenAI semconv gen_ai.request.model and gen_ai.response.model documented as required attributes for spans (every observability backend treats model as a first-class structured signal requiring authoritative-source validation), OpenAPI 3.1 spec for /v1/models at https://github.com/openai/openai-openapi as canonical machine-readable schema, Anthropic API stability versioning at https://docs.anthropic.com/en/api/versioning with anthropic-version header semver-stable since 2023-06-01 and models endpoint stable since 2024-12-04. Thirty-two ecosystem references, three first-class models-endpoint specs (Anthropic, OpenAI, OpenRouter), GA timeline of 16 months on Anthropic's side and 6+ years on OpenAI's side, eight first-class CLI/SDK implementations (Anthropic Python+TypeScript, OpenAI Python, simonw/llm, Vercel AI SDK, LangChain, Zed, charmbracelet/crush), seven first-class local-model catalogs (Ollama, LM Studio, llama.cpp server, llamafile, Tabby, Continue.dev, LiteLLM proxy), one community-maintained authoritative pricing source (models.dev) used by the closest peer coding agent. claw-code is the **sole client/agent/CLI in the surveyed coding-agent ecosystem with zero /v1/models integration AND a misleading /providers slash command that aliases to /doctor** — both gaps are unique to claw-code in the surveyed ecosystem, the model-discovery gap is the **upstream root cause** of three downstream cost-and-correctness gaps already catalogued in this audit (#209 / #210 / #221), and the misleading-alias-shape is novel within the cluster — #222 closes the upstream root cause of three downstream gaps and unblocks live-catalog-driven cost-estimation, max-tokens-validation, batch-capability-detection, and CLI-vs-slash-command-symmetry that the runtime's clawability doctrine treats as canonical baseline expectations. 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
ad44b3cdcd roadmap: #221 filed — Message Batches API is structurally absent: zero /v1/messages/batches endpoint, zero /v1/batches endpoint, zero MessageBatch / BatchedRequest / BatchedResult / BatchProcessingStatus / BatchRequestCounts typed taxonomy across rust/crates/api/src/types.rs (zero hits for batches, MessageBatch, BatchedRequest, custom_id, processing_status), zero submit_batch / retrieve_batch / retrieve_batch_results / cancel_batch / list_batches methods on the Provider trait at rust/crates/api/src/providers/mod.rs:17-30 (only send_message and stream_message exist, both per-request synchronous), zero batch dispatch on ProviderClient enum at rust/crates/api/src/client.rs:8-14 (three variants Anthropic/Xai/OpenAi all closed under sync send_message + stream_message), zero BatchSubmittedEvent / BatchInProgressEvent / BatchEndedEvent typed events on the runtime telemetry sink, zero claw batch / claw batches CLI subcommand surface at rust/crates/rusty-claude-cli/src/main.rs, zero /batch slash command in SlashCommandSpec table at rust/crates/commands/src/lib.rs, zero pending_batches field in claw status --json output, zero is_batch_request flag on pricing_for_model cost estimator (so even if Batch API were wired, cost would over-charge by 2x), zero batch_input_tokens_per_million_usd / batch_output_tokens_per_million_usd fields in the Pricing struct — the API has been GA on Anthropic since 2024-10-08 (18 months ago at filing time, with explicit 'anthropic-beta: message-batches-2024-09-24' opt-in header documented) and on OpenAI since 2024-04-15 (24 months ago at filing time), uniformly offers 50% input-and-output token discount, accepts up to 100,000 requests per batch with 256MB total payload (Anthropic) or unlimited via Files API (OpenAI), 24-hour completion SLO; combining with #219's also-missing prompt-caching opt-in (90% input savings) gives a compounded ~95% input-cost asymmetry on bulk ingest scenarios — the single largest cost-reduction lever in the entire API parity audit, missing at the endpoint-family level rather than the per-field level (Jobdori cycle #373 / extends #168c emission-routing audit / sibling-shape cluster grows to twenty: #201/#202/#203/#206/#207/#208/#209/#210/#211/#212/#213/#214/#215/#216/#217/#218/#219/#220/#221 / wire-format-parity cluster grows to eleven: #211+#212+#213+#214+#215+#216+#217+#218+#219+#220+#221 / capability-parity cluster grows to three: #218+#220+#221 / cost-parity cluster grows to eight: #204+#207+#209+#210+#213+#216+#219+#221 — #221 compounds with #219 to ~95% bulk-ingest cost asymmetry, the largest cost gap in the cluster / seven-layer-endpoint-family-absence shape (endpoint-URL + data-model-taxonomy + Provider-trait-method + ProviderClient-enum-dispatch + Worker-registry-status-enum + CLI-subcommand-surface + pricing-tier-flag) is the largest single capability absence catalogued, exceeding #220's five-layer-feature-absence / endpoint-family-level absence shape is novel — applies to follow-on candidates 'Files API typed taxonomy is absent' (the OpenAI batch path's prerequisite endpoint, also absent), 'Embeddings API typed taxonomy is absent' (/v1/embeddings cross-cutting), 'Models list endpoint typed taxonomy is absent' (/v1/models / Anthropic Models API) / external validation: Anthropic Message Batches API reference at https://docs.anthropic.com/en/api/messages-batches documenting five operations on /v1/messages/batches + GA 2024-10-08 + 50% discount + 100k-requests-per-batch + 256MB-total-payload + 24-hour-SLO + custom_id correlation field, Anthropic launch announcement at anthropic.com/news/message-batches-api documenting '50% off both input and output tokens' positioning, Anthropic Pricing page documenting Batch API column with 50% across Sonnet 3.5/4/4.5/4.6 + Opus 3/4/4.6 + Haiku 3.5, Anthropic Python SDK client.messages.batches.create(requests=[...]) first-class typed surface, Anthropic TypeScript SDK parallel surface, AWS Bedrock InvokeModelBatch / batch-inference docs (Bedrock-anthropic-relay path), OpenAI Batch API reference at platform.openai.com/docs/api-reference/batch documenting GA 2024-04-15 + 50% discount + JSONL-via-Files-API + completion_window:'24h', OpenAI launch announcement at openai.com/index/openai-introduces-batch-api documenting 'process batches asynchronously and receive results within 24 hours at a 50% discount', DeepSeek/Moonshot/Alibaba-DashScope/xAI batch-inference parallel surfaces, OpenRouter batch passthrough, simonw/llm --batch flag, Vercel AI SDK generateBatch + provider-specific batch passthrough, LangChain Runnable.batch() + Runnable.abatch() first-class Python+TypeScript parity, LangSmith batch-aware tracing, llmindset.co.uk independent cost-calculus validation, Medium 'process 10,000 queries without breaking the bank' tutorial, Steve Kinney's Anthropic-Batch-with-Temporal workflow-orchestration article, ai.moda Anthropic-Batch+Caching 95%-compounded-savings analysis (proves #219+#221 together close the largest cost gap), VentureBeat industry-press coverage, Reddit r/ClaudeAI launch thread, zed-industries/zed#19945 (peer ecosystem with same gap), RooCodeInc/Roo-Code#8667 (peer ecosystem with same gap), n8n Anthropic-batch-processing workflow, startground.com batch-deals tracker, silicondata.com 2026-pricing per-model batch breakdown, Hacker News batch-mechanics discussions, OpenTelemetry GenAI semconv gen_ai.request.batch_id + gen_ai.batch.processing_status + gen_ai.batch.request_counts documented attributes, IANA application/x-ndjson + application/jsonl MIME-type registrations / claw-code is the sole client/agent/CLI in the surveyed coding-agent ecosystem with zero batch-dispatch capability despite the API being GA on both major providers for 18+ months — parity floor against every other CLI/SDK/coding-agent in 2024-2025, the largest single cost-reduction lever in the entire emission-routing audit, and the largest endpoint-family-level capability gap catalogued so far) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
f9ee9f0ee1 roadmap: #220 filed — Image/vision input is structurally impossible across the entire data model: zero image content-block taxonomy variant on InputContentBlock (types.rs:80-94 has only Text/ToolUse/ToolResult — three of three exhaustive variants, zero Image, zero Document, zero MediaType, zero ImageSource, zero base64/file_id slot, zero media_type field anywhere in rust/crates/api/src/), zero parse arm for /image <path> and /screenshot slash commands despite their advertised summaries ("Add an image file to the conversation" at commands/lib.rs:585, "Take a screenshot and add to conversation" at commands/lib.rs:578) being in the canonical SlashCommandSpec table since project inception, both gated under STUB_COMMANDS at main.rs:8381-8382 (UX patch over missing-feature, not missing-feature fix), ResolvedAttachment at tools/lib.rs:2660-2666 carries path/size/is_image triple but no bytes / no base64 / no media_type / no upload affordance / no transport-ready payload despite is_image_path at line 5276 correctly classifying png/jpg/jpeg/gif/webp/bmp/svg extensions and the SendUserMessage/Brief tool surfacing isImage: true in JSON envelope (asserted at line 8969); build_chat_completion_request (openai_compat.rs:845) and translate_message (openai_compat.rs:946) have three-arm exhaustive matches over Text/ToolUse/ToolResult with no Image arm and no {type: "image", source: {type: "base64", media_type, data}} Anthropic-canonical wire shape and no {type: "image_url", image_url: {url: "data:image/...;base64,..."}} OpenAI-compat wire shape; the markdown renderer at render.rs:379-426 handles Tag::Image and TagEnd::Image for *output* rendering (asymmetric capability — model emits image markdown → rendered as colored [image:url] link, user attaches image → silent black hole at API boundary); the runtime's own worker_boot test fixture at worker_boot.rs:1324+:1349 literally hard-codes "Explain this KakaoTalk screenshot for a friend" as the canonical task-classification example for worker prompt-mismatch recovery — claw-code uses screenshot analysis as a runtime-classifier signal while having zero capability to actually send a screenshot to the model; TUI-ENHANCEMENT-PLAN.md:57 backlogs the gap as "No image/attachment preview" but the gap is far worse than no preview — there is no transport, no codec, no envelope, no anything from the byte stream to the wire (Jobdori cycle #372 / extends #168c emission-routing audit / sibling-shape cluster grows to nineteen: #201/#202/#203/#206/#207/#208/#209/#210/#211/#212/#213/#214/#215/#216/#217/#218/#219/#220 / wire-format-parity cluster grows to ten: #211+#212+#213+#214+#215+#216+#217+#218+#219+#220 / capability-parity cluster (strict-superset including user-facing surfacing): #218+#220 / five-layer-structural-absence shape (data-model-variant + slash-command-parse-arm + attachment-metadata-threading + request-builder-translation + OS-integration-helper) is the largest single feature absence yet catalogued, exceeding #218's four-layer; advertised-but-unbuilt shape is novel — UX-layer cousin of #219's false-positive-opt-in shape — applicable to other STUB_COMMAND entries with capability-claim summaries / claw-code is the sole client/agent/CLI in the surveyed coding-agent ecosystem with zero image-input capability despite Anthropic Vision GA on 2024-03-04 (25 months ago at filing time, default-on for all Claude 3.5+ models with 5MB-per-image / 32MB-per-request / 100-images-per-request limits) and OpenAI Vision GA on 2024-05-13 (23 months ago) and Google Gemini multimodal GA on 2024-02-15 (26 months ago), making this a regression against the upstream claude-code CLI claw-code is porting from / external validation: Anthropic Vision API reference at platform.claude.com/docs/en/build-with-claude/vision documenting the canonical {type, source: {type, media_type, data}} content block, Anthropic Messages API reference, Anthropic Files API beta with file_id reference for repeated-image-use efficiency, AWS Bedrock prompt-caching docs with image-block coverage and 20-images-per-request stricter limit and same cachePoint:{} pattern from #219, OpenAI Vision API reference documenting the {type:image_url, image_url:{url}} data-URL shape used by GPT-4o/4o-mini/5-vision/o1-vision/o3-vision/DeepSeek-VL2/Qwen-VL/QwQ-VL/MiniMax-VL/Moonshot kimi-VL, Google Gemini multimodal API documenting {inline_data:{mime_type, data}} shape, anomalyco/opencode#16184 (look_at tool image-file-from-disk handling bug), anomalyco/opencode#15728 (Read tool image-handling bug), anomalyco/opencode#8875 (custom-provider attachment-allowlist gap), anomalyco/opencode#17205 (text-only-model token-burn on image attachment) — all four are integration-quality gaps in opencode while claw-code is missing the capability entirely (~85% vs 0% parity asymmetry, the largest in the cluster), charmbracelet/crush vision-input via terminal paste, simonw/llm --attachment flag, Vercel AI SDK experimental_attachments + image content blocks, LangChain HumanMessage content blocks, LangGraph image-message routing, OpenAI Python and Anthropic Python SDK first-class image-typed messages, anthropic-quickstarts vision examples, claude-code official CLI paste-image and screenshot shortcuts (the upstream this is a regression against), OpenTelemetry GenAI semconv gen_ai.input.attachments and gen_ai.input.images.count multimodal observability attributes, IANA MIME-type registry RFC 4288/4289) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
8730b081e2 roadmap: #219 filed — Anthropic prompt-caching opt-in is structurally impossible: cache_control marker has zero codebase footprint (rg returns 0 hits across rust/ src/ docs/ tests/) despite the wire-side beta header 'prompt-caching-scope-2026-01-05' being unconditionally enabled at every Anthropic request (telemetry/lib.rs:16,452,469 + anthropic.rs:1443); five cacheable surfaces are uniformly locked: pub system: Option<String> at types.rs:11 is a flat string with no array form so no system-block cache_control slot exists; InputContentBlock variants Text/ToolUse/ToolResult at types.rs:80-99 have no cache_control field; ToolResultContentBlock variants Text/Json at types.rs:100-103 have no cache_control field; ToolDefinition at types.rs:105-110 has no cache_control field; openai_compat path translate_message at openai_compat.rs:946 and build_chat_completion_request at openai_compat.rs:850 emit flat-string system+content with no cache_control or Bedrock cachePoint translation; ~600 LOC of response-side cache stats infrastructure (prompt_cache.rs PromptCacheStats / PromptCacheRecord / PromptCache trait) accumulates a zero stream because no payload was opted in, and four hardcoded zero-coercion sites (openai_compat.rs:477-478, 489-490, 597-598, 1211-1212) discard upstream cache stats from Bedrock/Vertex/kimi-anthropic-compat/MiniMax-relay even when emitted; integration test at client_integration.rs:88-89 asserts the beta header is sent but no companion test asserts payload contains a cache_control marker because the data structures cannot produce one — a uniquely paradoxical false-positive opt-in shape: wire signal advertises caching intent and data-model structurally precludes it (Jobdori cycle #371 / extends #168c emission-routing audit / sibling-shape cluster grows to eighteen: #201/#202/#203/#206/#207/#208/#209/#210/#211/#212/#213/#214/#215/#216/#217/#218/#219 / wire-format-parity cluster grows to nine: #211+#212+#213+#214+#215+#216+#217+#218+#219 / cost-parity cluster grows to seven: #204+#207+#209+#210+#213+#216+#219 — #219 is the dominant cost-parity miss, ~90% input-token-cost reduction unattainable / cache-parity request/response symmetry pair: #219 (request-side opt-in absent) + #213 (response-side stats absent on openai-compat lane) / five-surface uniform-structural-absence shape: system+tools+tool_choice+messages+tool_result_content all locked, with no extra_body escape hatch since cache_control is a per-block annotation not a top-level field / false-positive-opt-in shape: novel cluster member where wire signal says yes and structure says no / external validation: Anthropic prompt-caching reference at platform.claude.com/docs/en/build-with-claude/prompt-caching documenting cache_control: {type: ephemeral} on system/tools/messages/content blocks with 5-min default TTL and 1-hour optional TTL and 90% cost reduction on cache-read tokens, Anthropic Messages API reference documenting system: Vec<SystemBlock> array form as the cacheable shape, Bedrock prompt-caching docs documenting cachePoint: {} block form for Bedrock-anthropic relay, claudecodecamp.com analysis of how prompt caching actually works in Claude Code, xda-developers article documenting claude-code's cache-token-budget knob proving caching is actively engaged, anomalyco/opencode#5416 #14203 #16848 #17910 #20110 #20265 (cache-related issues and PR for system-prompt-split-for-cache-hit-rate optimization), opencode-anthropic-cache npm package as third-party plugin proving the ecosystem expectation, LangChain anthropicPromptCachingMiddleware as first-class JS wrapper, LiteLLM prompt-caching docs with single-line cache_control pass-through for Anthropic+Bedrock, Vercel AI SDK Anthropic provider providerOptions.anthropic.cacheControl, prompthub.us multi-provider comparison treating opt-in as documented baseline, portkey.ai gateway-level pass-through, mindstudio.ai cost-impact analysis, OpenTelemetry GenAI semconv gen_ai.usage.input_tokens.cached as documented attribute — claw is the sole client/agent/CLI in the surveyed coding-agent ecosystem with zero cache_control request-side opt-in capability despite shipping the eligibility beta header on every Anthropic request) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
c2a208eb15 roadmap: #218 filed — MessageRequest has no response_format / output_config / seed / logprobs / top_logprobs / logit_bias / n / metadata fields (types.rs:6-36, thirteen fields, zero hits across rust/ for any of these); build_chat_completion_request (openai_compat.rs:845) writes thirteen optional fields and emits none of these on the wire; AnthropicClient::send_raw_request (anthropic.rs:466) renders same MessageRequest via render_json_body (telemetry/lib.rs:107) with same gaps; ChatMessage (openai_compat.rs:688) has three fields (role, content, tool_calls) and no refusal field despite the streaming-aggregator test at line 1781 explicitly including "refusal": null in test data — silent serde drop; ChunkDelta (openai_compat.rs:735) has same gap; OutputContentBlock (types.rs:147) has four variants (Text, ToolUse, Thinking, RedactedThinking) and no Refusal variant; MessageResponse.stop_reason (types.rs:127) has no slot for Anthropic's 2025-11+ stop_reason='refusal' value; net effect: claw cannot opt into OpenAI strict-schema constrained decoding (response_format json_schema, GA 2024-08), cannot opt into Anthropic GA structured outputs (output_config.format, GA 2025-11-13), cannot opt into legacy JSON mode (response_format json_object), cannot supply seed for reproducible sampling, cannot request logprobs/top_logprobs, cannot bias tokens via logit_bias, cannot request multiple completions via n, and silently discards every refusal string OpenAI emits when constrained decoding rejects a generation — refusals classified as Finished/success with empty content via #217 normalize_finish_reason mapping (Jobdori cycle #370 / extends #168c emission-routing audit / sibling-shape cluster grows to seventeen: #201/#202/#203/#206/#207/#208/#209/#210/#211/#212/#213/#214/#215/#216/#217/#218 / wire-format-parity cluster grows to eight: #211+#212+#213+#214+#215+#216+#217+#218 / four-layer-structural-absence shape: request-struct-field + request-builder-write + response-struct-field + content-block-taxonomy-variant, largest single-feature absence catalogued / external validation: OpenAI Structured Outputs guide, OpenAI Chat Completions API reference, Anthropic structured-outputs reference (GA 2025-11-13), Anthropic Messages API reference (stop_reason='refusal'), Vercel AI Gateway Anthropic structured outputs, Vercel AI SDK 6 generateObject + Zod, LangChain with_structured_output, simonw/llm --schema flag, charmbracelet/crush, anomalyco/opencode#10456 open feature request citing OpenAI Codex as reference, anomalyco/opencode#5639/#11357/#13618, OpenAI Codex CI/code-review cookbook, OpenRouter structured-outputs docs, OpenAI Python SDK client.beta.chat.completions.parse, OpenTelemetry GenAI semconv gen_ai.request.response_format + gen_ai.response.refusal) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
eea5b31745 roadmap: #217 filed — normalize_finish_reason (openai_compat.rs:1389) is a two-arm match (stop→end_turn, tool_calls→tool_use) with a string-passthrough fallthrough that drops three of five OpenAI-spec finish reasons (length, content_filter, function_call); MessageResponse.stop_reason is Option<String> with no enum constraint; WorkerRegistry::observe_completion (worker_boot.rs:558) classifies failure on finish=='unknown'||finish=='error' only, so OpenAI/DeepSeek/Moonshot truncation (length) and content-policy refusal (content_filter) become WorkerStatus::Finished with success events; the streaming aggregator's tool-call-block-close branch at openai_compat.rs:537 keys on 'tool_calls' literal and never fires for legacy 'function_call' shape (Azure pre-2024-02-15 / DeepSeek pre-2025-08 / SiliconFlow / OpenRouter relays); Anthropic native path produces the canonical taxonomy correctly (Jobdori cycle #369 / extends #168c emission-routing audit / sibling-shape cluster grows to sixteen: #201/#202/#203/#206/#207/#208/#209/#210/#211/#212/#213/#214/#215/#216/#217 / wire-format-parity cluster grows to seven: #211+#212+#213+#214+#215+#216+#217 / classifier-leakage shape: response-side string mistranslation flows three layers deep into runtime classifier with two-literal-compare coverage / external validation: OpenAI Chat Completions API reference, Anthropic Messages API reference, OpenAI function_call deprecation notice, Azure OpenAI reference, DeepSeek/Moonshot/DashScope refs, anomalyco/opencode#19842, charmbracelet/crush typed enum, simonw/llm Reason enum, Vercel AI SDK FinishReason union, LangChain LengthFinishReasonError/ContentFilterFinishReasonError, semantic-kernel FinishReason enum, openai-python Literal type, OpenTelemetry GenAI gen_ai.response.finish_reasons spec) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
3a3162c301 roadmap: #216 filed — neither MessageRequest nor MessageResponse has any service_tier field; build_chat_completion_request (openai_compat.rs:845) writes thirteen optional fields (model, max_tokens/max_completion_tokens, messages, stream, stream_options, tools, tool_choice, temperature, top_p, frequency_penalty, presence_penalty, stop, reasoning_effort) and does not write service_tier; AnthropicClient::send_raw_request (anthropic.rs:466) renders the same MessageRequest struct via AnthropicRequestProfile::render_json_body (telemetry/lib.rs:107) which has no field for it either, only a per-client extra_body escape hatch (asymmetric — openai_compat path has zero hits for extra_body); ChatCompletionResponse / ChatCompletionChunk / OpenAiUsage all deserialize four fields each, dropping the upstream-echoed service_tier confirmation and the system_fingerprint reproducibility marker that OpenAI documents as the canonical "what backend served you" signal; claw cannot opt into OpenAI flex (~50% cheaper async batch — developers.openai.com/api/docs/guides/flex-processing), cannot opt into OpenAI priority (~1.5-2x premium SLA latency — developers.openai.com/api/docs/guides/priority-processing), cannot opt into Anthropic priority (auto/standard_only — platform.claude.com/docs/en/api/service-tiers), and cannot detect at the response layer whether a request was flex-served or silently upgraded to priority by a project-level default override (Jobdori cycle #368 / extends #168c emission-routing audit / sibling-shape cluster grows to fifteen: #201/#202/#203/#206/#207/#208/#209/#210/#211/#212/#213/#214/#215/#216 / wire-format-parity cluster grows to six: #211+#212+#213+#214+#215+#216 / cost-parity cluster grows to six: #204+#207+#209+#210+#213+#216 / three-dimensional-structural-absence shape: request-side write + response-side read + reproducibility marker, distinct from prior request-only #211#212 / response-only #207#213#214 / header-only #215 members / external validation: OpenAI flex/priority/scale-tier guides, OpenAI advanced-usage system_fingerprint guide, Anthropic service-tiers reference, OpenTelemetry GenAI semconv gen_ai.openai.request.service_tier + gen_ai.openai.response.service_tier + gen_ai.openai.response.system_fingerprint, anomalyco/opencode#12297, Vercel AI SDK serviceTier provider option, LangChain ChatOpenAI service_tier ctor param, LiteLLM service_tier pass-through, semantic-kernel OpenAIPromptExecutionSettings.ServiceTier, openai-python SDK client.chat.completions.create(service_tier=...) first-class kwarg, MiniMax/DeepSeek Anthropic-compat layer notes, badlogic/pi-mono#1381) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
a319c9d7e6 roadmap: #215 filed — expect_success reads only request-id/x-request-id headers and discards the rest; both OpenAiCompatClient::send_with_retry and AnthropicClient::send_with_retry sleep on pure exponential backoff (2^(n-1) * initial + jitter) that ignores upstream Retry-After (RFC 7231 §7.1.3, mandated by Anthropic on 429, emitted by OpenAI/DeepSeek/Moonshot/DashScope on 429/503/529); ApiError::Api has no retry_after field, scheduler has no input port for it; on a 60s server-specified cooldown, claw burns 3 retries in <8s against a closed gate then surfaces RetriesExhausted (Jobdori cycle #367 / extends #168c emission-routing audit / sibling-shape cluster grows to fourteen: #201/#202/#203/#206/#207/#208/#209/#210/#211/#212/#213/#214/#215 / upstream-contract-honoring trio: #211+#213+#215 / wire-format-parity cluster: #211+#212+#213+#214+#215 / external validation: Anthropic rate-limits docs, OpenAI cookbook, DeepSeek rate-limit docs, RFC 7231 §7.1.3, openai-python#957, Vercel AI SDK LanguageModelV1RateLimit.retryAfter, LangChain BaseChatOpenAI, anomalyco/opencode#16993/#16994/#9091/#17583/#11705, charmbracelet/crush, LiteLLM Router.retry_after_strategy) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
f070fc8b0f roadmap: #214 filed — ChunkDelta and ChatMessage in openai_compat.rs deserialize only content/tool_calls; delta.reasoning_content (sibling to delta.content, the canonical wire field for DeepSeek deepseek-reasoner / Alibaba Qwen3-Thinking / QwQ / vLLM reasoning-parser backends) is silently discarded at serde-deserialize time before any handler sees it; non-streaming ChatMessage has the same gap; is_reasoning_model classifier already returns true for o1/o3/o4/grok-3-mini/qwen-qwq/qwq/*thinking* and is consulted at line 901 to strip request-side tuning params but never on the response side to opt into reasoning_content extraction; local taxonomy already declares OutputContentBlock::Thinking and ContentBlockDelta::ThinkingDelta and the Anthropic native path correctly emits both with full test coverage at sse.rs:260,288 — the openai-compat translator has the destination types one import away and never bridges to them (Jobdori cycle #366 / extends #168c emission-routing audit / sibling-shape cluster grows to thirteen: #201/#202/#203/#206/#207/#208/#209/#210/#211/#212/#213/#214 / reasoning-fidelity trio: #207+#211+#214 / wire-format-parity cluster: #211+#212+#213+#214 / external validation: DeepSeek API docs, vLLM reasoning-outputs, anomalyco/opencode#24124, charmbracelet/crush, simonw/llm, Vercel AI SDK, LangChain BaseChatOpenAI, LiteLLM, continue.dev#9245) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
be520220e9 roadmap: #213 filed — OpenAiUsage struct does not deserialize prompt_tokens_details.cached_tokens (OpenAI 2024-10) or prompt_cache_hit_tokens (DeepSeek); openai_compat path hardcodes cache_creation_input_tokens: 0 and cache_read_input_tokens: 0 at four sites; cost estimator computes $0 cache savings for every OpenAI/DeepSeek/Moonshot kimi request even when upstream prompt cache is hitting; Anthropic native path correctly populates same Usage fields from native wire format (Jobdori cycle #365 / extends #168c emission-routing audit / sibling-shape cluster grows to twelve: #201/#202/#203/#206/#207/#208/#209/#210/#211/#212/#213 / cost-parity cluster: #204+#207+#209+#210+#213 / wire-format-parity cluster: #211+#212+#213 / external validation: OpenAI prompt caching docs, DeepSeek pricing docs, anomalyco/opencode#17223/#17121/#17056/#11995, Vercel AI SDK cachedInputTokens, charmbracelet/crush, simonw/llm) 2026-04-26 18:02:59 +09:00
Jobdori
faffc24fe7 roadmap: #212 filed — MessageRequest+ToolChoice cannot express parallel_tool_calls (OpenAI top-level) or disable_parallel_tool_use (Anthropic tool_choice modifier); zero hits across rust/ src/ tests/ docs/; ToolChoice is 3-variant enum with no modifier slot; openai_tool_choice mapper has 3-arm match no parallel path; provider default is parallel-on, claw cannot opt out (Jobdori cycle #364 / extends #168c emission-routing audit / sibling-shape cluster grows to eleven: #201/#202/#203/#206/#207/#208/#209/#210/#211/#212 / wire-format-parity cluster: #211+#212 / external validation: Anthropic docs, OpenAI API reference, LangChain BaseChatOpenAI, anomalyco/opencode, charmbracelet/crush#1061) 2026-04-26 18:02:59 +09:00
YeonGyu Kim
bd45ae61a2 roadmap: #211 filed — build_chat_completion_request selects max_tokens_key only on wire_model.starts_with("gpt-5"), sending legacy max_tokens to OpenAI o1/o3/o4-mini reasoning models which reject it with unsupported_parameter; is_reasoning_model classifier 90 lines above already knows o-series is reasoning, taxonomy half-applied within 30-line span; no test for any o-series model (Jobdori cycle #363 / extends #168c emission-routing audit / sibling-shape cluster grows to ten: #201/#202/#203/#206/#207/#208/#209/#210/#211 / external validation: charmbracelet/crush#1061, simonw/llm#724, HKUDS/DeepTutor#54) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
83e99696af roadmap: #210 filed — rusty-claude-cli shadows api::max_tokens_for_model with stripped 2-branch fork (opus=32k, else=64k); ignores model_token_limit registry, bypasses plugin maxOutputTokens override, silently sends 64_000 for kimi-k2.5 whose registry cap is 16_384 (4x over) (Jobdori cycle #362 / extends #168c emission-routing audit / sibling-shape cluster grows to nine: #201/#202/#203/#206/#207/#208/#209/#210) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
d119ef9b7a roadmap: #209 filed — pricing_for_model substring-matches haiku/opus/sonnet only; default_sonnet_tier function name carries Opus pricing constants (15.0/75.0 vs real Sonnet 3.0/15.0); every non-Anthropic model silently falls back producing 5-100x wrong cost estimates with no event signal, only a magic-string suffix on one summary line; rusty-claude-cli session JSON and anthropic.rs telemetry emit cost without pricing_source field (Jobdori cycle #361 / cost-parity cluster closer to #204+#207 / models.dev parity gap vs anomalyco/opencode) 2026-04-26 18:02:59 +09:00
Jobdori
dde3710e26 roadmap: #208 filed — silent param/field strip on outbound serialization (4 tuning params for reasoning models, is_error for kimi), self-documenting 'silently strip' comments, no event emission, tests assert removal but not visibility (Jobdori cycle #359 / sibling-chain closer to #207 inbound-drop / completes OpenAI-compat boundary audit) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
495db9764e roadmap: #207 filed — OpenAiUsage discards prompt_tokens_details.cached_tokens and completion_tokens_details.reasoning_tokens, cache_read_input_tokens hardcoded 0 in 4 sites breaking cost parity with Anthropic path (Jobdori cycle #358 / fix-pair with #204 / anomalyco/opencode #24233 sibling) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
9c02f202f4 roadmap: #206 filed — normalize_finish_reason covers 2/5 OpenAI finish reasons, length/content_filter/function_call unmapped (Jobdori cycle #357)
Pinpoint #206: normalize_finish_reason() in openai_compat.rs only maps
stop→end_turn and tool_calls→tool_use. The 'other => other' pass-through
arm silently leaks length, content_filter, function_call to downstream
consumers expecting Anthropic vocabulary (max_tokens, refusal, tool_use).

Sibling of #201/#202/#203/#204 (silent fallbacks at provider boundary).
No structured event for unmapped values; test coverage locks only the
two-case happy path.

Branch: feat/jobdori-168c-emission-routing
HEAD: dba4f28
2026-04-26 18:02:59 +09:00
YeonGyu-Kim
34348de3d9 roadmap: #205 filed — prunable worktree lifecycle audit trail missing, no creation timestamp, pinpoint ID, or doctor visibility (Q *YeonGyu Kim cycle #137 / Jobdori cycle #351) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
8b4876a90a roadmap: #204 filed — TokenUsage omits reasoning_tokens, reasoning models merge into output_tokens breaking cost parity (anomalyco/opencode #24233 parity gap, Jobdori cycle #336) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
1566b2e1d3 roadmap: #203 filed — AutoCompactionEvent summary-only, no SSE event emitted mid-turn when auto-compaction fires (Jobdori cycle #136) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
6da110a7d7 roadmap: #202 filed — sanitize_tool_message_pairing silent drop, no tool_message_dropped event (Jobdori cycle #135) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
6921737326 roadmap: #201 filed — parse_tool_arguments silent fallback, no tool_arg_parse_error event (Jobdori cycle #134) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
18caa57b88 roadmap: #200 filed — SCHEMAS.md self-documenting drift, no derive-from-source enforcement (Q *YeonGyu Kim cycle #304) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
aaaa32cb2c roadmap: #199 filed — claw config JSON envelope omits deprecated_keys, merged_keys count-only, no automation path (Jobdori cycle #133) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
42357cbee4 roadmap: #198 filed — MCP approval-prompt opacity, no blocked.mcp_approval state, pane-scrape required (gaebal-gajae cycle #135 / Jobdori cycle #248) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
8ad7ac14dc roadmap: #197 filed — enabledPlugins deprecation no migration path, warning on every invocation (Jobdori cycle #132) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
9bdd70d945 roadmap: Doctrine #35 formalized — disk-truth wins over verbal drift during taxonomy disputes (Jobdori cycle #194) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
4f6c64e189 roadmap: #196 filed — local branch namespace accumulation, no lifecycle cleanup or doctor visibility (Jobdori cycle #131) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
ae9b66edcb roadmap: #195 filed — worktree-age opacity, no timestamp or doctor signal (Jobdori cycle #130) 2026-04-26 18:02:59 +09:00
YeonGyu-Kim
6f8229ea37 roadmap: #194 filed — prunable-worktree accumulation, no doctor visibility or auto-prune lifecycle 2026-04-26 18:02:59 +09:00