094 — The probe that argued with a fact nobody held: valibot ranged, and the corpus's bisected half is complete

2026-09-08 · data lane · BACKLOG 11k-t-ii-i-g (three of three)

valibot is ranged. All twelve facts now carry measured_range: 0.42.0 -> 1.4.2, 10 rungs, the bisector reports 27 of 27 rows OK with none to review, and with it the third and last of the libraries that item named is done. Every library the Index has ever bisected — zod, better-auth, prisma, valibot — can now state its own coverage in the data rather than in this journal.

The run itself was the cheap part, as JOURNAL/072 predicted it would be: ten rungs, no dependencies, about a minute to install. What cost the session was the thing the item said to do first, and it found two defects before a single rung was installed.

The pre-flight found what the item said it would, and one it did not

BACKLOG 11k-t-ii-i-g's instruction for the two remaining libraries was specific: read the probe file against the facts as they read TODAY, before running the ladder. Doing that turned up:

LF6 — a probe still asserting a statement that had been withdrawn. On 2026-09-07 the bisector falsified LF6: the fact claimed the NanoIDAction/NanoIDIssue rename at 1.1.0 removed the old spellings and broke type imports, and the shipped declarations showed the old names surviving as exported @deprecated aliases all the way to 1.4.2. The fact was rewritten the same session — S1 → S3, new statement, new stale_code, two shipped-package citations. The probe was not. It went on asserting new names present AND old names gone, which is the claim that had just been withdrawn, and so read NEVER_TRUE against a fact that no longer said it.

Nothing published was wrong for even a moment — the fact was corrected, the pack was correct, the row was flagged. But NEVER_TRUE is not in the OK set, and the ranging rule (JOURNAL/088) is every row OK or NO_CLAIM, else no range. A single row arguing with a fact nobody holds is enough to deny a whole library its coverage claim. This is the noise class the item predicted by name — "probe rows outliving a re-dating" — and it is the first time it actually appeared. zod's pass looked for it and found none.

Rewritten to the fact as it now reads, it splits cleanly:

The unpredicted one: LF1's clause named five actions and the probe executed two. LF1's first sentence is a list — "valibot ships dedicated string-to-primitive transformation actions since 1.2.0: toBigint, toBoolean, toDate, toNumber and toString" — and LF1a/LF1b covered toNumber and toBoolean, the two that are interesting because one of them was corrected in JOURNAL/035 for being the opposite of what shipped. The other three had never been executed at any version. Four fifths of the clause's version claim was riding on the two halves that happened to have a story.

That is exactly the harness rule this library's own bisect wrote — write the probe from the fact's whole statement, split at every and, not from its headline (JOURNAL/072, and it is in CLAUDE.md) — going unapplied to the fact that produced it. LF1c was added for the three.

It confirmed 1.2.0 and nothing moved. toBigint, toDate and toString are each absent at 1.1.0 and convert at 1.2.0 and above, contiguous across all ten rungs — the same boundary the two interesting actions already had. The gap was real and the answer was dull, which is the ordinary outcome of closing one and the reason to close it rather than assume it.

The baseline run reproduced the previous one cell for cell

better-auth's pass (JOURNAL/092) reversed one of the previous bisect's own corrections, and its lesson — diff every cell against the previous run and give each moved cell a mechanism before a date — was the other thing to carry in. So the ladder was run before the probe edits.

Every cell matched JOURNAL/072. Twenty-six rows, ten rungs, no movement in a day, with LF6 and LF6b reading NEVER_TRUE exactly as that entry documented. So the two edits below are edits to the instrument, made against a baseline that was known to be stable, and the second run's differences are attributable to them and to nothing else. Nothing here reverses anything.

beforeafter
rows2627 (LF1c added)
confirmed2427
to review2 (LF6, LF6b)0
facts unprobed00
dates movednone

data/index.json changed in exactly one field — verified_on, 2026-09-07 → 2026-09-08. No finding moved, no charge moved, no severity moved. The correction pack now states the coverage on every one of valibot's twelve rows.

What the corpus looks like now

libraryfacts rangedrangerungs
zod31 / 313.22.4 → 4.5.419
better-auth13 / 131.0.0 → 1.7.346
prisma31 / 366.0.0 → 7.10.023
valibot12 / 120.42.0 → 1.4.210
next.js0 / 28no ladder
langchain0 / 38no ladder
tailwindcss0 / 34no ladder

87 of 192 facts now state the releases their statement was executed against. The three zeroes are honest and are visible in the dataset rather than only in the backlog: those libraries have no ladder at all, and building them is a much larger job — langchain needs a Python subject hook (a venv per rung) and tailwindcss needs the CSS auditor's shape before either can have one.

The trigger that fired, and is still not being pulled

BACKLOG 11k-t-ii-i-h holds that tools/benchmark/draw.mjs's hand-maintained BISECTED map could be derived from the data, since measured_range is exactly the machine-readable evidence that a fact's statement was executed across a ladder. Its stated trigger was "after 11k-t-ii-i-g, when all four bisected libraries carry ranges". That trigger has now fired, and the derivation is still not being done, because both objections that item records survive it:

  1. BISECTED records when a library was bisected and which journal entry did it. A per-fact range rolls neither up to the library.
  2. better-auth has now been bisected twice, the second run reversing part of the first (JOURNAL/092). A range cannot express that either.

A derivation that loses the provenance is worse than the list. The item stays open with its trigger marked fired and its reasons intact — which is a more useful state than either doing it or deleting it.

Files