From 4170a2849e4475d219973cd4461d74f92420cf50 Mon Sep 17 00:00:00 2001 From: typebasedio Date: Fri, 8 May 2026 14:06:42 -0400 Subject: [PATCH] docs(v0.5.3): record v0.5.3 completion in notes.md --- notes.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/notes.md b/notes.md index a1ceee0..834a864 100644 --- a/notes.md +++ b/notes.md @@ -316,3 +316,27 @@ For the v0.4 surface: - **v0.5.1:** Do not switch the directory prefix / ID back to UTC. The `TestCreateDirectoryPrefixUsesLocalDate` test enforces local time. - **v0.5.1:** Do not remove `.Local()` from the `ctask info` Created/Updated/Archived formatting. `TestInfoFormatsTimestampsInLocalZone` enforces local display. - **v0.5.1:** Do not change *stored* timestamps (task.yaml, session logs, lease, manifest, summary) to local time. UTC storage is deliberate — only display converts. + +## What v0.5.3 delivered + +Persistent session mode is in. Key user-facing surfaces: + +- New env var `CTASK_SESSION_MODE` (`direct` | `persistent`); `direct` is the default and requires no setup. +- `ctask attach ` — always-tmux entry command. Defaults to launching the agent. +- `--direct` flag on `new` / `resume` / `last` / `open` to bypass persistent mode for one invocation, with confirmation when a tmux session already exists. +- `ctask doctor` now reports tmux presence and version when persistent mode is configured. + +Architecture notes: + +- tmux is invoked via a three-call pattern (`has-session`, `new-session -d`, `attach-session`) with a 3-second polling loop to detect session end. The polling cadence is below the 30-second heartbeat interval, so finalize lag is bounded. +- Session names are deterministic: `ctask---`, where the hash is the first 6 hex chars of `sha256(canonical absolute workspace path)`. On Windows the path is lowercased before hashing. +- Three entry paths (owner-create, passive reattach, adopted reattach) are picked based on tmux session existence and `InspectLease` four-state classification. +- Adoption transfers ownership under the metadata write lock with a re-check race guard. The previous lease is replaced, `task.yaml.UpdatedAt` is bumped, a fresh start manifest is captured, and finalize stamps `session_ownership: "adopted"` plus `adopted_from_orphan_at`. +- The v0.4 four-layer concurrency model is preserved verbatim. Layer 3 is selectively skipped on reattach paths because no reliable end_manifest baseline exists from a previous orphaned owner. +- Provisional cleanup is bypassed in persistent mode — the gate's UX assumption ("Esc on prompt -> empty diff") does not translate to tmux. +- `last-session-summary.json` gains four optional fields (`end_reason`, `detected_via`, `session_ownership`, `adopted_from_orphan_at`); pre-v0.5.3 summaries continue to load. + +Out of scope (deferred to future releases): +- Native Windows persistent mode (PSmux is a candidate; not committed). +- Config file (`~/.config/ctask/config.yaml`) — env var remains the only config surface until v0.6. +- `switch-client` for nested-tmux entry, `tmux wait-for` / `set-hook`-based detection, banner injection inside tmux, `ctask sessions` listing command.