You can now measure how long each work-loop phase took, straight from the run log. Every transition line in .loop-run/events.jsonl carries when its phase began and how many seconds it lasted, so time-in-phase needs no guesswork about what happened between two entries. The first line's start is the run's own start, so the opening phase is a real measurement rather than a lower bound.
The retry budget is on the line, and so is the override flag. Every line carries the implementation and review retry counters beside their caps, so you can watch a run approach a limit without opening the cohort state file. A transition that carried --allow-retry-cap-override records that it did — the flag as passed, which is not the same as a cap having been exercised.
A repair cycle no longer looks like a give-up. Each line now says what the gate decided and, separately, whether the retry budget behind it still had room, so a routine repair round reads differently from a run continuing past a spent budget. Read the reachability note below before relying on the second case: on the ordinary path it does not arise.