mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-11-13 15:55:46 +01:00
The workspace recovery worker visited obligations (due re-arms and fallbacks of exhausted holds, cleanup, saved input that waits) only when no unfinished save was selectable. A save that another server owns stays unfinished on every run, so it starved every obligation. The obligation pass also mixed due holds with settled holds whose saved input waits, two per run, and a completed pass never revisited a hold that became due by time alone. Discovery now draws from lanes, each paged by its own cursor: unfinished saves, exhausted holds whose re-arm or fallback is due, and the obligation pass. Each lane with work takes one free slot before any lane takes a second. The due lane wraps at its tail. Lane positions stay in memory; no migration. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>