Class: SolidLoop::Reaper

Inherits:
Object
  • Object
show all
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

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

#callObject



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