Repository navigation
cmux NEXT: session hover cards and the What's New popover are glass again, not solid - #23740
Conversation
…t a solid card Leo 2026-10-21 on his nightly: "WHY IS THIS SOLID COLOR AGAIN". The app's one hover card window (session and tab hover cards, and the Update Ready card's What's New highlights popover) was themed Liquid Glass after #21785; ccde782 then laid the mostly opaque CardMaterial fill (at least 90%) over every theme-tone overlay, this window included, so these cards read as solid again. Glass.makeOverlayPanel takes cardFill (default true, so the palette, popovers and bars keep the card fill); HoverCardPanel and the hover card gallery host pass false and draw the shared themed overlay glass alone. Reduce Transparency stays solid. FloatingSurfacesStayGlassTests fails when a fill between the hover card's or the Update Ready card's material and its content is denser than the shared glass (FloatingGlassStyle veils, the themed overlay tint), on Liquid Glass and on the pre-26 blur, and proves the check catches the card fill. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16027-a80b-79c0-ab31-500e58883d27&host=cosmic-gray
|
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)
Not verified: macOS jobs did not run: compile and app tests were skipped on CI passes on Written by Tour of The path-selected recorder failed for hover-card-after, hover-card-before; see the run artifact and failed manifests. Path-selected interactions
Core UI (before): DEGRADED — 19 ok, 1 unavailable
Screenshots (15)1. Launch
Screenshots (15)1. Launch
Screenshots (14)1. Launch over art
Screenshots (14)1. Launch over art
Failed steps: 12. A real workspace card, dark Screenshots (11)1. Launch
Failed steps: 12. A real workspace card, dark Screenshots (11)1. Launch Tours are data in |
|
Owned by glass-regressions on cosmic-gray · session |
|
Bead |
…yTests does Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16027-a80b-79c0-ab31-500e58883d27&host=cosmic-gray
|
Review (subagent, correctness first): SHIP at 763689a
Risk, not a blocker: hover cards no longer carry the 4.5:1 guarantee CI on 763689a:
|
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/39692226412 at 66c2012 failed: cmux-next fast tier. |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/39692485830 at 7692cfb failed: cmux-next fast tier. |
|
Shipped in:
|
…dow (stacked on #23801) (#24022) * cmux NEXT: hover cards and the What's New popover are glass again, not a solid card Leo 2026-10-21 on his nightly: "WHY IS THIS SOLID COLOR AGAIN". The app's one hover card window (session and tab hover cards, and the Update Ready card's What's New highlights popover) was themed Liquid Glass after #21785; ccde782 then laid the mostly opaque CardMaterial fill (at least 90%) over every theme-tone overlay, this window included, so these cards read as solid again. Glass.makeOverlayPanel takes cardFill (default true, so the palette, popovers and bars keep the card fill); HoverCardPanel and the hover card gallery host pass false and draw the shared themed overlay glass alone. Reduce Transparency stays solid. FloatingSurfacesStayGlassTests fails when a fill between the hover card's or the Update Ready card's material and its content is denser than the shared glass (FloatingGlassStyle veils, the themed overlay tint), on Liquid Glass and on the pre-26 blur, and proves the check catches the card fill. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16027-a80b-79c0-ab31-500e58883d27&host=cosmic-gray * test(next): read the hover card's fills the way CardMaterialLegibilityTests does Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16027-a80b-79c0-ab31-500e58883d27&host=cosmic-gray * cmux NEXT: every overlay is glass, never a solid card; a lint keeps it so Leo 2026-10-21: "STOP DOING SOLID. WE HAVE GLASS, SO JUST USE GLASS." - Glass.makeOverlayPanel's card fill is opt-in (cardFill defaults to false): the palette, popovers, menus, find and prompt bars, browser bubbles and page info draw the shared themed glass alone. Takes back ccde782 (no PR), which laid the mostly opaque CardMaterial fill (90% or more) on every overlay. Reduce Transparency stays solid. - The notifications panel and New Message's recipient suggestions sit on the shared overlay glass instead of the elevated / popup surface. - Home's import cards are real glass with the dialogs' neutral veil and rim, not ReduceTransparency.alwaysOpaque. - The sidebar's edit bar draws the sidebar cards' veil, solid only under Reduce Transparency. - check-overlay-glass.py (cmux-next checks job, the prepush gate, and its own test) names every solid surface fill in CmuxNext: the popup surface, elevated fills, solid system colors, alwaysOpaque, cardFill: true and solid SwiftUI backgrounds. A hit passes only with a listed reason or a `glass-opaque-allow:` comment, and a stale allowance fails. - FloatingSurfacesStayGlassTests: every default overlay is glass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16027-a80b-79c0-ab31-500e58883d27&host=cosmic-gray * check-overlay-glass: hover card bodies draw only on the one glass hover card window Every native hover card (tab, link chip, sidebar workspace and group, pull request, What's New) shows in HoverCardPanel, the bare themed glass (#23740, #23801). Each body is glass today, but nothing stopped one from building its own window or material or laying a solid fill over the panel's glass. The lint now finds hover card bodies (files with HoverCardBody(...) or HoverCardTextReporting) and flags: hover-own-window NSPanel / NSPopover / NSWindow / NSVisualEffectView / OverlaySurfaceView / makeOverlayPanel in a body; hover-body-fill a backgroundColor / fillColor / .background(...) that isn't Palette.hoverFill, clear, nil or a color under 0.6 alpha (each ternary branch is checked). The existing glass-opaque-allow escape and ALLOWED table apply. The shell test adds fixtures for each form and the passes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>


























































































Leo on his nightly, 2026-10-21: "WHY IS THIS SOLID COLOR AGAIN". The What's New popover beside the Update Ready card and the sidebar's session hover cards showed as solid cards. They should be glass in the shared material.
Cause
All of these show in one window, the app's hover card window (
HoverCardPanel): the workspace/session cards, the tab cards and the Update Ready card's highlights popover ("1 Switch fonts in a step…", "See all changes →"), whichpresentOwnedputs in that same card.CardMaterialfill under the content of every theme-toneGlass.makeOverlayPanel, at 90% or more opacity: the solid popup surface. The hover card window was included, so the session cards and the What's New popover became solid again. That is the regression.CardSurfaceView) was already the shared neutral glass veil (FloatingGlassStyle.card, 22% dark / 45% light) since 17228e1, and it still is. This PR doesn't change it; the new test guards it.Change
Glass.makeOverlayPaneltakescardFill(defaulttrue). The palette, popovers and find and prompt bars keep the card fill Lawrence asked for.HoverCardPaneland the hover card gallery host passcardFill: false. They draw the shared themed overlay glass alone: Liquid Glass tinted withPalette.glassTint×glass.overlayTintStrength, or the behind-window blur before macOS 26.Invariant
FloatingSurfacesStayGlassTests(CmuxNextDesignTests, run by theswift testjob when CmuxNextDesign changes) fails when:CardMaterialcard again, or any fill between its material and its content is denser than the shared glass (theFloatingGlassStyleveils and the themed overlay tint). It checks both Liquid Glass and the pre-26 blur, in a light and a dark theme;CardSurfaceViewstops being the shared veil.A control case proves the check catches the 90% card fill. The source-level
no-opaque-glassast-grep rule (#23366) didn't catch this regression because the fill sat on a separate view laid over the glass. This test checks the fill values the views actually draw.Changelog
Observed / Not run
package-test-lane.sh suite Packages/macOS/CmuxNextbuilt CmuxNext with its tests, so the Swift compiles. These suites ran and passed: FloatingSurfacesStayGlassTests (new), HoverCardGlassTests, CardMaterialLegibilityTests, FloatingGlassStyleTests, WorkspaceHoverCardSurfaceTests and UpdateCardHoverParityTests.HoverCardPanel().glass.isCardis true and its tint view fills at the CardMaterial opacity (≥ 0.9), which is whattheCardFillTheHoverCardDropsIsSolidasserts is caught.cmux-ci captureneeds an HQ checkout, and cmux claude-team 模式开启多subagent后,如何指定模型分配 #2713 isn't deployed). The change is the hover card's fill alpha, and the tests above check it on both materials. A light/dark capture will follow.Agent session: cosmic-gray
🤖 Generated with Claude Code