docs(check-release-section-coverage): mark the v17 heading fixture historical instead of "actually shipped" - #13952
Conversation
…, not "actually shipped" The `REAL_V17_HEADINGS` fixture carried a present-tense docblock — "Kept verbatim so the matcher is judged against text that actually shipped" — while the text it snapshots no longer ships. #13754 (merged 2026-08-31) cascaded the release-page headings: `content/docs/releases/v17.mdx` now reads `## 17.0.0 in detail`, and no page under `content/docs/releases/` carries a body-level h1 any more (0 such lines across the ten pages, counter-checked against 54 `## ` lines in the same files). The gate is green either way and stays green — `headingsNamingMinor` is `^#{1,6}`, level-agnostic by construction, and nothing compares the fixture to the live page. The defect is the claim, not the behaviour: the file already keeps a deliberately historical snapshot beside it (`PRE_10232_V17_HEADINGS`), so a reader diffing either against the live page could not tell which was which. Relabelled to that sibling's existing convention rather than a third one: renamed `REAL_V17_HEADINGS` -> `PRE_13754_V17_HEADINGS` (the identifier is the label a reader meets at the three use sites; the docblock is only visible at the definition), and the docblock now names what changed and when, as `PRE_10232_V17_HEADINGS`'s does. The docblock also carries the reason it must not be re-snapshotted, measured rather than assumed: a re-snapshot would remove the last h1 that reaches the matcher through a whole-page fixture, and would remove it in silence — 17.0 is covered twice over here, so every case in this file stays green with the `# ` demoted to `##`. The matcher's `^#{1,6}` breadth itself is pinned separately by the `'# 16.1.0'` / `'###### 16.1.0'` case, so the fixture is NOT the only h1-bearing input and the docblock does not claim to be. The 17.0 self-test label said the fixture covers 17.0 "via `# 17.0.0 in detail`", which reads as though the h1 were load-bearing there. Measured: 17.0 matches both `## Highlights — 17.0.0` and `# 17.0.0 in detail`. The label now says so, and says the case cannot catch a re-snapshot. No changeset: script-only, publishes nothing from any package — the repo's precedent (15/15 recent commits touching only `scripts/check-*.mjs`) carries none. `skip-changeset` applied on the PR. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Pk26oZ12t5N1hwGW1m1MgC
|
ACCEPT — ⛔ My Zone 2 A was wrong, and the dev refused to write my claim into the fileI asserted the fixture was "the ONLY H1-bearing input to this matcher" and built Zone 1 rule 2's argument on that uniqueness — while explicitly warning: "⛔ Do not write 'the only' into the file unless you measured it." It measured, and three h1-bearing literals reach and ⇒ ⭐ The matcher's ⭐ It read the defect better than I didI framed this as a comment problem. The dev renamed the identifier too:
⇒ Correct, and it is the half I missed: a reader at a use site sees It also caught a second instance of the same defect class in the same file: the 17.0 self-test label said the case covers 17.0 "via ⭐⭐ The answer to "what would catch a wrong relabel": nothing would — and it proved itTwo-leg ablation from the committed state, each mutation confirmed on disk before the run, each restore proven by blob-hash equality and an empty
⇒ Leg 1's green is a reading, not a dead test. ⭐ That is what justifies putting the ban in prose: prose is the only guard available here, and the dev established that by measurement instead of assuming it. A "do not do X" comment written without checking whether anything enforces X is a wish; this one is a documented last line of defence. Premise, re-derived#13754 merged 2026-08-31; ⭐ A void run reported as void — and turned into a findingIts first ablation was executed from the wrong cwd and failed with And it filed what the void run exposed as #13954: ⇒ Zone 2 B / C — both confirmed
Gates14 path-derived + 2 convention-triggered = 16, all run; Governed-surface checkDiff is ArmingFollows once CI settles green on the head. Generated by Claude Code |
Fixes #13757
scripts/check-release-section-coverage.mjskept its v17 self-test fixture under apresent-tense docblock — "Kept verbatim so the matcher is judged against text that
actually shipped" — while the text it snapshots no longer ships.
The premise, re-derived on
origin/mainPR #13754 (
10f5106c5, merged 2026-08-31T10:05:16Z) cascaded the release-pageheadings. Measured on this branch's base:
The zero is counter-checked: the same query shape returns 54 for
##across the same tenpages, so it is a reading and not a broken query. The fixture is therefore historical
wearing a current-tense label — beside
PRE_10232_V17_HEADINGS, which is a deliberatelyhistorical snapshot and is labelled as one. A reader diffing either against the live page
could not tell which was which.
The gate is green either way and stays green:
headingsNamingMinoris^#{1,6},level-agnostic by construction, and nothing compares the fixture to the live page. The
defect is the claim, not the behaviour.
The change
Relabelled to the sibling's existing convention rather than a third one. The identifier is
renamed
REAL_V17_HEADINGStoPRE_13754_V17_HEADINGS, matchingPRE_10232_V17_HEADINGS:the docblock is only visible at the definition, while the name is the label a reader
meets at all three use sites, and
REAL_was itself the present-tense claim.New docblock:
The fixture's contents are untouched, and so are the matcher, the gate's logic,
PRE_10232_V17_HEADINGS, and everything undercontent/docs/releases/.Is the fixture the only h1-bearing input? No — measured, and the docblock does not claim it
The dispatch flagged this as an unverified assumption. It is false. Every single-hash
literal reaching
headingsNamingMinor:'# 17.0.0 in detail''# 17.0.0 in detail'PRE_10232_V17_HEADINGS— the same h1'# 16.1.0''###### 16.1.0''#17.1 not a heading'So the matcher's
^#{1,6}breadth is pinned directly and survives a re-snapshot untouched.The docblock says exactly that instead of claiming a uniqueness the file does not have. What
this fixture uniquely contributes is narrower: the last h1 arriving through a whole-page
fixture.
What would catch a wrong relabel? Nothing — measured, with a non-vacuity control
Two-leg ablation from the committed state; each mutation confirmed on disk by grep counts
before the run, each restored with
git checkout HEAD -- $ABSOLUTE_PATHand the restoreproven by blob-hash equality with the HEAD blob plus an empty
git diff HEAD. No rebuildleg is needed or claimed: the gate is run by
nodedirectly off source, with nodist/between the edit and the run.
## Highlights — 17.1.0, which the self-test does assertLeg 1 is the answer: nothing in this repo would catch a wrong relabel or a re-snapshot.
Leg 2 is what makes leg 1 a reading rather than a dead test — the self-test is live on this
fixture, it simply has no assertion that depends on the heading level. That is why the ban is
written in the docblock: prose is the only available guard.
A first ablation run was void and is reported as such rather than quietly re-run: it was
executed from the wrong working directory, and the resulting failure was
sibling: UNREADABLE— unrelated to the mutation. Filed separately as a finding; see below.
Also corrected, same file and same defect class: the 17.0 self-test label read
"they cover 17.0 via
# 17.0.0 in detail", which reads as though the h1 were load-bearingthere. Measured —
headingsNamingMinor(fixture, 17, 0)returns both## Highlights — 17.0.0and# 17.0.0 in detail, and the case stays green with the h1demoted. The label now says so, and says the case cannot catch a re-snapshot.
Verification
node scripts/check-release-section-coverage.mjs --self-test— EXIT=0, 41 cases pass.node scripts/check-release-section-coverage.mjs— EXIT=0, 5 published minors across 2GA majors in scope. Exit codes captured by redirecting to a file before any pipe, never
from
$?after atail.That green is not evidence this change is right: the self-test was green before it, is
green after it, and leg 1 above shows it stays green through the wrong change too. This PR is
judged on the measurements, not on the gate.
Gate family derived with
node scripts/pm/dispatch-gates.mjs(no path argument — the scripttakes its own change set from the merge base). Reconciliation is clean:
comm -23 sorted-derived sorted-ranis empty; the only entries run but not derived arethe two declared extras.
All at
71018fe16, the branch head:check-test-completenessexit 3 is not a finding and not a red — the gate says so itself:"PREREQUISITE NOT MET — this gate grades a saved
turbo run testlog, and no log was named... the local reading for this gate is NOT MEASURED." It is CI-only and unreachable there.
The two convention-triggered families (
bare-root-worklist --self-test,check:pm-dispatch-gates) are included because this diff edits a gate script. The gate has noseparate
*.test.tspin suite —git grep -lover test globs returns nothing — so its own--self-testis its suite, and it ran.Changeset
None, deliberately. Script-only: the diff is one file under
scripts/, publishing nothingfrom any package. Repo precedent is unanimous — of the 15 most recent commits touching only
scripts/check-*.mjs, 15 carry zero changeset files. The changeset job's only exemption isthe
skip-changesetlabel (there is no path-based carve-out inpr-automation.yml), so thatlabel is applied to this PR and read back.
Diff size
One file, one commit, comments and one identifier only — no executable behaviour changes.
Generated by Claude Code
Generated by Claude Code