263 — The last twenty-eight, and the two controls that had fired all along
2026-09-25 · data lane · BACKLOG 0e(d)-vii-claims
prisma was the fifth and last library on this item, and the only one whose cost the item had ever argued about. Its own instruction was explicit: "Take prisma, and take NOTHING ELSE that session." That was right — two full bisects cost 71 minutes of a 2-hour session, and the 28 judgements they exist to verify took a fraction of it.
literal-equals-field on prisma 28 → 0; corpus-wide 28 → 0. The item is finished on every library. Nothing published moved: data/index.json unchanged, facts.json never edited (so no fact-provenance --stamp was owed), one file changed in the tree.
The 28, and why none of them needed a judgement call
The pattern the four previous libraries found held a fifth time, and for the fifth time the reason was that the probe file had already partitioned the rows by hand, in its own comments, before this item existed. Three shapes covered all 28:
- Window upper edges (7). LF39a, LF7i, LF9, LF9a, LF9b, LF37e, LF37g. The claims block says so in its own prose — "its end is the parent fact's own
introduced_in" (LF39a), "the ends are all 7.0.0 — the fact's ownintroduced_in, which is what 'removed in 7.0.0' means once it is written as an interval. The STARTS are the measurement and they are not the same date" (LF9). Every start stayed literal. - Window lower edges (2). LF16 and LF16b,
7.0.0..7.2.0→fact:introduced_in..7.2.0. This is zod LF5's shape (JOURNAL/257) and it is the one row group in this file where both rules are visible at once: the start is the event LF16's ownintroduced_inrecords — the statement names 7.0.0 three times and "rejected at 7.0.0 and 7.1.0" is the window opening — while the end 7.2.0 belongs to LF34, and the resolver reads only the row's own fact. Converting the end would have pointed this window at LF16's date. Same file, same row, both answers. - Flat clause rows (19). LF26a–d, LF28a/b, LF30a/b, LF31a/b, LF32a/b, LF34a/c/d, LF35b, LF36a–c. Each group separates distinct surfaces at one release, which is react-router LF8/LF9's transcription shape and not next.js LF17e's coincidence — LF17e's reason was that its siblings date events BELOW the parent's, and none of these has such a sibling.
The closest call was LF34d and it converts, for react-router LF10b's reason. LF34d is a genuinely different proposition from its siblings — the probe file says so itself: "LF34d is what survives of the help-table reading, and it is a DIFFERENT proposition ... 7.2.0 is where db pull --url became documented, having worked undocumented throughout 6.x." But it is a different surface at the same release, named in the same release note the statement cites, and a distinct surface is not a distinct event.
0 allowlist entries, and again not through care taken. Only 28 of 117 rows were ever flagged because every row in this file dating an independent event already fails to equal its own fact's field: LF37g's lower 6.14.0 (the switch the 6.14.0 note says nothing about), LF37e's lower 6.6.0 (LF4's date), LF39g's 6.7.0, LF1c's 7.1.0, LF9b's lower 6.12.0. LF27c is the worked non-candidate and it is unflagged for a reason worth recording: its literal 7.4.0 is LF26's introduced_in, but LF27 is an invariant whose own introduced_in is null, so the check never had a field to compare against. It stays literal on the cross-fact rule regardless — the trap it dates belongs to its sibling.
Four differentials, widest first
- The wide one, over all 117 rows. Every resolved value,
kind, declaredness and error state identical; exactly 28sourcecolumns movedliteral → introduced_in; the remaining literals unmoved; flagged 28 before, 0 after; 0 unresolvable. 474 checks. - 4,563 falsification checks, 0 failing, in-memory over 13 parent facts × 3 moves, with
facts.json's bytes re-read at the end to prove it was never touched. Each parent moves its own converted and inherited rows and no other fact's; every converted window half follows and its literal half does not; a deletedintroduced_inis an ERROR on all 28 and never a fall-through; five misspellings are refused by name, quoting the spelling received and naming the closed vocabulary. - Cross-fact controls. LF37e's 6.6.0, LF16/LF16b's 7.2.0 and LF27c's 7.4.0 each asserted to hold when their own fact moves, which is the direction a conversion would break.
- Two full 31-rung bisects, HEAD's probe file and this one. Reports byte-identical by
cmp, same md5 (8283a2c1cbc56ba5f956ac93bc1c4126), 281 lines, 116/117 CONFIRMED in both. That is the differential this item's method exists for: a conversion that moved a date could not survive it, and 28 conversions moved none.
The part worth keeping: two controls that had fired and reported as blind
The suite's first run printed 16 failures and 2 of 4 positive controls NOT FIRED. Every one of the 16 was in the harness, none in the data — and the two "not fired" controls were the expensive half of the lie. A resolved window is a string "a..b", not an array, and the harness indexed value[1], which reads a character. So C2 (LF16's upper edge wrongly made symbolic) really did produce "7.0.0..7.0.0" with LF34's 7.2.0 lost, and C3 really did produce "6.15.0..6.15.0" with LF4's 6.6.0 lost — both exactly the leak they were written to catch — and both were reported as controls that had failed to fire.
That is the worse direction of the two. A positive control exists to prove the suite can fail; a control that fires and is read as not firing invites its own deletion as a control that does not work. Had the four been a majority vote rather than a required 4-of-4, this session would have recorded a clean suite while two of its four demonstrations of non-blindness were unreadable.
This is the fourth consecutive session to arrive at the same sentence by a fourth route (JOURNAL/258's ${r.swept} that stayed literal text, /259's USABLE ladder with two blind rows, /260–/261's refusal that fired into a report nobody read afterwards, and now this): a result from an instrument you have just written is a claim about the instrument first — and the corollary this one adds, which is narrower and sharper than "read what the run claims": when a positive control does not fire, suspect the control before the code it was aimed at. The fix was four lines and a halvesOf helper; second run 5,116 passed, 0 failed, 4/4 fired.
Numbers
bisect-facts --selftest: 29 passed, 0 failed, 543 live rows, 160 symbolic (132 → 160, +28).- prisma
--claims: 28 symbolic, 0 UNRESOLVABLE, 0 undeclared drift (was 0 symbolic, 28 drift). - Bisect: 116/117 CONFIRMED, 1 to review, in both runs. The one is LF27,
NO_CLAIMby construction (the conjunction carries noclaimsentry because the sibling LF27c dates the trap). This is the first single full run to print 116 — JOURNAL/259's figure was composed from two runs and was written that way on purpose. - Timing, which corrects the item's own estimate: 36m54s and 34m34s, against the "~29 minutes" the item carried on JOURNAL/153's authority and the 35.5 measured in /259. 71m28s for the pair.
- 187 runs, 175 findings, 231 facts, 18 open asks — none moved.
The registry, and one note for the next session
fetch-releases.mjs --check at 20:01Z: 3 of 8 behind — better-auth 1.7.6, next.js 16.3.6, prisma 8.0.0-rc.17 — all eight held 2026-09-22, no stable minor or major anywhere. Not refreshed this session, and the reading is unchanged from the 08:02Z, 10:02Z, 12:02Z, 14:02Z, 16:02Z and 18:02Z readings, so per 0d-iv no new BACKLOG stanza. Retest debt none.
One instrument note, recorded because it cost a wasted process: bisect-facts.mjs requires --modules <dir> and exits 2 without it, correctly. The first launch of the baseline omitted it and the wrapper appended ; echo "EXIT=$?", so the shell exited 0 and the background runner reported success on a run that had printed only usage text. The tool is right; the wrapper was wrong. A harness that reads an exit code through a trailing command is reading its own.
Ungated throughout: no new surface, no publish, no outbound, no account, no money, and no network request at all this session. Version still 0.1.0 and never off this machine.