Repository navigation
fix(channels): keep consecutive tab closes in the closing pane - #1158
Merged
Merged
Conversation
closing a thread tab always returned focus to the thread opener, even while other tabs remained. an opener in the main timeline moved focus into the main workspace, so the next close request reached the permanent conversation tab and did nothing. the opener now takes focus only once the closing pane empties, or when it sits in that same pane (a linked thread opened from another tab). closing the addressed thread starts its channel visit with the current selection kept, so a remaining main-pane thread stays selected instead of the conversation. Co-authored-by: Kalvin C <[email protected]> Co-Authored-By: Claude Opus 5.5 <[email protected]> Signed-off-by: peon <9ac6794b000690b7e814eb1805ad32405d0bec7d52838de3a86cf967565dacc0@buzz.block.builderlab.xyz>
salman1993
approved these changes
Oct 15, 2026
salman1993
left a comment
Contributor
There was a problem hiding this comment.
🤖 Reviewed by Salman’s AI agent. 9/10 for minimalness, elegance, and correctness; no blocking findings.
The change keeps channel navigation and opener restoration with their existing owners, while PanelWorkspace continues to own selection and focus recovery. The remaining-tab and last-tab paths are consistent with the stated behavior, and the four added browser cases justify their layer through real focus ordering, native Close dispatch, and inert panes.
Verified at 8be5117:
- 54 focused Vitest tests passed across useChannelTabState, useConversationTabs, and PanelWorkspace.
- All 30 navigation-thread-history browser cases passed across Chromium and WebKit, including both consecutive-close regressions, linked-thread focus restoration, Escape, and history navigation.
- Diff whitespace checks passed; hosted CI required, flake checks, and DCO are green.
Limits: browser tests execute the production Close script but do not exercise native guest webviews or packaged desktop dispatch. Manual theme/text-size acceptance was not repeated; this PR changes no visual recipes or styles.
johnmatthewtennant
added a commit
that referenced
this pull request
Oct 15, 2026
* origin/main: fix(navigation): share one abort reason so Settings → Back stops leaking DOM on V8 (#1161) Unify sidebar resizing and polish Solo navigation (#1132) Organize Builderlab agent identity and runtime settings (#1153) fix(channels): keep consecutive tab closes in the closing pane (#1158) feat(goose): add the goose agent type (#1125) feat: edit the last message with Cmd+Up (#1042) fix(channels): make Enter press the prominent lifecycle button (#1152) feat(me): drag chats between projects and Chats (#1112) fix(search): find open channels past the first 500 in Command-K (#1128) Stop in-flight request mocks from failing finished browser tests (#987) fix(channels): resolve template agents from ready inventory (#922) [buzz-app] Fit uploaded videos to the relay's 4K envelope and name video rejections (#1129) feat(github): reveal the PR comment a link points at (#947) fix(messages): stop WebKit freeze from muted composer video previews (#1143) Signed-off-by: John Tennant <[email protected]> # Conflicts: # docs/sessions/README.md
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.
Consecutive Cmd+W presses now close each remaining tab in the pane that holds them.
enterVisit(..., keep)), so a remaining main-pane thread stays selected and closable. Back still reopens the closed thread; ordinary channel navigation still shows the conversation.Tests
Browser cases added to
tests/browser/navigation-thread-history.spec.mjs. Each one runs the nativeclose-request.jsscript against the full app. They are browser cases because the behavior depends on layout-effect focus ordering betweenChannelsPageandPanelWorkspace, plus real inert panes; no lower-level harness mountsChannelsPage.Unit:
useChannelTabState.test.tsxcovers a new channel visit with and withoutkeep.Fail-then-pass (Chromium): the side and main cases fail on the base branch and pass with this change. The linked-thread cases guard opener restoration within a pane. The
keepunit test fails on the base branch.Validation:
navigation-thread-history,channel-tabs,buzz-links,activity-navigation-focus,message-navigation,nested-repliesandthread-unreadpass in both enginesvitest runandpnpm checkpassDeferred: guest webviews.
buzz-review-completed