diff --git a/docs/PREVIEW.md b/docs/PREVIEW.md index bf98430..161d5e3 100644 --- a/docs/PREVIEW.md +++ b/docs/PREVIEW.md @@ -28,6 +28,12 @@ A preview is a view, not a state. Nothing about it is durable: | Already in a pane, in another tab | That tab is brought forward. The active tab is restored when the preview ends. | | Not in any pane | A throwaway tab carries it. It is removed when the preview ends. | +A session that is not `Running` — a dormant one, most often — never gets a +live attach here or anywhere else a pane is filled: the daemon has nothing to +answer a `409 not_attachable` and the socket would just die (WS close 1006). +Its pane shows the same metadata-and-resume view `docs/SIDEBAR.md` describes +for its card, honest about the fact that there is nothing to preview yet. + The throwaway tab never counts as an open session: the tab bar does not appear because of it, the mobile shell does not switch away from the session list for it, and the sidebar does not mark the session as open. diff --git a/docs/SIDEBAR.md b/docs/SIDEBAR.md index b21d210..9728efc 100644 --- a/docs/SIDEBAR.md +++ b/docs/SIDEBAR.md @@ -113,6 +113,33 @@ pane, no scrollback, and nothing to attach to. It is not an exit — nothing was observed ending — so the two fragments never both show. The TUI marks the same state on line 1 with `◌`, next to `✗` for exited and `●`/`○` for running. +### Dormant cards (#168) + +A dormant card is a muted variant of the normal card (the web client's +`is-dormant` class, the same muted foreground `exited` already uses): name, +cwd and last-known age render as usual, but the activity rail carries no +colour, since recovery resets a dormant session's activity to `Idle` and +there is nothing running to report otherwise. + +The row's right-hand actions swap **spawn similar** for **resume** (↻) — there +is no live state to clone from — and call `POST /api/sessions/:id/resume` +(#166). **Kill** stays: it is how a dormant session is dismissed, since the +daemon already treats a kill of a dormant session as removing its sidecar +rather than anything it needs to be running to do. + +A dormant session takes the **lowest precedence in the ordering**: within a +folder, every live (`Running` or `Dead`) session sorts before every dormant +one, name notwithstanding, and dormant sessions sort among themselves by name. +So a reboot that leaves a whole tree dormant never buries the live work a +session spawns into it. + +Selecting a dormant session — by click, by keyboard, or by preview +(`docs/PREVIEW.md`) — never opens a live attach: the content pane shows the +same metadata and resume affordance the card does, rather than a terminal +that would die on the daemon's `409 not_attachable` (WS close 1006). Resuming +turns the session `Running`; the pane and the card pick that up on their own +next update, no navigation required. + `` is the blocked-work breakdown (#83) in diff notation, replacing the spelled-out `⚠ 3 uncommitted files, 2 unpushed commits`. It renders only while something would block an unforced kill, and reads: