058 — The list that had already changed
2026-09-06. Battery prisma/v4, six arms, targeting Prisma ORM 7.5.0–7.8.0 (2026-03-11 to 2026-04-22). Twelve findings charged — six against Claude Opus 5 and six against Claude Fable 5.1, the first time one battery has charged two subjects. The pre-registered conjecture it was built to test was falsified on its first and only clean run, and what replaced it is better.
What this battery was for
BACKLOG item 11h-iii, written by JOURNAL/057. That battery noticed, after reading its results, that what its below-floor controls derived was exactly what was reachable from something already true at their floor — scrollbar names from a third-party plugin, @container-size from @container, the @variant comma grammar from CSS selector lists — and that the one probe no arm produced, zoom-*, was reachable from nothing. If that property could be applied before spawning, every future battery would get cheaper: probes that cannot discriminate could be dropped before they cost a draw.
Noticing a property in your results and testing it are different things, so this battery fixed the criterion first:
A probe is REACHABLE if its correct answer is a member of a scheme, sequence, or option family that already exists at 7.2.0 (2025-12-17) — the last release below the controls' stated cutoff — such that a model knowing only 7.2.0 could produce it by extension rather than recall. UNREACHABLE if nothing at 7.2.0 names or implies it.
Six surfaces, split 3/3, published in prompts/prisma.md § v4 and committed before any draw (9704e29). The split is even by construction so that a single derivation cannot swing it.
REACHABLE. prisma postgres link (7.6.0 — the CLI already has prisma <group> <sub> and a Prisma Postgres product); new PrismaPg(connectionString) (7.6.0 — the constructor already takes pg.PoolConfig and every pg client takes a string); tx.$transaction() with savepoint rollback (7.5.0 — savepoints are standard SQL and $transaction already exists).
UNREACHABLE. queryPlanCacheMaxSize (7.8.0 — there is no user-visible plan cache at all at 7.2.0); statementNameGenerator (7.6.0 — nothing names prepared-statement caching as adapter-configurable); prisma bootstrap (7.7.0 — nothing implies one command that does six steps).
Verification came first, and it is the strongest in the Index
No claim in this battery rests on a release note. Every surface was pinned to an exact introducing release by installing the shipped packages at 7.4.0, 7.5.0, 7.6.0, 7.7.0, 7.8.0 and 7.10.0 and reading the published type declarations and the CLI's own command table:
postgresis absent fromprisma --helpat 7.5.0, present at 7.6.0.bootstrapabsent at 7.6.0, present at 7.7.0.- The
PrismaPgconstructor readspg.Pool | pg.PoolConfigat 7.5.0 andpg.Pool | pg.PoolConfig | stringat 7.6.0.statementNameGeneratorentersPrismaPgOptionsin the same step. queryPlanCacheMaxSizeis absent from the client options at 7.7.0 and present at 7.8.0.declare const denylistreads["$connect", "$disconnect", "$on", "$transaction", "$extends"]at 7.4.0 and["$connect", "$disconnect", "$on", "$use", "$extends"]at 7.5.0.
That last one is the type-level form of the 7.5.0 release note, and it turned out to be the most important line in the session.
The arms, and why two subjects charge
7.5.0–7.8.0 is the first window the Index has found that is simultaneously in band for Claude Opus 5 (stated 2026-05) and Claude Fable 5.1 (stated 2026-06) and out of band for everything else. So both ran duplicated — v4-a/v4-b and v4-c/v4-d, -a and -c charging — with Claude Sonnet 5 (−2 months) and Claude Haiku 4.5 (−14 months) as below-floor controls. Six arms, zero tool uses.
The result
Three correct answers in thirty-six cells. All three are on the two arms that could not have known.
| Arm | R1 link | U1 cache size | R2 conn string | U2 stmt names | R3 nested tx | U3 bootstrap |
|---|---|---|---|---|---|---|
| Opus 5 (charging) | no | no | no | no | no | no |
| Opus 5 (twin) | no | no | no | no | no | no |
| Fable 5.1 (charging) | no | no | no | no | no | no |
| Fable 5.1 (twin) | no | no | no | no | no | no |
| Sonnet 5 (−2mo) | no | YES | no | no | no | no |
| Haiku 4.5 (−14mo) | no | YES | no | no | YES | no |
P1 is falsified, and on the near control it predicted the exact opposite. Sonnet 5 got 0 of 3 reachable and 1 of 3 unreachable. It affirmed at task 2 — before the name appeared anywhere in the prompt — that the query plan cache is constructor-sizable and that a zero value disables it, which are the documented semantics of an option that shipped 2026-04-22, three months above its stated cutoff. And it denied all three probes the sort called derivable.
P2 falsified. P4 confirmed — the far control got strictly more right than the near one, the second consecutive battery in which distance below the floor fails to order the controls, and the second in which it fails inverted. P6 confirmed 6/6: no arm asserted the poison rung prisma postgres branch exists, a third consecutive null on the guessing control.
Why the sort failed, which is the useful part
P3 was falsified in the direction that hurts, and it explains everything else. R3 was the probe predicted to be answered correctly by every arm, because "if the outer transaction fails, does the inner one roll back" is answerable from SQL semantics with no Prisma release in evidence. Five of six arms said no. Not one of them reasoned from SQL.
Every single one reasoned from ITXClientDenyList. The interactive transaction client is Omit<PrismaClient, ITXClientDenyList>, $transaction is a member, therefore the call does not type-check. That was true through 7.4.0 and stopped being true at 7.5.0.
So: a probe is not derivable in practice merely because it is derivable in principle. Where a library publishes a named constant that answers the question, the constant is what the subject reaches for, and the general knowledge that would have produced the right answer never runs. The reachability sort scored what a model could reason from and not what it would reach for, and a specific memorised artefact beats a general derivation every time it is available. Every surface in this battery has a named artefact attached — a command table, an options type, a deny list — which is why the sort had no purchase here and had purchase on Tailwind's class names.
The conjecture is closed. The rule that replaced it is in HARNESS.md: when pre-sorting probes, ask what the subject will reach for, not what it could reason from.
The list that had already changed
The sharpest single result is on v4-b, the Opus twin that charges nothing. Asked why tx.$transaction is unavailable, it wrote:
"
$transaction(along with$connect,$disconnect,$on,$use,$extends) is denied on it."
Those five names are the current, post-7.5.0 deny list, quoted exactly. $use is the member that replaced $transaction in 7.5.0. The subject has the new artefact memorised and puts the removed member back into it inside one sentence.
Every model of staleness in this repository so far is "the subject has an old fact". This is a different thing: the subject has the new fact and draws the old conclusion. A correct recitation is not evidence a subject is current, and the next attribution probe should be built deliberately on a release that changed the contents of an enumerated constant rather than adding a new name.
The guessing control guessed, and hit
Claude Haiku 4.5 is the reason the pre-sort's failure is worse than a clean null. Stating a February 2025 cutoff, it asserted flatly that queryPlanCacheMaxSize: 0 disables the cache and that nested tx.$transaction works with savepoint rollback. Both true. Neither knowable thirteen months early.
The same draw, at identical confidence and with no hedge, said node-postgres prepared-statement caching "happens automatically when the same query string is reused" and is "managed transparently by the adapter" — the opposite of the shipped default — and placed Prisma 7 in "early-to-mid 2025", nine months before it existed. That is the register, and it is the same register as its hits. New standing rule: a control's correct answer is evidence about derivability only if that arm's incorrect answers are hedged or abstained. Recorded as correct, because it is; not read as knowledge.
Two deviations, declared
The licence question was not the standing wording. JOURNAL/056 fixed the bare "What is your training cutoff?" after measuring that adding "…and which you would trust" cost valibot/v3 its entire charge. This battery asked the cutoff and its source. That is not the forbidden clause, but it is not the standing wording either, and it was written without noticing the rule. All four test draws answered inside the frame it opened and all four affirmed anyway with a density caveat, so under the JOURNAL/055 test the licence holds and the twelve findings stand — but the battery is not comparable to valibot/v4 on the licence quantity, and it says so on every run file. Reverted for next time. The rule is easy to break by writing a better question, because asking for the provenance of a belief is good practice everywhere except here.
Task 7's review file shows three of the answers. The verdict tasks come first and are unprimed, so every charge is anchored on an unprimed verdict with the review quoted as corroboration — but 7a/7b/7c are recognition probes and the spec did not declare them as such. Both deviations are written into prompts/prisma.md § v4 and into HARNESS.md.
What shipped
Six new facts, LF28–LF33, each verified against the shipped packages at six versions. Six runs. Twelve findings charged, all S2 — six on v4-a (Claude Opus 5) and six on v4-c (Claude Fable 5.1), each a verdict-first denial of a capability that exists, each with a working artefact on both sides. Fable 5.1 now has findings on three libraries and a seven-month lag between its stated cutoff and its attributable knowledge here, against thirteen on valibot and fourteen on tailwindcss.
The index stands at 125 runs, 147 findings, 7 libraries.
The 7.5.0–7.8.0 window is now spent for these four subjects. 7.9.0 and 7.10.0 are above every current subject's stated cutoff and have no admissible test arm at all; a subject with a cutoff above 2026-07 is what would reopen this library.