Floot restart does not reprovision a terminated per-session CLI client #31
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Floot session metadata and conversation history survive daemon or machine restart, but a per-session Codex or Claude client that was explicitly terminated does not recover. The terminated client capability remains stored under its per-session petname, and the restarted Floot factory treats petname existence as proof that the client is usable.
This leaves the session permanently visible but unable to start a new turn. The UI can look wedged even after a full host restart.
Observed
Session mti93nj6-8dakam used codex-client-mti93nj6-8dakam. After CodexClient.terminate():
Cause
makeCliClientResolver.get() currently returns the existing per-session petname immediately when powers.has(perSession) is true.
It does not inspect client liveness or ask the provisioner to repair a terminated client. Startup startAllInboxes() calls getAgent(), which therefore binds the revived agent to the dead capability.
Expected behavior
A durable Floot session should reopen after daemon or machine restart even when its prior CLI sandbox was terminated or disappeared. Conversation and workspace state should survive according to backend policy; a fresh live client should be provisioned lazily.
Suggested fix
Acceptance criteria
Related to #30, but distinct: #30 covers in-flight turn, MCP bridge, and secret-request recovery across restart; this issue covers recovery of the underlying per-session CLI client after explicit termination or loss.