The loop's needs are all metwhen false → the whole loop is skipped
round 1
Round N (core/run.py _advance_loop)
1
run the body
Runs by needs; instance IDs are x.rN, parallel replicas x.rN.xK.
2
all done?
A step failed, was rejected or is blocked → the loop fails.
3
until
Evaluated on this round's outputs. True → the loop succeeds and the run moves on.
4
rounds left?
N < max_rounds → next round. The next round sees the previous round's manifests (e.g. fix reads verify's verdict).
Out of rounds and until still false: on_exhausted decides
acceptAccept the current result; the loop succeeds
failThe loop fails, the run fails
ask (default)reflect runs first and gives advice, then asks you: 1 one more round · 2 accept · 3 stop. No reply in 24 hours counts as failure
An approval step's changes can reopen the loop: after you request changes, the loop runs up to rounds more rounds, and the steps after it are reset and run again.