A gate set's dispatch asks its preflight first, and a broken one stops it (#613, record 0170)
Merged
DO
11h ago+1236+1236+0123456789012345678901234567890123456789-84-84-01234567890123456789
Issue #613, "The gate pools k dispatches on one commit and reads all of them", PR 2 of 2: the preflight. It follows the Builder's ruling of 2026-11-08 (points 1 to 5, and two additions). It follows #642 (PR 1, the pooled gate, record 0169), now on main.
Dormant like PR 1. It acts only on a gate set, and none is named yet. A development set's dispatch is unchanged.
What changes
- Which cases.
- A gate set's manifest (eval-set/1) names
preflight: three to five case ids ofevals/pr-review, each once. The Maintainer picks them. - No other set names any.
OWNgainspreflight.
- A gate set's manifest (eval-set/1) names
- None a gate set's, held mechanically (the Builder's addition).
heldrefuses a preflight id that is one of the set's own cases.preflight_ofrefuses any preflight case that a gate set underevals/names, by its id or its hash (eval_set_overlaps_a_gate_set). It runs at the plan and again at every step after it, so a development set changed after the plan iseval_set_changed.- A development set that is a gate set, or of another Role or Intent, or an id it does not name, is
eval_set_unreadable. tools/check_examples.pyholds a live gate set to the same rule.
- When.
plankeeps the preflight.fetchreads its cases first, into the scratch's ownpreflight/folder. Their heads go in the shared heads folder by id, which the overlap rule keeps apart from the gate cases' ids.runasks them first, within the same budget.- There is no new step:
.github/workflows/eval.ymlis unchanged.
- What stops a dispatch (
preflight_stops).- It stops if a preflight case has a code of
ENGINE_FAULTSorRUN_FAULTS, or none of them passed. Each of the set's cases is thenunanswered, and is never asked. - One case the reviewer missed, beside others it passed, stops nothing.
- It stops if a preflight case has a code of
- What it reports.
- eval-aggregate/1 gains
preflight: {cases, passed, faults}, counts alone, apart from the set's counts, usage and pool. - eval-ledger/1 gains a
preflightlist, with each case's Result and its fetch cause.
- eval-aggregate/1 gains
- How the gate reads it.
aggregate_verdictholds the block to the manifest's count (count_differsotherwise). A report whose preflight should have stopped the dispatch ispreflight_failed, whatever came after.- The pool reads
preflight_failedaseval_dispatch_faulted. - The judge's line says the preflight's counts and codes.
- Record 0170.
- Its rows say that five preflight cases make a false stop negligible: about 0.008%, against 0.3% at three, for a reviewer that passes 85%. That is the Builder's addition.
- Three residuals: a fault after the preflight, the preflight's share of the time, and a gate set no longer under
evals/.
- Rules.
harness/eval/AGENTS.mdgains two rows, and the cut skill gains a line aboutpreflight_failed.
Two departures from the design note:
- Preflight heads share the heads folder by id rather than sitting under a
preflight/folder, since a gate case may be namedpreflight. eval.yml's header is not edited, because.githubis protected. The module docstring says it instead.
Checks
| Check | Result |
|---|---|
SIM_SEEDS=40 make verify | OK, 1713 tests (at 285a8f6c, main 5ddcda45 merged, records 0169 and 0170) |
Filtered mutants: the 33 new ones, the 11 brought up to date, every one on the eval schemas and tools/check_examples.py, and every one whose test this change touches | 181 of 183 killed. Both survivors were fixed in 6fbe8f75: one killed by a new test, one dropped with the redundant code it mutated. The 5 mutants that fix touched: 5 of 5 killed |
| gitleaks | No leaks |
| Argon (3360282e), 16 parts | 1 minor, fixed: a development set of another Role is tested |
| Claude review (3360282e) | No blocking bug. Medium, fixed: two mutants survived, one now killed by a test of a gate set sharing a preflight id under another hash, one dropped with the redundant [found] +. Low, fixed: a preflight case's fetch cause reaches the ledger, and the record says "a case not fetched" |
| Claude security (3360282e) | Nothing to fix. Low, now a residual in the record: the overlap is held against the gate sets under evals/ at the commit, as held_out already is. Info, fixed: the same fetch cause |
| Muse | Not run (quota); owed after 2026-11-09 |
| Astra | Not run (quota); owed after 2026-11-09 |
š¤ Generated with Claude Code