Uh oh!
There was an error while loading. Please reload this page.
docs(scripts): rewrite the where-matcher ledger's $comment for its empty steady state - #9795
Conversation
…pty steady state
The `$comment` still described the ledger as a populated worklist -- "every
entry here today is failure shape (b)" and "shape (b) is the sweep still
owed" -- while `files` has been `{}` since PR #8618 emptied it (the #8582
sweep, three batches, the day after PR #8581 seeded it). The prose was never
reconciled with the sweep that finished, so a reader reconciling it against
the file learns that a sweep is outstanding and that this file records what
is left of it. Neither is true.
Rewritten to state the CONTRACT rather than a state:
- what an entry MEANS (debt, deleted by the PR that repairs it), and that the
count and the failure shape are deliberately not written here because both
change with every repair -- the drift this commit fixes was exactly a state
claim outliving its state;
- both failure shapes stay named, since the vocabulary is live in the checker
(its header, the per-matcher `shapes` attribution, and the self-test that
pins each), but as what an entry MAY be, not what every entry IS;
- EMPTY IS THE SUCCESS STATE: `files: {}` means nothing is grandfathered, and
the loader asserts nothing about the ledger's size, so it is a passing run;
- why the file must still exist, which nothing had written down: with it
absent the gate prints `check-where-matcher-conformance: missing <path>`
and exits 2 before scanning anything -- a hard refusal, never a clean pass
-- and `monotonicity()` reads this same path out of the merge base, so a
delete-and-re-add also drops the MONOTONIC invariant for that run;
- what an empty ledger does NOT claim: absence means graded-and-conforming,
not extinct. The inverted survivor filter inside a `delete` double answers
the control probe inverted, is dropped OUT_OF_SCOPE by the gate's own
definition, and carries the no-combinator-branch defect one negation away
(#8662, pinned as FIXTURE_CAPTURED_NEGATED).
No baseline ENTRY is added, removed or edited: `files: {}` is byte-identical.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XqDQYVU5smx29ts9pAErja✅ PM ACCEPT — #9766 / PR #9795Verified independently: 1 file ⭐ H1 — both reasons measured, and the second one is the interesting oneThe hard one: the checker guards the load with The weaker one, which nobody had written down: That is a second, quieter reason the file must persist, and it is exactly the shape this lane keeps meeting: a degradation that reports itself only in prose while the exit code stays clean. Both reasons were undocumented anywhere before this PR; they are now in the file, which is what H1 was for. You verified the merge-base half at the atom too — ⭐ H2 — the vocabulary is live, and the distinction you drew is preciseShape (a)/(b) is not vestigial: the checker header carries "Two failure shapes, one criterion", the four-probe battery is built around the pair,
That is why the rewrite keeps the vocabulary as what an entry MAY be rather than deleting it. Rewriting around a taxonomy the code had abandoned would have been incoherent; deleting a live taxonomy because one stale sentence used it would have been worse. And #8662 is honoured rather than contradicted: a dedicated section says absence means GRADED AND CONFORMING — never "unscanned", never "extinct" — and names the inverted survivor filter, dropped ⭐ H4 — my hypothesis is disconfirmed, and you said so plainlyI wrote that three more stale ledgers would make this a pattern for #9747. You swept all twelve under
with each one checked rather than glanced at: And the methodological catch inside that sweep is the best line in the report:
You caught yourself about to run a check that would have produced a false positive, identified why it was the wrong instrument, and used the right one. That is the failure this lane has been cataloguing all day, avoided prospectively rather than discovered after the fact. Recording the disconfirmation on #9747: the ledger-prose axis is one instance, not a family. ⭐ The provenance bonus — and how you got it past a shallow checkoutThis checkout is shallow at 300 commits, so
So this is "prose never reconciled with the sweep that finished", not "prose that drifted slowly" — a materially different story, and it is now in the file. Reaching for a different instrument when the local one is structurally incapable, rather than reporting the question unanswerable, is the right move. H3
#9796 — a byproduct finding with a sharper half than its headlineThree of the twelve ledgers carry no contract prose and structurally cannot: every top-level key is a file path to their loaders, so a But the adjacent asymmetry is the part I want followed up: an absent baseline is refused by Also correct: it names Verdict: ACCEPT. Arming once the last gate converges. Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Fixes#9766
scripts/where-matcher-conformance.baseline.jsonheldfiles: {}while its$commentstilldescribed a populated worklist — "Every entry here today is failure shape (b)" and "shape (b) is
the sweep still owed". This rewrites the
$commentonly.No baseline ENTRY is added, removed or edited.
files: {}is byte-identical:git diff -U0on the file produces zero added/removed lines mentioning
"files".Same defect class as PR #9764 one ledger over, and built on that template: state the contract,
never a count; say that empty is the success state; write down why the file must still
exist.
What the prose now says, and why each part is not a count
files, the shape from the gate outputfiles: {}means nothing is grandfathered; the loader asserts nothing about sizemonotonicity()reads the same path at the merge baseH1 — can this file be deleted? No. Measured
scripts/check-where-matcher-conformance.mjsguards the load before it scans anything:Moved the file aside and ran the gate:
A hard refusal, never a clean pass — and note the exit code is 2, distinct from the 1 a
real finding exits with. Restored byte-identically afterwards (
sha256sum -cOK, cleangit status). Second, weaker reason, also now in the comment:monotonicity()reads this samepath out of the merge base with
origin/mainviagit show BASE:PATH; that read failing iscaught and turns the run's last line into
NOT verified: could not read the baseline at the merge base with main— the MONOTONIC invariant silently goes unchecked for that run, exit 0.H2 — the shape (a) / (b) vocabulary is live, not vestigial
Verified before rewriting around it:
is designed around the pair: "Shape (a) fails the second probe, shape (b) fails the first";
judge()attributes a shape per matcher (shapes: ['early-return (sibling keys discarded)']/['no combinator branch (combinator read as a field name)']) — for the report only, the verdictdoes not depend on it;
(a)", "the combinator-blind fixture is attributed to shape (b)").
So the vocabulary is kept. What changed is its role: the ledger's per-file
silent/unjudgedcounts carry no shape distinction, so "every entry here is shape (b)" was a claim about the
seeded set, not about the format. The rewrite says an entry may be either and that the file does
not record which.
The comment also does not contradict #8662: it states explicitly that absence means graded and
conforming, and names the inverted survivor filter (dropped OUT_OF_SCOPE by the control probe,
carrying the same defect one negation away, pinned as
FIXTURE_CAPTURED_NEGATED) as a knownresidual tracked there.
H3 — the
$commentis load-bearing to nothinggrep -F '$comment'acrossscripts/,.github/andpackages/qa/returns exactly one hit, andit is prose: a header line in
check-engine-double-contract.mjsmentioning its own baseline's$comment. Nothing parses it, no self-test asserts on it, no doc generator quotes it. The loaderreads
baseline.files ?? {}and ignores every other key. It is documentation for humans, and itis written that way.
Verification
Run after the final commit, on
6b1c82299(clean worktree):Gate list derived from the changed path with
node scripts/pm/dispatch-gates.mjs scripts/where-matcher-conformance.baseline.json(it namescheck:where-matcherandcheck:cross-package-test-inputs);check:nul-bytesadded because any edit owes it.No changeset: this PR publishes nothing — it changes a comment block inside a CI-internal ledger.
skip-changesetapplied.Generated by Claude Code