Found by the os-dev delivering #16671 (PR #16856), while re-measuring that card's premise. ⛔ Deliberately not folded into that PR: #16671, its dispatch and its claim comment all scope the work to one sentence, and the file surface declared on the claim is "one sentence (stop on breach; explain in the report)". Correcting a second sentence there would re-open a settled boundary, so it is filed instead. ⛔ No domain:* and no labels set — routing is triage's.
Measured
.changeset/stack-refusal-envelopes.md is #16342's changeset, still unconsumed. Its closing paragraph reads, verbatim:
@objectstack/runtime carries one classification row per new code in the dispatcher error-code vocabulary (door: 'none', verdict: 'boot-refusal' — the measured verdict), which pnpm check:dispatcher-error-vocabulary enforces in both directions.
On origin/main 169215724 that is false. There are no such rows:
| reading |
command |
exit |
result |
| subject |
grep -n "code: 'STACK_" packages/runtime/src/dispatcher-error-vocabulary.ts |
1 |
0 rows |
| control |
grep -n "boot-refusal" packages/runtime/src/dispatcher-error-vocabulary.ts |
0 |
17 lines, of which 5 are live verdict: 'boot-refusal' rows |
| control |
grep -c " code: '" packages/runtime/src/dispatcher-error-vocabulary.ts |
0 |
65 rows |
Both controls use the same tool over the same file, so the zero is a reading and not a broken grep. The file now carries only a comment about the removal, at line 302:
[#16449] Third full cycle, under the #16404 ruling … the nine boot-refusal rows measured unregistered on that card's tree — OBJECT_OWNERSHIP_CONFLICT, the seven STACK_* defineStack refusals and PLUGIN_UI_REQUIRED_KEY_MISSING — were registered and ratcheted out; the reachability each row recorded now lives on its ledger row.
git log -S"STACK_TRIGGER_CAPABILITY_REQUIRED" -- packages/runtime/src/dispatcher-error-vocabulary.ts names two commits: 1ecee3e53 (which added the rows) and abae16adf (which removed them).
Why it is worth a card and not a note
⭐ It is the same landing as the defect #16671 already covers. abae16adf did both halves at once — it registered the seven STACK_* codes in ERROR_CODE_LEDGER and ratcheted their boot-refusal rows out of the runtime vocabulary. #16671 corrects the first half only, by design. So after PR #16856 lands, the file states the registration correctly and still claims the runtime rows exist, which no reader can reconcile.
⚠️ It rides the same hard, unwatched deadline — the one #16850 is filed about as a class. Both changesets compile into the same release; once that release cuts, this sentence is fixed in a published packages/*/CHANGELOG.md, which the repo's own guardrail says is written centrally at release time and never amended per-PR afterwards. Before the release it is a one-line edit; after it, an erratum.
⛔ Not a content/docs/releases/ edit — a .changeset/ input, which the Documentation Guardrails explicitly permit a PR to touch.
Scope
One sentence in one file, the mirror image of #16671. Two things a delivering seat must decide rather than assume, which is why this is not simply a repeat of that card:
- What replaces it. The reachability reading those rows carried was not deleted, it moved — it now lives on the ledger rows in
packages/spec/src/api/error-code-ledger.zod.ts. So the honest replacement records where the classification lives now, rather than deleting the sentence outright.
- ⚠️ Whether the frontmatter still stands. The changeset declares
"@objectstack/runtime": minor. If the runtime-side artifact this bump was written for has been ratcheted back out, whether @objectstack/runtime still earns a bump in this release is a release-versioning question, not a prose question — it is the reason this was not treated as a mechanical in-place fix. ⛔ Do not answer it by habit.
Sequencing
⚠️ After PR #16856 merges. It touches the same file and the same paragraph block; landing this first would put the two in conflict for no gain.
承接者: the domain:spec execution seat (PM session session_016N6xmWt5hYm94ffVEwGH8x) — same lane, same file, same deadline as #16671, which it dispatched.
Refs: #16671 · PR #16856 · #16342 · #16449 · PR #16652 · #16404 (the ruling) · #16850 (the deadline class)
Generated by Claude Code
Found by the
os-devdelivering #16671 (PR #16856), while re-measuring that card's premise. ⛔ Deliberately not folded into that PR: #16671, its dispatch and its claim comment all scope the work to one sentence, and the file surface declared on the claim is "one sentence (stop on breach; explain in the report)". Correcting a second sentence there would re-open a settled boundary, so it is filed instead. ⛔ Nodomain:*and no labels set — routing is triage's.Measured
.changeset/stack-refusal-envelopes.mdis #16342's changeset, still unconsumed. Its closing paragraph reads, verbatim:On
origin/main169215724that is false. There are no such rows:grep -n "code: 'STACK_" packages/runtime/src/dispatcher-error-vocabulary.tsgrep -n "boot-refusal" packages/runtime/src/dispatcher-error-vocabulary.tsverdict: 'boot-refusal'rowsgrep -c " code: '" packages/runtime/src/dispatcher-error-vocabulary.tsBoth controls use the same tool over the same file, so the zero is a reading and not a broken grep. The file now carries only a comment about the removal, at line 302:
git log -S"STACK_TRIGGER_CAPABILITY_REQUIRED" -- packages/runtime/src/dispatcher-error-vocabulary.tsnames two commits:1ecee3e53(which added the rows) andabae16adf(which removed them).Why it is worth a card and not a note
⭐ It is the same landing as the defect #16671 already covers.
abae16adfdid both halves at once — it registered the sevenSTACK_*codes inERROR_CODE_LEDGERand ratcheted theirboot-refusalrows out of the runtime vocabulary. #16671 corrects the first half only, by design. So after PR #16856 lands, the file states the registration correctly and still claims the runtime rows exist, which no reader can reconcile.packages/*/CHANGELOG.md, which the repo's own guardrail says is written centrally at release time and never amended per-PR afterwards. Before the release it is a one-line edit; after it, an erratum.⛔ Not a
content/docs/releases/edit — a.changeset/input, which the Documentation Guardrails explicitly permit a PR to touch.Scope
One sentence in one file, the mirror image of #16671. Two things a delivering seat must decide rather than assume, which is why this is not simply a repeat of that card:
packages/spec/src/api/error-code-ledger.zod.ts. So the honest replacement records where the classification lives now, rather than deleting the sentence outright."@objectstack/runtime": minor. If the runtime-side artifact this bump was written for has been ratcheted back out, whether@objectstack/runtimestill earns a bump in this release is a release-versioning question, not a prose question — it is the reason this was not treated as a mechanical in-place fix. ⛔ Do not answer it by habit.Sequencing
承接者: the
domain:specexecution seat (PM sessionsession_016N6xmWt5hYm94ffVEwGH8x) — same lane, same file, same deadline as #16671, which it dispatched.Refs: #16671 · PR #16856 · #16342 · #16449 · PR #16652 · #16404 (the ruling) · #16850 (the deadline class)
Generated by Claude Code