fix(maestro): always probe tmux during recovery
#164 skipped the tmux probe whenever the stored boot id differed from the current one, assuming a changed boot id proves the tmux server is gone. It does not: a restored state directory, a VM or container snapshot rollback, or a truncated boot_id file all change it while tmux keeps running with live sessions. Every one of those sessions was then registered Dormant and stranded — resume respawns `maestro-<id>`, which collides with the name tmux still holds, so it failed 502 forever. Recovery now always runs `tmux list-sessions`, the single source of truth for liveness the rest of the daemon assumes. The boot id keeps its other job: telling a reboot from a restart in recovery's log. The #164 test asserted the old behaviour with tmux still alive, so it is replaced by one asserting the session is adopted Running, plus one covering a real reboot — boot id changed and the tmux server dead — still going dormant. Refs #174
This commit is contained in:
+7
-1
@@ -75,7 +75,13 @@ A daemon restart leaves tmux alone, so recovery re-adopts every
|
||||
beyond the reconnect above.
|
||||
|
||||
A **host reboot** is different: it kills the tmux server, so there is nothing
|
||||
to adopt while every session's sidecar is still on disk. Recovery makes a
|
||||
to adopt while every session's sidecar is still on disk. Recovery always asks
|
||||
tmux — `tmux list-sessions` is the single source of truth for liveness, and the
|
||||
kernel's `boot_id` only tells a reboot from a restart in the log (#164, #174).
|
||||
A boot id changes without the tmux server dying whenever the state directory is
|
||||
restored, a VM or container snapshot is rolled back, or the `boot_id` file is
|
||||
truncated; a session tmux still holds is adopted `Running` in every one of
|
||||
those cases. Recovery makes a
|
||||
second pass over those sidecars and registers each as a `Dormant` session
|
||||
(#162) — id, name, cwd, command, worktree and `created_at` intact. A dormant
|
||||
session has no pane and no PTY bridge: it cannot be attached to, typed into or
|
||||
|
||||
Reference in New Issue
Block a user