Repository navigation
Closed
Labels
kind:taskA task the plan skill rendered; the body carries ## TaskA task the plan skill rendered; the body carries ## Taskmodel:standardA standard model: work that needs care, or routine work that is largeA standard model: work that needs care, or routine work that is largeplan:integrationOwns the seam of a slice; its proof is the slice's observableOwns the seam of a slice; its proof is the slice's observablesize:L500 to 900 net lines; one PR, and the ceiling500 to 900 net lines; one PR, and the ceiling
Description
Task
| slice | size | difficulty | model | who | estimated lines |
|---|---|---|---|---|---|
| Retained sessions | L | routine | standard | an agent | 540 (300 code, 240 tests) |
every existing session becomes a box record with a stable id, type, parent and the
stopped/exitedstates, and a stop retains it, on today's create path and before any schema change (BOX-001, BOX-003, BOX-011 and BOX-013). On that path no expanded spec reaches the daemon, so the record's type comes from the creating verb,sessionortask(BOX-001's sub-bullet), and itsparentis none. A person sees the records by listing them with their states (BOX-158) and reading one (BOX-159), which BCLI-001 and BCLI-003, pulled forward into this slice, render. Creation then sends and stores the expanded spec (BOX-068), which resume follows (BOX-025).
Covers:
- none
Layers:
- cli:
- crates/minimal/src/cli.rs:
min box list,min box show - crates/minimal/src/cmd/mod.rs: dispatches list, show
- crates/minimal/src/cmd/boxes.rs: mod line
- crates/minimal/src/cmd/boxes/list.rs (new): renders retained records
- crates/minimal/src/cmd/boxes/show.rs (new): renders one record
cargo nextest run -p minimal box_list_and_show_render_retained_records
- crates/minimal/src/cli.rs:
- slice:
- crates/minimald/src/box_manager/tests.rs: tests
cargo nextest run -p minimald retained_session_survives_restart_then_lists_reads_and_resumes
Waits on:
- T34 — Move the session commands into one file per verb #2375
- T35 — Break session activation into named steps #2380
- T36 — Name the CLI's operations after the box #2383
- T37 — Move the daemon's RPC and server tests out, and build daemon-side create requests through one constructor #2381
- T51 — Move the exec and RPC-crate tests into their own files #2376
- T38 — Split the box actor into files by concern #2377
- T39 — Split the box runtime into files by concern #2378
- T41 — Split the box manager's tests and handle into their own files #2379
- T45 — Make the box id the one key for every record #2385
- T1 — Give every record its type, parent and project root at creation #2386
- T52 — Hold every record in one of five states, migrated once, and reaped only when unfinished #2387
- T2 — Write each box's lifecycle events where only the daemon can reach #2389
- T3 — Stop a box and keep its record #2390
- T49 — Prove a stopped box's files stay readable #2391
- T4 — List and read box records with their states #2392
- T55 — Build the CLI's and the VM tests' create requests through the same constructor #2384
- T5 — Send the box's spec on the create request and store it with the record #2388
- T6 — Resume a stopped box from its stored spec #2393
Plan block
### T7 — Retained sessions, end to end, with list and show
slice: S0
8000
kind: integration
covers: none
size: L
est: 300 code, 240 tests
executor: agent
difficulty: routine
model: standard
diagnostics: daemon log names each record's state at restart
observability: one span covers whole slice
layers:
- cli:
- crates/minimal/src/cli.rs: `min box list`, `min box show`
- crates/minimal/src/cmd/mod.rs: dispatches list, show
- crates/minimal/src/cmd/boxes.rs: mod line
- crates/minimal/src/cmd/boxes/list.rs (new): renders retained records
- crates/minimal/src/cmd/boxes/show.rs (new): renders one record
test: cargo nextest run -p minimal box_list_and_show_render_retained_records
- slice:
- crates/minimald/src/box_manager/tests.rs: tests
test: cargo nextest run -p minimald retained_session_survives_restart_then_lists_reads_and_resumes
produces:
- crates/minimal/src/cmd/boxes/list.rs (entry point)
- crates/minimal/src/cmd/boxes/show.rs (entry point)
consumes:
- crates/minimal/src/cmd/boxes.rs
proof: every existing session becomes a box record with a stable id, type, parent and the `stopped`/`exited` states, and a stop retains it, on today's create path and before any schema change (BOX-001, BOX-003, BOX-011 and BOX-013). On that path no expanded spec reaches the daemon, so the record's type comes from the creating verb, `session` or `task` (BOX-001's sub-bullet), and its `parent` is none. A person sees the records by listing them with their states (BOX-158) and reading one (BOX-159), which BCLI-001 and BCLI-003, pulled forward into this slice, render. Creation then sends and stores the expanded spec (BOX-068), which resume follows (BOX-025).
depends on:
- blocked by #2375
- blocked by #2380
- blocked by #2383
- blocked by #2381
- blocked by #2376
- blocked by #2377
- blocked by #2378
- blocked by #2379
- blocked by #2385
- blocked by #2386
- blocked by #2387
- blocked by #2389
- blocked by #2390
- blocked by #2391
- blocked by #2392
- blocked by #2384
- blocked by #2388
- blocked by #2393
Reacted by minimal-foundry
Metadata
Metadata
Assignees
Labels
kind:taskA task the plan skill rendered; the body carries ## TaskA task the plan skill rendered; the body carries ## Taskmodel:standardA standard model: work that needs care, or routine work that is largeA standard model: work that needs care, or routine work that is largeplan:integrationOwns the seam of a slice; its proof is the slice's observableOwns the seam of a slice; its proof is the slice's observablesize:L500 to 900 net lines; one PR, and the ceiling500 to 900 net lines; one PR, and the ceiling
Activity
minimal-foundry commentedon Oct 29, 2026
Done. #2753 merged.
branch
agent/2394-retained-sessions-end-to-end-with-list-and-show· epic #2236 · PR #27535a6d466c96aae3b2edcf17f3Updated 2026-10-30T04:21:15.092Z.