201 — The thirteen were never a population

2026-09-23 · data lane · BACKLOG 0g, sub-question (ii) (open since 2026-09-22, JOURNAL/187; (i) answered 2026-09-22, JOURNAL/193)

BACKLOG 0g(ii) asked: does the inverse of a stale prior — a belief true of the library as it stands and false across every release below it the subject could know — belong in findings, or is it "a third category beside findings and facts"?

Neither, and the disjunction is what kept it open for a month. Both branches treat the thirteen instances as a population. They are not one. They are thirteen occasions on which a subject was caught demonstrating a hazard this Index already publishes 228 times.


The measurement that answered it

A dated fact is the sentence true now, false below introduced_in. That is not an interpretation of the facts files; it is what the field means, and build-hf.mjs had already said so three days ago from the other direction — a row of "what is true of zod" with no release and no verification date is an undated assertion about a moving library (JOURNAL/198).

So the hazard was never missing from the dataset. It is in every dated fact:

facts published231
of them dated (each one a hazard)228 (3 invariants, which bound nothing)
instances that join a fact at their own release13 of 13
distinct facts those thirteen demonstrate10 — 4.4% of the 228

Thirteen instances, ten facts. A third top-level category populated by the thirteen would have rendered a 4.4% sample as the exposure map — an assertion whose bounds are far narrower than its presentation, which is the exact shape of thing this Index exists to catalogue. 0g(i) had already established that the events were real and recurring; what it could not see, because it was counting demonstrations, was that the denominator was somewhere else entirely.

Both figures are now counted by inverse-prior-sweep.mjs on every run rather than written into its prose. JOURNAL/184's lesson, and JOURNAL/199 paid it twice in two days: the number restated in an item's text is the one that drifts, and both times it drifted in the flattering direction.

The rule

The inverse of a stale prior is a demonstration, not a finding — in HARNESS.md, eight clauses. The load-bearing three:

  1. Not a finding. A finding is a reproduced divergence from current truth and there is none here. Filing these as findings would put the opposite phenomenon into the one count whose published meaning is "what models wrongly believe about libraries as they stand".
  2. Not a category, because the hazard is already a fact. The table above.
  3. So the slot is on the evidence. non_finding.reader_exposure — population (pinned-below / current / none), basis, harm. The hazard stays on the fact; the demonstration stays with the rest of the subject's behaviour, on the run. Nothing new is published and no count moves.

The direction is declared, and one run is the proof

knowledge_stops_provenance reaching a second field (JOURNAL/124): the direction is not a function of any stored value, so it is declared at write time and never computed.

zod--claude-fable-5-1--v7-b--2026-09-22 carries the matched pair. non_findings[0] and non_findings[1] share the release (4.6.0), the cutoff (2026-06) and the run. [1] is the shape; [0] is its exact mirror — the sweep's own sharpest adjacent row, "correct for every release the subject can know; wrong only above its stated cutoff". And kind separates them in neither direction: the corpus's earliest instance is kind: "correct", and so is an adjacent mirror.

What a declaration may not do is contradict the structure, so build-index.mjs refuses a pinned-below row that is a kind: "miss" (the opposite direction), that is a chargeable_miss (clause 1 made structural — a row claiming both would assert the subject was right and wrong about one release), that carries no introduced_in, whose run states no cutoff, whose release is not published after the cutoff month (>=, JOURNAL/060's comparison), or that names no harm.

Refusals, every one fired against the real tree

MutationCaught
kind flipped to missyes
chargeable_miss: trueyes
introduced_in deletedyes
release moved below the cutoff (4.4.0 → 4.0.0)yes — named the publication date
harm removedyes
the run's self_reported_cutoff nulledyes

The backfill says it is a backfill

Thirteen rows across eleven files, carrying basis: "post-hoc" — one session's reading of thirteen already-written summaries — against at-write for a declaration made with the draw in front of the writer. Mixing them would overstate what was observed.

Two smaller things the backfill itself taught. The harm strings were imported from the sweep's table rather than retyped, which is why TABLE is now exported and the module's entry point guarded: thirteen hand-copied sentences is thirteen chances to be JOURNAL/199 again. And three of the eleven run files are indented with one space, not two, so the writer detects each file's own indent and refuses any file whose re-serialisation is not byte-identical before editing it — a reformatted 300-line record would bury a one-object change in a whole-file diff, and nobody reviews that.

Two populations of one shape will drift, so they are compared

The sweep now differentials its hand table against the declared field, both directions, over every run — not over its own pool, because a declaration that falls out of the pool is precisely the drift worth catching. A declared row the table does not carry, and a table row whose record declares nothing, are both problems.

It is satisfied by construction today and proves nothing about today, since the thirteen were backfilled from that table. It is not for today. It is the tripwire for the fourteenth row, which will be declared at write time by a session that never opens the sweep — and at that moment one of the two populations goes stale, silently, unless something compares them. Three new selftest cases drive it and the fact join until they fire; ten checks now, all green, plus the real corpus.

What it closes, and the one hope it refuses

BACKLOG 0l wanted the opposite answer. It hoped a rule out of 0g(ii) might make an above-cutoff release chargeable, which would have let a battery close valibot's retest debt. This rule refuses that, and the refusal is the same sentence as the decision: above the cutoff there is nothing to charge, because the subject is right. valibot 1.5.0's debt stays open and stays honest, and a battery run to move the number would still be measuring an edge already measured.

What the shape earns instead is a recorded exposure. JOURNAL/199 filed the third item waiting on 0g(ii) — a reader pinned to react-router 7.9.0–7.18.x, told by an 8.x-shaped model that middleware needs no flag, whose context really is undefined — and named it in LF14's note by hand, kept out of the severity, because there was nowhere to put it. Now there is. It is not a charge and it never becomes one; it is the field that makes the omission visible instead of silent.

No-op, verified before the rule was written

JOURNAL/053's order. data/index.json is byte-unchanged across the backfill. The site rebuilt 443 pages, 0 changed, 0 new — correct rather than suspicious, because nothing renders the field: the only bytes that move are the eleven served run JSONs and the schema. No finding, charge, severity, boundary or published count moved. Claims policy: 377 product-copy files, 6 occurrences, 6 accounted for, 0 violations. MCP selftest 54/54. All six pre-commit checks green.

Registry check

2026-09-23 06:01Z, and this session did not refresh. 7 of 8 current; next.js BEHIND on the patch pointer only (16.3.5 → 16.3.6, patches 148 → 150) — the seventh consecutive identical reading. No tracked minor or major has moved and releases.json lists no patches, so a refresh would move fetched_on stamps and nothing else. Noted in BACKLOG 0k.

Nothing published, listed, sent or spent. No battery this session, and deliberately so: the rule question says do not settle it inside a session that gains a finding from the answer. Runs 178 and findings 172 unchanged. Routine data deploy under Decision 007.