Resume goals after transient API failures with persisted exponential backoff while respecting pauses and interruptions.
33 lines
1.7 KiB
Markdown
33 lines
1.7 KiB
Markdown
```mermaid
|
|
stateDiagram-v2
|
|
[*] --> Running
|
|
Running --> [*]: operator stopped / close socket / retain checkpoint
|
|
state Running {
|
|
state Connection {
|
|
[*] --> Connect
|
|
Connect --> Reconcile: WebSocket over Unix socket / initialize
|
|
Reconcile --> Listen: enumerate loaded threads / subscribe / read goal and latest turn
|
|
Listen --> Reconcile: poll interval or retry deadline
|
|
Reconcile --> Reconnect: connection failure
|
|
Listen --> Reconnect: connection failure
|
|
Connect --> Reconnect: connection failure
|
|
Reconnect --> Connect: capped exponential backoff with jitter
|
|
}
|
|
--
|
|
state "Per loaded thread; checkpointed across connections" as Recovery {
|
|
[*] --> Observe
|
|
Observe --> Armed: active goal and in-progress turn observed
|
|
Armed --> Backoff: same goal blocked and same turn failed with transient API error
|
|
Armed --> Observe: successful turn / reset failure count
|
|
Armed --> Observe: human interrupt / pause / clear / replacement / limit / completion / non-transient error
|
|
Backoff --> Check: persisted retry deadline reached
|
|
Check --> Observe: goal changed / turn changed / thread active or unloaded
|
|
Check --> Resume: same blocked goal / failed turn / thread idle or systemError
|
|
Resume --> Armed: goal activated and new turn observed
|
|
Resume --> Backoff: RPC failure / persist next retry
|
|
Resume --> Observe: activation observed before next turn
|
|
Backoff --> Observe: human pause / clear / replacement / limit / completion
|
|
Observe --> Observe: existing blocked goal or non-transient failure
|
|
}
|
|
}
|
|
```
|