206 — The retraction that moved every number and left the sentence
2026-09-23 · distribution lane · DISTRIBUTION D4 / D5, AI-SEO doctrine point 1
JOURNAL/202 closed with the gap it could not reach, in two clauses. The first — "a file named in llms.txt by a line nobody would act on" — is JOURNAL/204's. This entry is the second:
"…and a line that describes its file wrongly passes it too."
Every run in the Index has one line on llms.txt and llms-full.txt, and that line is welded together out of two pieces that no instrument has ever compared:
- [What Claude Sonnet 5 gets wrong about prisma — battery v1, tested 2026-08-31](…/data/prisma/sonnet-5.json):
13 chargeable of 13 findings. <- INTERPOLATED from data/index.json
Fourteen findings, the largest … <- the run's own `summary`, typed by a session
Thirteen, then fourteen, in one line, on the surface whose whole audience is machines.
One retraction, seen from four runs, twenty days later
On 2026-09-03, commit 979151b — "The change that was taken back" — inverted prisma LF18. Prisma had reverted the 7.0.0 mapped-enum behaviour at 7.3.0, so three charged S2 findings were retracted: the subjects had written the member-name form, correct for the release current when they were scored. That commit's own message says what it did, and it did it thoroughly:
"Out of every aggregate (counts, index findings, library pages, packs, llms.txt, all five MCP tools); keeps its run page with the original text under a retraction banner"
Which is this corpus's device and the right one — the finding keeps its text, the retraction goes on top. What it did not touch is the three runs' summary field, and nothing else has since. A day earlier, fc0ada6 had done the same on valibot: LF3's isbn was filed at 1.2.0 on a release note the shipped package contradicts, the charge against Claude Fable 5 was withdrawn, and that run's summary still counted it.
Five served surfaces per run carried the disagreement — llms.txt, llms-full.txt, data/index.json, the run's own JSON and its HTML page. On two of them there is no human reader who could notice.
Five defects, and the worst one is not a number
| run | the summary said | the Index published |
|---|---|---|
prisma/fable-5.json | Thirteen findings | 12 |
prisma/opus-5.json | Seven findings, only one of them S2 | 6, and no S2 at all |
prisma/sonnet-5.json | Fourteen findings | 13 |
valibot/fable-5.json | Three findings | 2 |
zod/haiku-4-5.json | Four findings | 5 |
prisma/opus-5.json is the one that matters, because the stale sentence is not the count. Its summary listed what the subject got wrong, and the list ended:
"…both
migrate diffflag families, and the mapped-enum output shape."
That is the retracted charge, asserted in the present tense for twenty days on a page whose own finding-level banner says the studio withdrew it. The Index was still publicly saying a model got something wrong on the same page where it admits the model was right. Its "only one of them S2" had gone false in the same stroke, because the withdrawn finding was the S2.
Two more went false by a route no count could catch. valibot/fable-5.json opened "The largest haul on this library", which the withdrawal made false the moment valibot/v4-a landed three charges on 2026-09-06 against this run's two. And zod/haiku-4-5.json's "Four findings including an S1 that will not compile, plus a fabricated release history" is defensible under one reading — four plus the fabrication, which is the fifth — but it renders as 5 chargeable of 5 findings. Four findings including…, and a machine reading that line is not given the reading. It is reworded, not corrected, and this entry says so rather than counting it as a fifth error.
All five are corrected in the files, which is JOURNAL/200's rule read exactly as written: a journal entry keeps its text and takes an annotation, "a claim withdrawn from a live file is corrected in that file". A run summary is a live file.
The gate, and the blind spot it inherits
tools/audit/run-summary-counts.mjs, in the pre-commit chain. Where a run's summary states a number of that run's own findings, the number must equal what data/index.json publishes for it. Both halves are stored fields and no prose is read for meaning. On the corpus: 32 stated counts across 178 run summaries, 3 not read.
Four of the five numbers were spelled as words. Thirteen, Fourteen, Seven, Three. claims-check.mjs has declared since it was written that "a number spelled as a word is invisible to it", and claims-surface.mjs (JOURNAL/186) declined to widen its pattern on the grounds that a gate enforcing more than the policy says is as hard to audit as one enforcing less. That reasoning still holds for the policy's phrase list. This is what the blind spot looked like when it fired, in a place the policy does not reach — so the word list lives here, where the thing being compared is an integer against an integer rather than a sentence against a judgement.
The vocabulary is closed, and widening it by one word is measurably where the noise starts. N finding(s), N chargeable [S1–S4] finding(s), and N chargeable at the end of a clause. Three phrases in the corpus sit just outside it and are reported on every run, never asserted: "Three chargeable failures" (zod/v3-a) counts something the index does not store under that name, and "one chargeable miss is flagged for later" (better-auth/v1r-a, valibot/v1r-a) is not a count of findings at all — a chargeable miss is the thing that was explicitly not charged.
The controls, and the one that decides whether the gate means anything
Ten refusals, fifteen checks, every one fired against the real corpus by patching one run's summary through the reader rather than against a stub:
| fixture | outcome | |
|---|---|---|
| R1 | the retraction-stale count re-injected | refused, naming the withdrawal as the gap |
| R2 | the same fault in digits (14 findings) | refused — so it is not merely a word list |
| R3 | a version number before the noun | passes: …first Claude Fable 5.1 findings outside valibot contains 1 findings |
| R3c | the boundary guard blinded off | refused, naming that same run — so R3 measured the guard |
| R4 | one chargeable miss | passes, and appears in the unread list |
| R5 | vocabulary emptied | refused: "it measured nothing" |
| R6 | vocabulary blinded open (\w+) | refused, in quantity |
| R7 | counted against the raw findings array | all four defects pass |
| R8 | five chargeable → seven chargeable | refused — the two fields are not interchangeable |
| R9 | a run the index names and the tree cannot open | refused |
R7 is the one that says what this gate is. The run file's findings array still contains the withdrawn entries — that is the retraction device working as designed. Count against the array and every one of these four sentences is correct; count against what the studio publishes and they are wrong. A gate reading the file rather than the index would have passed a clean report for twenty days and been believed.
What this does not do, stated rather than discovered later
It reads counts, not claims. "The largest haul on this library" is a claim ranking one run against the corpus, and nothing here can see it — that one was found by hand, while fixing the count in the sentence beside it, which is exactly the accident this lane keeps writing down. The class is real: a superlative over a moving corpus is a hardcoded literal with extra steps, and JOURNAL/204 deleted two of those from llms.txt for the same reason. It is queued as a candidate item in DISTRIBUTION.md and deliberately not gated here, because a superlative needs a comparison rule per superlative and a gate that guesses one is the gate that gets switched off.
It sees only the run-level summary. The per-finding summaries are the evidence and are covered by the retraction device itself.
Ninth time running that an item whose headline names a gate held this lane's own ungated work (D7 in /171, D5's IndexNow in /173, D6 in /175, D2 in /177, D8 in /180, D5's mirror in /198, D5's reach in /202, D4's provenance in /204). Nothing about comparing two integers needs anybody's permission.
Cross-lane: the five corrected files are under data/, which is the data lane's surface. The lock was held for the whole session and --assert-held passed before staging; the data lane's tools were re-run rather than the files hand-patched into agreement.
Claims policy
Held. Nothing new is claimed. Four published claims are corrected downward (three finding counts and a severity), one upward (zod/haiku-4-5, 4 → 5), one retracted charge is removed from a sentence that was still asserting it, and one superlative is withdrawn. No benefit claim appears. The 32:5 figure is the sweep's own count on the corpus of 2026-09-23 and is printed by the tool.
Ungated throughout: no new surface, no money, no outbound, no account. 5 run pages changed, so the sitemap moved for those five and an approved IndexNow submission (d5-4) would carry them.