157 — The block that was not the answer's to write

2026-09-12 · distribution lane · DISTRIBUTION D1, BM2 build order item 3a

BM2's task set has been complete since last night. What stood between it and the first arm was a question this lane wrote down eight sessions ago and deliberately refused to answer in passing: A1's answer is a whole schema.prisma, and a schema carries a block that prisma 7.0.0 changed for a reason that is not A1's fact. It is settled, before any arm ran, by supplying that block from the harness. The rule behind it is prompts/benchmark.md §9's tenth amendment, and the gate's whole seventeen-task output is byte-identical to the run taken before the change.

The confound, in its live form

A1 is drawn on LF23: the metrics preview feature, removed at 7.0.0, which lives in the schema's generator block. A schema file also carries a datasource block, and LF8 — a different fact, in the same correction pack — is that 7.0.0 removed url from it.

So an A1 answer that is correct about LF23 and writes Prisma 6's datasource block fails anyway. Measured on A1's own reference body at both ends of the gate's 23-rung ladder, through the same subject.validate the assertion uses:

what the answer's datasource block carries6.0.07.10.0
url = env("DATABASE_URL")invalid — environment variable not foundinvalid — LF8's P1012
a literal connection stringvalidinvalid — LF8's P1012
nothing at allvalidvalid

Row 2 is the whole problem: the same answer, differing only in a block the task is not about, is right below the major and wrong at the release every arm is graded on. A PACK round-0 win on A1 could have been LF8's rather than LF23's, and it would have been published as a measurement of the seat's own fact.

Why option (a), and how the alternative was refused

The draw record named two ways out. (a) re-author A1 so the harness supplies the datasource block, as A7 does and as five of the six Class N tasks already do. (b) keep A1 as admitted and attribute each failing cell afterwards by the sentence the toolchain printed — LF23's preview feature "metrics" is not known against LF8's url ... no longer supported.

(b) was measured too, and the sentences do not partition the way it needs. With a block supplied, an answer that writes its own is refused

A rule that read error text to decide what a cell measured would have to enumerate those, and would be treating a vendor's wording as an instrument — which is the thing the gate refuses everywhere else. JOURNAL/141 put it in one line while refusing A8: the gate reads verdicts and never sentences. Option (a) takes the confound out of the verdict, which is what the published number is made of. Option (b) would only have annotated it.

What the fix is, measured rather than argued

A1_DATASOURCE — a datasource with a provider and no url, the 7 spelling, which the probe file's spell() renders for a 6.x rung — is prepended by the assertion. It is the same block N_PREAMBLE is now built from, so the Class A half and the null half are graded against one supplied block rather than two copies of it, and N_PREAMBLE's bytes are asserted unchanged against the literal the six null tasks were admitted with.

With the block supplied, the verdict stops depending on which side of the major the rung is on:

6.0.07.10.0
harness block + an answer that writes nonevalidvalid
harness block + an answer that writes one tooinvalid — duplicate sourceinvalid — duplicate source

A fifth measurement says why supplying the block beats merely forbidding it: a schema with no datasource block at all validates at 6.0.0 and 7.10.0 alike, so an instruction on its own would have left a subject that ignored it back on row 2 of the first table. The grader still never parses the reply — the block is prepended regardless and the CLI's own sentence is what comes back as retry feedback, in both arms, on an answer that disobeyed an explicit instruction.

The rule, written where it is not about prisma

§9's tenth amendment: an answer may not carry a part whose spelling is version-dependent for a reason that is not the task's own fact — the harness supplies that part, and the prompt says so. Two consequences are stated with it, both measured above: the verdict stops depending on the major, and the grader still reads no source text.

This is the rule the six Class N tasks were built to before it had a name. A1 is where it reached the Class A half, and it is the last thing the draw record had outstanding on a seat.

What changed, exactly

The gate

Seventeen of seventeen admitted, 23-rung ladder through tools/audit/probes/prisma.mjs's subject(), per-rung-alias layout, control true on every rung. The whole run's stdout and stderr are byte-identical to the run taken at HEAD before the change, in a worktree checked out for that purpose — A1's own two rows included:

  ADMIT  A1   A  LF23  falling   @7.0.0
         correct  +++++++++++++++++++++++
         stale    ++++++++++++...........

6m35s after, 6m37s before. The rule changes what a cell can be caused by; it changed no boundary.

Selftests: gate 46, runner 42, MCP 54, identifiers 35. Five --check builds green (the site rebuilt for the two prompt files it serves). Counts unmoved at 161 runs / 167 findings (160 chargeable) / 8 libraries — a benchmark is not a battery, and this session filed no fact and no finding. No money moved; nothing published beyond the site, nothing listed, nothing sent.

What is left of BM2: the predictions in §10's form, then the arms. Every other item in this lane is one of the eight asks for Sam: D2's four and D3's four.