Repository navigation
test(scripts): stop pinning a pending changeset filename in the two gate suites - #9582
Merged
os-try-charles merged 1 commit intoSep 16, 2026
Merged
Conversation
…ate suites `scripts/markdown-test-inputs.mjs` resolves markdown path literals out of every test's source and offers only the ones that EXIST in the tree. Two suites named a PENDING changeset by filename, so each became a ledger `notRead` entry — and `pnpm changeset:version` deletes exactly those files. On the post-version tree the scanner stopped offering them, the entries turned into `stale-not-read` findings, and `Validate the post-version tree` went red on every scheduled release run. Both suites now name a file of their own instead. `check-changeset-overwrite` hoists its peer declaration into `PEER_CHANGESET`, which the fixture repository writes itself; `check-installed-spec-pin-claims` hands `isScanned` a synthetic name (that exclusion is by path prefix, so the basename carries no meaning). The two ledger entries that described the old literals go with them. Measured both directions on a tree with those two changesets consumed, which is what the version step does to them: before, the suite exits 1 with two `stale-not-read` findings, matching the release lane's annotation verbatim; after, it exits 0. Green on the tree as it stands as well. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015h79niBMyoB1xcaQje3uiz
os-try-charles
marked this pull request as ready for review
September 16, 2026 02:02
This was referenced Sep 16, 2026
os-try-charles
deleted the
claude/issue-9472-changeset-tests-synthetic-fixture
branch
September 16, 2026 02:22
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 #9472 — the Q2-A half only.
⛔ Deliberately not a closing keyword, and that is a declared deviation from my dispatch (which asked for one). The director's ruling (comment
5682619925) states this card's closing condition as three terms: this lane's repair, objectui#9569, and the scheduledChangeset Releaselane reading green on a run after both. Merging this pull request satisfies exactly one of the three, so a closing keyword would shut the card before the lane reading that the ruling makes the point of it. The half left open is the lane reading. objectui#9569 is verified landed — merged2026-09-16T00:55:43Zasf7fcc2cdb, which is this branch's base — and at the time of writing no scheduled run has fired since.The defect, in one sentence
scripts/markdown-test-inputs.mjsresolves markdown path literals out of every test's source and offers only the ones that exist in the tree; two suites named a pending changeset by filename, andpnpm changeset:versiondeletes exactly those files.So on the post-version tree the scanner stopped offering them, the ledger entries that declared them turned into
stale-not-readfindings, andValidate the post-version treewent red.check-changeset-overwrite.test.ts.changeset/olive-donkeys-smile.mdcheck-installed-spec-pin-claims.test.ts.changeset/8897-installed-spec-pin-claims.mdWhat changed
check-changeset-overwrite.test.tshoists its peer release declaration into aPEER_CHANGESETconstant. The fixture repository writes that file itself, as it always did; only the name is now the test's own. Thefixture-prefix belongs to neither namespace a committed name can come from —pnpm changesetgeneratesadjective-animal-verb, and this repository commits an issue-number-and-slug name — so it cannot become a pending declaration. The generated-name tail is kept so the fixture still wears the shape the objectui#6336 hazard wears.check-installed-spec-pin-claims.test.tshandsisScanneda synthetic name. That exclusion is by path prefix (.changeset/), so the basename carried no meaning in the assertion to begin with.scripts/markdown-test-inputs.mjsdrops the two ledgernotReadentries that described the old literals. This is a surface addition over my claim comment's declared file set, and it is not optional: leave those entries and the scanner reds on the tree as it stands, because the literals they describe are gone.Both directions, measured
The version step's effect on these two files is that it consumes them, so the probe consumes them. Every leg proved its mutation landed on disk (both paths absent) and proved its restore by
git hash-objectequality against theHEADblob, never by an exit code.vitest run scripts/__tests__/markdown-test-inputs.test.tsAssertionError: expected [ …(2) ] to deeply equal [], twostale-not-readfindings, matching the lane's annotationvitest run scripts/__tests__— the validator's own commandThe defect leg is what makes the last row mean something: the same command on the same simulated tree fails before the change and passes after it.
⛔ Nothing was widened
declaredEntries()— the answerci.yml's fast path consumes, and the--auditcensus — reads only each ledger verdict'sreadsarray. This change touches onlynotReadarrays, so that census cannot have moved by construction, and the scanner's own population is ledger-independent. On this branch:auditTreefindings[],missingDocuments()[], and both suites are still candidates the scanner sees (via.changeset/README.mdandCHANGELOG.mdrespectively), so neither becomes astale-test. The gate's coordinate is untouched, per the constraint carried from objectui#9140.Gates
Every exit code landed to disk before it was read, never through a pipe.
node scripts/check-changeset-presence.mjspnpm check:changeset-claimspnpm check:installed-pin-claimspnpm check:control-bytespnpm check:new-line-citationspnpm check:test-path-rootspnpm check:comment-mask-corpuspnpm check:unreferenced-sourcespnpm type-check:scriptspnpm lint:rootpnpm exec vitest run scripts/__tests__lint:rootis the lint lane that reachesscripts/**, and it ran over its whole population rather than a narrowed one: 364 files, the count read from eslint's own--format jsonoutput, 0 errors. The package lanes ofturbo run lintare left to CI and this diff touches no file underpackages/,apps/orexamples/.⛔ No
skip-changesetlabel, although my dispatch asked for one. In this repository that label is a phantom:scripts/__tests__/ci-cd-pipeline-doc.test.tspins that no workflow or gate under.github/orscripts/may mention it, and the changeset gate's own verdict line above is the authority that says nothing is owed here.Acceptance notes
Observations found alongside this work, not repaired here:
check-changeset-overwrite.test.tsstill writes two other fixture changesets,.changeset/plum-pandas-wave.mdand.changeset/6336-new-work.md. Neither is a pending declaration today, so neither is this defect — but both carry the same latent shape, and that is precisely what the follow-up gate card (C, filed from this round per the ruling) exists to close once and for all rather than one filename at a time. Carrier: card C..changeset/olive-donkeys-smile.mdis itself pending under the generatedadjective-animal-verbname that.changeset/README.mdinstructs authors to rename before committing. Noted, not filed — it is a queue-hygiene observation about one file, and nothing here depends on it. Carrier: whoever drains the release queue.🤖 Generated with Claude Code
https://claude.ai/code/session_015h79niBMyoB1xcaQje3uiz
Generated by Claude Code