Summary
Deleting a thread leaves its descendant thread records in the index with a parent_session_id that no longer exists.
Where
delete_session (crates/runtime/src/app/sessions.rs) removes only the target record and log. close_orchestrator_children (crates/runtime/src/app/lifecycle.rs) stops the children's processes but keeps their records.
- Archive and unarchive already cascade over
descendant_session_ids; delete does not.
- The sidebar tolerates the dangling parent, so the orphans show up as roots or linger in the archived list.
Found by reading the code; not reproduced.
Expected
Delete cascades over the same descendant tree as archive, in one command, and the confirmation states how many threads will be deleted.
Summary
Deleting a thread leaves its descendant thread records in the index with a
parent_session_idthat no longer exists.Where
delete_session(crates/runtime/src/app/sessions.rs) removes only the target record and log.close_orchestrator_children(crates/runtime/src/app/lifecycle.rs) stops the children's processes but keeps their records.descendant_session_ids; delete does not.Found by reading the code; not reproduced.
Expected
Delete cascades over the same descendant tree as archive, in one command, and the confirmation states how many threads will be deleted.