From 75b97e7463496ea148308997a0723b0f1c03d509 Mon Sep 17 00:00:00 2001 From: Tianyi Cui <53024+tianyicui@users.noreply.github.com> Date: Sat, 4 Jul 2026 18:04:26 +0800 Subject: [PATCH] docs(rfc): state the pruned-vocabulary RFC as current facts, not patch mechanics The Decision and Risks paragraphs described the change relative to the patch that landed it (what was updated together, what another change took first). An implemented RFC reads as standing truth: the pastes match the pruned maps, the manifest rows remain because the symbols survive, and the image block's cache field belongs to the drop-image RFC's record. --- ...4-prune-producerless-vocabulary-variants.md | 4 ++-- verdict | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 verdict diff --git a/docs/rfc/implemented/simplification/2026-07-04-prune-producerless-vocabulary-variants.md b/docs/rfc/implemented/simplification/2026-07-04-prune-producerless-vocabulary-variants.md index b0fedc990e..d938f3eafb 100644 --- a/docs/rfc/implemented/simplification/2026-07-04-prune-producerless-vocabulary-variants.md +++ b/docs/rfc/implemented/simplification/2026-07-04-prune-producerless-vocabulary-variants.md @@ -12,7 +12,7 @@ The merge-extensible vocabulary maps are designed to grow by declaration merging ## Decision -`CacheHint` with both `cache?` fields, the `agent` message-source variant, and the `continuation` turn-trigger variant are deleted. The llm-replay fixture uses an `injection` trigger (any non-`message` trigger serves its purpose). Updated in the same change: the type-equiv pastes in [core.md](../../../core-data-structures/core.md) and [session.md](../../../core-data-structures/session.md) (`scripts/type-equiv.manifest.json` is untouched — both pasted symbols survive, each minus a member), and the [content-block vocabulary RFC](../architecture/2026-06-11-content-block-vocabulary.md)'s consequence line that had named cache hints as having a home, per [implemented/AGENTS.md](../AGENTS.md). +`CacheHint`, its `cache?` block fields, the `agent` message-source variant, and the `continuation` turn-trigger variant are deleted: the shipped vocabulary carries none of them. The llm-replay fixture uses an `injection` trigger (any non-`message` trigger serves its purpose). The type-equiv pastes in [core.md](../../../core-data-structures/core.md) and [session.md](../../../core-data-structures/session.md) match the pruned maps — both symbols keep their rows in `scripts/type-equiv.manifest.json`, since each map survives minus a member — and the [content-block vocabulary RFC](../architecture/2026-06-11-content-block-vocabulary.md)'s consequences record cache hints as producer-gated rather than as having a home, per [implemented/AGENTS.md](../AGENTS.md). Each variant returns the day it gains a real producer, exactly as the maps are designed to grow: a caching feature re-adds `cache` together with the adapter that transmits it; subagent attribution re-adds `agent` together with the backend that stamps it and a consumer that routes on it; an auto-continue feature that genuinely starts new turns re-adds `continuation` with the plugin that emits it. @@ -28,4 +28,4 @@ The [content-block vocabulary RFC](../architecture/2026-06-11-content-block-voca ## Risks -None operational — nothing could construct these values. The mirror-event removals (recorded in [the boundary-mirror RFC](2026-06-20-remove-agent-boundary-mirror-events.md) and [the stream-chunk RFC](2026-07-02-remove-stream-chunk-mirror.md)) touch only transient `agent/*` events, never the durable vocabulary, so there is no collision. Elsewhere in the vocabulary the admission policy already holds: `rejected`, `prompt/blocked`, and `hook/invoked`/`hook/result` each have live producers — this RFC extends the same bar to the three variants that lacked one. [The image-block removal](2026-07-04-drop-image-content-block.md) shipped first, taking the image block's `cache?` field with it; this change removed the two that remained. +None operational — nothing could construct these values. The mirror-event removals (recorded in [the boundary-mirror RFC](2026-06-20-remove-agent-boundary-mirror-events.md) and [the stream-chunk RFC](2026-07-02-remove-stream-chunk-mirror.md)) touch only transient `agent/*` events, never the durable vocabulary, so there is no collision. Elsewhere in the vocabulary the admission policy already holds: `rejected`, `prompt/blocked`, and `hook/invoked`/`hook/result` each have live producers — this RFC extends the same bar to the three variants that lacked one. The image block's own `cache?` field belongs to [the drop-image RFC](2026-07-04-drop-image-content-block.md), which removed it together with the block; this RFC covers the two fields on the block types that remain. diff --git a/verdict b/verdict new file mode 100644 index 0000000000..d43803f7a9 --- /dev/null +++ b/verdict @@ -0,0 +1,18 @@ +(A) merge-blocker +- `docs/rfc/implemented/simplification/2026-07-04-prune-producerless-vocabulary-variants.md:15` and `docs/rfc/implemented/simplification/2026-07-04-prune-producerless-vocabulary-variants.md:31` still narrate this PR/change history instead of just the shipped/current state: "Updated in the same change", "`scripts/type-equiv.manifest.json` is untouched", "shipped first", and "this change removed". The review spec asks for current-state prose only, and the house rules prohibit process narration in docs/comments. Reword these as present facts about the live vocabulary/catalogs rather than mechanics of this patch. + +(B) non-blocking +- None. + +(C) nitpick +- None. + +Evidence checked +- Producer-less claims are accurate: exact `cache:` block constructors are gone except this RFC record (`rg "\bcache\s*:"`), exact `{ kind: 'agent' }` constructors are gone (`rg "\{\s*kind:\s*['\"]agent['\"]\s*[,}]"`), and exact `{ kind: 'continuation' }` constructors are gone (`rg "\{\s*kind:\s*['\"]continuation['\"]\s*[,}]"`). +- The loop constructs `message` at `packages/core/agent-loop/src/loop.ts:284` and `injection` at `packages/core/agent-loop/src/agent.ts:145`; production `trigger.kind` readers are the ACP message filters at `packages/ui/acp/src/index.ts:352` and `packages/ui/acp/src/index.ts:385`. +- The subagent prompt path sends without a source at `packages/subagent/subagent-inprocess/src/index.ts:155`, and missing sources default to `{ kind: 'user' }` at `packages/core/agent-loop/src/agent.ts:103`. +- The core-data-structures pastes no longer include the removed variants: `docs/core-data-structures/core.md:107` and `docs/core-data-structures/session.md:165`. +- The llm-replay fixture still proves `deriveReplayScript` ignores non-`assistant/chunk` events: the test includes `turn/start`/`turn/end` around chunks at `packages/support/llm-replay/tests/llm-replay.spec.ts:118`, while the implementation skips all non-chunk events at `packages/support/llm-replay/src/index.ts:195`. +- Checks run: `pnpm exec vitest run packages/support/llm-replay/tests/llm-replay.spec.ts` (51 passed), `pnpm run doc-sync` (passed), `git diff --check origin/simpl-a1-drop-image...HEAD` (passed), precise EOF check on touched files (passed), and `pnpm run typecheck` (passed). + +Verdict: NO-SHIP as it stands, due to the implemented RFC process-narration blocker above.