What
#10894 corrected the nineteen sites inside .github/workflows/lint.yml that stated the #9465@changesets/cli v3 fence as covering root package.json as a file. While measuring that population I swept the rest of the repo. The same over-broad reading also lives in scripts/**, where #10894's remedy does not reach.
The fence's verbatim scope, read off #9465's body today:
… root package.json(the @changesets/cli range and the version script)
Scoping, not illustrative: one dependency range and one script key — not the file, and not a new check:* key.
The sites, measured on origin/main @ 50369dc07
Docblocks stating the file-level claim:
| file:line | as written |
|---|
scripts/check-ci-filter-parity.mjs:118 | "that alias belongs in root package.json, declared territory of the @changesets/cli v3 migration lane (#9465) while it runs" |
scripts/check-doc-frontmatter.mjs:138 | "that alias belongs in root package.json, declared territory of the @changesets/cli v3 migration lane (#9465) while it runs" |
scripts/check-platform-checklist.mjs:109 | "its pnpm alias lives in root package.json, declared territory of the @changesets/cli v3 lane (#9465) while that runs" |
A different over-generalisation of the same fence:
| file:line | as written |
|---|
scripts/check-skills-token-ratchet.mjs:57 | "root dependencies are fenced (#9465)" |
That one generalises from one pinned range to root dependencies as a class. Adding a tokenizer to root dependencies is not fenced by #9465. The step's conclusion survives on its own independent grounds ("Adding one to make a lint gate's numbers prettier is not a trade this gate needs"), so only the parenthetical reason is wrong.
Assertion messages, terser but the same claim:
| file:line |
|---|
scripts/check-aggregator-roster.mjs:583 — `wiring: lint.yml invokes ${self} directly (no root package.json alias -- #9465 fence)` |
scripts/check-ci-filter-parity.mjs:633 — same shape |
scripts/check-doc-frontmatter.mjs:746 — same shape |
Already correct — leave alone
scripts/check-step-collectors.mjs:94 states it narrowly and correctly ("fences that file's @changesets/cli range and its version script, not the file"). That is the #10814 correction, and it is the model.
Why this is worth a card rather than a sed
Same reason as #10894: the reading propagates by copying, measured rather than supposed. A docblock is a higher-leverage copy source than a workflow comment — the next check-*.mjs author copies the neighbouring script's header, which is exactly how three of these came to be identically worded.
The remedy should probably match #10894's: point at the canonical GATE INVOCATION IDIOM note now in lint.yml rather than restate, since restating is the mechanism.
⛔ Boundary, inherited from #10894
This must not rewire any gate into root package.json. The direct node scripts/… form is legitimate and, in three of these files, pinned: check-aggregator-roster.mjs:583, check-ci-filter-parity.mjs:633 and check-doc-frontmatter.mjs:746 each assert in their own self-test that node <self> appears in lint.yml. Moving them to aliases reds all three. Only the stated reason is false.
⚠️ Sequencing
scripts/check-doc-frontmatter.mjs is held by open PR #11898 as of filing. Whoever takes this re-checks claim-holders per file before starting.
Filed unassigned, out of scope for #10894 (which is scoped to lint.yml), by the dev seat implementing it. Observation class: mechanism and measurement, no remedy picked.
Refs: #9465 (the fence) · #10894 (the lint.yml half) · #10814 (where the correct narrow wording came from)
Generated by Claude Code
What
#10894 corrected the nineteen sites inside
.github/workflows/lint.ymlthat stated the #9465@changesets/cliv3 fence as covering rootpackage.jsonas a file. While measuring that population I swept the rest of the repo. The same over-broad reading also lives inscripts/**, where #10894's remedy does not reach.The fence's verbatim scope, read off #9465's body today:
Scoping, not illustrative: one dependency range and one script key — not the file, and not a new
check:*key.The sites, measured on
origin/main@50369dc07Docblocks stating the file-level claim:
scripts/check-ci-filter-parity.mjs:118package.json, declared territory of the @changesets/cli v3 migration lane (#9465) while it runs"scripts/check-doc-frontmatter.mjs:138package.json, declared territory of the @changesets/cli v3 migration lane (#9465) while it runs"scripts/check-platform-checklist.mjs:109pnpmalias lives in root package.json, declared territory of the @changesets/cli v3 lane (#9465) while that runs"A different over-generalisation of the same fence:
scripts/check-skills-token-ratchet.mjs:57That one generalises from one pinned range to root dependencies as a class. Adding a tokenizer to root
dependenciesis not fenced by #9465. The step's conclusion survives on its own independent grounds ("Adding one to make a lint gate's numbers prettier is not a trade this gate needs"), so only the parenthetical reason is wrong.Assertion messages, terser but the same claim:
scripts/check-aggregator-roster.mjs:583—`wiring: lint.yml invokes ${self} directly (no root package.json alias -- #9465 fence)`scripts/check-ci-filter-parity.mjs:633— same shapescripts/check-doc-frontmatter.mjs:746— same shapeAlready correct — leave alone
scripts/check-step-collectors.mjs:94states it narrowly and correctly ("fences that file's@changesets/clirange and itsversionscript, not the file"). That is the #10814 correction, and it is the model.Why this is worth a card rather than a sed
Same reason as #10894: the reading propagates by copying, measured rather than supposed. A docblock is a higher-leverage copy source than a workflow comment — the next
check-*.mjsauthor copies the neighbouring script's header, which is exactly how three of these came to be identically worded.The remedy should probably match #10894's: point at the canonical
GATE INVOCATION IDIOMnote now inlint.ymlrather than restate, since restating is the mechanism.⛔ Boundary, inherited from #10894
This must not rewire any gate into root
package.json. The directnode scripts/…form is legitimate and, in three of these files, pinned:check-aggregator-roster.mjs:583,check-ci-filter-parity.mjs:633andcheck-doc-frontmatter.mjs:746each assert in their own self-test thatnode <self>appears inlint.yml. Moving them to aliases reds all three. Only the stated reason is false.scripts/check-doc-frontmatter.mjsis held by open PR #11898 as of filing. Whoever takes this re-checks claim-holders per file before starting.Filed unassigned, out of scope for #10894 (which is scoped to
lint.yml), by the dev seat implementing it. Observation class: mechanism and measurement, no remedy picked.Refs: #9465 (the fence) · #10894 (the
lint.ymlhalf) · #10814 (where the correct narrow wording came from)Generated by Claude Code