tooling(pm): re-decide the declaration-mirrors row from REFUSE-UNSPELLABLE to DECLARED-NARROWER - #15934
Merged
os-project-manager merged 1 commit intoSep 5, 2026
Conversation
…LABLE to DECLARED-NARROWER The row recorded a refusal ground the tree has withdrawn: it named the EXTENSION filter as the thing no spelling of the idiom describes, which is the collapse retired for this shape, and the gate itself now declares both sides of the mirror beside its constant. Re-decided under the recorded authorisation sentence and no wider one, with every term of the reason re-measured together on one tree and none carried forward from the reading it replaces. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016vtdMao3dQS9EfQfpyWixd
os-project-manager
marked this pull request as ready for review
September 5, 2026 15:22
os-project-manager
enabled auto-merge
September 5, 2026 15:22
os-project-manager
deleted the
claude/issue-15602-declaration-mirrors-row-withdrawn
branch
September 5, 2026 15:52
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 #15602
The row for
check-declaration-mirrorsinscripts/pm/bare-root-worklist.mjsrecordedREFUSE-UNSPELLABLEon a ground the tree has withdrawn. It named the EXTENSION filter as the thing no spelling of the idiom describes; that rested on the collapse #12300 retired for this shape, and the gate had already acted on it — PR #15601 put['scripts/**/*.d.mts', 'scripts/**/*.mjs']besideSCRIPTS_DIRunder theROOT_DIR_WATCH_HINTSidiom. The record therefore asserted that nothing honest was declarable while its own gate declared.The verdict was decided, not inherited
⛔ The card's direction was not taken on trust. All four values were read off this map's own vocabulary against the tree at
e581457b:REFUSE-UNSPELLABLESPELLABLE-UNDECLAREDREFUSE-WIDEDECLARED-NARROWER⛔ The gate is NOT edited: it is correct, and the MAP is what went stale.
Every term re-measured together, at one commit
The file's own rule is that refreshing one term mints a ratio nothing ever measured. All quantities below came from ONE invocation at
e581457b, and the sha is recorded in thewhy:ab5c01379)5315098)e581457b)scripts/scripts/**/*.mjsreachA FIFTH mirror pair has landed since triage. ⛔ None of the three earlier readings is carried forward; the previous
2 of 261is superseded whole. The spread across three trees inside two days is the argument for taking the terms together, not a discrepancy.What the row now records, measured: the walk discovers 5 declaration files by extension and the pair check imports the 5 modules beside them, so the gate opens 10 of the 336 tracked files under the bare root (3.0%). The mirror-side hint reaches 5 and the gate reads all 5 (100% precise); the module-side hint reaches 218 and the gate reads 5 (2.3%).
The 2.3% half, faced rather than assumed
Both the card and triage flagged this as something a fixer must decide head-on. It is recorded, not refused, and the reason is that it is not what the PRECISION pin measures: that pin asks whether the recorded claim and
hintCoversadmit the same files. They do — 0 over-named, 0 missed, 223 of 336 covered — so the union is LIVE, PRECISE, COMPLETE and a real narrowing. The declaration's imprecision against the WALK is the direction thedriver package filesentry already records for its subtree ("it names 30 files the gate neither opens nor stats"), and the gate's own docblock prices it at ~1.6 s of fleet compute per 36 cards and takes the trade deliberately.The recorded set is SET-EQUAL in both directions to the array the gate declares at this root, so no hint is passed over and the row carries no
omits.Verification
The map is shrink-only and did not grow: 46 recorded verdicts before and after. What moved is exactly what should:
node scripts/pm/bare-root-worklist.mjs --self-test— exit 0.Ablation (predicted RED, observed RED). Dropping the
.mjsmember from the recorded spelling, with the mutation proven on disk (anchor grep 1 → 0, blob hash37f80f57→140c1291) and the restore proven byte-identical (git diff HEADempty, hash back to37f80f57):There is no build/
distleg: node executes this source file directly, with no package build and noexportsresolution between the pin and the file under test.Gates. All 30 commands from
dispatch-gates.mjs --changed --commands --repo objectstack-ai/objectstack, re-derived on the final file list, ran green — 17 direct-node, 13pnpm check:*.check-governed-merges.mjs --teston the final list: NOT governed, ordinary queue landing applies.Scope
One file.
skip-changeset: the diff publishes nothing from any released package (AGENTS.md — that label is for exactly that case), and repo tooling underscripts/is the standing example.⛔ Filed rather than fixed here — #15926: the declaration is read back out of a gate's source only for
DECLARED-NARROWERrows andcontradictedfires only on a REACHABLE row, so a REFUSE-* row whose gate declares a genuinely narrower hint is checked by nothing. That is the mechanism that should have caught this row. It is not a pin to bolt on: measured ate581457b, the naive form redscheck-driver-conformance CASE_SETS_DIR packagestoo, and that row is correct — hints are declared per FILE and its sibling constant owns the declaration.🤖 Generated with Claude Code
https://claude.ai/code/session_016vtdMao3dQS9EfQfpyWixd
Generated by Claude Code