Repository navigation
Replies: 1 comment 3 replies
|
Thanks, @smota, for testing this with a controlled restart before assuming the agents were broken, and for matching each missing ID to the cursor saved during the previous startup. Your reading fits the code. The Pi runner advances its saved cursor from any event that carries an ID, falling back to the event's own As your test showed, the error didn't mean the conversation was lost: the same conversations resumed and every agent answered. We don't know of a recovery step beyond the one you found: a completed turn refreshes the cursor. We've recorded this as a bug, with your suggestion to save only confirmed history-entry IDs, recover from an invalid saved cursor, and tell "resumed, history sync needs recovery" apart from a failed resume. This is from reading the code; we haven't run it. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
OpenRig successfully resumed our agents, but reported history-related errors that made it difficult to tell whether the rig was actually ready. I’d like to understand whether this is an expected recovery condition or a bug in how the Pi integration tracks history.
Why this caught my attention
After restoring a seven-seat rig, OpenRig reported every seat as running and ready, while the Pi terminals displayed:
[pi-runner] ERROR rpc: Entry not found:
As an operator, I couldn’t tell whether this meant lost continuity, incomplete synchronization, or a harmless warning.
We tested this rather than assuming the agents were broken. All seven seats—six Pi and one Codex—answered a brief identity check, despite the Pi errors.
What a controlled restart showed
Using OpenRig CLI 0.6.11 and Pi 1.4.0, I observed:
Each missing ID in the second restart matched an invalid cursor saved during the previous startup.
Where Pi and OpenRig appear to differ
On the Pi side, interface events carry IDs that are separate from persisted history-entry IDs. Pi rejects a history request whose since ID does not exist. That rejection appears consistent with the request it received.
On the OpenRig side, our local code trace suggests the runner can save a generic event ID—including an interface-event UUID—as lastEntryId. The next resume then uses it as a history cursor. A subsequent completed turn refreshes that cursor with a valid history-entry ID.
This points toward an integration issue, although we may be missing an intended contract between the two components.
What I think could improve
Keeping a responsive agent available after a synchronization error seems reasonable. Persisting an ID that cannot be used for the next synchronization seems worth addressing.
My suggested direction would be to persist only confirmed history-entry IDs and recover explicitly from an invalid saved cursor. The operator-facing message could then distinguish “agent resumed; history synchronization needs recovery” from an actual session-resume failure.
Does that interpretation fit the intended design, or is there an existing recovery mechanism we should be using?
All reactions