tooling(pm): re-count the ADR-0087 manifests deferral to six rows across two source files - #15164
Merged
Merged
Conversation
…oss two source files The `why:` on the `scripts/check-adr-0087-registration.mjs PACKAGE_ROOTS packages` row priced its deferral at "nine rows across three gates". That figure counted CI invocation names rather than gate source files, and the tree has not matched it since the derivation grew a second key: #15127 keyed this table on the gate source file and folded the invocation twins away. Measured at the merge base, six rows in the recorded triage carry a manifests spelling — three roots each under `scripts/check-adr-0087-registration.mjs` and `scripts/check-skill-compatibility-version.mjs`. Two source files, not three gates: `check:changeset-gate-self-tests` runs `check-adr-0087-registration.mjs --self-test`, so it never was a third gate. Only prose inside that one `why:` moves. The verdict, the spelling, the row key and both population figures (74 of 5275, 74 of 74) are untouched — the pins re-measure those — and `node scripts/pm/bare-root-worklist.mjs --self-test` prints a byte-identical verdict line before and after the change. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
This was referenced Sep 4, 2026
os-steve
marked this pull request as ready for review
September 4, 2026 04:57
os-steve
enabled auto-merge
September 4, 2026 04:57
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 #15128
One clause of one
why:inscripts/pm/bare-root-worklist.mjsmoves: the recorded deferral on thescripts/check-adr-0087-registration.mjs PACKAGE_ROOTS packagesrow priced itself at a figure the tree stopped matching when the derivation grew a second key. The verdict, the spelling, the row key and both population figures (74 of 5275, 74 of 74) are untouched — the pins re-measure those.1. The measurement
At the merge base
4283b72a1, counting rows of the recordedTRIAGEthat carry a manifests spelling (packages manifests/apps manifests/examples manifests), grouped by gate SOURCE FILE:Six rows across two source files — the card's post-fold reading, confirmed by measurement rather than inherited. The row total, 46, agrees with the
--self-testline's own "46 recorded verdict(s)", which is what makes the instrument checkable.Why the recorded figure said nine across three
The same instrument run against the pre-fold tree (
8f68e508^) reports 15 rows across 3 keys, and the three keys name what the old figure was really counting:So the 2026-08-26 figure counted CI invocation names, three of them at three roots each.
package.json:121settles that it never was a third gate:check:changeset-gate-self-testsruns this very script. PR #15127 keyed the table on the gate source file and folded the invocation twins away, which is what made the two visibly one.2. The clause
Before (verbatim, the quoted target of the card):
After:
The deferral itself is not re-decided: the sense is preserved (N rows across M source files share the population shape, no consumer has asked, so declaring here is an N-edit expansion ahead of demand), now dated and with the provenance of the superseded figure recorded so the next reader does not re-inflate it. Continuation lines stay inside the neighbouring rows' width convention (56–97 columns; neighbours run 95–102).
3. Self-test identical before and after
node scripts/pm/bare-root-worklist.mjs --self-test, exit 0 at both ends, and the two captured outputs are byte-identical (md5 94ed35d51da9eb1ed13ba126439e7f10for each;cmp -sreports no difference):The row count, the verdict count and the fold figures do not move, as the card required — only prose inside one
why:does.4. Gates
All runs below are on the pushed head
637ef250(git rev-parse --short HEADfrom the verification run; no commit landed after it). Every exit code was captured before any pipe; each line is the gate's own verdict.The family was re-derived from the worktree after the commit with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands(no paths passed). Its provenance line readsgate list derived from the tree of 'objectstack-ai/objectstack' at commit 637ef250, change set1 path(s) vs merge base 4283b72a1. The derived list is identical to the dispatch list — 20 commands, nothing added, nothing dropped.node scripts/check-ci-filter-parity.mjscoreorcrosspkg, everycrosspkgentry still covers one, and thetestjob'sif:still names both filters.node scripts/check-closing-keyword-parity.mjsnode scripts/check-closing-keyword-parity.mjs --self-testnode scripts/check-comment-mask-corpus.mjsnode scripts/check-self-test-wired.mjs--self-testhas that self-test run by CI.node scripts/check-self-test-wired.mjs --self-testnode scripts/check-whole-set-label-write.mjsuses:pin(s) over 18 distinct action(s) judged · 0 allowlist entr(ies)node scripts/check-whole-set-label-write.mjs --self-testnode scripts/pm/bare-root-worklist.mjs --self-testpnpm check:agent-test-spelling--token(s) · 1406 launcher-rooted run(s) · 9 separator(s) JUDGED · 5 vitest-backed script name(s) derived from 81 manifest(s)pnpm check:bash32-floorpnpm check:cli-command-idspnpm check:cross-package-test-inputspnpm check:entry-guardpnpm check:nul-bytespnpm check:parse-guardpnpm check:pm-dispatch-gatespnpm check:pnpm-filter-targets--filteroccurrence(s) across 33 file(s) resolve against 79 workspace package(s); 39 not judged (2 foreign, 17 interpolated, 20 path); 50 more in comments or step labels and 59 in this rule's own files, counted and not judged.pnpm check:refd-timer-probepnpm check:watch-hint-literalRepo-wide ESLint
Run in full, not narrowed, through the shared verify lock:
Roster gates run beyond the derived list
The derivation scores artifact-roster families
silentfor every card and warns that where the roster sits under a directory one of your paths is in, "the silence is not evidence in EITHER direction". My path isscripts/pm/, so those were run rather than read as cleared:pnpm check:pm-label-desc-cappnpm check:pm-governed-prosepnpm check:pm-skill-ratchetnode scripts/check-published-list-mirrors.mjsnode scripts/check-published-list-mirrors.mjs --self-test5. Notes for review
scripts/pm/**publishes nothing from any package, soskip-changesetis applied on this PR rather than a.changeset/*.mdfile being written.why:, 8 insertions and 3 deletions.scripts/pm/dispatch-gates.mjsis untouched — parallel flight [finding] dispatch-gates --ran has an explained bucket for CI-measured and pending families but not for the value-bearing class, so a recorded one reads asextra#15115 owns that file and the two diffs are disjoint.scripts/check-i18n-coverage.mjs PACKAGES_DIR packagescarries its own, unrelated "three gates reach this same population" sentence at line 745; it is about the sharedfindExtractConfigswalk, is not this card's clause, and was not touched.git rev-parse --is-shallow-repositoryreports true). The pre-fold comparison reaches8f68e508^, which is present, so the provenance above is read from real objects rather than inferred.grep -naPover the edited file for the ASCII control range returns nothing, beyondcheck:nul-bytesbeing green.Generated by Claude Code