Commit Graph

2 Commits

Author SHA1 Message Date
type-two
9974b93379 feat(requeue): --force, for when Flow succeeds at the wrong picture
cal79_throbbing was recorded 'success' with 4 assets — but they were Kenner
Alien toy ads, not the Throbbing Gristle clifftop it asked for. Flow refused
the Kenner brief, drew a Voyager plate instead, and emitted the toy variants
late, so the harvester (which attributes whatever NEW tiles appear to the
CURRENT task) filed them under the next task in the queue.

Successes stay protected by default — re-running one spends credits for an
asset you already have. --force is the deliberate override, and it says so
before it acts. --force with no ids matches nothing.

Known limitation, not fixed here: asset->task attribution is a grid diff, so
a late or refused generation can land under its successor. Check the pictures,
not just the status.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 20:13:50 +10:00
type-two
3cff97df93 fix: circuit-breaker on failure streaks; stop binning rate-limited tasks
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>
2026-07-08 18:57:56 +10:00