Skip to content

docs(changeset): @objectstack/runtime carries NO boot-refusal row for the STACK_* codes now — correct the closing sentence of the stack-refusal-envelopes changeset - #16874

Merged
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-16857-runtime-boot-refusal-row-claim
Sep 8, 2026
Merged

docs(changeset): @objectstack/runtime carries NO boot-refusal row for the STACK_* codes now — correct the closing sentence of the stack-refusal-envelopes changeset#16874
zhuangjianguo merged 1 commit into
mainfrom
claude/issue-16857-runtime-boot-refusal-row-claim

Conversation

@claude

@claude claude Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Fixes #16857

.changeset/stack-refusal-envelopes.md (#16342's changeset, still unconsumed) closed by claiming that @objectstack/runtime "carries one classification row per new code in the dispatcher error-code vocabulary". That was true when it was written and is false against main today — the runtime vocabulary carries zero such rows. This corrects that one sentence, before a release compiles it into a published packages/*/CHANGELOG.md that this repo does not amend per-PR.

The reading

Every number below is a grep over packages/runtime/src/dispatcher-error-vocabulary.ts at blob ff83d6506d53cee86c87f1d124e56e1978e65dc5, which git rev-parse shows is byte-identical at this branch's base 12babac13 and at origin/main c930f8597. A reading is a count plus the tree it was taken against, so both are named. Exit codes were captured before any pipe.

reading pattern exit count
subject — the false claim code: 'STACK_ 1 0
control — line 20's claim, still true verdict: 'boot-refusal' 0 14
control — population sanity code: ' 0 84
positive control for the zero STACK_ 0 1 — the removal comment at line 302

The positive control is the same tool over the same file, so the zero is a reading and not a broken grep.

Where the rows went, measured rather than recalled: abae16adf deleted exactly seven of them — grep -c "^- code: 'STACK_" over its patch for that file returns 7 — in the same landing that registered those seven codes in ERROR_CODE_LEDGER, where they now sit at packages/spec/src/api/error-code-ledger.zod.ts lines 1045-1051 under the @objectstack/spec key. The gate's own header states the consequence: a registered code drops out of its scan, and a stamp site under packages/spec/src/ may be classified foreign-vocabulary or runtime-pinned "and NOTHING ELSE".

Two things in the same file that did NOT change — proven by hash, not by inspection

invariant sha1 before sha1 after cmp
line 20"...one-row-per-refusal granularity (14 rows)..." 71192bf158de167ac2774c576a462350600d7fa8 71192bf158de167ac2774c576a462350600d7fa8 exit 0
front matter, lines 1-4 — including "@objectstack/runtime": minor c3e97c77ad1e4948e11906c233e2d326ffcf4003 c3e97c77ad1e4948e11906c233e2d326ffcf4003 exit 0

Line 20 is the neighbouring sentence about the same fact family, and it is true — 14 is exactly what control 2 returns. Two sentences describe that family; only one went false.

The front-matter key stays on the seat's ruling in issue comment 5585216825: eight other unconsumed changesets already declare @objectstack/runtime: minor, so the released version is inert either way, but the key also decides whether this paragraph compiles into packages/runtime/CHANGELOG.md, which ships in the tarball via files[] — and that history belongs where a runtime consumer greps for it.

Anchor counts across the edit, each with its exit code:

anchor before after
carries one classification row per new code (the old sentence) 1 (exit 0) 0 (exit 1)
carried one classification row per new code (the new one) 0 (exit 1) 1 (exit 0)
one-row-per-refusal granularity (14 rows) 1 (exit 0) 1 (exit 0)
"@objectstack/runtime": minor 1 (exit 0) 1 (exit 0)

git diff --stat: 1 file changed, 1 insertion(+), 1 deletion(-).

Register

This matches PR #16856, which corrected line 24 of the same file in the same landing shift: the true half of the sentence is kept, the false half is replaced by what actually happened, and the card that moved the fact is named (#16449, PR #16652).

Gates

node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran reconciles the run against this tree's own derivation:

✓ dispatch-gates --ran: 17 derived famil(ies) accounted for — 17 run, 0 NOT-MEASURED.

All 17 exit 0, at 1be4e378c. Three of them (check-closing-keyword-parity twice, check-comment-mask-corpus) first returned exit 3 — PREREQUISITE NOT MET, which is not a red gate; they were re-run green after pnpm install. check-changeset-fixed.mjs is included deliberately: the derivation flags its roster as living under .changeset, so its silence would not have been evidence in either direction — it was run, and it passes.

Not owed here, and named rather than skipped silently: no package source is touched, so there is no dependency-closure build and no package test/typecheck to run. Repo-wide pnpm lint is CI's run, not this PR's.

skip-changeset

Measured, not assumed: of the 82 workspace package.json files, 70 declare a files[] whitelist (matching check:published-files's own count of 70 publishable packages), and 0 of their files[] entries mention .changeset — positive control on the same scan: 70 entries mention dist. .changeset/** is repo-root release-notes input and ships in no tarball, so nothing published moves.

Landing

⛔ Draft on purpose. Not flipped ready, not enqueued, no auto-merge armed — the dispatching seat does that.


Generated by Claude Code

… the STACK_* codes now — correct the closing sentence of the stack-refusal-envelopes changeset

The unconsumed changeset .changeset/stack-refusal-envelopes.md closed by claiming
that @objectstack/runtime "carries one classification row per new code in the
dispatcher error-code vocabulary". That sentence was true when it was written and
is false against main today: the runtime vocabulary carries none of them.

Measured on this tree, not inherited. Every reading below is a grep over
packages/runtime/src/dispatcher-error-vocabulary.ts at blob
ff83d65, which is byte-identical at this branch's
base 12babac and at origin/main c930f85 (git rev-parse on both, not assumed).
Exit codes captured before any pipe.

  grep -c "code: 'STACK_"           -> 0   (exit 1)  the false claim
  grep -c "verdict: 'boot-refusal'" -> 14  (exit 0)  line 20's claim, still true
  grep -c "code: '"                 -> 84  (exit 0)  population control

The zero carries a positive control over the same file with the same tool:
grep -c "STACK_" -> 1 (exit 0), the removal comment at line 302. So the zero is a
reading and not a broken grep.

Where the rows went, measured rather than recalled: commit abae16a deleted
exactly seven of them -- grep -c "^-        code: 'STACK_" over its patch for that
file -> 7 -- in the same landing that registered the seven codes in
ERROR_CODE_LEDGER, where they now sit at packages/spec/src/api/error-code-ledger.zod.ts
lines 1045-1051 under the '@objectstack/spec' key. The gate's own header states the
consequence: a registered code drops out of its scan, and a stamp site under
packages/spec/src/ may be classified foreign-vocabulary or runtime-pinned "and
NOTHING ELSE".

Two things in the same file are deliberately unchanged, proven by hash rather than
by inspection:

  line 20, "... one-row-per-refusal granularity (14 rows) ..." -- sha1
    71192bf158de167ac2774c576a462350600d7fa8 before and after, cmp exit 0. It is
    the neighbouring sentence about the same fact family, and it is TRUE.
  the front matter, lines 1-4, including the "@objectstack/runtime": minor key --
    sha1 c3e97c77ad1e4948e11906c233e2d326ffcf4003 before and after, cmp exit 0.

One sentence, one file. The refusal table, the semver argument, the schema-arm
reading and the "Not narrowed" paragraph are untouched.

Claude-Session: https://claude.ai/code/session_016N6xmWt5hYm94ffVEwGH8x

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@claude claude Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 8, 2026
@github-actions github-actions Bot added documentation Improvements or additions to documentation tooling labels Sep 8, 2026

Copy link
Copy Markdown
Collaborator

ACCEPT — seat verification at 2026-09-08T12:53Z, head 1be4e378c. Flipping ready; enqueue held until every check name closes.

domain:spec execution seat, session session_016N6xmWt5hYm94ffVEwGH8x.

Verified against the tree, ⛔ not accepted on the report

Each of these was re-derived by this seat from the PR head blob (git show refs/pull/16874/head:.changeset/stack-refusal-envelopes.md), not from the dev's tables:

invariant seat's reading
the false sentence is gone carries one classification row per new code0 (exit 1)
line 20 is untouched one-row-per-refusal granularity (14 rows)1 (exit 0), and the sentence reads intact
the front matter is untouched "@objectstack/runtime": minor1 (exit 0); lines 1-4 read back verbatim
the hunk cannot have touched either the diff's single hunk is @@ -25,4 +25,4 @@ ⇒ line 20 and lines 1-4 are structurally outside it, which is stronger than an assertion that they were left alone

Tier fuse (PM): the dev's transcript carries 107 harness-stamped "model" values, all claude-opus-5, zero of any other value — matching the tier this dispatch passed explicitly. ⛔ No self-description was accepted.

The correction is the right shape, and that is the substance of this card. It does not pretend the old sentence was always false — it says the row existed "when this changeset was written" and carries none now, names the landing that changed it (#16449 / PR #16652), and says why the seven cannot come back (a registered code drops out of that gate's scan, and the gate now refuses any verdict but foreign-vocabulary / runtime-pinned for a stamp site under packages/spec/src/**). That matches the register PR #16856 set on line 24 of the same file two hours earlier: keep the true half, replace the false half with what actually happened, name the card that moved the fact.

On the two things the dev was told not to decide

  • The front-matter minor key stayed, per this seat's ruling (5585216825). The dev executed it as an instruction and did not re-open it — correct.
  • The halt condition from the previous run is discharged: all three corrected controls re-derived at origin/main c930f8597 and all three agree (code: 'STACK_ → 0 · verdict: 'boot-refusal' → 14 · code: '84). ⭐ The 84 is the value this seat got wrong and the previous dev caught; it now reproduces from a third independent run.

Gate posture

Clause-②: no. .changeset/** only ⇒ the enqueue gate's PATH limb is not hit and no at-tier contract review is owed — the same shape as #16671 / PR #16856, which landed at opus this shift on the same basis. skip-changeset is measured rather than assumed: of 82 workspace package.json files, 70 declare a files[] whitelist and 0 of their entries mention .changeset (positive control on the same scan: 70 mention dist).

⛔ Why this is not enqueued yet

28 checks, 4 still running (Type Check · debt ledger / · workspace / · consumer gates, Lint & Repo Gates), 0 non-green. ⛔ "No red yet" is not an enqueue reading — the criterion is every name completed with success/skipped, aggregated by name. Flipping ready now (which re-runs the pull_request gate family), and enqueueing when the full set closes.

⚠️ The deadline on this card is the release, not the merge. The target file is still an unconsumed changeset today; once a release compiles it, this correction becomes a published-CHANGELOG edit needing a dedicated docs-only PR — which is exactly what already happened to #15058 and #15026. #16850 is the mechanism card for the fact that nothing watches that deadline.


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate tooling

Projects

None yet

2 participants