Repository navigation
Thread lifecycle: root-only sidebar, Agents view, and orchestrate settle replaces archive (B1) #637
Description
Summary
Companion to #526 (phase B1 of #535): the sidebar lists root threads and forks only, dispatched children are reached from the parent's Agents view, and orchestrate's automatic archive of finished children is replaced by an explicit lead settle that is the delivery acknowledgement.
Sidebar roster
As upstream: exclude archived threads and threads whose lineage is "subagent" (children created by dispatch, and provider-native subagents projected as threads). Ordinary forks stay in the sidebar. Remove child rows, counts, disclosure and the ancestor-lifting partition_settled (crates/ui/src/sidebar.rs:209).
Agents view
In the parent thread (desktop panel; a sheet on phone): every dispatched child with its execution state (working, waiting, finished, failed, cancelled, interrupted), result preview, and delivery state (awaiting settle, settled). Actions: open child, Stop, Settle, Cancel. Archived children remain reachable. Provider-native subagents without an app thread are shown read-only from the parent's projection (Principle 1). Parent status: an ended parent turn with outstanding child work shows Waiting (tooltip with the counts of running and awaiting-settle agents, per the design §2.5); an executing parent run shows Working.
Orchestrate: settle replaces archive
- Remove
orchestrate.archive_on_complete(settings, Settings → Orchestrate row, per-dispatch override, tool text) and thearchivetool. - Add
settle {thread_id}: the lead calls it after accepting a child's result. A child that is not settled is not delivered, however finished its run. This is a Tcode policy on top of upstream. - An unsettled finished child counts as completion-holding work for its parent: the parent shows Waiting and cannot auto-settle until it has settled its children. Dispatched children are exempt from automatic settlement.
sendto a settled child reopens it by message admission.cancelstays distinct: stops the child, keeps its result, does not deliver; a user Cancel from the Agents view is not reported to the lead (as upstream), the lead sees it throughstatus.- Archiving an unsettled dispatched child records it as cancelled, so unarchiving it later never turns it back into awaiting-settle and never re-holds the lead; opening an archived agent from the Agents view unarchives it without changing delivery.
- While a dispatched child is the viewed thread, the Agents view shows that child's own agents; the header carries the link back to its lead.
- The orchestration instructions tell the lead to settle each child it has accepted;
statusshows delivery state.
Evidence required
Runtime: a finished unsettled child holds its parent; settle releases it; cancel does not deliver; send after settle reopens. UI: both themes, desktop and phone, a family spanning active and settled.
Reference
T3 Code 83a82a46b: apps/web/src/components/Sidebar.logic.ts:566–582, apps/web/src/components/chat/ThreadRelationshipsControl.tsx, apps/mobile/src/features/threads/ThreadAgentsSheet.tsx, apps/server/src/orchestration-v2/SubagentProjection.ts, apps/server/src/mcp/toolkits/thread/tools.ts (organize). Tcode owners to replace: crates/ui/src/sidebar.rs, crates/orchestrate-mcp/src/tools.rs, crates/runtime/src/app/orchestrate.rs:1090–1156, crates/ui/src/orchestrate_settings.rs:610–660, crates/core/src/settings.rs:407–435.
Activity
assets: #637 Agents view screenshots