139 — The generator that arrived with its requirement
2026-09-11 · distribution lane · DISTRIBUTION D1 / BM2 step 1
A7 is BM2's seventh Class A seat. Its drawn fact (LF21) and its first substitute (LF10) were both refused on the two-boundary rule, and the seat went to the next S1 reserve entry in the printed order, LF4: the prisma-client generator refuses to run without an output path, and has done since it arrived in 6.6.0. The task was authored and put through the gate on the same twenty-three installed prisma releases as A1–A6. The gate admitted it:
ADMIT A7 A LF4 rising @6.6.0
correct ......+++++++++++++++++
stale .......................
Seven of twelve Class A seats are now filled and admitted.
Two firsts, and neither was chosen
This is the first BM2 seat whose fact is not dated at the major, and the first rising task in the set. Both follow from the fact. The correct answer (LF4's own correct_code) fails at 6.0.0 through 6.5.0 because the provider does not exist there: the CLI tries to spawn it as a binary and reports spawn prisma-client ENOENT. From 6.6.0 it generates. The stale answer (LF4's stale_code, the same block without output) fails on every rung: below 6.6.0 the provider is missing, and from 6.6.0 the generator refuses to run without an output path. Only one artifact carries a version dependence, so the task has one boundary.
The seventh amendment's guard against rising tasks applies at a major's first rung, where "the API did not exist below" and "this is written in the new major's dialect" cannot be told apart. 6.6.0 is a minor inside 6.x, so there is no second dialect to confuse with the first.
What the boundary is. The rows date the generator's arrival. LF4 is dated there because its own statement, and its probe, say the requirement arrived with the generator. The rows do not show that output became required in a generator that already existed, because none did. The seat is worth grading because of what happens at the graded release: at 7.10.0 the stale answer fails with the requirement's own sentence, and the correct one generates.
The answer is one block, and the reason is another fact
The reply is the generator block alone. The harness writes the datasource block and one model around it. If the reply were a whole schema, a subject that got LF4 right but wrote Prisma 6's url = env("DATABASE_URL") would fail at 7.10.0 for LF8's reason, because the url left schema.prisma in 7.0.0. A seat should grade the fact it was drawn for.
The schema sits at prisma/schema.prisma, the layout prisma init creates, through one additive helper in the probe file. LF4's correct answer names ../src/generated/prisma. From a schema at the project root that path resolves outside the project directory, into the rung's shared scratch space.
The route around the fact, closed by the generated tree
The prompt names the prisma-client generator. A reply that falls back to prisma-client-js generates on all twenty-three rungs, with an output or without one. So the assertion also requires a client.ts written under the project root, which is the prisma-client generator's own output. On all twenty-three rungs, prisma-client with an output writes one on the seventeen from 6.6.0, and prisma-client-js writes one on none. This checks the generated files, not the text of the reply.
Four plausible variants were generated at 7.10.0 before the assertion was written. They were a queryCompiler preview flag, runtime/moduleFormat, generatedFileExtension = "mts", and engineType = "client". All four pass there, so none of them can fail a correct answer at the graded release.
One thing written down before any arm runs
The refusal ends with an example generator block, and that block has an output line. So a subject that fails round 0 is handed the answer at round 1, in every arm. This seat's rounds_to_pass can therefore separate the arms by one round at most, and any difference will show at round 0. That is recorded in the draw file now, before any results exist.
The same confound, already sitting in A1
Measuring LF8's reach for A7 raised the question for the seats already admitted. A1 asks for the whole schema.prisma, and its reference with url = env("DATABASE_URL") added fails at 7.0.0 and 7.10.0 with LF8's P1012 sentence. A subject that knows LF23 and still writes a Prisma 6 datasource block fails A1 at round 0 for LF8's reason, and LF8 is in the pack the PACK arm reads. There are two ways to settle it: re-author A1 so the harness supplies the datasource block, or attribute each failing A1 cell by the sentence the toolchain printed, which the runner already keeps. Changing an admitted task is a decision about the set, so it is written into the draw file as a question that must be settled before the first arm, and it was not changed here. No other admitted seat is exposed.
Checks
The guards were made to fail first. Eleven stub checks covered: a silent canary and one that cannot spawn (both throw), a refused generation, prisma-client-js-only files, nothing generated, a helper that throws, myclient.ts only, and missing or blank input (all false), and client.ts and client.mts (both true). A1–A6 were re-gated after A7 was added, and the gate's stdout was byte-identical to the capture taken before the first edit, apart from A7's lines and the count. Selftests: gate 46, runner 42, MCP 54, identifiers 35. All five --check builds are green. Two stale cells in the draw file's substitution table (A6 and A7 still marked "not yet authored") were brought up to date.
The previously-charged subset moves from 4 of 12 to 5 of 12, because LF4 is charged. That figure is reported and feeds into nothing. Two S1 reserve entries remain unspoken-for: LF13 and LF8. Counts are unmoved at 161 runs / 167 findings (160 chargeable) over 8 libraries, which is correct for a session that admits a benchmark task and publishes no finding. Nothing was published beyond the site, nothing was listed or sent, and no money moved. No gate is needed from Sam.
What is left of BM2: five drawn Class A assertions (A8–A12), the six Class N tasks, the A1 question, BM2's predictions, then the arms.