Skip to content

docs(scripts): point five gate scripts at lint.yml's idiom note instead of restating the #9465 fence - #12164

Merged
yinlianghui merged 1 commit into
mainfrom
claude/issue-11904-9465-fence-scope-in-scripts
Aug 25, 2026
Merged

docs(scripts): point five gate scripts at lint.yml's idiom note instead of restating the #9465 fence#12164
yinlianghui merged 1 commit into
mainfrom
claude/issue-11904-9465-fence-scope-in-scripts

Conversation

@yinlianghui

@yinlianghuiyinlianghui commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator

Fixes#11904

Seven sites in scripts/** stated the @changesets/cli v3 lane's fence as covering root package.json as a file — or, in the ratchet, root dependencies as a class. The lane's own body scopes it to one dependency range and one script key. #10894 corrected the same reading at nineteen sites inside .github/workflows/lint.yml and put the reasons in one place, the GATE INVOCATION IDIOM note. This is the half of that repair lint.yml could not reach.

Every edit points at that note rather than restating the scope. The card's own diagnosis is that this reading propagates by copying — three of these docblocks were identically worded because their authors copied a neighbour's header — so a seventh careful restatement would be a seventh copy source.

Premise re-verified before writing anything

assumptionverdict
#9465's scope wording is still root package.json (the @changesets/cli range and the version script)holds — read off the issue body today, unchanged
#9465 is still open, so "while it runs" hedges are re-scoped rather than removedholds — open, pm:epic, 4/5 sub-issues complete
the seven sites are the whole scripts/** populationholds, and widened — see the uncited sweep below
the three wiring assertions can be reworded without breaking their pinsholds — same assertion counts before and after (39 / 77 / 45)
no other branch claims these five filesholds — 1047 remote heads scanned; the five ratchet/fence-named branches touch none of them. PR #11898 (which held check-doc-frontmatter.mjs at filing) merged as da2353495

The uncited sweep the card asked for. The measurement behind this card used a bare 9465 grep, which finds the citation but not a site making the claim without one. Sweeping for the claim (root package.json, declared territory, off limits, root dependencies, fenced, @changesets/cli across scripts/**) turns up exactly one uncited site, scripts/pm/release-rehearsal-clone.mjs:87 — and it is correct: it names the version script as declared territory, which is inside the fence's real scope. Uncited-and-wrong population: zero. The seven remain the whole set.

Per-site before → after

sitebeforeafter
check-ci-filter-parity.mjs docblock"that alias belongs in root package.json, declared territory of the @changesets/cli v3 migration lane (#9465) while it runs"points at the GATE INVOCATION IDIOM note; denies the off-limits reading without restating the scope
check-doc-frontmatter.mjs docblocksame sentence, re-wrappedsame pointer
check-platform-checklist.mjs comment"its pnpm alias lives in root package.json, declared territory of the @changesets/cli v3 lane (#9465) while that runs"the real reason kept (not CI-wired by maintainer decision), plus the observation that check:platform-checklistis already a key in root package.json
check-skills-token-ratchet.mjs"…in any manifest), and root dependencies are fenced (#9465)"parenthetical reason dropped; the step's decision and its conclusion are untouched, now stated as refused on its own merit
check-aggregator-roster.mjs:583 · check-ci-filter-parity.mjs:633 · check-doc-frontmatter.mjs:1223 assertion messages"(no root package.json alias -- #9465 fence)""(lint.yml's GATE INVOCATION IDIOM note, not a package.json fence)"

scripts/check-step-collectors.mjs is deliberately untouched — it already states the scope narrowly and is the model this PR copied the shape of.

What this PR does not do

No gate is rewired. The three self-test wiring predicates are byte-identical — each still an includes test for the literal string "node " followed by the script's own repo path, read out of lint.yml — and only the second argument, the failure message, moved. The direct node scripts/… invocation stays; moving any of these to a root alias would redden all three, which is the trap this card carries. .github/workflows/lint.yml was read, never edited.

Verification, at the final commit 84f6eb5b0

Gate union derived in-worktree with node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack (change set read from git by the script itself: the same five paths). All ten derived families, both legs where a script has two, plus check-nul-bytes, run at 84f6eb5b015/15 exit 0:

pnpm check:agent-test-spelling exit=0
pnpm check:cross-package-test-inputs exit=0
pnpm check:entry-guard exit=0
pnpm check:parse-guard exit=0
pnpm check:pnpm-filter-targets exit=0
node scripts/check-aggregator-roster.mjs exit=0
node scripts/check-aggregator-roster.mjs --self-test exit=0 45 assertions
node scripts/check-ci-filter-parity.mjs exit=0
node scripts/check-ci-filter-parity.mjs --self-test exit=0 39 assertions
node scripts/check-cross-package-test-inputs.mjs exit=0
node scripts/check-doc-frontmatter.mjs exit=0
node scripts/check-doc-frontmatter.mjs --self-test exit=0 77 assertions
node scripts/check-skills-token-ratchet.mjs exit=0
node scripts/check-skills-token-ratchet.mjs --self-test exit=0 35 cases
node scripts/check-nul-bytes.mjs exit=0

check-platform-checklist.mjs is not CI-wired by maintainer decision; run by hand, exit 0 before and after, its inline battery reporting the same 22 + 34 + 19 self-check assertions. check-step-collectors.mjs --self-test also green before and after (120 assertions), as the untouched control.

Lint, narrowed and declared. Repo-wide pnpm lint is CI's run. Locally this was narrowed to the five edited files: eslint --no-inline-config --format json reported 5 files linted (eslint's own config resolved all five — none reported ignored), 0 errors, 0 warnings, exit 0. The narrowing excludes nothing: this repo runs one eslint.config.mjs which never enables type-aware linting (no parserOptions.project, no typed @typescript-eslint rules for any file — stated and measured with a positive control at eslint.config.mjs:327), so a comment-and-message-only diff in five scripts/*.mjs files cannot move a verdict on any file it does not touch.

Changeset

None, and skip-changeset applied: the diff is comments and assertion-message strings under scripts/, with no published package source change and nothing user-visible to release.

Refs: #9465 (the fence — still open) · #10894 (the lint.yml half, already closed; not addressed here) · #10814 (where the correct narrow wording came from)


Generated by Claude Code

…ad of restating the #9465 fence
Seven sites in `scripts/**` stated the @changesets/cli v3 lane's fence as
covering root `package.json` as a FILE (or, in the ratchet, root dependencies
as a CLASS). The lane's own body scopes it to one dependency range and one
script key, so those readings are false — #10894 corrected the same reading at
nineteen sites inside `.github/workflows/lint.yml` and put the reasons in one
place, the `GATE INVOCATION IDIOM` note. This is the half of that repair that
`lint.yml` could not reach.
Each site now points at that note rather than restating the scope, because
restating it is the propagation mechanism the card measured: three of these
docblocks were identically worded because their authors copied a neighbour's
header, and a seventh careful restatement would be a seventh copy source.
No wiring changes. The three self-test wiring assertions keep their predicate
byte-identical (`lint.includes('node <self>\n')`); only the message string
moved, and all three self-tests report the same assertion counts before and
after (39 / 77 / 45).
`scripts/check-step-collectors.mjs` is deliberately untouched — it already
states the scope narrowly and is the model.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UjM2ia8Av1v5NqfqQEQmC6
@yinlianghuiClaude

Copy link
Copy Markdown
CollaboratorAuthor

Dequeued — base-branch failure, not this PR's. Nothing pushed here.

CI_FAILURE at 12:28Z. Cause is main: packages/client's check:exported-any-returns fails on a stale ObjectStackClient.packages.update ledger row that PR #12062 (22c42c9b21) closed the gap for but never deleted. Verified on origin/main — the row is still at packages/client/exported-any-returns.json:17, and #12062's diff is three files with the ledger not among them. Lint & Type Check was already observed red on this PR's queue branch before the dequeue.

This diff is comments and assertion-message strings in five scripts/*.mjs files. It contains no TypeScript source, nothing under packages/client, and no execution path that could change what an SDK method's return type resolves to. Its own head was verified green across all 35 jobs before queueing.

⛔ Already filed by other seats — #12180 (priority:p0) and #12184, with repairs open as #12186 and #12192. packages/client is domain:cli's surface; I filed no card and dispatched no dev. Full diagnosis on #12146; race warning between the two competing repairs on #12186.

Waits for main to recover, then re-queues unchanged.


Generated by Claude Code

@yinlianghui
yinlianghui added this pull request to the merge queueAug 25, 2026
Merged via the queue into main with commit 59ce792Aug 25, 2026
37 checks passed
@yinlianghui
yinlianghui deleted the claude/issue-11904-9465-fence-scope-in-scripts branch August 25, 2026 14:12
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/sskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[finding] the over-broad #9465 fence reading escaped lint.yml — six scripts/** docblocks and assertion messages carry it

2 participants

@yinlianghui@claude