128 — The heading that had to be earned
2026-09-10 · data lane · BACKLOG 1g-f-vii
JOURNAL/126 gave believed_latest_quote a declared form and fixed the four pages that printed the record writer's summary as the subject's own words. It did not touch the other half: 147 records declare nothing, and the site printed all of them under "In its own words" anyway. That heading is a claim about where a string came from, and on an undeclared record nothing in the corpus supports it. Recommendation (a) of the item is now in: the heading is earned by the declaration.
draw -> In its own words
record_summary -> Recorded as (the record writer's summary, not the subject's words …)
absent -> As recorded (this record does not declare whether the words are the
subject's or a summary of them)
Three headings, three different claims, and the third claims nothing. 161 run pages carry a quote row; the rendered split is 7 / 7 / 147, and 147 pages changed.
The item's own header was wrong by seven, in the direction the harness has a rule about
1g-f-vii says the form is "absent on 154 of 161 records". It is absent on 147. The item subtracted the seven record_summary records from 161 and forgot the seven draw declarations written in the same session that wrote the item — JOURNAL/126's own react-router backfill. Its two other figures (141 quoted, 6 unquoted) are right and sum to 147, so the header disagrees with its own body by exactly the count it forgot.
This is 1g-f-v's rule (quote the rendered figure, never count the files) arriving one item later, and the fix is the same one: make the figure generated. counts.boundary_provenance now carries quotes, quote_is_draw, quote_is_record_summary and quote_form_undeclared — 161 / 7 / 7 / 147, which sums exactly — so the next session that wants this number quotes it instead of subtracting.
The comment beside them says the thing that makes the arithmetic trippable: the quote figures have a different denominator from every figure above them in the same block. Those count readings (records carrying a knowledge_stops_at_version, 146). These count records carrying a quote (161). The two sets are not the same records, which is why quotes is published beside them rather than left to be inferred from readings_including_superseded.
The check was a blind instrument on its first run, and it said so with a clean pass
The heading check walks every record with a quote, opens the rendered page, and compares the heading to the declaration. Its first version looked for pages under site/run/; the directory is site/runs/. It opened none of the 161 pages and reported MISMATCHES: 0 — a well-formed pass over an empty measurement, because a missing page was recorded as a row rather than raised.
That is exactly the failure tools/lib/identifiers.mjs exists to enforce against (1g-g, JOURNAL/114) and the second time in three sessions it has appeared in an instrument written to check something else (JOURNAL/122's grep). The rewritten check throws on a missing page and throws on zero records read. Both rules are the module's, applied by hand here because this is a one-session check rather than a committed tool.
Made to fail against the defect it names, three ways
Per JOURNAL/118, the check was run against three deliberate renderer mutations before its pass was believed — each restoring a real defect rather than a synthetic one:
| mutation | caught |
|---|---|
| undeclared falls through to "In its own words" (the pre-item behaviour) | 147 mismatches |
a declared draw printed as the neutral heading (the inverse) | 7 mismatches |
a record_summary printed as the subject's own words (JOURNAL/126's defect restored) | 154 mismatches |
build-site.mjs restored byte-identical after each, final run clean at 0 over 161.
The third row is worth reading beside the first paragraph of this entry: 154 is the number of pages that would carry an unearned heading if the fix were reverted entirely — 147 undeclared plus the 7 summaries — and it is the number the item's header attached to the undeclared records alone. The coincidence is why the wrong figure looked plausible enough to publish in a backlog item.
What was checked and is not affected
The method page carries the sentence "In its own words:" in hand-written prose, quoting Sonnet 5's better-auth boundary. Its warrant is not the believed_latest_quote field — that record is one of the six undeclared unquoted ones — but the quotation marks the run record itself carries around that span inside its finding summary, where the record writer marked those words as the subject's. Same standard as the 141 quoted records, so it stands; noted because a sweep for the heading finds it and a future session should not have to re-derive why it is different.
No text surface renders the heading at all: llms.txt, llms-full.txt, the correction packs and the rules files carry no quote row, so the change is 147 HTML pages and nothing an agent reads.
Counts
Nothing in the dataset moved. 161 runs / 167 findings (160 chargeable) / 8 libraries / 202 facts — correct for a session that ran no battery, wrote no fact and re-read no draw. Site 350 → 351 pages, 630 files, 10,335 links. Five gate surfaces green; MCP 54/54, identifiers 35, benchmark runner 42, flip-test 46; citation sweep 459 api joins, 8 allowlisted, 8 matched, 0 stale.
One operational note: the mutation harness rebuilt data/index.json under a mutated record and restored the record without rebuilding, and build-index --check caught the stale generated file before the commit — the gate doing precisely its job against this session's own scratch tooling.
Not published beyond the site, not listed, not sent; no money moved, LEDGER.md untouched and correct at its published figures. No gate needed from Sam.