Repository navigation
fix(scripts): the polarity census pins stop asserting what the live .changeset/ holds, so the post-version tree validates (objectui#10010) - #10933
Merged
objectstack-fleet[bot] merged 2 commits intoSep 28, 2026
Conversation
….changeset/` holds, so the post-version tree validates (objectui#10010) `changeset version` consumes every pending entry, so on the post-version tree the scheduled release lane validates -- and on `main` right after a release merges -- the census corpus is empty, the lit control reads 0 and the census exits 2, correctly. Three pins asserted exit 0 against the live corpus, so the lane's "Validate the post-version tree" step went red on them from the first scheduled fire after the census landed. - pin 7's boundary run keeps the live default corpus but asserts only what holds in every release phase: the corpus directory, an exact entry count, status = the controls' verdict, and that only the lit control may void it - the clean-checkout and REPORT pins assert exit 0 on the fixture corpus - a new pin 6 case: an EMPTY corpus exits 2 and the lit control is the one that goes dark (the control keeps its teeth) - the census header documents the empty-corpus outcome; its 0/1/2 exit contract and its control logic are unchanged Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EBx9rvB7dufCz4at53x35U
Contributor
Author
|
Generated by Claude Code |
objectstack-fleet
Bot
deleted the
claude/issue-10010-post-version-census
branch
September 28, 2026 09:46
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.
Fixes #10010
Clause-②: no — root
scripts/and a workflow step only; no published contract, accept set or public surface is touchedWhat was red, and which control, measured
changeset-release.yml's scheduled lane fails «Validate the post-version tree» on three pins inscripts/__tests__/changeset-polarity-census.test.ts— «the default corpus is.changeset/and the script is not inside it», «runs from a clean checkout: no build, no workspace state, plain node» and «the REPORT prints the two named lines, and the merged heading is gone» — eachexpected 2 to be +0. The census header says exit 2 = a control failed. WHICH control was never measured on the card. It is now, on a post-version tree rendered locally the way the render step does it (pnpm changeset:versionin a detached scratch worktree at733fd5a; never committed, never pushed; restored and removed afterwards):733fd5a)corpusLit— present-tense declaration verbcorpusAbsentmemberLit—BaseSchema.typememberAbsentresolutionLitresolutionAbsent⇒ ONLY
corpusLitgoes dark.changeset versionconsumes every pending entry and leaves.changeset/holding its README andconfig.json, so the corpus is empty and the lit control reads 0. The census is RIGHT to exit 2 there: a corpus that holds nothing and a reader that read nothing are the same reading to it. The defect is in the three pins, which asserted exit 0 against the LIVE corpus — a fact about the tree's release phase, not about the instrument.When it started — the boundary, measured
The census and its test were born in
⚠️ NOT explained here: the earlier red stretch (2026-09-12..09-16) predates the census file; not measured.
cec21a21ce(objectui#9727, committed 2026-09-18T01:46:40Z): after the last green scheduled fire (00:20:11Z) and before the first red one (06:12:48Z). The two pin-7 exit-0 assertions are in that birth commit; the REPORT pin arrived later with objectui#9767. History was read on a shallow checkout whose graft is at 2026-05-23, with both legs:git merge-base --is-ancestor fbe1520c13 cec21a21ceanswers 0; the census file is absent at the birth commit's parent (exit 128) whilepackage.jsonis present there (exit 0).The same defect was waiting on
mainThe rendered post-version tree is also what
mainholds right after the Version Packages PR merges, andci.ymlruns this suite there. So the old pins would have gone red onmainafter the next release too, and theentriesScanned > 300floor would have stayed red until 300 new entries accumulated. (Inference from the rendered tree; there has been no release merge since the census landed.) Editing only the workflow step would have left that standing; fixing the pins repairs both.What changed
scripts/__tests__/changeset-polarity-census.test.ts.changeset/…» still runs on the live default corpus, and now asserts only what holds in every release phase: the corpus directory is.changeset/;entriesScannedequals that directory's pending entries EXACTLY (replaces the> 300floor, and catches both a tree-wide scan and an empty reader); the exit status is the controls' verdict; every control that does not read the corpus's content passes; and the run is void only when the lit control reads 0.expected 2 to be +0and nothing about which control.scripts/changeset-polarity-census.mjs: header only — a new section «An EMPTY corpus exits 2, by construction». The control logic and the 0/1/2 exit contract are unchanged; ⛔ an empty corpus is NOT special-cased to exit 0..github/workflows/changeset-release.yml: untouched.Evidence — red before, green after, on the same rendered tree
pnpm test scripts/__tests__/changeset-polarity-census.test.tsgivesTests 3 failed | 68 passed (71)— the three pins above, eachexpected 2 to be +0, the lane's shape exactly.16169cca22:Tests 72 passed (72). The census itself still exits 2 there,corpusLitreading 0.pnpm quick-reference:check && pnpm check:control-bytes && pnpm test scripts/__tests__): exit 0,Test Files 177 passed | 2 skipped (179),Tests 5323 passed | 2 skipped (5325).runControlswas mutated to pass on an empty corpus, throughablation-replace.mjs(anchor hits 1 to 0, blobb66d877fto86b95436): the new empty-corpus pin goes red,1 failed | 71 passed (72), message «an empty corpus must NOT exit 0: expected +0 to be 2». Restored: blob equals HEAD andgit diff HEADis empty. Direction observed: red, as predicted.git status --porcelainprinted 0 lines; the worktree was then removed.Gates (normal tree, at
16169cca22)pnpm test scripts/__tests__/changeset-polarity-census.test.ts—72 passed (72)pnpm test scripts/__tests__— exit 0,Test Files 177 passed | 2 skipped (179),Tests 5323 passed | 2 skipped (5325)pnpm type-check:scripts— exit 0pnpm quick-reference:check— exit 0;pnpm check:control-bytes— exit 0, OK linepnpm check:new-line-citations—VERDICT new-cross-file-line-citations: 0 new citation(s), exit 0node scripts/check-test-path-roots.mjs— exit 0--format jsonreports 2 files, 0 errors, 0 warnings. Population per ESLint's own--print-config: the test file resolves 118 rules, the.mjs0 rules; neither setsparserOptions.projectorprojectService, andeslint.config.jssets neither anywhere ⇒ no type-aware linting ⇒ this diff cannot move a verdict on an untouched file. The repo-widepnpm lintis CI's.node scripts/check-changeset-presence.mjs— «no changeset is owed». ⇒ No changeset entry, per the census header's objectui#9795 rule: a change to this script gets no entry, not even an empty-frontmatter one.check:changeset-claimsandcheck:pending-changeset-literalswere therefore not run (no entry added).node scripts/check-governed-queue-guard.mjs --testover both paths — NOT GOVERNED.Acceptance notes
eslint.config.jsresolves zero rules for this.mjs(read via--print-config). Observation only, not filed; carrier: none.Generated by Claude Code