implement-tui-tabs

Implement: TUI tabs-as-view (close = remove, not archive)

Metadata

Statusdone
Assignedagent-741
Agent identityf51439356729d112a6c404803d88015d5b44832c6c584c62b96732b63c2b0c7e
Modelclaude:sonnet
Created2026-04-27T16:00:52.244350405+00:00
Started2026-04-27T16:15:30.091642429+00:00
Completed2026-04-27T16:46:22.728014793+00:00
Tagstui,chat-redesign, eval-scheduled

Description

Description

Decouple TUI tabs from chat task lifecycle. Tabs become an ephemeral view list over '.chat-N' tasks in the graph.

Behavior change:

  • Closing a tab (via 'w' in command mode, click '×' on tab, or close-window gesture) removes it from the TUI's active-tabs list — it does NOT archive, abandon, or otherwise modify the underlying '.chat-N' task in the graph.
  • The current close-tab dialog (research-tui-chat will identify it) goes away. No 'archive yes/no' prompt.
  • To actually delete a chat, the user runs 'wg abandon .chat-N' or uses a graph-action — that's separate from closing the tab.
  • Reopening: a closed-but-not-archived '.chat-N' can be reopened later (see implement-tui-graph-open) by clicking the node in the graph viewer or via a tab-picker.

Update the active-tabs data structure to be a simple ordered list of '.chat-N' task ids held in TUI state. The graph remains the source of truth for chat existence; tabs are just 'which chats am I currently viewing'.

Validation

  • Failing test first: closing a tab removes it from active list but the underlying task status remains unchanged (still 'in-progress' or whatever it was)
  • Close-tab dialog/popup is removed (no confirmation prompt)
  • Closing the last tab does not crash; TUI shows an empty/welcome state
  • cargo build + cargo test pass
  • Live-smoke: launch TUI with N chat tabs, close one, run 'wg show .chat-X' and confirm task is still active (not abandoned)

Depends on

Required by

Log