cmux NEXT: remove the dead lone-tab solo row code

Merged
TE
2d ago
+56-671

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, the tabs: and toolbar: parameters of offerTabRow, and NSView.paintTabRowHole (with tabs always shown the fill was always nil, so the toolbar plate was never painted). The protocol default, PaneTabRowForwarding and the AgentPaneView conformance lose them too.
  • AgentPaneTabRow.tabsShown, holeFill, soloTab in offered and the tabRow event, and nativeHoles(tabs:). The window-rim hole from #33346 stays.
  • TabStripModel.holdsOneTab, TabStripView.laidOutOneTab, layOutPaneIfOneTabChanged.
  • webviews: soloTab in header/tabRow.ts, the [data-solo-tab] CSS, VirtualTranscript and ThreadMinimap topInset, 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 #33142. The solo gallery variants and the one-tab case in thread-rail-foot-card.test.ts go too.
  • Tests: AgentPaneTabRowSoloTests, TabStripHoldsOneTabTests, the tabsShown and hole-fill cases in AgentPaneTabRowHolesTests, chat-header-solo-tab.test.ts, under-header-lines.test.ts (its App.tsx string check was already stale on base), and theToolbarPaintsTheChatsHoleFill.

Test: theStripShowsAtOneHeightWhateverItsTabCount now 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


Autofix with [code]smith
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Removes the dead lone-tab solo row code. #34327 made 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

  • Native: setTabRowTabs(shown:), the tabs:/toolbar: offer parameters, tabRowHoleFill and paintTabRowHole, holdsOneTab and layOutPaneIfOneTabChanged, and soloTab in the tabRow event. The window-rim hole stays.
  • Web: the soloTab flag, [data-solo-tab] CSS, transcript and minimap topInset, and the underHeader gating record. The lines it gated still render on their own conditions.
  • The dead tests for the above. theStripShowsAtOneHeightWhateverItsTabCount now asserts the strip, its +, and one tab cell per tab are on screen at 0, 1, and 2 tabs.