fix(btw): discard temporary side threads and save durable forks - #3277
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
New
/btwside conversations now stay in memory instead of entering persisted session history. Explicit tab closure asks for confirmation, waits for submitted requests, stops the runtime, and discards the session and drafts. Tab switching, pane collapse, and surface switching preserve the conversation.The confirmation also offers Save as fork for submitted content. This saves a durable session through the existing fork operation before deleting the temporary source; failures preserve the source tab, and cleanup retries reuse the saved fork. Forks retain settled turns and the context at the selected boundary, including after compression.
Type and Areas
Bug fix and UI/UX: Rust Core session lifecycle/persistence, Web UI tabs and FlowChat, shared ConfirmDialog, locales, and owning module documentation.
Motivation / Impact
The behavior now matches the side conversation's “Not saved” promise, while giving users an explicit way to retain useful content. Legacy persisted BTW sessions remain readable until explicitly closed. Review and subagent tabs retain their existing lifetimes.
The shared ConfirmDialog adds optional
secondaryActionPlacement="start"for the save action, and temporary side threads display a localized status hint. The navigation menu also places update actions before Settings.Verification
All local checks passed:
pnpm run fmt:rspnpm run check:web(type checking, Appearance, typography, theme color audit across all surfaces, and theme governance)pnpm run i18n:audit(zero warnings)agent-runtime,gitfeature setgit diff --check,git merge-tree --write-tree origin/main HEAD, andnode scripts/check-git-object-sizes.mjs --base origin/main --head HEADFocused commands:
Reviewer Notes
AI-assisted; verified with focused automated tests. No browser automation or mock screenshots were used as visual evidence. Native WebView visuals and live remote workspace, remote control, Peer Device Mode, and Detached Dispatch behavior were not exercised. Remote workspace identity and controller surface changes have source/contract coverage only.
Checklist