This file is self-contained; agents do not need to open the source issue.
Goal
A writer/reviewer pair that disagrees on a judgment call can no longer ping-pong indefinitely; after some bounded number of rejections the run stops and surfaces to the owner instead of burning tokens silently.
Context
No phase has a maximum rejection count. Since "reject liberally" is explicitly encouraged and reviewers are told first-pass approvals should be rare, a writer/reviewer pair that disagrees on a judgment call can loop indefinitely with no escalation. The health monitor watches for stalls, not livelock — a loop that keeps producing rejections looks healthy.
Assumptions / directions to explore (open)
A per-phase iteration budget (e.g. after N rejections, stop and surface to the owner like a blocker) looks like a missing guardrail on the system's own machinery. It would also produce a useful signal for the "relaunch efficiency" metric.
This file is self-contained; agents do not need to open the source issue.
Goal
A writer/reviewer pair that disagrees on a judgment call can no longer ping-pong indefinitely; after some bounded number of rejections the run stops and surfaces to the owner instead of burning tokens silently.
Context
No phase has a maximum rejection count. Since "reject liberally" is explicitly encouraged and reviewers are told first-pass approvals should be rare, a writer/reviewer pair that disagrees on a judgment call can loop indefinitely with no escalation. The health monitor watches for stalls, not livelock — a loop that keeps producing rejections looks healthy.
Assumptions / directions to explore (open)
A per-phase iteration budget (e.g. after N rejections, stop and surface to the owner like a blocker) looks like a missing guardrail on the system's own machinery. It would also produce a useful signal for the "relaunch efficiency" metric.