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

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 <[email protected]>
@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

@zhuangjianguo
zhuangjianguo marked this pull request as ready for review September 8, 2026 12:54
@zhuangjianguo
zhuangjianguo added this pull request to the merge queue Sep 8, 2026
Merged via the queue into main with commit a5d4e28 Sep 8, 2026
31 checks passed
@zhuangjianguo
zhuangjianguo deleted the claude/issue-16857-runtime-boot-refusal-row-claim branch September 8, 2026 13:27
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