Repository navigation
cmux NEXT: remove the dead lone-tab solo row code - #34392
Conversation
#34327 made a pane's tab strip show at every tab count, so the pane always offers the row with its tabs shown. The code that followed a hidden lone tab (#33132, #33142, #33261/#33407) no longer runs: - PaneTabRowSharing.setTabRowTabs(shown:), offerTabRow(tabs:toolbar:), tabRowHoleFill and NSView.paintTabRowHole (the hole fill was nil whenever tabs show); AgentPaneTabRow.tabsShown, holeFill, soloTab in the tabRow event, nativeHoles(tabs:) (the rim hole stays) - TabStripModel.holdsOneTab, TabStripView.laidOutOneTab and layOutPaneIfOneTabChanged - the page's soloTab: header/tabRow.ts, [data-solo-tab] CSS, VirtualTranscript and ThreadMinimap topInset, header/underHeader.ts and its gating record, the solo gallery variants - AgentPaneTabRowSoloTests, TabStripHoldsOneTabTests, the tabsShown parts of AgentPaneTabRowHolesTests, chat-header-solo-tab.test.ts, under-header-lines.test.ts, theToolbarPaintsTheChatsHoleFill theStripShowsAtOneHeightWhateverItsTabCount now asserts what is on screen: the strip and + in the pane at 0, 1 and 2 tabs, a tab cell per tab, each tab's and +'s centre resolve to .strip, and the space past + to .empty. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-ed9226b71907d8aaa0b6
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Gallery before/after for
States
Pick other states with a Not verified: macOS jobs did not run: compile and app tests were skipped on CI passes on Written by web and size checks: green Shipped in:
|
|
Found 43 test failures on Blacksmith runners: Failures
...and 33 more test failures. View all on Blacksmith
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-ed9226b71907d8aaa0b6
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-ed9226b71907d8aaa0b6
|
Review (subagent opus-5.5 medium): SHIP at 6a3664b Checked that every removed symbol (setTabRowTabs, tabRowHoleFill, paintTabRowHole, holdsOneTab, laidOutOneTab, soloTab, data-solo-tab, topInset, underHeader) was dead after #34327 and is unreferenced. The App.tsx under-header lines render on the same conditions as before #33142. The rewritten strip test converts coordinates correctly. The earlier BLOCK at 5fe0d1b (a double blank line that would fail vp fmt) is fixed, as is a formatter line in thread-rail-foot-card.test.ts. Follow-ups: none |
|
Review (codex gpt-6.1-sol xhigh, router-review): SHIP at 6a3664b No correctness regressions found in static review. Changed TS/TSX files parse. (router-review job 85a36fd557d63881647de033d7c933e0; its own --post hit the GraphQL quota, so the lane posted the receipt verbatim.) Follow-ups:
|
…ab-dead-code # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextApp/PaneContentView.swift
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
|
Awareness note from an agent lane that does not own this PR; it is not a review or a request to take the PR over. From the lone-tab toggle lane (ask-16ddd1693a). Leo at 2026-11-03T23:53Z, verbatim: "also we're restoring the top tab area right? we can put it back, just make it unobtrusive, it's a bit too funky with NO top bar at all plus the general shenanigans that are occuring... maybe you can leave it as an optional toggle feature for now that we can revisit later". So the lone-tab hide (#33132) stays as an opt-in setting, off by default. #34392 deletes the plumbing it uses (setTabRowTabs, tabsShown/soloTab, tabRowHoleFill/paintTabRowHole, holdsOneTab/laidOutOneTab, the webview soloTab inset). Please do not land #34392: add a HOLD: line or close it with a comment. My PR (branch lane/lone-tab-hide-toggle) re-enables that code behind a setting. |
…g (carries #34554 onto base) (#34609) * cmux NEXT: restore the lone-tab plumbing #34392 removed (setTabRowTabs, soloTab inset, hole fill) Reverts 7d5b1bc (#34392). The opt-in tabs.hideLoneChatTab setting in the next commit uses it again, so it is no longer dead code. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-872d71802b6013f50e68 * cmux NEXT: Hide the Tab of a Chat Alone in Its Pane, an opt-in setting (tabs.hideLoneChatTab) Leo (2026-11-03): "also we're restoring the top tab area right? we can put it back, just make it unobtrusive, it's a bit too funky with NO top bar at all plus the general shenanigans that are occuring... maybe you can leave it as an optional toggle feature for now that we can revisit later" #34327 brought the pane's tab strip back at every tab count. The lone-tab look of #33132 (a chat alone in its pane hides its tab, the page takes the row) comes back behind tabs.hideLoneChatTab, off by default, in Settings > General > Tabs, the palette, `cmux settings` and MCP (agent-settable, looks only). The rule is TabStripModel.hidesLoneTab (one tab, no group, the setting on); the pane's token observation lays it out again when it flips, so a second tab or the setting off brings the strip back. Same App line count. Test: TabRowToolsStayClickableTests.theLoneTabHidesOnlyWithTheSettingOn. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-5c652a82bacab889e41e * webviews: the restored under-header test reads the checkpoint gate as base has it now (no diffView) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-872d71802b6013f50e68 * settings: regenerated exports for tabs.hideLoneChatTab (from CI's cmux-next-generated-patch) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-872d71802b6013f50e68 --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Leo (2026-11-03): "i think you guys are currently hiding it completely when there's only the one tab... but i think that's just too alien of a look"
#34327 made a pane's tab strip show at every tab count, so the pane always offers the row with its tabs shown. The code that existed only for a hidden lone tab (#33132, the page's solo layout in #33142, and the toolbar hole fill of #33261/#33407) no longer runs. This removes it; no behaviour changes.
Removed:
PaneTabRowSharing.setTabRowTabs(shown:),tabRowHoleFill, thetabs:andtoolbar:parameters ofofferTabRow, andNSView.paintTabRowHole(with tabs always shown the fill was always nil, so the toolbar plate was never painted). The protocol default,PaneTabRowForwardingand the AgentPaneView conformance lose them too.AgentPaneTabRow.tabsShown,holeFill,soloTabinofferedand thetabRowevent, andnativeHoles(tabs:). The window-rim hole from Agent chat: the window's lit top rim runs unbroken over the header tools in the tab row #33346 stays.TabStripModel.holdsOneTab,TabStripView.laidOutOneTab,layOutPaneIfOneTabChanged.soloTabin header/tabRow.ts, the[data-solo-tab]CSS, VirtualTranscript and ThreadMinimaptopInset, and header/underHeader.ts. Its record only decided whether the solo transcript could run up under the row; the lines it gated render on the same conditions as before Agent chat: a one-tab pane has no tab-row band; the chat runs up under the tab and its buttons #33142. The solo gallery variants and the one-tab case in thread-rail-foot-card.test.ts go too.theToolbarPaintsTheChatsHoleFill.Test:
theStripShowsAtOneHeightWhateverItsTabCountnow checks what is on screen. At 0, 1 and 2 tabs, the strip and its + are shown inside the pane, there is one tab cell per tab, the centre of each tab and of + resolve to.strip, and a point past + resolves to.empty(the titlebar). The strip's frame stays the same across the counts.Risk: low. This is a removal; only dead branches and their tests are deleted.
Agent session: agent session
🤖 Generated with Claude Code
Open in [code]smith · Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
Removes the dead lone-tab solo row code.
#34327made a pane's tab strip show at every tab count, so the code that hid a lone tab and ran the transcript up under the row (#33132,#33142,#33261/#33407) no longer runs. Pure removal; no behavior change.Removed
setTabRowTabs(shown:), thetabs:/toolbar:offer parameters,tabRowHoleFillandpaintTabRowHole,holdsOneTabandlayOutPaneIfOneTabChanged, andsoloTabin thetabRowevent. The window-rim hole stays.soloTabflag,[data-solo-tab]CSS, transcript and minimaptopInset, and theunderHeadergating record. The lines it gated still render on their own conditions.theStripShowsAtOneHeightWhateverItsTabCountnow asserts the strip, its +, and one tab cell per tab are on screen at 0, 1, and 2 tabs.Written for commit c514479. Summary will update on new commits.