Skip to content

Agent chat: no opaque rectangle behind the header buttons in the tab row - #32944

Merged
teamleaderleo merged 2 commits into
feat-cmux-nextfrom
lane/header-no-backing
Nov 3, 2026
Merged

teamleaderleo merged 2 commits into
feat-cmux-nextfrom
lane/header-no-backing

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 3, 2026 •

Copy link
Copy Markdown
Collaborator

Leo (2026-11-03), on the chat's header buttons: "also the session info button background is what i was talking about... it is in this version... this is the thing that has plagued us for literal weeks... it's so obvious to just remove the thing / you literally see a background on the buttons itself and it's just terrible looking", then: "the toggle you keep" and "I AM TALKING ABOUT THE ... ABSOLUTELY UNINTENTIONALL LOOKING ... OPAQUE RECTANGLE".

What drew the rectangle

The agent page's document root paints WebTheme's page background: html{background:var(--cmux-surface-background) !important} (WebTheme.swift bootstrap). That is the chat's own color when appearance.surfaces.agentPane is set, or the opaque surface in an opaque window. While the chat shares the pane's tab row, that html fill ran under the header tools as a band from the tabs' end to the pane's rounded corner.

Takes back #32039: the strip behind the tabs paints the chat's color, which makes the row a band of that color over the window art, and this PR removes that band.

Change

  • header.css: html is clear while the chat shares the tab row. The shell paints the page background (--cmux-surface-background, under --agent-page-bg) below the row only. The header row has no backing; the hover pill and the toggled plate ([aria-pressed=true]) on each button stay.
  • PaneContentView.paintStrip: the strip behind the tabs is clear again, and only the person's own tab bar color (appearance.surfaces.tabBar) fills it. The tabRowSurface plumbing from Agent chat: the tab row behind the tabs takes the chat's own background (no band) #32039 is removed.
  • An opaque window keeps its look: the pane's content host still paints the surface under the row there (themeDidChange, panesPaintBackground).

Spec: leo-workspace design/session-info.md: "The header buttons that open Session Info sit on no background ... only the hover pill, and the filled rounded square while the panel is open."

Tests

  • webviews/test/chat-header-tab-row-surface.test.ts (browser lane) loads the page as it ships: only the pane's own sheets plus WebTheme's html rule, with an opaque and a translucent chat color. It reads the page's own pixels: alpha 0 across the row beside and between the tools, the toggled Session Info plate present, and the page color below the row. Fails at 2bb56d7 (test only), passes at the head.
  • TabRowToolsStayClickableTests.theTabRowHasNoBackingWhileTheChatSharesIt: with a chat color set and the chat in the row, the strip has no fill; with a tab bar color, the strip paints that color.

Observed / Not run

  • Observed: scripts/web-lint.sh (fast part) and prepush-gate.py passed. Compile and the browser test red/green run on the fleet; results go in a comment.
  • Not run: a real-app capture over window art. The capture host was unreachable (cmux-ci capture timed out on the fleet and the broker).

Changelog

Fixed: an agent chat that shares the pane's tab row no longer draws an opaque rectangle behind its header buttons; the row sits on the window's glass.

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 opaque rectangle behind the header buttons when an agent chat shares the pane's tab row. The row now sits on the window's glass, keeping only each button's hover pill and toggled plate.

  • A rule meant to clear the page background was placed in src/styles.css, which the agent pane never loads, and a prior change painted the same color behind the tabs.
  • The strip behind the tabs is clear again; only the user's own tab bar color fills it.

Changelog

Fixed: an agent chat that shares the pane's tab row no longer draws an opaque rectangle behind its header buttons.

Written for commit 514860f. Summary will update on new commits.

View guided diff Turn on auto-fix

teamleaderleo and others added 2 commits November 3, 2026 03:32
… as the page ships

The browser test loaded src/styles.css, which the agent pane bundle never
loads, and set the row's html color itself, so it passed while the shipped
page painted WebTheme's html background (a chat's own color) behind the
tools. It now loads only the pane's own sheets under WebTheme's html rule
and reads the page's own pixels; the toggled Session Info plate stays.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-7a7568197607c3cdfb81
The agent page's document root paints WebTheme's page background
(html{background:var(--cmux-surface-background) !important}): a chat's own
color under appearance.surfaces.agentPane, or the opaque surface. The rule
meant to clear it in the tab row (#25638) went into webviews/src/styles.css,
which the pane's bundle never loads, so the color filled the row behind the
tools, and #32039 then painted the same color behind the tabs. The row now
has no backing: html is clear while the chat shares the row, the shell paints
the page background below the row only, and the strip behind the tabs is
clear again (only the user's own tab bar color fills it). Takes back #32039.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-7a7568197607c3cdfb81
@github-actions

github-actions Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 514860f: 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=pr32944 -f ref=lane/header-no-backing -f platform=macos -f backend_mode=local

Gallery before/after for 514860f: 16 states rendered, 0 images differ, 1150 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 41572913369 -R manaflow-ai/cmux -n gallery-advisory-32944-514860f7b6d1fe9e85f2be5ddfe04fd0962f1a70 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.header-action-stability/idle Apple System Colors Light unchanged 0% own header.css
agent-pane.header-action-stability/idle Apple System Colors unchanged 0% own header.css
agent-pane.header-action-stability/busy Apple System Colors Light unchanged 0% own header.css
agent-pane.header-action-stability/busy Apple System Colors unchanged 0% own header.css
agent-pane.header-tools/native-row-off Apple System Colors Light unchanged 0% own header.css
agent-pane.header-tools/native-row-off Apple System Colors unchanged 0% own header.css
agent-pane.header-tools/native-row-tools Apple System Colors Light unchanged 0% own header.css
agent-pane.header-tools/native-row-tools Apple System Colors unchanged 0% own header.css
agent-pane.header-tools/unified-compact Apple System Colors Light unchanged 0% own header.css
agent-pane.header-tools/unified-compact Apple System Colors unchanged 0% own header.css
agent-pane.header-tools/unified-roomy Apple System Colors Light unchanged 0% own header.css
agent-pane.header-tools/unified-roomy Apple System Colors unchanged 0% own header.css
agent-pane.header-tools/unified-tight Apple System Colors Light unchanged 0% own header.css
agent-pane.header-tools/unified-tight Apple System Colors unchanged 0% own header.css
agent-pane.header-tools/idle Apple System Colors Light unchanged 0% own header.css
agent-pane.header-tools/idle Apple System Colors unchanged 0% own header.css
agent-pane.header-tools/panels-open Apple System Colors Light unchanged 0% own header.css
agent-pane.header-tools/panels-open Apple System Colors unchanged 0% own header.css
agent-pane.header-tools/panel-open Apple System Colors Light unchanged 0% own header.css
agent-pane.header-tools/panel-open Apple System Colors unchanged 0% own header.css
agent-pane.quick-surface/empty Apple System Colors Light unchanged 0% own header.css
agent-pane.quick-surface/empty Apple System Colors unchanged 0% own header.css
agent-pane.quick-surface/transcript Apple System Colors Light unchanged 0% own header.css
agent-pane.quick-surface/transcript Apple System Colors unchanged 0% own header.css
agent-pane.quick-surface/waiting Apple System Colors Light unchanged 0% own header.css
agent-pane.quick-surface/waiting Apple System Colors unchanged 0% own header.css
agent-pane.quick-surface/long Apple System Colors Light unchanged 0% own header.css
agent-pane.quick-surface/long Apple System Colors unchanged 0% own header.css
agent-pane.quick-surface/floating Apple System Colors Light unchanged 0% own header.css
agent-pane.quick-surface/floating Apple System Colors unchanged 0% own header.css
agent-pane.quick-surface/compact-streaming Apple System Colors Light unchanged 0% own header.css
agent-pane.quick-surface/compact-streaming Apple System Colors unchanged 0% own header.css

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

Not verified: macOS jobs did not run: compile and app tests were skipped on 514860f7b6; ci-status is green without them.

CI passes on 514860f7b6 (run 41572913610 attempt 1).
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped (the macos job needs both to succeed). Re-run CI once they pass, before merging.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

red: cmux-next checks (god files, concurrency, crash safety, l10n); base red: the same failure on the base 09242cc; does not block

Shipped in:

@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Nov 3, 2026
@teamleaderleo teamleaderleo added the leo-named-fix An obvious fix to something Leo named: lands on push, review runs in parallel label Nov 3, 2026

@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 (claude-opus-5-5 medium subagent): SHIP at 514860f

Review (subagent claude-opus-5-5 medium): SHIP at 514860f

Visual verdict: no images; code verdict only [follow-up].

Checked:

  • The root cause: dev.tsx loads header.css and never src/styles.css, and WebTheme's injected html{...!important} rule painted the row.
  • Specificity: html:has() scores (0,2,1), above (0,0,1).
  • The page background below the row is kept, the loading shell included. No double-painted translucent layer: pageColor is alpha 0 whenever an override exists.
  • The tabRowSurface removal is complete, and the tests are sound (red on base for the web test).

Follow-ups:

  • [follow-up] Make the Swift test assert that the chat actually shares the row at both widths.
  • [follow-up] Drop or annotate #25638's now-duplicate html:has rule in webviews/src/styles.css.
  • [follow-up] Check whether WebTheme's root background transition fades when data-tab-row toggles.

@teamleaderleo
teamleaderleo merged commit b39fa50 into feat-cmux-next Nov 3, 2026
212 of 226 checks passed
@teamleaderleo
teamleaderleo deleted the lane/header-no-backing branch November 3, 2026 03:39
@blacksmith-sh

blacksmith-sh Bot commented Nov 3, 2026

Copy link
Copy Markdown

Found 6 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmpgpren86o/summary-fail.json (live):/summary-fail.json (live): View Logs
/tmp/tmpj3wjs6ve/summary-missing.json (live):/summary-missing.json (live): View Logs
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows/
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows
View Logs
[new_workspaces] the window draws no frames/[new_workspaces] the window draws no frames View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs

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

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 514860f7 Deployed Nov 3, 2026 by teamleaderleo via namespace autofix #12873
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

leo-named-fix An obvious fix to something Leo named: lands on push, review runs in parallel risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant