Skip to content

cmux NEXT: Hide the Tab of a Chat Alone in Its Pane, an opt-in setting (carries #34554 onto base) - #34609

Merged
teamleaderleo merged 4 commits into
feat-cmux-nextfrom
lane/lone-tab-hide-toggle-2
Nov 4, 2026
Merged

teamleaderleo merged 4 commits into
feat-cmux-nextfrom
lane/lone-tab-hide-toggle-2

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 4, 2026 •

Copy link
Copy Markdown
Collaborator

Leo-ask: ask-16ddd1693a
Takes back #34392: the lone-tab plumbing it deleted as dead is used again by the opt-in tabs.hideLoneChatTab setting Leo asked for.

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"

The top tab area is already back by default: #34327 shows a pane's tab strip at every tab count. This PR keeps the no-top-bar look as the optional toggle Leo asked for. It carries #34554, whose owner session is gone. #34554 conflicted after #34392 deleted the plumbing it uses.

Risk: normal. This restores about 670 lines across Swift and the webview. While the setting stays off, the layout is the same as base.

Changelog

Added: Settings > Tabs > Hide the Tab of a Chat Alone in Its Pane (off by default).

Observed / Not run

Agent session: agent session

🤖 Generated with Claude Code

teamleaderleo and others added 2 commits November 4, 2026 02:20
…s, 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
…g (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
@github-actions

github-actions Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 3060332: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr34609 -f ref=lane/lone-tab-hide-toggle-2 -f platform=macos -f backend_mode=local

Gallery before/after for 3060332: 16 states rendered, 0 images differ, 3434 more touched states not rendered. Images are in the run's artifact, not on this public PR; the independent review of this head reads them on its own, so the PR needs no hand-made screenshots of these states.

gh run download 41772903080 -R manaflow-ai/cmux -n gallery-advisory-34609-3060332fc7efc7c5e9783de1564f5823c1252c67 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.chat-width/standard Apple System Colors Light unchanged 0% own App.tsx
agent-pane.chat-width/standard Apple System Colors unchanged 0% own App.tsx
agent-pane.chat-width/wide Apple System Colors Light unchanged 0% own App.tsx
agent-pane.chat-width/wide Apple System Colors unchanged 0% own App.tsx
agent-pane.chat-width/wide-blocks Apple System Colors Light unchanged 0% own App.tsx
agent-pane.chat-width/wide-blocks Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-edge/short-edge Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-edge/short-edge Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-edge/wide-edge Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-edge/wide-edge Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-edge/no-edge Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-edge/no-edge Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-floats/scrolled-to-end Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-floats/scrolled-to-end Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-floats/composer-grown Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-floats/composer-grown Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-rest-gap/gap-40 Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-rest-gap/gap-40 Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-rest-gap/gap-56 Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-rest-gap/gap-56 Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-rest-gap/gap-72 Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-rest-gap/gap-72 Apple System Colors unchanged 0% own App.tsx
agent-pane.continuation-spacing/shipped Apple System Colors Light unchanged 0% own App.tsx
agent-pane.continuation-spacing/shipped Apple System Colors unchanged 0% own App.tsx
agent-pane.continuation-spacing/two-thirds Apple System Colors Light unchanged 0% own App.tsx
agent-pane.continuation-spacing/two-thirds Apple System Colors unchanged 0% own App.tsx
agent-pane.continuation-spacing/half-tucked Apple System Colors Light unchanged 0% own App.tsx
agent-pane.continuation-spacing/half-tucked Apple System Colors unchanged 0% own App.tsx
agent-pane.continuation-spacing/before Apple System Colors Light unchanged 0% own App.tsx
agent-pane.continuation-spacing/before Apple System Colors unchanged 0% own App.tsx
agent-pane.copy-controls/output Apple System Colors Light unchanged 0% own App.tsx
agent-pane.copy-controls/output Apple System Colors unchanged 0% own App.tsx

Pick other states with a Gallery: entry.id, entry.id/variant line in the PR body.

Default changes

This pull request changes 1 default at 3060332fc7ef (what everyone gets without configuring anything):

  • setting.tabs.hideLoneChatTab: (none) -> false (a new setting, off by default: passes on its own)

Every change is a new setting that defaults to off, the behavior from before it existed.

Merge receipt: merged as c3993cd2cd68 with these defaults changed, signed off by review (codex, router-review).

Regenerate the snapshot with python3 scripts/ci/defaults_guard.py snapshot.

Shipped in:

@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Nov 4, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (subagent opus-5.5 medium): SHIP at 89abd61
Visual verdict: no images; Leo tries the build.

Checked:

  • With the setting off, everything matches base. hidesLoneTab is false, so tabsShown stays true and every piece of restored plumbing is inert: soloTab stays false, the hole fill is nil, the native holes are the same and there's no webview inset.
  • The restored code calls nothing that later commits renamed, and the Settings wiring is complete in all 22 locales.
  • The fleet Release compile passed at this head. The crash-class failure is the CEF ObjC contract check, which this diff doesn't touch.

Follow-ups:

  • [follow-up] Re-add cmux NEXT: remove the dead lone-tab solo row code #34392's stronger tab-strip checks in TabRowToolsStayClickableTests.
  • [follow-up] Confirm the autofix also regenerates docs/configuration.md, docs/mdm/*, schemas/defaults/cmux-next.json and the next-docs settings reference.

… 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
@blacksmith-sh

blacksmith-sh Bot commented Nov 4, 2026

Copy link
Copy Markdown

Found 5 test failures on Blacksmith runners:

Failures

Test View Logs
main.DeveloperIdAppTests.test_download_prints_the_active_profile_only/
test_download_prints_the_active_profile_only
View Logs
stubs: /System/Library/Frameworks/Security.framework/Versions/A/Security has no stub/
Security has no stub
View Logs
stubs: CoreFoundation.tbd: install-name /System/Library/Frameworks/
CoreFoundation.framework/Versions/A/CoreFoundation, missing 1: ['_CFRetain']/
CoreFoundation, missing 1: ['_CFRetain']
View Logs
stubs: CoreFoundation.tbd: install-name /System/Library/Frameworks/
CoreFoundation.framework/Versions/A/CoreFoundation, missing 1: ['_log2']/
CoreFoundation, missing 1: ['_log2']
View Logs
test_the_type_check_covers_every_webviews_test_file (main.WorkflowShape.test_the_ty
pe_check_covers_every_webviews_test_file)/
test_the_type_check_covers_every_webviews_test_file (main.WorkflowShape.test_the_ty
pe_check_covers_every_webviews_test_file)
View Logs

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

…x-next-generated-patch)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-872d71802b6013f50e68
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (subagent opus-5.5 medium): SHIP at 3060332
Visual verdict: no images; Leo tries the build.

Checked the two commits since 89abd61:

  • under-header-lines.test.ts now expects the checkpoint gate as base has it. Base commit 5c388eb dropped diffView.
  • The settings exports, taken from CI's cmux-next-generated-patch, add only tabs.hideLoneChatTab, default false. They match the Swift schema, and the JSON and plist files parse.

Reds compared by test name against base (at 0bdc943):

  • Same on base:
    • tooling-tests: test_the_type_check_covers_every_webviews_test_file, on bench/replayLogs.test.ts.
    • The crash-class CEF ObjC contract: the reviewed cmux.38 contract against the pinned cef-156 engine. Base fails it with the same output.
  • Unrelated to this diff: in cmux-next swift test, the sidebar colour, omnibar, browser icon, tooltip, reduce-motion, window-cleanup and PaneChromeEvenInset suites. Those test files that weren't touched are outside the diff.
  • This PR's own: stale generated exports, meaning the settings exports (fixed here) and the action exports (action-surfaces.json, actions.md, 142→144 settings actions). The autofix regenerates the action exports per CLAUDE.md, and the 3 tests that check them pass then.

Follow-ups:

@teamleaderleo teamleaderleo left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review (codex gpt-6.1-sol): SHIP at 3060332

Review (codex gpt-6.1-sol, independent review box, carried verbatim): SHIP at 3060332
Visual verdict: all 16 supplied pairs are identical; the opt-in lone-tab layout is not pictured.

  1. [P2] [follow-up] [category:tests] webviews/src/agent-session/acpmux/header/header.gallery.ts:147: Add captures of the solo-tab rest/scrolled states and native toolbar with the setting enabled. Existing images do not exercise the changed layout.

Code review completed; runtime tests were unavailable without Bun, dependencies, and the macOS toolchain.

Follow-ups:

  • Capture the enabled lone-tab layout, including native chrome.

@teamleaderleo teamleaderleo left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review (gpt-6.1-sol): SHIP at 3060332

Review (codex gpt-6.1-sol high): SHIP at 3060332

Carried verbatim from the Codex review box receipt on this PR (posted as a GitHub review at this head).
Visual verdict: all 16 supplied pairs are identical; the opt-in lone-tab layout is not pictured.

Follow-ups:

  • [P2] [follow-up] [category:tests] webviews/src/agent-session/acpmux/header/header.gallery.ts:147: capture the enabled lone-tab layout (solo-tab rest/scrolled, native toolbar).

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at 3060332

Reviewer: codex gpt-6.1-sol xhigh, fast tier.

Follow-ups: 1. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward.

SHIP at 3060332

Visual verdict: All 16 supplied before/after pairs are identical; the opt-in native tab-row state is not pictured.

  1. [P2] [follow-up] [category:ux] [finding:F1] [outcome:pending] Preserve blank-row window dragging when hiding the tab strip — PaneContentView.swift:177. With a minimal titlebar and hidden sidebar, enabling the setting removes the strip’s drag and double-click target. Hits instead reach PaneContentView, whose titlebar decision always returns .staysPut. Retain a drag target over the row’s empty portion and cover this setting-on case in native tests.

Static export and source-contract checks passed. Swift and browser tests were unavailable in this box.

Follow-ups:

  • Preserve blank-row dragging and titlebar double-click with the setting enabled.

@teamleaderleo

teamleaderleo commented Nov 4, 2026 •

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

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.


Finding outcome: comment-6624736122/F1 filed-follow-up #35014

@cmux-bot cmux-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cmux-bot approves 3060332: an independent review passed this exact head (router-review receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

@teamleaderleo
teamleaderleo merged commit c3993cd into feat-cmux-next Nov 4, 2026
316 of 329 checks passed
@teamleaderleo
teamleaderleo deleted the lane/lone-tab-hide-toggle-2 branch November 4, 2026 07:36
teamleaderleo added a commit that referenced this pull request Nov 4, 2026
…ence (#35134)

#34909 left one extra closing paren in the rescue job's if, so
cmux Actions' expression parser rejects ci-owned-pool-rescue.yml.
#34609 added tabs.hideLoneChatTab to the settings schema without
regenerating web/data/next-docs/settings-reference.generated.json.


Agent-Session: https://cmux.com/deeplink/agent?id=aid-d750cf10922c785efa64

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

This branch was previously deployed

3 inactive deployments
artifacts — 3060332f Deployed Nov 4, 2026 by teamleaderleo via publish tree-addressed cmux-tui #109452
sentry-dsyms — 3060332f Deployed Nov 4, 2026 by teamleaderleo via upload cmux-tui dSYMs to Sentry #109452
ci-routing-agent — 3060332f Deployed Nov 4, 2026 by teamleaderleo via cmux-tui tree preflight #109452
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant