The bug
#9802 heals the active_review_tracking row at boot, so a restart no longer wedges a PR behind a stale lock. But the interrupted pass had already published the "🔍 LoopOver is reviewing…" placeholder, and nothing replaces it:
- the head hasn't moved → no webhook fires
- the review cache is empty → the pass never finished
- both reconciliation sweeps are disabled on the production ORB
So the PR claims a review is in progress, forever.
Observed
JSONbored/metagraphed#8693: three container recreates in one afternoon (two routine config reloads) each killed a mid-flight review. 25+ minutes later: tracking row terminal, 0 published reviews, no audit events, no queued work. Every deploy during a review does this.
Fix
PR #9868: the boot sweep enqueues an agent-regate-pr (force: true, carrying prCreatedAt so it takes its natural queue position rather than jumping the backlog — the repo's own regate-sort-key:check caught that on the first attempt) for each row it heals.
The bug
#9802 heals the
active_review_trackingrow at boot, so a restart no longer wedges a PR behind a stale lock. But the interrupted pass had already published the "🔍 LoopOver is reviewing…" placeholder, and nothing replaces it:So the PR claims a review is in progress, forever.
Observed
JSONbored/metagraphed#8693: three container recreates in one afternoon (two routine config reloads) each killed a mid-flight review. 25+ minutes later: tracking rowterminal, 0 published reviews, no audit events, no queued work. Every deploy during a review does this.Fix
PR #9868: the boot sweep enqueues an
agent-regate-pr(force: true, carryingprCreatedAtso it takes its natural queue position rather than jumping the backlog — the repo's ownregate-sort-key:checkcaught that on the first attempt) for each row it heals.