Skip to content

cmux NEXT glass: in a see-through Chromium page, menus and the composer no longer show the chat text sharp through the glass - #24358

Merged
teamleaderleo merged 8 commits into
feat-cmux-nextfrom
cef-chat-frost
Oct 22, 2026
Merged

teamleaderleo merged 8 commits into
feat-cmux-nextfrom
cef-chat-frost

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator

Leo: "2 on we can't be having unstyled main chat panes..."

Leo-ask: ask-95c8d21afb

Every cmux page in Chromium is see-through over the window glass (8e36a5b). Chromium draws a backdrop-filter's blurred copy over the page's own pixels, not in their place. A see-through page doesn't contain the window glass, so that copy is mostly clear, and the transcript under a menu, a hover card or the composer reads crisp through the tint. WebKit's backdrop takes in the opaque window glass and frosts it. The bench captures for #24160 showed this: in the Chromium column the transcript text sits sharp inside the side panel's glass.

What changes

  • Floating glass in a see-through Chromium page now lays its tint over the theme surface at --glass-underlay (webviews/src/ui/glass/glass.css).
    • Floating glass means .ui-popup, .ui-tooltip, .ui-title-tooltip, .ui-card, and surfaces marked with the new .ui-glass-floats: the composer card, queue and strip, both jump pills, the session and link hover cards, and the add-project dialog.
    • The rule is scoped by @supports not (-webkit-backdrop-filter: none), so it applies only in Chromium (WebKit keeps the prefixed property). It also needs a see-through root, no lens canvas, and no Reduce Transparency.
  • Glass in the page's flow keeps its tint, as in WebKit. A user's bubble and a settings card have nothing under them.
  • The strength is a gallery experiment, chromium-glass-underlay, with four arms: none (today), light 50%, medium 70% (default), heavy 85%.
    • desktop.ts puts the arm on <html> as data-glass-underlay.
    • With no attribute, the CSS already uses the default arm, so the first frame doesn't change.
    • The Liquid glass gallery entry adds see-through-text variants (dark and light) that compare the arms.
    • I picked medium: the text under the glass fades to a trace, and the surface stays below 0.9 alpha (glass is never opaque).
  • WebKit, an opaque window, the lens and Reduce Transparency draw exactly what they did before.

This is a page-side stopgap. The real fix is in the CEF fork's compositor (replace the backdrop with its blurred copy instead of drawing over it), which belongs to the fork's owner.

Verification

  • webviews/test/chromium-glass-underlay.test.ts (Playwright Chromium and WebKit; the page is clear, as in the app, via omitBackground) measures white bars under a floating glass.
    • Base (glass.css from feat-cmux-next): red. The bar contrast is 38 for every arm ("Expected: < 17.12, Received: 38.05"), and the arms don't order.
    • Head: 4 pass.
      • The default arm fades the bars below 45% of the tint-only contrast, and the in-flow glass is unchanged.
      • The arms order by strength, each fill alpha is under 0.9, and WebKit draws no underlay.
      • As a control, the same tint-only glass over an opaque page frosts the bars below 8, so the cause is the clear page, not the blur.
    • Command: CMUX_BROWSER_TESTS=1 bun test test/chromium-glass-underlay.test.ts.

Observed / Not run

  • Observed:
    • The test above, red on base and green on head.
    • composer-glass.test.ts (8 pass; its fixture now carries ui-glass-floats like ComposerBox.tsx) and glass-lens.test.ts (14 pass, Chromium and WebKit).
    • glass-never-opaque, user-bubble-glass and hover-cards-glass (10 pass).
    • vp fmt --check, plus vp lint and the type check filtered to the changed files (no findings).
    • check-layers.py, and the pre-push gate.
    • All of these ran on Huge Blue (Linux) in a copy of webviews/.
  • Not run:
    • The full bun run check. The copy lacked the rest of the repo, so 34 errors appeared in files this PR doesn't touch.
    • The full browser lane. CI runs it.
    • The real-app capture of a fleet build at this head is in progress on a capture mini; the result will be a comment here.

Changelog

  • Fixed: In a Chromium page over the window glass, menus, hover cards and the composer no longer show the chat text sharp through their glass.

Risk: normal (webview CSS; WebKit unchanged; the arm can be switched with cmux.experiments).

Agent session: cosmic-gray

🤖 Generated with Claude Code


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


Summary by cubic

Fixes see-through Chromium pages showing chat text crisp through menus, hover cards, the composer, and the Chat Inspector glass. Chromium draws a backdrop-filter's blurred copy over the page's own pixels, so the window glass never reaches the filter; WebKit already frosts it correctly.

  • Floating glass (popups, tooltips, hover cards, the Chat Inspector, and surfaces marked .ui-glass-floats) now lays its tint over the theme surface, scoped to see-through Chromium pages with no lens and no Reduce Transparency.
  • The composer's top strip does the same, except a plain strip or system Reduce Transparency stays unfilled and draws nothing extra.
  • Glass in the page's flow (user bubbles, settings cards) keeps its tint unchanged.
  • The underlay strength is the chromium-glass-underlay experiment with four arms: none, light 50%, medium 70%, and heavy 85%. Medium is the default; the CSS already uses it when no attribute is set, so the first frame is unchanged.
  • WebKit, opaque windows, and the lens draw exactly as before.

Written for commit d6ee041. Summary will update on new commits.

View guided diff Turn on auto-fix

teamleaderleo and others added 3 commits October 22, 2026 02:05
… a see-through Chromium page

Chromium draws a backdrop-filter's blurred copy over the page's own pixels. Over a clear page (a
cmux page in Chromium over the window glass) that copy is mostly clear, so white bars under a
floating .ui-glass keep their full contrast (38 on base, for every underlay arm). The test wants the
default arm to fade them below 45% of that, the arms to order by strength, the in-flow glass
unchanged, and WebKit to draw no underlay.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d28-87e2-72e0-ae15-bb3649af8abd&host=cosmic-gray
…the theme surface under its tint

Leo: "2 on we can't be having unstyled main chat panes..." Every cmux page in Chromium is see-through
(8e36a5b), and Chromium draws a backdrop-filter's blurred copy over the page's own pixels, not in
their place: the window glass is not in the page, so the transcript under a menu, a hover card or the
composer read crisp through the tint. WebKit's backdrop takes in the opaque window glass and frosts it.

Until the CEF fork's compositor replaces the backdrop, a floating glass (.ui-popup, .ui-tooltip,
.ui-title-tooltip, .ui-card, or a surface marked .ui-glass-floats: the composer card, queue and
strip, the jump pills, the session and link hover cards, the add-project dialog) lays its tint over
the theme surface at --glass-underlay, only under @supports not (-webkit-backdrop-filter: none), a
see-through root, no lens and no Reduce Transparency. In-flow glass (a user's bubble, a settings
card) keeps its tint, as in WebKit.

The strength is the experiment chromium-glass-underlay (none, light 50%, medium 70% the default,
heavy 85%), which desktop.ts puts on <html>; with no attribute yet the CSS is the default arm's, so
there is no first-frame change. The Liquid glass gallery entry gains see-through variants that
compare the arms.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d28-87e2-72e0-ae15-bb3649af8abd&host=cosmic-gray
@teamleaderleo teamleaderleo added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 22, 2026
@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

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

Review d6ee041: 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=pr24358 -f ref=cef-chat-frost -f platform=macos -f backend_mode=local

Gallery before/after for d6ee041: 16 states rendered, 0 images differ, 1591 more touched states not rendered. Images are in the run's artifact, not on this public PR.

gh run download 39856274190 -R manaflow-ai/cmux -n gallery-advisory-24358-d6ee041508a7ed6bd7707fc2596130a8516ef5d8 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.add-project-panel/environment Apple System Colors Light unchanged 0% own AddProjectPanel.tsx
agent-pane.add-project-panel/environment Apple System Colors unchanged 0% own AddProjectPanel.tsx
agent-pane.add-project-panel/sources Apple System Colors Light unchanged 0% own AddProjectPanel.tsx
agent-pane.add-project-panel/sources Apple System Colors unchanged 0% own AddProjectPanel.tsx
agent-pane.add-project-panel/directory Apple System Colors Light unchanged 0% own AddProjectPanel.tsx
agent-pane.add-project-panel/directory Apple System Colors unchanged 0% own AddProjectPanel.tsx
agent-pane.add-project-panel/keyboard Apple System Colors Light unchanged 0% own AddProjectPanel.tsx
agent-pane.add-project-panel/keyboard Apple System Colors unchanged 0% own AddProjectPanel.tsx
agent-pane.chat-inspector/full Apple System Colors Light unchanged 0% own ChatInspector.gallery.tsx
agent-pane.chat-inspector/full Apple System Colors unchanged 0% own ChatInspector.gallery.tsx
agent-pane.chat-inspector/environment-folders Apple System Colors Light unchanged 0% own ChatInspector.gallery.tsx
agent-pane.chat-inspector/environment-folders Apple System Colors unchanged 0% own ChatInspector.gallery.tsx
agent-pane.chat-inspector/context-connectors-open Apple System Colors Light unchanged 0% own ChatInspector.gallery.tsx
agent-pane.chat-inspector/context-connectors-open Apple System Colors unchanged 0% own ChatInspector.gallery.tsx
agent-pane.chat-inspector/context-breakdown Apple System Colors Light unchanged 0% own ChatInspector.gallery.tsx
agent-pane.chat-inspector/context-breakdown Apple System Colors unchanged 0% own ChatInspector.gallery.tsx
agent-pane.chat-inspector/context-breakdown-hues Apple System Colors Light unchanged 0% own ChatInspector.gallery.tsx
agent-pane.chat-inspector/context-breakdown-hues Apple System Colors unchanged 0% own ChatInspector.gallery.tsx
agent-pane.chat-inspector/context-breakdown-mono Apple System Colors Light unchanged 0% own ChatInspector.gallery.tsx
agent-pane.chat-inspector/context-breakdown-mono Apple System Colors unchanged 0% own ChatInspector.gallery.tsx
agent-pane.chat-inspector/changes-breakdown Apple System Colors Light unchanged 0% own ChatInspector.gallery.tsx
agent-pane.chat-inspector/changes-breakdown Apple System Colors unchanged 0% own ChatInspector.gallery.tsx
agent-pane.chat-inspector/changes-all Apple System Colors Light unchanged 0% own ChatInspector.gallery.tsx
agent-pane.chat-inspector/changes-all Apple System Colors unchanged 0% own ChatInspector.gallery.tsx
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/new-chat Apple System Colors Light unchanged 0% own ComposerBox.tsx
agent-pane.composer/new-chat Apple System Colors unchanged 0% own ComposerBox.tsx

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

Unclear: web / react-apps-check failed: no known signature; failed step: Check webview test shards.

CI failed on d6ee041508 (run 39856274493 attempt 1): 1 code, 1 unknown.

Job Verdict Why
web / react-apps-check (2) code a web test failed
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Failures:

  • seen on other PRs agent-pane-older-rows-fade.test.ts rows of an older page fade in once as they come into view; opened and live rows do not: failed (job)
  • seen on other PRs chat-palette-actions.test.ts (unnamed): failed (job)
  • seen on other PRs motion-scale.test.ts motion scale > no webview CSS, TS or TSX animates off the scale: failed (job)
Matched log lines
web / react-apps-check (2): (fail) rows of an older page fade in once as they come into view; opened and live rows do not [6056.79ms]

Not re-run automatically: web / react-apps-check (2), web / react-apps-check are not machine failures.

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); NEW: red check: Checks job structure (+2 more) is not red on the base 39f51c0; do not merge until green; see lane-rules
red: web / Web status; NEW: green on the base 39f51c0; do not merge until green; see lane-rules
red: web / react-apps-check; no finished base run on 39f51c0 to compare; do not merge until green; see lane-rules
red: web / react-apps-check (2); no finished base run on 39f51c0 to compare; do not merge until green; see lane-rules

Tour of d6ee041508 (run)

The path-selected recorder failed for glass-after, glass-before; see the run artifact and failed manifests.

Path-selected interactions

Interaction Changed paths
glass webviews/src/agent\-session/acpmux/composerStates.css
webviews/src/ui/glass/LiquidGlass.gallery.tsx
webviews/src/ui/glass/chromiumUnderlay.experiment.ts
webviews/src/ui/glass/glass.css
webviews/test/chat\-inspector\-glass.test.tsx
webviews/test/chromium\-glass\-underlay.test.ts
webviews/test/composer\-glass.test.ts

glass-before: the media could not be published (refused 11 file(s) that show private names: 24358/d6ee0415/next-glass-before/shots/05-agent-chat-beside-the-terminal.png (fleet Mac mini name); 24358/d6ee0415/next-glass-before/shots/06-command-palett)

glass-after: the media could not be published (refused 11 file(s) that show private names: 24358/d6ee0415/next-glass-after/shots/05-agent-chat-beside-the-terminal.png (fleet Mac mini name); 24358/d6ee0415/next-glass-after/shots/06-command-palette-)

Tours are data in scripts/cmux-next/media/tours: add a step or a tour file to show your feature.

@blacksmith-sh

blacksmith-sh Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Found 22 test failures on Blacksmith runners:

Failures

Test View Logs
---/--- View Logs
---/--- View Logs
---/--- View Logs
/tmp/tmp87huohqy/summary-missing.json (live):/summary-missing.json (live): View Logs
/tmp/tmpibnc8f7m/summary-fail.json (live):/summary-fail.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
convention violations found (ERROR lines above)./
convention violations found (ERROR lines above).
View Logs

...and 12 more test failures. View all on Blacksmith: run 39856274493, run 39856274233, run 39856274194

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

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-aowsh created for this PR by the cmux coordinator.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next guards / nightly-guards / workflow-guard-tests / release-notary is red on 17 of 17 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (final_head_review): SHIP at d6ee041

Reconciled the PR with the current feat-cmux-next base (39f51c07e54) and pushed merge commit f4b7fa1112188fd1bb2280bdb9237dbc51ba55df, then fixed the missed Inspector floating-glass class and pushed final head d6ee041508a7ed6bd7707fc2596130a8516ef5d8.

Resolved defects from the initial review:

  • ChatInspector.tsx:454 and its gallery fixture now mark the Inspector ui-glass-floats, covering see-through Chromium text under the panel.
  • The underlay rules are excluded under system Reduce Transparency and from the plain top strip.

Validation on the final worktree:

  • CMUX_BROWSER_TESTS=1 bun test test/chromium-glass-underlay.test.ts test/composer-glass.test.ts: 13 pass.
  • CMUX_BROWSER_TESTS=1 bun test test/glass-never-opaque.test.ts test/user-bubble-glass.test.ts test/hover-cards-glass.test.ts src/pages/shared/desktopLayer.test.ts test/check-layers.test.ts: 16 pass.
  • CMUX_BROWSER_TESTS=1 bun test test/chat-inspector-glass.test.tsx: 4 pass.
  • python3 scripts/cmux-next/check-layers.py: pass.
  • python3 scripts/cmux-next/prepush-gate.py: prepush-gate: no new violations.
  • git diff --check: clean; worktree clean.

Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a162e0-3a44-77f0-b380-8c1966497d56&host=huge-blue

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next / cmux-next checks (god files, concurrency, crash safety, l10n) › Checks job structure is red on 15 of 15 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next / cmux-next checks (god files, concurrency, crash safety, l10n) › No fleet host names in gallery fixtures is red on 15 of 15 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next / cmux-next checks (god files, concurrency, crash safety, l10n) › No new SwiftUI (macOS UI is AppKit) is red on 15 of 15 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@teamleaderleo
teamleaderleo merged commit 84d5d32 into feat-cmux-next Oct 22, 2026
131 of 140 checks passed
@teamleaderleo
teamleaderleo deleted the cef-chat-frost branch October 22, 2026 21:45
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

base-red-watch: cmux-next web / web / Web status went red on feat-cmux-next in https://github.com/manaflow-ai/cmux/actions/runs/39859869162 (first red at 84d5d32, last green at 39f51c0). Suspect: #24358 (commit 84d5d32). If it is yours, fix forward on feat-cmux-next.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex): SHIP at 520316a

Final reviewed head was d6ee041 after base reconciliation and fixes. The review found no remaining defects; targeted web tests, layer checks, prepush checks, risk evidence, and Release compile passed.

teamleaderleo added a commit that referenced this pull request Oct 23, 2026
…rough underlay

Codex round 2: base's #24358 lays floating glass (.ui-popup, .ui-glass-floats)
on the theme surface underlay in a see-through Chromium page; the Summary
popover floats over the chat but had only .ui-glass, so under Plain glass its
fill was 60% while a chat menu's was 70%. The popover now carries
.ui-glass-floats, and summary-glass.test.ts also compares its background
layers with a menu's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

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