Skip to content

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 into
mainfrom
claude/issue-15270-worklist-driver-conformance-spelling
Sep 4, 2026
Merged

tooling(pm): pin the tenth DECLARED-NARROWER worklist row to its gate's declaration, and require a spelling on that verdict#15314
os-steve merged 2 commits into
mainfrom
claude/issue-15270-worklist-driver-conformance-spelling

Conversation

@claude

@claude claude Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Fixes #15270

The declaration pin landed in #15201 holds every DECLARED-NARROWER record 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 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.

What changed — one file, scripts/pm/bare-root-worklist.mjs

  1. A SPELLINGS entry (driver package files) for the hint the gate declares — the
    whole drivers subtree, held as segments and joined at runtime — with an independent
    holds a reader can check by eye, and the row pointed at it. The pin now holds the
    record 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.
  2. The row's why is re-measured — both terms together on one tree, never
    refreshed 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.
  3. The floor that stops the class growing back: the requirement to carry a spelling
    extends from SPELLABLE-UNDECLARED to DECLARED-NARROWER, stated in the verdict's
    own definition and held by --self-test, which names the offending rows and states
    the remedy when it reds.

Measured at 2200f8ec (tree b8ebad25)

term recorded before measured now
files the gate's walk opens under the declared subtree 259 344
tracked files under that subtree 291 379
ratio at the subtree 89% 90.8%
tracked files under the bare root 4903 5979
ratio at the bare root 5.3% 5.8%

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 .ts file at
any 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
.ts beside the manifests rather than under src, 5 LICENSE, one .mjs and 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

leg mutation, confirmed on disk result
a the row's new spelling deleted (blob 0b8a0e98 to 4ae20f81; removed-text grep 0 hits) --self-test RED, 2 failures, the first naming the row: UNSPELLED: scripts/check-driver-conformance.mjs DRIVERS_DIR packages
b a second hint at the same root added to the gate's array (blob 3519847a to bfaff385; injected-text grep 1 hit) --self-test RED naming the drift: declared and not recorded [the added hint], named as omitted [none]
b, control the same gate mutation, judged by the map as it stood at the base commit --self-test GREEN — the premise of the card, measured: the row was blind to a declaration change at its own root
b, control the same gate mutation, judged by the gate's OWN self-test GREEN — the gate's pins tolerate a second hint at that root, so this direction is one only the map can hold

Restores proved after every leg: git hash-object equal to the HEAD blob for both
files, git diff HEAD empty, git status --porcelain empty.

Verification at 9b576972

  • The derived gate union for the changed path, re-derived from the merge-base change
    set 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 shared
    verification lock: VERDICT command-exit 0 · held the lock 69s · waited 0s.
  • The sweep output diffed against the base tree's: exactly one line differs, this row's
    why. No verdict moved; the header counts are unchanged.
  • --self-test before: 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

…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
@claude claude Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 4, 2026
@github-actions github-actions Bot added the size/m label Sep 4, 2026
@os-steve
os-steve marked this pull request as ready for review September 4, 2026 10:51
@os-steve
os-steve enabled auto-merge September 4, 2026 10:51
@os-steve
os-steve added this pull request to the merge queue Sep 4, 2026
Merged via the queue into main with commit eb40a72 Sep 4, 2026
32 checks passed
@os-steve
os-steve deleted the claude/issue-15270-worklist-driver-conformance-spelling branch September 4, 2026 11:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/m skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bare-root-worklist: the one DECLARED-NARROWER row with no spelling sits outside the new declaration pin, and its gate does declare a hint

2 participants