Two causes of the paired room "keeps stopping" symptom:
- Reviewer approvals worded as "PROCEED" were parsed as 'continue'
(a change request), causing an owner TASK_DONE <-> reviewer PROCEED
ping-pong until the deadlock cap. parseReviewerVerdict() now treats a
leading PROCEED as approval so the turn finalizes after one round.
- When the Codex reviewer was unavailable, the owner's answer was held
for review and the user saw nothing. Now the held owner answer is
emitted with a "review skipped" notice on reviewer_codex_unavailable.
Verified: tsc --noEmit clean; 27 related vitest tests pass.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- mark Codex bearer/refresh failures as terminal auth-expired states
- sync refreshed session auth back to rotation slots and revive refreshed dead_auth slots
- stop paired arbiter retry loops when Codex accounts are unavailable
- add regression coverage for rotation leases, follow-up suppression, and arbiter closure