tooling(pm): pin the tenth DECLARED-NARROWER worklist row to its gate's declaration, and require a spelling on that verdict - #15314
Merged
os-steve merged 2 commits intoSep 4, 2026
Conversation
…e that verdict require one The declaration pin holds a DECLARED-NARROWER record SET-EQUAL to its gate's own declared hint array, read from the gate source. It reached nine of the ten such rows: `check-driver-conformance DRIVERS_DIR packages` carried no `spelling`, so there was no recorded set to compare and the pin skipped it by its own scoping rule -- while that gate does declare a hint at that root. The row named the subtree in prose, and nothing held the prose to the array. Both terms are re-measured together on one tree (commit 2200f8e, tree b8ebad2), against the gate's own walk driven under an fs recorder rather than reproduced by hand: 344 of 379 tracked files under the declared subtree are opened, five manifests are statted, and the declaration errs WIDE by the 30 it names and the gate never touches. The direction is recorded in the row. The floor that stops the class growing back: the requirement to carry a spelling now extends from SPELLABLE-UNDECLARED to DECLARED-NARROWER -- a verdict whose whole content is a claim about a declaration may not decline to record the set that claim is about. The self-test asserts it on the live map and on fixture records, so the rule is proved able to fail. The gate is not edited: it is correct, and the map recorded less than it judged. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019RfFHiRCSs3JXLK4cwcfox
A bare every() verdict told the next author that some record is unspelled and not which one. The failure text now names the rows and states the remedy in the map's own terms: record the population and point the row at it, or the verdict is one of the two refusals. 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 10:51
os-steve
enabled auto-merge
September 4, 2026 10:51
os-steve
deleted the
claude/issue-15270-worklist-driver-conformance-spelling
branch
September 4, 2026 11:12
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 #15270
The declaration pin landed in #15201 holds every
DECLARED-NARROWERrecord SET-EQUAL,in both directions, to its gate's own declared hint array read out of the gate source.
It reached nine of the ten such rows. The tenth —
scripts/check-driver-conformance.mjs DRIVERS_DIR packages— carried nospelling,so there was no recorded set to compare and the pin skipped it by its own scoping
rule, while that gate does declare a hint at that root. The row named the subtree in
prose, and nothing held the prose to the array.
What changed — one file,
scripts/pm/bare-root-worklist.mjsSPELLINGSentry (driver package files) for the hint the gate declares — thewhole drivers subtree, held as segments and joined at runtime — with an independent
holdsa reader can check by eye, and the row pointed at it. The pin now holds therecord LIVE, PRECISE, COMPLETE, NARROWING against the tracked corpus and SET-EQUAL
against the declaration. No
omits: the gate declares exactly one hint at this root.whyis re-measured — both terms together on one tree, neverrefreshed apart, with the base commit and tree in the text — and it now records the
DIRECTION the declaration errs in, which the ratio alone does not say.
spellingextends from
SPELLABLE-UNDECLAREDtoDECLARED-NARROWER, stated in the verdict'sown definition and held by
--self-test, which names the offending rows and statesthe remedy when it reds.
Measured at
2200f8ec(treeb8ebad25)The walk was driven under an fs recorder rather than reproduced by hand (this gate
exports none of it): discovery takes the immediate children of the drivers root that
carry a manifest and the
driver-prefix, five packages today, and every.tsfile atany depth under each package's src directory is opened, node_modules and dist skipped.
Five per-package manifests are statted rather than opened, as the existence test that
admits a package to the matrix, so 349 of 379 are reached one way or the other. The
declaration errs WIDE by the remaining 30 — 11 markdown, 6 tsconfig JSON, 6 config
.tsbeside the manifests rather than under src, 5 LICENSE, one.mjsand one dotfile— and it is nevertheless the only spellable claim, since the idiom can express a
subtree and not "the src trees inside it". Recorded as the gate SPELLS it and not
narrowed to the walk: the pin holds the record against the declaration, so a spelling
narrower than the array would be a claim about a declaration nobody made.
⛔ The gate is not edited here. Its own self-test still pins its array to
DRIVERS_DIR,and it runs green, unchanged.
Ablations — from the committed state, each restored under a trap on absolute paths
spellingdeleted (blob0b8a0e98to4ae20f81; removed-text grep 0 hits)--self-testRED, 2 failures, the first naming the row:UNSPELLED: scripts/check-driver-conformance.mjs DRIVERS_DIR packages3519847atobfaff385; injected-text grep 1 hit)--self-testRED naming the drift:declared and not recorded [the added hint], named as omitted [none]--self-testGREEN — the premise of the card, measured: the row was blind to a declaration change at its own rootRestores proved after every leg:
git hash-objectequal to theHEADblob for bothfiles,
git diff HEADempty,git status --porcelainempty.Verification at
9b576972set rather than a typed list: 21 commands, plus this gate's own plain run and
--self-test. 23 of 23 green.pnpm lint(whole repo,eslint . --no-inline-config) through the sharedverification lock:
VERDICT command-exit 0 · held the lock 69s · waited 0s.why. No verdict moved; the header counts are unchanged.--self-testbefore:54 live row(s) … 20 record(s) carry a spelling … 14 distinct … 9 DECLARED-NARROWER record(s) are held SET-EQUAL. After:54 live row(s) … 21 record(s) … 15 distinct … 10 DECLARED-NARROWER record(s) are held SET-EQUAL.skip-changeset: this diff publishes nothing from any released package.Out of scope
Filed as #15313: the gate's own docblock justifies its declared hint with ratios that
are stale and undated (259 of 291 against 4903, measured here at 344 of 379 against
5979). Nothing reds on it and its conclusion is unchanged; the gate is not edited from
this PR.
Generated by Claude Code