165 — The arms that separated on the round, not the verdict: BM2's first 42 cells, and the sentence that pooled a finished run with an unfinished one
2026-09-12, distribution lane (DISTRIBUTION D1 / BM2, the arms). The last thing BM2 was waiting on was subjects. Forty-two of its 102 cells now have a record: tasks A1 through A7, three arms, two draws each, nothing left mid-round. Every cell was a fresh Claude Sonnet 5 subagent — 53 spawns, counting the eleven retry subjects — graded by tools/benchmark/run.mjs against prisma@7.10.0 on the bisector's per-rung-alias ladder.
No result is published and none is computed here. JOURNAL/163's §12 amendment, written the day before the first arm, says a run publishes its cells from the first one and its result only when every planned cell has a record. data/index.json carries complete: false, cells.recorded: 42, and no pass_rate, cells_by_arm, mean_chars_per_task, pack_break_even_tasks or harm key at all — the absence of the key is the enforcement, and it held on its first real exercise: five --check surfaces built green off a half-filled run.
What the cells are
Published in the grid at /benchmark and in the results file, per task and per arm, as they landed. Seven Class A tasks, and all 42 cells passed in every arm; the arms are separated only by how many correction rounds each needed, which is rounds_to_pass, a recorded per-cell metric and not a derived figure. The two tasks where a round was spent in more than one arm are the two whose fact the task's own wording does not give away:
- A1 (LF23) — the
previewFeatures = ["metrics"]key. BothBAREdraws and bothPLACEBOdraws wrote it and gotP1012 — The preview feature "metrics" is not knownback fromprisma validate; bothPACKdraws omitted it at round 0. - A5 (LF22) — which packages the generated client's own
package.jsondeclares. BothPACKdraws named@prisma/client-runtime-utilsat round 0. NeitherBAREdraw did and neitherPLACEBOdraw did;BAREdraw 1 listed nine packages, five of them engine packages that Prisma 7 no longer has, and still missed the one the manifest declares.
A3, A4 and A6 each spent one round in one BARE draw and none in the other — the driver-adapter requirement, which the same subject met unprompted in draw 1 and missed in draw 2. Two draws is what the pre-registration bought for exactly this: a single draw would have published either number as the fact.
The defect this session found, and it is in the sentence a crawler quotes
/benchmark's meta description and its JSON-LD description both read, after the first cells landed:
…148 graded cells on zod and prisma … Results, per-task grid, and the two pre-registered predictions that did not hold.
The 148 pooled BM1's 106 completed cells with BM2's 42 in-progress ones. The two predictions are BM1's, resolved off the 106. The page body was already right — build-site.mjs splits done from running and computes predTotal and failTotal over completed runs only, with a comment block saying in as many words that a run in progress is not part of the headline. One quantity was left pooled over every run: gradedTotal, and it feeds nothing but the two description strings — which is to say it feeds the structured data and the one sentence an answer engine lifts, and nothing a reader scrolling the page would ever catch.
Fixed by applying the rule already stated three lines above it: gradedTotal counts completed runs, and the cells of a run in progress get their own clause that says what they are — "A further 42 cells of prisma × Claude Sonnet 5 are recorded and in progress, with no figure derived from them yet." This is D4's caveat rule reaching a surface D4 did not name: the caveat belongs inside the quotable sentence, because the quotable sentence is what gets quoted.
The sixth key that was not actually withheld
JOURNAL/163 named six keys a run in progress does not get, harm among them. Verifying that claim against the served data/index.json this session found harm: null on BM2 — present, with the one value that entry said would let a surface print quietly.
It was not a slip so much as two different absences spelled the same way. harm has a legitimate null: a completed run whose Class N pair was never graded, where 0 would be a safety claim nobody measured. The in-progress case was folded into it. They are now spelled differently — a completed run keeps null where the pair is unmeasured, and a run in progress has no harm key at all, like the other five — so a surface reaching for a harm figure mid-run gets undefined and fails loudly instead of rendering a blank.
Nothing rendered changed when it was rebuilt, which is the evidence that no surface was reading the top-level key yet: /benchmark reads p.measured.harm on the prediction, which §12 already strips. BM1's harm: 0 is untouched. The point is that the next surface to want it will hit the rule rather than a null.
Two operator notes
The harness's tool_uses counter is not a second check on the subjects. It correlates with the arm, not with behaviour: BARE cells report 1, PACK and PLACEBO cells 2 or 3, because a 96k–113k character prompt file takes more than one Read call to get through. The subagent transcript files this harness writes were empty (0 bytes) for every cell, so there is no independent record of what a subject called. §14's TOOLS_USED: self-report remains the only check, exactly as it says of itself, and all 53 subjects reported none.
One reply carried a preamble and it is stored with it. A2/PACK/draw 2 opened by reasoning aloud about whether the task file was injected content before answering. It is saved verbatim, graded on the code block like every other cell, and noted here rather than trimmed.
State
42 of 102 cells; 60 to go, resumable with the same command. Five --check green after the build-site fix; selftests MCP 55, runner 42, gate 46, identifiers 35. 161 runs / 167 findings (160 chargeable) / 8 libraries unmoved — this lane files no facts and no findings. No money moved. Nothing published beyond the site, nothing listed or sent. The eight Sam gates are unchanged: D2's four and D3's four.