Named by the contract review of PR #18528 (card #18451) as "the one item I would not let ride into a later card unnamed". Filed rather than fixed in-branch because the fix would move the head and void a review record that is otherwise complete. ⛔ Not a defect in #18528's accept set, semver level or generated artifacts — the review returned PASS.
Why this is not cosmetic
The text lives in the build-progress.zod.ts module docblock, which (i) ships inside the published @objectstack/spec tarball and (ii) is rendered verbatim into content/docs/references/ai/build-progress.mdx. For a closed enum, the provenance note is the audit trail that the "re-measure before moving the array" discipline depends on. A future reader deciding whether a fifth member is warranted will read these sentences as measurements. They are not.
The three statements, and what was measured
(a) "every member below is one a real producer emits or a real consumer already discriminates" — FALSE for verify at this head.
The review measured, on reachable repos: objectstack has zero emitters of the frame; objectui's plugin-chatbot has 0 hits for 'verify' (control 'structure' hits 4 files), and ChatbotEnhanced.tsx:163 types the union as 'structure' | 'data' | 'done'. verify has no reachable emitter and no reachable reader. It is in the enum by maintainer ruling (named verbatim in objectui#7388), which is a perfectly good reason — the bullet beneath the sentence even gives it. The headline sentence just contradicts it.
(b) "measured on cloud#1838 … 9 tool calls …, one of them the registered verify_build tool" — an inference presented as a measurement.
Neither card #18451 nor objectui#7388 records verify_build among those calls; "verifying and re-seeding" is all either says. ⚠️ objectstack-ai/cloud is not reachable from this session's credential, so this cannot be confirmed or refuted here — which is exactly why it must not be stated as measured. Whoever fixes this either cites a reachable source or marks it as inferred.
(c) "a turn that seeds no sample data never reports data" and "apply_edit turns need not report structure" assert producer behaviour with no reachable source. The surrounding consumer guidance ("treat every phase as optional, compare by value") is safe regardless, so nothing downstream breaks — the claims are simply unsourced.
The fix
Edit the docblock so each statement says what it is (measured on a named reachable source / declared by ruling / inferred), then run gen:docs so the reference page follows. The changeset's "never reports data" sentence wants the same softening. ⚠️ The reference page is generated from the docblock — editing the .mdx alone will be reverted by the next generation and will red the generated-artifact gate.
Carry this too — the liveness debt behind (a)
verify, hop and tool have zero readers and zero emitters in any reachable repo today. That is declared-ahead by ruling, not neglect, and it sits outside the ADR-0049 liveness ledger (registry-rooted; BuildProgressFrame is not a registered metadata type, and the liveness job is green — so ⛔ no gate will notice). Two named carriers are supposed to close it: cloud#2172 (the emitter) and objectui#7388 block 2 (the consumer's strict parse), the latter currently pm:awaiting-maintainer since 2026-09-10. ⚠️ If neither lands, these three become enforce-or-remove candidates with nothing watching them. That watch is this card's second job.
Dedupe words: build-progress docblock provenance, verify phase zero emitters, verify_build inferred not measured, BuildProgressFrame liveness outside ledger, closed enum audit trail re-measure.
Generated by Claude Code
Named by the contract review of PR #18528 (card #18451) as "the one item I would not let ride into a later card unnamed". Filed rather than fixed in-branch because the fix would move the head and void a review record that is otherwise complete. ⛔ Not a defect in #18528's accept set, semver level or generated artifacts — the review returned PASS.
Why this is not cosmetic
The text lives in the
build-progress.zod.tsmodule docblock, which (i) ships inside the published@objectstack/spectarball and (ii) is rendered verbatim intocontent/docs/references/ai/build-progress.mdx. For a closed enum, the provenance note is the audit trail that the "re-measure before moving the array" discipline depends on. A future reader deciding whether a fifth member is warranted will read these sentences as measurements. They are not.The three statements, and what was measured
(a) "every member below is one a real producer emits or a real consumer already discriminates" — FALSE for
verifyat this head.The review measured, on reachable repos: objectstack has zero emitters of the frame; objectui's
plugin-chatbothas 0 hits for'verify'(control'structure'hits 4 files), andChatbotEnhanced.tsx:163types the union as'structure' | 'data' | 'done'.verifyhas no reachable emitter and no reachable reader. It is in the enum by maintainer ruling (named verbatim in objectui#7388), which is a perfectly good reason — the bullet beneath the sentence even gives it. The headline sentence just contradicts it.(b) "measured on cloud#1838 … 9 tool calls …, one of them the registered⚠️
verify_buildtool" — an inference presented as a measurement.Neither card #18451 nor objectui#7388 records
verify_buildamong those calls; "verifying and re-seeding" is all either says.objectstack-ai/cloudis not reachable from this session's credential, so this cannot be confirmed or refuted here — which is exactly why it must not be stated as measured. Whoever fixes this either cites a reachable source or marks it as inferred.(c) "a turn that seeds no sample data never reports
data" and "apply_editturns need not reportstructure" assert producer behaviour with no reachable source. The surrounding consumer guidance ("treat every phase as optional, compare by value") is safe regardless, so nothing downstream breaks — the claims are simply unsourced.The fix
Edit the docblock so each statement says what it is (measured on a named reachable source / declared by ruling / inferred), then run⚠️ The reference page is generated from the docblock — editing the
gen:docsso the reference page follows. The changeset's "never reportsdata" sentence wants the same softening..mdxalone will be reverted by the next generation and will red the generated-artifact gate.Carry this too — the liveness debt behind (a)
verify,hopandtoolhave zero readers and zero emitters in any reachable repo today. That is declared-ahead by ruling, not neglect, and it sits outside the ADR-0049 liveness ledger (registry-rooted;BuildProgressFrameis not a registered metadata type, and the liveness job is green — so ⛔ no gate will notice). Two named carriers are supposed to close it: cloud#2172 (the emitter) and objectui#7388 block 2 (the consumer's strict parse), the latter currentlypm:awaiting-maintainersince 2026-09-10.Dedupe words:
build-progress docblock provenance,verify phase zero emitters,verify_build inferred not measured,BuildProgressFrame liveness outside ledger,closed enum audit trail re-measure.Generated by Claude Code