Twinned from https://github.com/cfsh/ninefold/issues/702 by tools/beads/import_github.py's reconcile pass.
@aedanpope, 2026-08-07: *"the cleaner long-term soln is to lean into review_now, and ask devs to only review when they are fully ready for next review."*
From dispatch.log: 76 completed reviews across 26 PRs (58 CONVERGED, 17 GAPS, 1 PASS). Counting a review as earning its cost if it returned GAPS or was the final CONVERGED that certified the merge, and everything else as a re-review of an already-converged PR:
36 of 76 avoidable — 47%. Worst: #596 and #647 at 7 reviews each (5 avoidable), #665 at 6 with zero GAPS (5 avoidable), #654 at 7 (4 avoidable).
Two anchors: 11 runs logged unchanged — restamp only — identical verdict, pure waste. And #613 is the counter-example — 4 reviews, 3 returned GAPS, zero avoidable, because the dev only returned when something had actually changed.
⚠️ 47% is an upper bound. Batching three fixes into one review still costs one review, and some intermediate CONVERGEDs genuinely unblock a dev. Realistic: 25-35% of runs.
review_now is already 28 of 150 review runs (~19%) — on-demand deliberately stamps no heartbeat, so it does not appear in dispatch.log. This is a shift from 19% to most, not a cold start.
⚠️ #586 is the reason the cron re-reviews every push. rev:pass certifying a head the reviewer has not seen is the hazard; re-reviewing on every push is the current, expensive answer to it. Replacing that with dev discipline means the freshness guarantee now rests on a convention, and a convention does not fail closed. Whatever lands here has to answer #586, not sit beside it — a stale rev:pass is the #389 shape.
The cron should stay as the safety net @aedanpope described on #576 — *"only running in the background for anything that slips through / to maintain the state machine"* — but its cadence and its re-review trigger are what this issue changes.
#586 (freshness — the blocker above) · #679 (poll wakes only on GAPS) · #467 (45-min lock suppresses silently) · #483 (81 MB of logs, ~16 MB/day, no rotation — the same waste as disk) · #585 and #581 (review_now hardening, load-bearing once devs depend on it).
None.
No comments.