fix(major2): --proposal-review komponerer med --resume, og armen som beviser det

To funn, ETT commit, fordi de deler vitnet ved konstruksjon: 02159d21
(run.py:2738, PLAN_EXECUTE_DRIFT) er vakten, da485928
(tests/...:1344, MISSING_TEST) er armen som skulle sett den. AA dele dem ville
krevd en kastbar duplikattest.

VAKTEN: `if args.checkpoint_dir is not None` nektet --proposal-review for HVER
argv med en checkpoint-katalog - men --resume KREVER --checkpoint-dir
(run.py:2776), saa komposisjonen nekten selv anbefaler («pass --proposal-review
at --resume instead») var unaabar, og run.py:2218-helpen, README.md:546 og
MAJOR-2-raden beskrev en sti ingen argv kunne ta. Vakten nekter naa en PARK
(en etappe som returnerer foer noen kandidat finnes), aldri et LOEFT.

ARMEN: `test_the_door_composes_with_resume` sendte hverken --resume,
--checkpoint-dir eller --review-inbox - den var en vanlig enkeltkjoering T13
allerede dekket, altsaa groenn mot nettopp den defekten den var navngitt for.
Den driver naa en EKTE resume: dag 1 parkerer en ekte plan-review gjennom
run.main, ekspertens svar legges i en ekte innboks, og dag N sender
--resume ... --checkpoint-dir ... --review-inbox ... --proposal-review med
run_project innspilt og _refuse_model som kontroll paa null modellkall.

MAALT, i denne rekkefoelgen (Iron Law): armen skrevet FOERST og kjoert mot
uendret vakt -> ROED med nettopp nektlinja i stderr («pass --proposal-review at
--resume instead»), calls == []. Etter vakt-fiksen: 49 passed i fila, og
park-nekten (test_the_door_and_a_parked_exploration_contradict, M39) staar
groenn - den sender --explore uten --resume.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-05 22:01:49 +02:00
commit c81a90c88a
2 changed files with 130 additions and 11 deletions

View file

@ -2735,7 +2735,12 @@ def main(argv: list[str] | None = None) -> int:
file=sys.stderr,
)
return 1
if args.checkpoint_dir is not None:
# ``and args.resume is None`` is load-bearing, not defensive: --resume REQUIRES
# --checkpoint-dir (:2776 below), so a bare --checkpoint-dir test refused the very
# composition this message recommends, and the help text, README and the invariant row all
# described a path no argv could take. What is being refused is a PARK (a leg that returns
# before any candidate exists), never a LIFT (a leg that runs the pipeline to a candidate).
if args.checkpoint_dir is not None and args.resume is None:
print(
"run refused: --proposal-review and --checkpoint-dir: a parked exploration "
"returns before any candidate exists, so the review would never be asked — pass "