cx-5dvig: sidebar update cards fit, share the composer's surface; popup adds only the rest, no arrow
Leo reported (10-13, nightly, cosmic-gray) problems with the sidebar's update cards. The Update Ready popover had AppKit's stock NSPopover arrow, unstyled against the theme. The card's version line truncated at the default sidebar width ("1.0.0 nightly 3845050 路 Oct 13, 2..."). The card and popover repeated the same facts: the version, the date, and See all changes twice. A second report followed: the "Updated to" card was opaque over the wallpaper, unlike the composer. Its version truncated, its fallback sentence wrapped awkwardly, and "Share cmux" was a bare text link with no affordance.
What changed
- Update Ready card: Update Ready, a short version and date ("nightly 3845050 路 Oct 13"), the Automatic Updates checkbox and Restart to Update. The changelog lines and See all changes leave the card. The short line drops the "1.0.0" every nightly shares and the year. A release keeps its version ("1.0.1 路 Oct 13").
- Popover: shows only what the card lacks: the full build ("1.0.0-nightly.3845050428001"), the highlights, and See all changes once. The "is ready" headline and the date are gone, since the card has both.
- Arrow: the popover is now the themed popup every cmux popover uses (
Glass.makeOverlayPanelinPopupStyle), beside the card and top-aligned with it, with no arrow. It takes clicks, never becomes key, and keeps its hover rules.- It opens to the right of the card, or to the left when there is no room on the right. It never covers the card.
- It closes when the app goes inactive, so it never comes back stuck open on reactivation.
- One card surface: every sidebar card now sits on the composer's surface: the theme's text at 13% over whatever is behind (the wallpaper on a wallpaper theme), a 0.5 pt edge at 18%, no shadow. This covers Update Ready, the notice and tip cards (they were Liquid Glass under a veil) and the web "Updated to" card (it was an opaque elevated fill). Under Reduce Transparency all of them draw opaque and follow the setting live. The cards keep a 12 pt radius, as the composer-styled dictation notice does.
- Native: a new
CardSurfaceViewin CmuxNextDesign, registered withReduceTransparencylikeOverlaySurfaceView. - Web:
.wn-carduses the composer'scolor-mixformula.
- Native: a new
- Updated card: "Updated to nightly 3845050" (the short form, matching the native card). With no listed highlights it reads "What's new in this build". The Share cmux text link is gone, along with its page op, sidebar intent and string. Share cmux stays in the palette and the Help menu (
app.shareCmux). - Accessibility: the popover opens on hover only, so "See all changes" stays on the card as a VoiceOver action of Restart to Update.
- Strings: adds
updates.card.whatsNewInBuildin all 21 locales. Removesupdates.card.share,updates.card.noHighlightsand the updater'supdater.updated.share. Generated page strings regenerated (node scripts/pages/gen-strings.mjs changelog).
Update check and install behavior is unchanged. I told the lane changing it (cx-nightly-release-xhigh) which files this touches.
Tests
Tests/CmuxNextAppTests/UpdateReadyCardLayoutTests.swiftstages an update the waydebug.updater stagedoes, then reads the card off a sidebar atMetrics.sidebarWidth. It checks:- every text fits its frame;
- the card has no See all changes, and "See all changes" is its accessibility action;
- the popup is a visible child window beside the card, top-aligned and the page's height, with no NSPopover.
- Red on 302d10d551ed (10 issues: the version line needs 189 pt and has 184.5 pt, the card shows "See all changes", an
_NSPopoverWindowshows, the popup covers the card). Green on 5d16494c5898 and on 4d6b96cbd853.
Tests/CmuxNextAppTests/SidebarCardSurfaceTests.swiftdraws the Update Ready card and a tip card in a themed window and reads each card's backmost full-size fill against the composer's (the theme's text at 13%).- Red on 8231590732aa: the Update Ready fill is 0.87 too opaque (the elevated fill), and the tip card's is 0.19 off (the glass veil).
- Green on 4d6b96cbd853:
Suite SidebarCardSurfaceTests passed.
webviews/test/update-ready-popover.test.tsxchecks the popover (full build, highlights, no "is ready", no date, See all changes once) and the Updated card ("Updated to nightly 3845050", "What's new in this build", only Close and See What's New buttons).- Red on 302d10d551ed for the popover (
Received: "1.0.0-nightly.3845050428001 is ready") and on 8231590732aa for the card (Received: "Updated to 1.0.0-nightly.3845050428001"). Green on 4d6b96cbd853.
- Red on 302d10d551ed for the popover (
- The fleet suite steps exit 1 only on
DaemonCapabilityExportTests, which fails on base too. - Release compile: green on 4d6b96cbd853.
- Gallery:
pages.changelog.update-surfaceshas the Updated card and the popover on a plain page and on a wallpaper backdrop (card,card-wallpaper,card-no-highlights,card-no-highlights-wallpaper,popover,popover-wallpaper), each in light and dark. The native Update Ready and tip cards are covered bySidebarCardSurfaceTests.
Changelog
- Changed: sidebar cards (Update Ready, Updated to, tips) share the composer's translucent surface. The Update Ready card shows a short version and date that fit, and its popover adds only the full build, the highlights and See all changes, in the app's themed popup with no arrow. The Updated card is terse and drops the Share cmux link (Share cmux stays in the palette).
馃 Generated with Claude Code