145 — The floor that was narrower than its sentence
2026-09-11 · distribution lane · DISTRIBUTION D1 / BM2 step 1
A9 is BM2's ninth Class A seat and the last S1 seat. Its drawn fact is LF19, "Prisma 7 ships as an ES module and requires Node >= 20.19.0 and TypeScript >= 5.4.0." The gate admits it on the same twenty-three installed prisma releases as A1–A8:
ADMIT A9 A LF19 falling @7.0.0
correct +++++++++++++++++++++++
stale ++++++++++++...........
It is the first drawn fact since A5 to hold its own seat. Four of the eight seats before it went to the reserve. No amendment was needed and the probe file was not touched.
Which clause, and what instrument
LF19 has three clauses, and only one of them has ever been executed. probes.LF19 reads the engines.node range that the installed prisma package declares in its own package.json, and that is the clause whose 7.0.0 the bisector confirmed. The TypeScript and ESM clauses have no probe row. A task resting on them would rest on a release note, which §7 rule 1 forbids. So A9 grades the Node floor and nothing else, which is the rule A7/LF10 set: the probe chooses the clause.
The answer is one exact Node.js release. The criterion is that the range the rung's manifest declares admits it. The survey read that range on all twenty-three rungs before any task file existed: >=18.18 on all twelve 6.x rungs, ^20.19 || ^22.12 || ^24.0 at 7.0.0, and ^20.19 || ^22.12 || >=24.0 from 7.1.0. LF19's own 20.19.0 is admitted everywhere. The 6.x floor, 18.18.0, is admitted only below 7.0.0. That gives one boundary, falling.
Why "admits", when the prompt asks for the oldest
The prompt's scenario pins the oldest Node release the dependency supports. Grading on "oldest" would be wrong, and the ladder shows why. The oldest admitted release is 18.18.0 below 7.0.0 and 20.19.0 from it, so the correct answer would rise at 7.0.0 exactly where the stale one falls. That is two boundaries on one release, A4/LF15's refusal. A floor claims that the answer is at or above it, and "admits" is all of that claim.
The cost is written down before any arm. An answer that pins a newer release than it needs passes on every rung without knowing LF19. A subject can route around this seat by hedging upward, and whether one does is a result, not a defect (§9 second amendment). The prompt says what is graded and says that oldest-ness is not.
The sentence is looser than the file
LF19 says ">= 20.19.0". The manifest it was dated from is narrower: it admits no 21.x, no 22.0.0 through 22.11.x and no 23.x, and at 7.0.0 nothing from 25. The grader follows the manifest, so 22.0.0 is a false even though the fact's sentence allows it. For an answer that is actually the oldest, the two agree on 20.19.0. The gap reaches only an answer that hedges upward into it, and that includes a PACK subject that reads the pack's sentence and then rounds up. That is the one way this seat can mark a pack-guided answer wrong, so it is recorded before the arms rather than discovered in them.
The fact is not corrected here. Facts are the data lane's, and the date holds. The finding went to BACKLOG 1h-g with two more read off the same manifests at five rungs. The TypeScript clause has an executable shadow: peerDependencies.typescript moves from >=5.1.0 at 6.19.0 to >=5.4.0 at 7.0.0. The ESM clause has none: neither prisma nor @prisma/client declares a "type" field at any rung read. Neither observation says a clause is wrong.
An evaluator, and the check that made it trustworthy
Grading "admits" needs npm's range grammar, and the repository takes no dependency. So the assertion file carries a small evaluator. It reads || alternatives of >=, >, <=, <, =, ^, ~ and bare versions, and it throws on anything else. A range it cannot read is the harness's blindness, not the subject's error. It was checked against npm's own semver 7.7.3, bundled with this machine's npm and used only for the check, over 31 ranges × 770 versions: 23,870 pairs, no disagreement. It is exported so the check runs against the committed function. The assertion then passed 27 stub checks before the gate saw it. Four guards throw rather than return false, and one of them is a witness: the manifest must name prisma at the rung's own version.
A failing round hands back the manifest's engines object verbatim, which is the answer. As with A7 and A8, this seat's rounds_to_pass can separate the arms by one round at most, and its round-0 cell is where any difference will show.
The seat and the set
A9 = LF19. Nine of twelve Class A seats are filled and admitted, and the S1 stratum is full. LF19 was never charged, so the previously-charged subset stays at 6 of 12. That is reported and feeds into nothing.
Checks
A1–A8 were re-gated after A9 was added to the manifest and the assertion file. All nine were admitted. The gate's stdout differs from the run captured before the first edit only by A9's three lines and the count (8 of 8 → 9 of 9), and its stderr is byte-identical. The probe file was not touched. Selftests: gate 46, runner 42, MCP 54, identifiers 35. All five --check builds are green. Counts are unmoved at 161 runs / 167 findings (160 chargeable) over 8 libraries, which is correct for a session that admits a 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: A10 and A11 (S2, two reserve entries: LF11, LF34) and A12 (S3, no reserve; a refusal drops the seat), the six Class N tasks, the A1 question, BM2's predictions, then the arms.