docs(ci): record the cited-example discipline the mention-shape rationales rely on - #11444
Merged
Merged
Conversation
…nales rely on The "named in a comment rather than read" rationales in this table all reach for `check-nul-bytes.mjs`, and that is load-bearing rather than habit: no test has a reason to READ a gate script, so the claim stays true of it for as long as the sentence exists. The one clause that reached for a different example is the one that rotted -- `sync-template-versions.mjs` was cited that way until #9763 taught the collector to see the split-segment read template-version-stamps.test.ts had been making all along, at which point every sentence naming it went false at once, in copies that had to be retired one at a time. Records the discipline in the table's own JSDoc, next to the sites it governs, and applies it to the one live site that still cited status-changeable examples: @objectstack/plugin-auth cited `serve.ts` and `realtime-protocol.mdx`, both of which are declared mention-only in this same file and can therefore move exactly as sync-template-versions.mjs did. Re-pointed at the invariant example, matching the form the @objectstack/dogfood entry already uses verbatim. Comment text only; no behaviour changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015ahemw8RcTgqtxrj15PEZx
os-steve
marked this pull request as ready for review
August 23, 2026 19:54
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #10019 — finding 2 only. Finding 1 is answered with a measurement and a
recommendation not to build, reported on the card; nothing here closes it.
Finding 1 — premise reconstructed, mechanism CONFIRMED, tool DECLINED
PR #9826's merge geometry, reconstructed (merge
1e60ca74, parentsc74b2b9aa/56656aa1aa, unique merge base9ff11921a, replayed withgit merge-file):create-objectstackrationale + globs@objectstack/specserve.tsglob + 11-line rationale, line 141turbo.json(changed by BOTH sides)Exactly one marked region in the file. The spec clause sat 234 lines
outside it, and the resolver's edits fall entirely inside lines 372–424 —
the same citation, corrected in the marked copy and untouched in the unmarked
one. The card's falsifier ("if the spec copy was inside a marked region") is
refuted.
Two corrections to the card, both measured:
The "fatal" instance is misattributed.
censusappears 0 times inall four merge stages of
check-cross-package-test-inputs.mjs, and all fourpass
node --check. That defect belongs to PR feat(gate): enumerate check:engine-double-contract's pinned population so a lost pin names itself #9712 and a different file(
check-engine-double-contract.mjs). fix(ci): reconstruct the paths cross-package tests really read, instead of trusting quoted prose #9826's resolver swept for it by nameand reported
duplicate top-level bindings: (none). So the card's "twoinstances in one file, one fatal" is one cosmetic instance plus
turbo.json.The unmarked region DID enter the resolver's view. They tabulated all
three regions with a
marker?column, rannode --check, swept duplicatebindings, diffed
turbo.jsonagainst both parents by key, and filed thestale clause as check-cross-package-test-inputs' @objectstack/spec entry cites
sync-template-versions.mjsas "named in a comment rather than read" — the same clause #9651 already retired, reintroduced in a second entry #9977 deliberately under the PM's ruling not to fixinherited text. The clause survived a policy decision, not a detection
failure.
⇒ A
scripts/pm/helper emitting the unmarked-region list would have reproducedthe table the resolver already wrote by hand, and changed nothing. With
node --checkcovering the fatal half for free, the residual value is over acosmetic half that was already detected. Recommending the card be closed
without building it.
Finding 2 — the specific defect is already discharged; the discipline is not
The card's stale clause was fixed by PR #10018: site
:236no longer citessync-template-versions.mjs. Re-derived population onmain(the card'sL141/238/327/393all moved; the file grew 1398 → 2581 lines):@objectstack/speccheck-nul-bytes.mjs/ realtime page@objectstack/cli@objectstack/clicheck-nul-bytes.mjs@objectstack/clicheck-nul-bytes.mjs@objectstack/plugin-authserve.ts+realtime-protocol.mdx@objectstack/dogfoodcheck-nul-bytes.mjscreate-objectstackcheck-nul-bytes.mjsThe card's thesis reproduces exactly — and recurs: five durable sites cite
check-nul-bytes.mjs; the one site reaching elsewhere is the exposed one. Site549 is a new instance that post-dates the card. Both paths it cites are
declared mention-only in this same file, so both can move exactly as
sync-template-versions.mjsdid. Co-location is demonstrably not protection —the card's original two copies were also in this one file.
This PR records the discipline in the table's own JSDoc and re-points site 549
at the invariant example, matching the
@objectstack/dogfoodform verbatim.Per the card, no gate — "structurally unable to change status" is a
judgement.
The card's counter-example claim was checked:
template-version-stamps.test.ts:47still reads
path.join(repoRoot, 'scripts', 'sync-template-versions.mjs')verbatim, and the file loads it at runtime. (
:97has drifted into a doccomment — itself another cross-reference rotting.)
Verification — union re-run on
079b17edEvery exit code captured before any pipe (
cmd > file 2>&1; ex=$?). Familiesderived with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstackagainst the real change set, not recalled.
Narrowing declared, and measured rather than asserted:
check-ci-filter-paritycould not run — it imports
yamland this container has nonode_modulesanywhere. It reads the exported
CROSS_PACKAGE_TEST_INPUTS, so I proved itsinput is untouched instead: the table imported from both revisions is
byte-identical (
JSON.stringify4856 bytes both ways, deep-equal; 14packages, 89 globs), and all 23 changed lines are comment lines with zero
non-comment changes. Its verdict cannot move. CI runs it regardless.
No changeset: a CI gate script's comments publish nothing.
Generated by Claude Code
Generated by Claude Code