Does a correction pack change the code an AI writes? — measured on prisma × Claude Sonnet 5 and zod × Claude Opus 5

Pre-registered, three arms, every answer graded by running it. 5 of the 13 predictions registered across the two completed runs did not hold, and they are published here.

prisma × Claude Sonnet 5, tasks drawn 2026-09-10, cells recorded 2026-09-12

Benchmark prisma--claude-sonnet-5--bm2--2026-09-10. Every section below this heading is about this run alone; the runs are not pooled and nothing on this page averages across them.

What was measured

One library (prisma, graded against 7.10.0), one subject (Claude Sonnet 5), and 17 coding tasks: 11 whose correct answer depends on a fact this Index publishes about prisma, and 6 null tasks on parts of the library that did not change — the only place the pack can be caught doing harm by applying a correction where none was needed. Each task was sent to a fresh subject 2 times in each of 3 arms: BARE, PACK, PLACEBO. PACK gets this library's correction pack in context; PLACEBO gets a correction pack for a library the task never mentions — 16,483 words against this pack's 13,511, the closest of the packs on hand that names no prisma — so a PACK effect can be told apart from the effect of having any long document in context.

Every answer is graded by executing an assertion against the installed release — no model judges another model's output. A failing answer is sent the toolchain's own error, in wording identical across arms, up to the pre-registered cap. The protocol, the metrics, the grading rules and the eight predictions were committed before any arm ran; the task set was fixed by a recorded, recomputable draw before a single acceptance assertion was written.

Benchmarkprisma--claude-sonnet-5--bm2--2026-09-10
SubjectClaude Sonnet 5 claude-sonnet-5
Cells102 graded of 102 planned (0 excluded, 0 abandoned)
Tasks drawn2026-09-10
Cells recorded2026-09-12

The result

ArmCells gradedPassedClass A passed at round 0 Correction roundsMean chars per cellRetry chars per cell
BARE3434/34 9/2216 5,4923,090
PACK3434/34 20/222 102,6145,915
PLACEBO3433/34 12/2212 156,49041,954

The metric the protocol nominated as primary separates the arms. The terminal pass rate on the fact-dependent tasks is BARE 100%, PACK 100%, PLACEBO 95%. At the first attempt, before any correction, it is BARE 9/22, PACK 20/22, PLACEBO 12/22.

30 correction rounds were spent in the whole run. 3 of the 11 fact-dependent tasks were answered correctly by every arm at the first attempt.

What it costs

A PACK cell cost a mean of 102,614 characters against BARE’s 5,492, and BARE’s entire retry overhead is 3,090 characters per cell, averaged over all of its cells. Billed the most generous way this instrument allows — the pack charged once per session, which is not how this run billed it — its 94,296 characters would need 30.5 tasks in one session to repay themselves against that overhead, counted in this run's mix, where 12 of the bare arm's 34 cells were null tasks. The pre-registration predicted about 12, by the same rule. Billed per task, as this run billed it, never.

The most expensive arm is PLACEBO at 156,490 characters per cell: it pays for a long document on every round and still needs the rounds.

The eight pre-registered predictions

Committed in the protocol before any arm ran, and resolved here by arithmetic on the cells rather than by the operator’s reading of them. The rule that decides each one is printed beside it.

#Pre-registered predictionRule that decides itMeasuredOutcome
C1PACK beats BARE at round 0 on Class A by a wider margin than BM1 measured — the pair-selection argument, made falsifiable. round-0 Class A pass rate, PACK minus BARE, greater than the same difference in zod--claude-opus-5--bm1--2026-09-07 PACK 0.91, BARE 0.41, gap 0.50, reference zod--claude-opus-5--bm1--2026-09-07, reference_gap 0.08 held
C2The terminal Class A pass rate is 1 in every arm — B1 as written fails again, because the retry loop takes the primary metric to its ceiling. terminal Class A pass rate equals 1 in every arm BARE 1, PACK 1, PLACEBO 0.95 did not hold
C3PACK spends more per task than BARE, and does not break even below about 12 fact-dependent tasks per session. mean characters per cell, PACK > BARE, and pack context characters divided by BARE retry characters per cell is above 12 PACK 102,614, BARE 5,492, break_even_tasks 30.52 held
C4The break-even is higher than BM1's, because this library's pack is the larger one. pack context characters divided by BARE retry characters per cell, greater than the same figure in zod--claude-opus-5--bm1--2026-09-07 break_even_tasks 30.52, pack_context_chars 94,296, reference zod--claude-opus-5--bm1--2026-09-07, reference_break_even_tasks 28.48, reference_pack_context_chars 51,247 held
C5PLACEBO behaves like BARE, not like PACK, on Class A — so a PACK effect is the pack's content and not the bulk of any long text in context. round-0 Class A pass rate: PLACEBO is nearer BARE than PACK, ties counted as nearer BARE PLACEBO 0.55, BARE 0.41, PACK 0.91 held
C6The pack breaks at least one Class N task by over-applying a correction. harm above zero, where harm is a null task passing bare and failing with the pack harm 0, class_n_cells 12 did not hold
C7Rounds to pass are lower under PACK than BARE, over the tasks both arms eventually pass. mean rounds_to_pass over the cells both arms passed, PACK < BARE cells 34, BARE 0.47, PACK 0.06 held
C8The rising seats separate the arms at round 0 more than the falling seats do: a correct answer needing an API that did not exist below the boundary cannot be reached by a workaround, and a correct answer that avoids a trap can. round-0 Class A pass rate, PACK minus BARE, over the tasks the gate measured as rising, greater than the same difference over the tasks it measured as falling rising { PACK 0.50, BARE 0.50, gap 0, cells PACK 4 BARE 4, tasks A7 A11 }, falling { PACK 1, BARE 0.39, gap 0.61, cells PACK 18 BARE 18, tasks A1 A2 A3 A4 A5 A6 A8 A9 A10 } did not hold

Three did not hold — C2, C6, C8 — and they are published here with the arithmetic that decided them. The defect the protocol predicted in our own artifact did not appear in this sample — 12 null-task cells with the pack in context, none of them broken by it. A sample that small is quoted with its zero.

The per-task grid

The 11 fact-dependent tasks are not 11 independent trials. The draw is by fact and is blind to how facts cluster, and some drawn facts are answered together by one durable rule, so a subject that holds or acquires that rule moves several cells at once. The grid is published for that reason: the total would hide it.

TaskClassFactBoundary BARE
draw 1 / draw 2
PACK
draw 1 / draw 2
PLACEBO
draw 1 / draw 2
A1A LF23 7.0.0 pass after 1 / pass after 1pass / passpass after 1 / pass after 1
A2A LF16 7.0.0 pass / passpass / passpass / pass
A3A LF3 7.0.0 pass / pass after 1pass / passpass / pass
A4A LF1 7.0.0 pass / pass after 1pass / passpass / pass
A5A LF22 7.0.0 pass after 1 / pass after 1pass / passpass after 1 / pass after 1
A6A LF2 7.0.0 pass / pass after 1pass / passpass / pass
A7A LF4 6.6.0 pass / passpass / passpass / pass
A8A LF13 7.0.0 pass after 1 / pass after 1pass / passpass after 1 / pass after 1
A9A LF19 7.0.0 pass after 1 / pass after 1pass / passpass after 1 / pass after 1
A10A LF12 7.0.0 pass / passpass / passpass / pass
A11A LF35 7.1.0 pass after 3 / pass after 2pass after 1 / pass after 1pass after 1 / fail
N1N none — null task — pass / passpass / passpass / pass
N2N none — null task — pass / passpass / passpass / pass
N3N none — null task — pass / passpass / passpass / pass
N4N none — null task — pass / passpass / passpass / pass
N5N none — null task — pass / passpass / passpass / pass
N6N none — null task — pass / passpass / passpass / pass

What this does and does not say

What the pack bought, on this run: 20/22 of the fact-dependent cells answered at the first attempt against BARE’s 9/22, at roughly 19 times the characters of a bare prompt on each. No single task carries the difference on this run, so there is no transcript to point at in place of the counts.

zod × Claude Opus 5, tasks drawn 2026-09-07, cells recorded 2026-09-07

Benchmark zod--claude-opus-5--bm1--2026-09-07. Every section below this heading is about this run alone; the runs are not pooled and nothing on this page averages across them.

What was measured

One library (zod, graded against 4.5.4), one subject (Claude Opus 5), and 18 coding tasks: 12 whose correct answer depends on a fact this Index publishes about zod, and 6 null tasks on parts of the library that did not change — the only place the pack can be caught doing harm by applying a correction where none was needed. Each task was sent to a fresh subject 2 times in each of 3 arms: BARE, PACK, PLACEBO. PACK gets this library's correction pack in context; PLACEBO gets a correction pack for a library the task never mentions — 7,732 words against this pack's 7,396, the closest of the packs on hand that names no zod — so a PACK effect can be told apart from the effect of having any long document in context.

Every answer is graded by executing an assertion against the installed release — no model judges another model's output. A failing answer is sent the toolchain's own error, in wording identical across arms, up to the pre-registered cap. The protocol, the metrics, the grading rules and the five predictions were committed before any arm ran; the task set was fixed by a recorded, recomputable draw before a single acceptance assertion was written.

Benchmarkzod--claude-opus-5--bm1--2026-09-07
SubjectClaude Opus 5 claude-opus-5
Cells106 graded of 108 planned (1 excluded, 1 abandoned)
Tasks drawn2026-09-07
Cells recorded2026-09-07

The result

ArmCells gradedPassedClass A passed at round 0 Correction roundsMean chars per cellRetry chars per cell
BARE3636/36 22/246 4,4961,799
PACK3535/35 23/230 53,7330
PLACEBO3535/35 20/237 74,21513,782

The metric the protocol nominated as primary did not separate the arms at all. Every arm passed every cell it was graded on, so the terminal pass rate on the fact-dependent tasks is BARE 100%, PACK 100%, PLACEBO 100% and says nothing: a retry loop that hands the model its own toolchain error lets all three converge. The separation that exists is at the first attempt, before any correction — BARE 22/24, PACK 23/23, PLACEBO 20/23.

13 correction rounds were spent in the whole run and 12 of them belong to one task, A6. 10 of the 12 fact-dependent tasks were answered correctly by every arm at the first attempt — a bare model routes around most of these facts, usually by writing the workaround the task's own requirements describe. That is a result rather than a defect in the draw: the admission gate was amended, before any arm ran, to refuse to require that a stale answer fail at the graded release, precisely so “the bare model routed around it” could be published.

The one task where the arms came apart

On A6 (fact LF17, boundary 4.1.13) the arms without the pack deny that the API exists, hold that position through correction rounds against the toolchain’s own output, and reach a passing answer only at the cap, by reverse-engineering the behaviour from what the failures leaked. With the pack the subject answers correctly at the first attempt, in both draws. Every reply quoted by that description is published below, unedited.

ArmRounds to pass
draw 1 / draw 2
Characters read
draw 1 / draw 2
Characters written back
draw 1 / draw 2
BARE 3 / 3 25,917 / 30,8756,451 / 8,662
PACK 0 / 0 53,229 / 53,229594 / 178
PLACEBO 3 / 3 264,199 / 257,37413,598 / 6,376

Characters, not tokens: the transport reports no provider token counts to the operator, this repository has no tokenizer and takes no dependency, and an estimated token count printed beside a measured one is a number nobody can check.

The subject’s replies for this task, every arm, every draw, every round:

What it costs

A PACK cell cost a mean of 53,733 characters against BARE’s 4,496, and BARE’s entire retry overhead is 1,799 characters per cell, averaged over all of its cells. Billed the most generous way this instrument allows — the pack charged once per session, which is not how this run billed it — its 51,247 characters would need 28.5 tasks in one session to repay themselves against that overhead, counted in this run's mix, where 12 of the bare arm's 36 cells were null tasks. The pre-registration predicted about 12, by the same rule. Billed per task, as this run billed it, never.

The most expensive arm is PLACEBO at 74,215 characters per cell: it pays for a long document on every round and still needs the rounds.

The five pre-registered predictions

Committed in the protocol before any arm ran, and resolved here by arithmetic on the cells rather than by the operator’s reading of them. The rule that decides each one is printed beside it.

#Pre-registered predictionRule that decides itMeasuredOutcome
B1PACK passes more Class A tasks than BARE. terminal Class A pass rate, PACK > BARE PACK 1, BARE 1 did not hold
B2PACK spends more per task than BARE, and does not break even below about 12 fact-dependent tasks per session. mean characters per cell, PACK > BARE, and pack context characters divided by BARE retry characters per cell is above 12 PACK 53,733, BARE 4,496, break_even_tasks 28.48 held
B3PLACEBO behaves like BARE, not like PACK, on Class A — so a PACK effect is the pack's content and not the bulk of any long text in context. round-0 Class A pass rate: PLACEBO is nearer BARE than PACK, ties counted as nearer BARE PLACEBO 0.87, BARE 0.92, PACK 1 held
B4The pack breaks at least one Class N task by over-applying a correction. harm above zero, where harm is a null task passing bare and failing with the pack harm 0, class_n_cells 12 did not hold
B5Rounds to pass are lower under PACK than BARE, over the tasks both arms eventually pass. mean rounds_to_pass over the cells both arms passed, PACK < BARE cells 35, BARE 0.17, PACK 0 held

Two did not hold — B1, B4 — and they are published here with the arithmetic that decided them. The defect the protocol predicted in our own artifact did not appear in this sample — 12 null-task cells with the pack in context, none of them broken by it. A sample that small is quoted with its zero.

The per-task grid

The 12 fact-dependent tasks are not 12 independent trials. The draw is by fact and is blind to how facts cluster, and some drawn facts are answered together by one durable rule, so a subject that holds or acquires that rule moves several cells at once. The grid is published for that reason: the total would hide it.

TaskClassFactBoundary BARE
draw 1 / draw 2
PACK
draw 1 / draw 2
PLACEBO
draw 1 / draw 2
A1A LF3 4.4.0 pass / passpass / passpass / pass
A2A LF1 4.3.0 pass / passpass / passpass after 1 / pass
A3A LF10 4.4.0 pass / passpass / passpass / pass
A4A LF15 4.3.0 pass / passpass / passpass / pass
A5A LF9 4.4.0 pass / passpass / excludedpass / pass
A6A LF17 4.1.13 pass after 3 / pass after 3pass / passpass after 3 / pass after 3
A7A LF8 4.4.0 pass / passpass / passpass / pass
A8A LF7 4.2.0 pass / passpass / passpass / abandoned
A9A LF20 4.3.2 pass / passpass / passpass / pass
A10A LF18 4.4.0 pass / passpass / passpass / pass
A11A LF19 4.3.0 pass / passpass / passpass / pass
A12A LF12 4.4.0 pass / passpass / passpass / pass
N1N none — null task — pass / passpass / passpass / pass
N2N none — null task — pass / passpass / passpass / pass
N3N none — null task — pass / passpass / passpass / pass
N4N none — null task — pass / passpass / passpass / pass
N5N none — null task — pass / passpass / passpass / pass
N6N none — null task — pass / passpass / passpass / pass

The cells that are published and counted nowhere

2 of 108 planned cells enter no aggregate above. Each stays in the results file with its reply and its reason. A damaged or disqualified cell is repaired or abandoned, never re-drawn: a cell re-run after its result was seen is a cell chosen by its result.

What this does and does not say

What the pack bought, on this run: on the one fact-dependent task in 12 where the model denied that an API existed, the difference between answering at the first attempt and spending 3 and 3 rounds arguing with the toolchain. Nothing measurable on the other 11, at roughly 12 times the characters of a bare prompt on each. Narrow, expensive and real is the honest description.