Two bugs, both found by autopsy of the djsim_phonewall run (2026-07-08):
15 calendar prompts queued, 2 generated, then THIRTEEN consecutive
"Timed out — no new asset" at a metronomic 3m30s apart. 45 minutes of the
driver politely feeding prompts into a Flow that had stopped generating.
1. NO CIRCUIT BREAKER. Each timeout threw, was reported failed, and the
loop moved straight on. When Flow goes quiet it does not spontaneously
start again. Now: 3 consecutive failures -> clear isRunning, log a loud
system message, leave the queue intact for a hand-resume. (The abuse-flag
path already had consecutiveRateLimits; failures had nothing.)
2. done_ids() COUNTED 'ratelimited' AS DONE. handleRateLimit() writes that
status with the explicit comment "report the task back as pending" — and
the server then binned the task forever. Now excluded. 'failed' is still
counted: a timeout may have burned credits invisibly, so nothing retries
automatically.
requeue.py: the deliberate way to retry. --list / --dry / by id or prefix /
--failed. Writes a .bak, never re-runs a success. Used it to make the 13
cal79 prompts pending again.
Note for whoever reads this next: the LIVE server + queue live in
~/Library/Application Support/flowrinse/, not this repo. HERE is derived
from the script's own dir, so running the repo copy silently serves the
stale Jul-6 queue. Copy the script over, run it from there.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>