Uh oh!
There was an error while loading. Please reload this page.
fix(pm-scripts): true-green ratchet row, shared repo resolver in ci-failure, measured worklist verdict - #12096
Merged
Merged
Conversation
…in ci-failure, measured worklist verdict Three bounded scripts/pm fixes, one per card. check-skill-line-ratchet.mjs: add the missing CEILINGS row for .claude/skills/pm-dispatch/references/true-green.md at its landed count of 34, read from the ratchet's own run, headroom 0, same convention as every sibling references row. The adding PR could not carry it — its dispatch declared a closed file surface this script sat outside. ci-failure.mjs: import resolveSweepRepo from check-half-states.mjs and drop the hardcoded 'objectstack-ai/objectstack' default, so a verbatim copy in a sibling repo reads its own board via GITHUB_REPOSITORY instead of reporting confidently about objectstack's CI. Mirrors the sweeper's malformed-value refusal at the live entry point; the two offline branches stay exempt. bare-root-worklist.mjs: rewrite the check-declaration-mirrors row's `why` to its measured terms — a recursive walk admitted by extension, 2 of 261 (0.77%), not the copied "same top-level-only shape, 115 of 226". Re-derived the sibling percentages from each gate's own exported walk in the same pass: ratchet-remedy-authority 115/226 -> 144/261, runner-env-posture packages 1757/5049 -> 1794/5185 (2658 -> 2746 skipped tests) and examples 150/240 -> 150/241; skills-token-ratchet re-measured unchanged at 11 of 50. Docblock now records which rows carry a re-derived reading and warns against refreshing a denominator alone. Closes#11310, closes#11296, closes#11277 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RMTpSRF5CjMmQBFfPtPCwJ
hotlong
marked this pull request as ready for review
August 25, 2026 09:17
Uh oh!
There was an error while loading. Please reload this page.
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 freeto 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.
Closes#11310, closes#11296, closes#11277
Three bounded
scripts/pm/fixes, folded into one PR because they share a surface and a gate family. Non-governed: no file in this diff is on the Prime Directive #14 register. No changeset —scripts/pm/is PM-loop tooling and publishes nothing (skip-changeset).Gate union re-run after the final commit, at
58d24e3c8.Per item
check-skill-line-ratchet.mjs:CEILINGSrow forreferences/true-green.md. Set at 34, the landed count read from the ratchet's own run (notwc): the row was first inserted at a deliberately low ceiling so the gate itself printed the measurement,true-green.md is 34 lines; the ratchet ceiling is 1, and 34 is that number. Headroom 0, same convention as every sibling references row, with the provenance comment the map's entries carry. The file also passes the 120-byte max-line rule unchanged — the run reports no length offender for it.ci-failure.mjscarries the same hardcoded repo default the sweeper just shed — a copy in a sibling repo would report on objectstack's CI and read as correct #11296 —ci-failure.mjs: importresolveSweepRepo, drop the hardcoded default. The seam already existed (five imports now cross it).PM_SWEEP_REPOthenGITHUB_REPOSITORYthen the literal default, so a verbatim copy in a sibling repo reads its own board instead of reporting confidently about objectstack's CI. The sweeper's malformed-value refusal is mirrored at the live entry point only —--self-testand--helpstay exempt by construction, since they open no socket and must run in any container.check-declaration-mirrors.mjsstates a measurement that is wrong in both terms (recursive.d.mtswalk, 2 of 236 — not "top-level-only, 115 of 226") #11277 —bare-root-worklist.mjs: thecheck-declaration-mirrorswhy, rewritten to measured terms, plus the sibling re-derivation. Details below.#11296 landed-proof
The card names its own re-check grep. Before, one hit; after, none:
The new refusal was exercised rather than assumed — it exits before any request, so this run is offline:
#11277 re-derivation — every number, and where it came from
The card's row was wrong in both terms. Measured today: the walk is recursive (
mirrorFiles()descends, and its docblock says so) and the filter is the.d.mtsextension, admitting 2 files, not 115. The rewrittenwhyalso re-files the row into the right refusal class — the extension-filter class shared withcheck:driver-conformance CASE_SETS_DIRandcheck:skills-token-ratchet SKILLS_DIR, not the "no non-recursive spelling" class of the row above it that its text was copied from. That distinction is load-bearing: lifting the row-above limit would leave this row exactly as refused.Per the card's rider, the siblings were re-derived in the same pass. Numerators come from each gate's own exported walk, denominators from the worklist's own
trackedFiles()helper — never from a hand-reproduced filter, which would be the estimate the file's docblock refuses.scripts/check-declaration-mirrors.mjs SCRIPTS_DIR scriptsmirrorFiles()check:ratchet-remedy-authority SCRIPTS_DIR scriptscorpusFiles()check:runner-env-posture SCANNED_ROOTS packagescollectFiles()check:runner-env-posture SCANNED_ROOTS examplescollectFiles()check:runner-env-posture SCANNED_ROOTS appscollectFiles()scripts/check-skills-token-ratchet.mjs SKILLS_DIR skillsdiscoverSkillFiles()Two collateral figures inside the
runner-env-posturepackages row were re-derived with that gate's own predicates: the tests it deliberately skips,isTestFileadmitting 2746 (recorded 2658), andisProductSourceadmitting 1794, which reconciles with itscollectFiles()share.Today's denominators, from
trackedFiles(): packages 5185, examples 241, scripts 261, skills 50, apps 35.What was deliberately NOT rewritten, and why. The remaining rows' gates export no walk to drive. Reproducing those filters by hand would be an estimate, and pairing today's denominator with an older numerator would mint a ratio nothing ever measured — the same defect in fresher digits. So those rows keep their original readings, and the docblock now says which rows carry a re-derived measurement, warns against refreshing a denominator alone, and records why
--self-testcannot catch this class (it audits keys and verdicts, never what awhysays — correct, since a prose assertion cannot be mechanised).The verdicts themselves are untouched. Every row stays
REFUSE-UNSPELLABLE; more strongly correct at 0.77% than at 51%.Checks run — verdict lines quoted, exit codes captured before any pipe
Each touched script's own
--self-test, plus the family derived bynode scripts/pm/dispatch-gates.mjswith no paths (the script takes its own change set from the merge base; 10 families matched). All at58d24e3c8, exit 0:Also green at that head:
check:agent-test-spelling,check:entry-guard,check:parse-guard,check:nul-bytes,check:cross-package-test-inputs,check:pnpm-filter-targets— each run asnode scripts/...with its status captured before any pipe.check-ci-filter-parityfirst exited 1 withPREREQUISITE NOT MET — the dependency yaml is not installed, which measures nothing; it is green above afterpnpm install --frozen-lockfile(run throughscripts/pm/os-verify-lock.sh,VERDICT command-exit 0 · held the lock 5s · waited 0s).Control-character self-scan over the three touched files: clean.
Out of scope, filed not fixed
references/compile-surfaces.mdis the last remaining pm-dispatch references file with noCEILINGSrow — same class as #11310, found by enumerating the directory against the map. Dedup-searched; nothing open covers it. Filed unassigned rather than folded in: the dispatch declared a one-row scope, and the precedent in this map is that a missing row is triaged, not added in passing.Generated by Claude Code