Repository navigation
check-overlay-glass: hover card bodies draw only on the one glass window (stacked on #23801) - #24022
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
…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
…t 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
…ssions/glass-sweep # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextDesign/CardMaterial.swift # Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Glass.swift # Packages/macOS/CmuxNext/Sources/CmuxNextDesign/OverlaySurface.swift # Packages/macOS/CmuxNext/Sources/CmuxNextDesign/Tunables/ChromeTunables.swift # Packages/macOS/CmuxNext/Tests/CmuxNextDesignTests/FloatingSurfacesStayGlassTests.swift
…ssions/glass-sweep # Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextImportCards/ImportCardsStripView.swift
…er 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>
|
Owned by glass-regressions on cosmic-gray · session |
…nto glass-regressions/glass-previews
|
Found 11 test failures on Blacksmith runners: Failures
...and 1 more test failures. View all on Blacksmith
|
|
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)
red: cmux-next checks (god files, concurrency, crash safety, l10n); NEW: |
|
Bead |
|
Review (subagent, correctness first): SHIP at 4836628 The new head is a base merge (feat-cmux-next at df74f47; #23801's content comes from base unchanged as 0b71d5e) plus the reviewed commit 2df1ca0, also unchanged: |
|
|
|
Review (Codex xhigh via acpmux, correctness first): SHIP at 73583d3 |
|
Shipped in:
|
|
Shipped in:
|
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Native hover cards can't turn solid again. The new lint rules apply to every hover card body.
Leo-ask: ask-d547ac77f0
Stacked on #23801, which adds
scripts/cmux-next/check-overlay-glass.py. This branch starts from #23801's head (433dfb0), so review only the top commit (2df1ca0). After #23801 squash-merges, a base merge reduces the diff to that commit.Audit (native). Every native hover card already shows in the app's one hover card window,
HoverCardPanel, which is plain themed glass (#23740; #23801 made the card fill opt-in). None needed a fix:TabHoverCardView,GroupHoverCardView)HomeLinkPreviewCardView)WorkspaceHoverCard)SidebarPullRequestCard)SidebarUpdateCardView+Popover)The only fills inside them are
Palette.hoverFill(thumbnail placeholder, row hover), clear, and a pill tint at 14%.Change.
check-overlay-glass.pynow treats any file that hands a body to that window (HoverCardBody() or reports a card's lines (HoverCardTextReporting) as a hover card body, and flags:hover-own-window: the body builds its own window or material (NSPanel,NSPopover,NSWindow,NSVisualEffectView,OverlaySurfaceView,makeOverlayPanel).hover-body-fill: abackgroundColor,fillColoror.background(...)that isn'tPalette.hoverFill, clear,nil, or a color under 0.6 alpha. Each branch of a ternary is checked.The panel and its definitions are exempt (
HoverCardPanel.swift,HoverCardSource.swift,HoverCardRow.swift). Theglass-opaque-allow:escape and theALLOWEDtable work as before.check-overlay-glass.test.shadds fixtures that should fail (popover, own glass, solid fill, solid ternary branch) and ones that should pass (hover fill, clear, 14% pill, escaped dot, the same fill outside a body).The web hover cards are covered by #23997.
Verification (huge-blue):
python3 -I scripts/cmux-next/check-overlay-glass.py .→ ok.bash scripts/cmux-next/tests/check-overlay-glass.test.sh→ ok.layer?.backgroundColor = Palette.background.cgColortoTabHoverCardView.swiftgives[hover-body-fill]at that line. Reverted afterwards.This commit changes no Swift; the only Swift in the diff comes from #23801.
No capture: lint only, nothing on screen changes.
Agent session: cosmic-gray
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
Adds hover card body rules to
check-overlay-glass.pyso native hover cards can't turn solid again. With #23801 merged into base, this branch carries only the lint and its tests. Hover card bodies must draw only on the app's one glass hover card window (HoverCardPanel).hover-own-windowflags a body that builds its own window or material (NSPanel,NSPopover,NSWindow,NSVisualEffectView,OverlaySurfaceView,makeOverlayPanel).hover-body-fillflags abackgroundColor/fillColor/.background(...)that isn'tPalette.hoverFill, clear,nil, or under 0.6 alpha; each ternary branch is checked.glass-opaque-allow:comments and theALLOWEDtable still apply, and stale allowances fail.check-overlay-glass.test.shadds failing and passing fixtures for each rule form.Written for commit 73583d3. Summary will update on new commits.