Skip to content

Thread lifecycle: root-only sidebar, Agents view, and orchestrate settle replaces archive (B1) #637

Closed

Description

@Tryanks

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 the archive tool.
  • 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.
  • send to a settled child reopens it by message admission. cancel stays 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 through status.
  • 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; status shows 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

  1. added a commit that references this issue on Oct 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions