tooling(pm): re-measure the ratchet-remedy-authority worklist row, and pin the declaration it describes - #15269
Merged
Conversation
…d pin the declaration it describes The `check-ratchet-remedy-authority SCRIPTS_DIR scripts` row recorded a walk narrower than the gate performs. When that gate's corpus walk widened to a second directory, the row went on stating "no nested script at any depth", its numbers described the one-directory walk, and its recorded spelling named two of the three hints the gate declares. Both terms are re-measured together on one tree (commit a23603e): 202 files admitted (188 top-level, 14 under the pm directory) against 324 tracked under the bare root, and the recorded spelling grows to the three hints the gate spells, set-equal to that walk in both directions. Nothing reddened for that drift, and the reason is now closed rather than noted: every pin in this file asks the TREE, so a gate that WIDENS what it DECLARES moves no answer any of them read. `--self-test` now reads each DECLARED-NARROWER row's gate source through the watch-hint idiom's own parser and holds the recorded spelling set-equal to the array it finds, at that row's bare root, with a deliberate omission named in `omits` and re-measured every run. Nine records are held that way. No other row is re-decided: the full sweep output differs in exactly this row's stated reason, and all 54 verdicts are unchanged. 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 08:14
os-steve
deleted the
claude/issue-15201-worklist-row-remedy-authority
branch
September 4, 2026 09:28
This was referenced Sep 4, 2026
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 #15201
The bare-root worklist row
scripts/check-ratchet-remedy-authority.mjs SCRIPTS_DIR scriptsdescribed a walk narrower than the gate performs. PR #15199 widened that gate to read the
scripts root and its
pmdirectory, one level each, and to declare three hints wherethe row records two. The row went on stating "no nested script at any depth", its numbers
described the one-directory walk, and nothing reddened — because every pin in this file
asks the TREE, and the recorded two-hint spelling was still perfectly true of the tree.
This is the repair, and it is two things rather than one: the row re-measured, and the
direction that was missing pinned for every
DECLARED-NARROWERrecord.1. The row, re-measured — both terms on one tree
Measured at
a23603ea(this branch's base), never one term refreshed apart from the other,which the map's own docblock forbids by name:
corpusFiles()admitspm)pmscripts one level down ARE reached; no other nested directory is walked and no level below either walked one is descendedCorroborated independently by the gate's own verdict line, which counts the same walk:
The verdict is unchanged and no authorisation sentence is claimed: this is not a
re-decision on the shrink-only map. What moved is the gate; the record is what went stale.
The gate itself is not edited here — it is correct. Its own stale-corpus note is a
separate card, #15189, and is untouched.
2. The pin that would have SEEN this
SPELLINGSrecords were pinned LIVE, PRECISE and COMPLETE against the tracked corpus.None of those three answers moves when a gate widens what it DECLARES, so the record could
drift with the whole battery green — which is exactly what happened.
--self-testnow reads eachDECLARED-NARROWERrow's gate source through the watch-hintidiom's own parser (
auditSourcefromscripts/check-watch-hint-literal.mjs, so no roster ofdeclaration names is retyped here) and holds the recorded spelling SET-EQUAL to the array it
finds, at that row's own bare root:
unless the row NAMES it in a new
omitsfield, which is itself re-measured every run: anomission the gate stopped declaring reds as loudly as one it started.
Nine records are held that way. One row carries
omits:build-skill-docs.ts SKILLS_DIR skills,whose
whyalready recorded in prose thatskills/README.mdsits outside any skill directoryand no single spelling of the idiom reaches both. Its verdict, spelling and numbers are
untouched — the field only restates that recorded fact where the pin can read it.
omitsisheld as SEGMENT ARRAYS for the same reason
SPELLINGSis: spelled as a path literal it entersthis file's own hint set, and the self-test that forbids that caught this exact line during
development.
3. Sweep output, diffed against the base
node scripts/pm/bare-root-worklist.mjsona23603eaagainst the same command on this branch:134 lines each, exactly one line differs — the reason text of the row above. All 54
verdicts are identical:
The one changed line, wrapped here for reading:
4. Verification
Self-test verdict line, before (at
a23603ea, with the stale row and the widened gate —this is the drift going undetected):
after (at
1fcb7501):Ablation, from the committed state, restore trap on absolute paths. Two legs, each
proving its mutation reached disk by anchor-line counts and by
git hash-objectagainst theHEAD blob before the run was read. No dist leg: the subject is imported from source by
relative path, so nothing resolves through a package
exportsfield.worklist blob
5cace5acbecomes056e2288. Self-test exits 1 with two failures: thetree-facing COMPLETE pin (misses the 14
pmfiles) and the new declaration pin.scripts/pm/*.mts). Gate blobe08d59a6becomes356da72d. Self-test exits 1 with exactly one failure, the new pin:DRIFT: declared and not recorded [scripts/pm/*.mts], named as omitted [none]. Everytree-facing pin stays green, because that hint reaches no file — which is this card's whole
mechanism, reproduced.
git checkout HEAD -- ...on absolute paths, both blobsbyte-identical to their HEAD values again,
git diff HEADempty, and the post-restoreself-test green.
Gates. The derived family for the changed path was re-derived on this branch rather than
taken from the brief (
node scripts/pm/dispatch-gates.mjs --commands, change set read by thetool itself): 21 commands, all exit 0, including
pnpm check:ratchet-remedy-authority,pnpm check:watch-hint-literal,pnpm check:pm-dispatch-gatesandpnpm check:nul-bytes.Reconciled with
--ran:21 derived famil(ies) accounted for — 21 run, 0 NOT-MEASURED.Whole-repo
pnpm lintthrough the shared verification lock:VERDICT command-exit 0 · held the lock 80s · waited 72s. All of it on1fcb7501, the finalcommit of this branch. Also run, since they read this file or its new import edge:
check-comment-mask-adoption,check-undeclared-dep-imports,check-declaration-mirrors— all 0.No changeset: nothing here is published from any package (
scripts/pm/tooling only), so thePR carries
skip-changeset.🤖 Generated with Claude Code
Generated by Claude Code
Generated by Claude Code