Skip to content

fix(threads): apply parent actions to nested threads - #79

Merged
gabynevada merged 1 commit into
atlifrom
t3/fix-child-thread-deletion
Nov 7, 2026
Merged

gabynevada merged 1 commit into
atlifrom
t3/fix-child-thread-deletion

Conversation

@gabynevada

Copy link
Copy Markdown

Problem

Deleting a parent thread leaves its sidebar children behind because grouping previously controlled presentation only. The same mismatch affects other parent actions, and newly created child groups open automatically on web/desktop.

Change

Apply Delete, manual Settle, Archive/Unarchive, Snooze/Unsnooze, and Stop recursively to sidebar descendants in the server, so client and agent entry points share the behavior. Group changes commit atomically under the existing reparenting gate; deleting also cleans up descendants' side chats, and stopping cancels each descendant's queued provider starts.

Unsettle affects only the selected thread, preserving completed children. Automatic settlement remains per-thread. Web and mobile settlement Undo restores children that were previously active while preserving already settled children. Delete confirmations explain that nested children are included.

New groups default to collapsed on web/desktop, matching mobile. Saved expansion choices and revealing a selected descendant still work. Agent-created subagents retain their separate lifecycle.

Scope and approval

The fork maintainer explicitly requested recursive parent actions, preserving settled children when reopening the parent, collapsed child groups, and this PR in the T3 Code conversation. This implements that approved sidebar-group behavior across server, web/desktop, and mobile.

Verification

  • Focused regression coverage exercises recursive lifecycle actions, already settled children, archived descendants, unrelated threads, guarded draft deletion, in-flight deletion cleanup, group Stop, atomic rejection of settlement while a descendant runs, and settlement Undo.
  • vp run check:changed origin/atli --concurrency 2: passed format, lint, knip, GraphQL generation checks, typechecks for 36 affected packages, 550 tests across 26 files, and 11 React Compiler checks.
  • Existing SidebarThreadGroup.browser.test.tsx passes, covering selected-descendant reveal, explicit collapse, and nested attention summaries.
  • An isolated dev server verified Settle/Unsettle, Snooze/Unsnooze, Archive/Unarchive, and Delete through the live WebSocket API with a parent, child, grandchild, and unrelated control thread. Unsettle reopened only the parent; Delete removed the group while preserving the control.
  • Before/after images below use the existing browser component harness with the actual group logic. They demonstrate the default visibility change, not a full application screenshot. Native mobile/Electron and a full application UI pass were not exercised.
  • The thread-grouping-launch MCP eval dry-run passed. The real model eval could not run because the configured vibeproxy provider was unavailable in this environment.

Screenshots are uploaded to a draft evidence release, separate from product releases and repository files.

Before: new children are expanded.

Before — component harness

After: new children are collapsed.

After — component harness

Implemented with GPT-6 Astra through the Codex harness in T3 Code.

@gabynevada
gabynevada merged commit 036804c into atli Nov 7, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant