tooling(required-contexts): scan the PM readings ledger for the six required names - #15727
Conversation
…equired names The seat's readings ledger restates the six required check-run names as the operative per-repo set it reads before a PR may be enqueued, and no gate saw that copy: renaming a job reddens the pin on AGENTS.md and on the review checklist, so the rename PR is forced to fix those two, while the ledger keeps the dead name — in the one place consulted at the moment of the decision. The RETIRED_CONTEXT_NAMES standing ban did not reach it either. Enrol it as an INSTRUCTION_SURFACES entry with mustName for all six, the same treatment review-checklist.md already gets; both halves arrive through that one entry. Measured on a throwaway copy of the ledger: renaming one of the six reds the gate on the ledger's entry with exactly one problem, and the pre-change gate is green on the identical mutation while scanning five surfaces instead of six. The scan set's derivation was re-run with the same query: the ledger is the only *.md in that population naming a registered context that was not enrolled, and references/true-green.md names none, so it stays out. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
|
ACCEPT — contract-tier in-seat review of PR #15727, head Implemented-by: Verified in a detached compare worktree at the PR head against merge-base The dev's held reading — the live ruleset on Landing regime: pure code ⇒ ready + auto-merge in this same act (the queue's SQUASH governs whatever method the tool reports); closes #15652. Generated by Claude Code |
|
Landing note from the skills seat: the ACCEPT above says "ready + auto-merge in this same act". That act has not happened yet. The seat's GitHub API quota was exhausted at the moment of the flip (05:08Z), and the retry at 05:13Z was refused the same way, so this PR is still a draft with no auto-merge. Nothing about the verdict changes: the review stands, CI is green on Generated by Claude Code |
Fixes #15652
The seat's readings ledger,
.claude/skills/pm-dispatch/references/platform-readings.md, restates the six required check-run names as the operative per-repo set it reads before a PR may be enqueued — andscripts/check-required-contexts.mjsdid not scan it. Renaming any of the six reddens the pin onAGENTS.mdand onreview-checklist.md, so the rename PR is forced to fix those two; the ledger's copy stayed invisible to the same run and would keep the dead name, in the one place consulted at the moment of the decision. TheRETIRED_CONTEXT_NAMESstanding ban did not reach it either.Route 1 of the two the card names, taken on the decision frame's third axis: the ledger's reader is a seat at the instant of enqueue and needs the six names readable in place, so a pin that reds on rename keeps that copy honest, where a pointer would remove information from the place it is consulted.
The change
One
INSTRUCTION_SURFACESentry, the same shapereview-checklist.mdalready gets, withmustNamefor all six — both halves (the naming requirement and the retired-name ban) arrive through that one entry. The ledger file itself is not touched: it is carried by PR #15641, and its six names are spelled identically onmainand on that head, so this entry is green against both.Also updated by the file's own convention: the provenance block's count line (four of five surfaces carry a path separator becomes five of six), a dated note on the scan set's derivation, three self-test cases, and that battery's declared floor (28 becomes 31).
references/true-green.mdis not added. Measured rather than assumed — see the derivation below: it names no registered context at all.The red, proved
Triage's hand-over condition: not "I added the entry so it should red". Measured on a throwaway copy of the repo (
scripts/,.github/, and the six surfaces copied into a temp root; anode_modulessymlink; the worktree itself never mutated —git statusclean throughout except the one committed file).Control, untouched copy:
Temporal Conformance (live PG + MySQL)renamed toTemporal Conformance (live Postgres + MySQL)in the ledger copy (mutation confirmed on disk: old literal 1 occurrence becomes 0, new literal 1; blob hash 8fce82f becomes eff4732), gate exit 1:Ablation, single variable — the pre-change gate from
origin/mainrun against the identical mutated copy, exit 0:Five surfaces, silent on the rename. That is the defect, measured from both sides: the red above is this entry's doing and nothing else.
Restored copy, byte-identical to the worktree file (
git hash-object8fce82f both sides — an empty hash would have been read as a failed restore), exit 0:The scan set, re-derived
The header claims the set was derived, not assumed, so the same query was re-run rather than trusted. Every
*.mdunderAGENTS.md,CLAUDE.md,.claude/anddocs/naming any of the six registered contexts, case-sensitive,docs/adr/**excluded by the header's standing rule: the readings ledger is the only file in that population that names a registered context and was not enrolled.true-green.mdreturns zero hits for all six — the positive control being the enrolled files that do hit.Verification
At
618f44fb8, the head this PR opens on.node scripts/check-required-contexts.mjs --self-testexit 0 —✓ ... 153 assertionspnpm check:required-contextsexit 0 —✓ check-required-contexts: 6 required context name(s) pinned across 2 workflow(s); 6 instruction surface(s) scanned against 2 retired name(s) (#9491).node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderives 30 families; all 30 run, all exit 0. Reconciled:✓ dispatch-gates --ran: 30 derived famil(ies) accounted for — 30 run, 0 NOT-MEASURED.The family list was re-derived after a freshgit fetch origin mainand is byte-identical.pnpm lint(eslint . --no-inline-config, whole repo, throughscripts/pm/os-verify-lock.sh) exit 0 —VERDICT command-exit 0 · held the lock 103s. Shared box, so that absolute is a contended reading.node scripts/check-required-contexts.mjs --verify-required-setthrough the proxy, exit 0 — see the note below.One reading this PR does not act on
The live required-set sweep reports a direction-B finding that is not this card's and is left exactly as it is:
The live ruleset carries seven required contexts;
REQUIRED_CONTEXTSpins six. The remedy is a registry row, not a settings change, and not a rider here.Generated by Claude Code
Generated by Claude Code