Verdict · 01
Approved.
Reviewer found nothing material. Advance the phase, append the verdict to the audit log, move on. The loop is over.
Verdict · 02
Needs revision.
Findings with severity and a fix. Apply, re-run the gate. Repeat until clean. Each retry increments a counter; counters are part of the record.
Verdict · 03
Escalate.
The reviewer can't reach a verdict — ambiguity, missing context, contested judgement. Stops the loop; pages a human. Don't auto-decide what wasn't decided.
Verdict · 04
Loop detected.
Same finding survives two consecutive fixes. The disagreement is the signal. Advance with documented residue and surface to a human — don't grind.
tail -f gate.log · one JSON line per gate run, committed alongside the code
{ ts: "2026-05-21T14:22Z", phase: "plan-review", verdict: "needs-revision", findings: 3, retry: 0 }
{ ts: "2026-05-21T14:31Z", phase: "plan-review", verdict: "needs-revision", findings: 1, retry: 1 }
{ ts: "2026-05-21T14:38Z", phase: "plan-review", verdict: "approved", findings: 0, retry: 2 }
{ ts: "2026-05-21T15:04Z", phase: "impl-review", verdict: "approved", findings: 0, retry: 0 }
{ ts: "2026-05-21T15:51Z", phase: "bot-loop", verdict: "loop-detected", findings: 1, retry: 2 }