Resume Verdict Guard
Safe Resume Verdicts
Resume keeps unfinished work visible in the ledger and checkpoint state.
2 milestones 4 tasks 21 agents
3 plan 4 execute 8 review
119k peak context
97k median execute
1h 34m total 10m 26s per task
6m 31s plan 27m 13s execute 30m 11s review
67 edits 584 commands
codex harness
1.5M tokens in 138.6k tokens out
Resume Verdict Guard changed how Gantry resumes work stopped inside a `for` iteration. The run separates ledger verdicts from restored cursor state, then carries the enclosing iteration through a tail call in the position checkpoint. The current interpreter and position checkpoint code retain both protections.
How this walkthrough is structured
Feature
What did the run build and ship?
A resumed run now preserves unfinished verdicts and restores the iteration context needed to continue them.
Build
How did Gantry structure the work?
The cut split resume correctness between the ledger's current verdict and the checkpoint's restored frame state.
Milestone 1
Ledger Grounded Resume
1 tasks 7 agents 24m 41s wall time 97k peak context
The production pattern world now reads the latest ledger row for the task being restored. The interpreter requires work in the current resume session, no unfinished latest row, and no unfinished descendant before it records completion. The interpreter tests cover a restored task whose prior verdict remains unfinished and is re-entered rather than replaced with `DONE`.
Restored loop frames needed a verdict rule independent of their cursor position. The brief confined that rule to the latest ledger row and to unfinished descendants, so a resume could re-enter unfinished tasks without manufacturing completion. The ledger marks this milestone green, while the available run facts provide no milestone-local stages or recoveries.
Milestone 2
Checkpoint Frame Stack
3 tasks 11 agents 53m 27s wall time 119k peak context
The position checkpoint records frame roles and an enclosing `for` iteration on tail-call frames. Checkpoint validation restricts that enclosing iteration to the frame shape that can carry it, and interpreter restore rebuilds the iteration before completing the restored frame. The current code also accepts the legacy checkpoint version only through its restore path while requiring frame state for the current version.
The remaining boundary was a tail call that had replaced the enclosing `for` frame before a stop. The brief assigned the checkpoint enough structured state to retain that enclosing iteration and to reject invalid frame shapes, without depending on the ledger protection. The ledger marks this milestone green, and the run facts again contain no milestone-local stress record.