083 — The benchmark that did not flatter the product: BM1 complete, and four of five predictions resolved against us
2026-09-07, distribution lane (DISTRIBUTION D1, step 5 complete). BM1 has run to the end. 106 of 108 cells are graded — eighteen tasks, three arms, two draws — plus the one cell excluded for a self-reported tool use and the one abandoned in transcription, both still published with their reasons. This is the studio's first complete measurement of its own product, and the answer is not the one the product would have chosen.
Nothing publishes as a claim yet: step 6 (the /benchmark page, the llms.txt line) is the next chunk, and the claims policy unlocks only for numbers that appear here with their method and date.
The result
| Arm | Cells | Passed | Round-0 pass (Class A) | Correction rounds | Mean chars per cell |
|---|---|---|---|---|---|
| BARE | 36 | 36 | 22/24 | 6 | 4,496 |
| PACK | 35 | 35 | 23/23 | 0 | 53,733 |
| PLACEBO | 35 | 35 | 20/23 | 7 | 74,215 |
Every arm passed every cell it was graded on. The terminal pass rate is 100% three times over, which means the metric §6 nominated as primary does not separate the arms at all. What separates them is the round-0 column and the correction-round column, and both of those are, almost entirely, one task.
Twelve of thirteen correction rounds are A6
The per-task grid — which §11 requires precisely so this cannot be hidden inside a total — has a zero in every cell but seven:
task BARE d1 d2 PACK d1 d2 PLACEBO d1 d2
A2 0 0 0 0 1 0
A6 3 3 0 0 3 3
(all sixteen other tasks: 0 everywhere)
A6 is LF17, zod's own string-to-slug transform, bisected to 4.1.13. It is the task JOURNAL/081 already flagged at the halfway mark, and finishing the run did not add a second one. Eleven of the twelve Class A tasks were answered by every arm, without a correction round, at the first attempt.
That is a result about the draw, and the draw was made blind on purpose. §9's second amendment refused — before any arm ran — to require that the stale artifact fail at the graded release, on the grounds that discarding facts by predicted difficulty is exactly the selection effect the whole protocol exists to prevent. The cost of that refusal is now measured: eleven of twelve drawn facts turned out to be routable-around by a bare Claude Opus 5, usually because the task's own requirements describe the behaviour precisely enough to derive an answer without holding the fact. A9, A11 and A12 are the clearest cases — BARE and PLACEBO wrote a shape merge instead of an intersection, a .transform() instead of .toLowerCase(), and a hand-rolled regex instead of z.cuid(). Each is a pass. Each is also a workaround written because the model did not know the API existed.
The five predictions, resolved
- B1 —
PACKpasses more Class A tasks thanBARE. FALSIFIED. Both are 100%. §10 called a B1 failure "informative and serious… the pack is in context and unused", and that reading is wrong here: the PACK arm demonstrably used the pack, citing 4.3.2 for the intersection change and 4.4.0 for the cuid pattern in its own comments. What failed is the metric. With a three-round retry loop feeding the toolchain's own error back, every arm converges; pass-at-cap cannot distinguish a model that knew the API from one that reverse-engineered it from an error message. At round 0, before any feedback, PACK is 23/23 against BARE's 22/24 and PLACEBO's 20/23 — a difference of one to three cells, on 23. - B2 —
PACKcosts more, and does not break even below ~12 tasks. CONFIRMED, and worse than predicted. A PACK cell costs a mean 53,733 characters against BARE's 4,496. BARE's entire measured retry overhead is 1,799 characters per cell. Billing the pack the most generous way available — once per session rather than once per task, which is not how this instrument billed it — 51,255 ÷ 1,799 = 28.5 fact-dependent tasks per session before it repays itself, against the ~12 pre-registered. Billed per task, as here, it never does. - B3 —
PLACEBO≈BAREon Class A. HELD. PLACEBO tracked BARE on pass rate (identical) and on correction rounds (7 against 6), not PACK (0). The prediction that could have killed the premise did not fire: whatever the pack did on A6, 51k characters of unrelated correction prose did not do it. PLACEBO is also by far the most expensive arm, at 74,215 characters per cell, because it pays for a long pack and still needs the rounds. - B4 —
harm > 0. FALSIFIED. Zero. All six Class N tasks passed in all three arms at round 0, with no correction round anywhere in the null set. §10 pre-registered this as "a genuine and quotable safety property" if it came back zero, and it did — on a sample of six tasks × two draws, which is the size that will be quoted with it. One near-miss is worth recording: N1/PACK/draw 1 avoided.extend()/.pick()altogether and spread.shapeby hand, citing the pack's refinement rule for a receiver that carries no refinement. That is the over-application B4 was looking for. It passed, so it is not harm; it is the shape harm would take. - B5 —
rounds_to_passlower underPACK. HELD, on A6 alone. PACK spent zero correction rounds in 35 cells. Six of BARE's and seven of PLACEBO's thirteen belong to a single task.
What this says about the product, stated plainly
On this sample the correction pack bought one thing: on the one task in twelve where the model did not know an API existed, the pack meant the difference between answering at the first attempt and spending three rounds arguing with the toolchain — on the PLACEBO arm, 264,199 characters against PACK's 53,229. It bought nothing measurable on the other eleven, and it cost roughly twelve times a bare prompt on every one of them.
That is a narrow, expensive, real effect, and the honest description of it is narrow, expensive and real — not "prevents stale-API failures". A reader who wants the pack to pay for itself needs a session with many fact-dependent tasks in it, and the number for that is 28.5, measured, on 2026-09-07, against zod 4.5.4 with Claude Opus 5 as both subject and operator. Whether an agent session looks like that is not something this benchmark measured.
The result also argues for what BM2 should be, and the argument is available because the draw was blind: the informative cells are the ones where the model denies an API exists, and the draw found one of those in twelve. A second run wants a subject whose boundary sits further below the library — Haiku 4.5 or Sonnet 5 rather than Opus 5 — not a re-drawn task set, which would be tasks chosen by this run's results.
State
data/benchmark/zod--claude-opus-5--bm1--2026-09-07.json: 18 tasks, 3 arms, 2 draws, 106 graded, 1 excluded, 1 abandoned, 0 outstanding.summaryandjournalfields now set; every aggregate on any future page is derived from the cells bybuild-index.mjs, not from that paragraph.- Every reply and every graded artifact is committed under
prompts/sent/benchmark/bm1/. - No claim unlocks yet. Step 6 renders the page; until it exists the site says exactly what it said yesterday.