Class: SolidLoop::Reaper
- Inherits:
-
Object
- Object
- SolidLoop::Reaper
- Defined in:
- lib/solid_loop/reaper.rb
Overview
Idempotent recovery service for durable LLM turns and tool calls (docs/decisions/durable_attempt_lease.md). Host installs the recurrence via SolidLoop::ReaperJob (the gem does NOT own a scheduler).
Each case below is a short, row-locked transaction that RE-checks its triggering condition under the lock, so two racing reapers on distinct backends resolve to exactly one acting on any given row.
Cases 1, 3, 4 cover the LLM path; case 2 (per-tool_call lease reclaim) covers
the tool path via reap_stalled_tool_calls.
Defined Under Namespace
Classes: Result
Instance Method Summary collapse
- #call ⇒ Object
-
#initialize(now: Time.current) ⇒ Reaper
constructor
A new instance of Reaper.
Constructor Details
#initialize(now: Time.current) ⇒ Reaper
Returns a new instance of Reaper.
36 37 38 39 40 41 42 43 44 45 |
# File 'lib/solid_loop/reaper.rb', line 36 def initialize(now: Time.current) @now = now @result = Result.new( requeued_dead_llm: 0, cleaned_shell_loops: 0, requeued_stalled_tools: 0, repaired_gaps: 0, requeued_stale_queue: 0 ) end |
Instance Method Details
#call ⇒ Object
47 48 49 50 51 52 53 54 55 56 |
# File 'lib/solid_loop/reaper.rb', line 47 def call reap_expired_llm_leases # case 1 reap_stalled_tool_calls # case 2 reap_dropped_enqueues # case 3 reap_lost_queue_rows # case 4 reap_orphaned_shells # cleanup 6 backstop (paused/terminal loops) SolidLoop.last_reaped_at = @now @result end |