Skip to content

Update card: the What's New popover fits its lines; the Ready card is tighter - #34477

Merged
teamleaderleo merged 1 commit into
feat-cmux-nextfrom
leo/update-card-compact
Nov 4, 2026
Merged

teamleaderleo merged 1 commit into
feat-cmux-nextfrom
leo/update-card-compact

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 4, 2026 •

Copy link
Copy Markdown
Collaborator

Leo, on the Update Ready card's hover popover: "also MAN this looks ugly... stretched out wasted space"

The popover for an update with no change list ("What's new in nightly X / Updating from nightly Y / See release notes") was drawn at the full 340 pt menu width, with the link pushed to the far right under a rule. Most of it was empty.

  • Popover (UpdateSurfaces.tsx, updateSurfaces.css, surface.tsx): with no change list it is as wide as its lines (width: max-content, at most 340 px), with See release notes directly under the from line and no rule. The page reports its own width alongside its height (cmux.changelog.surface.size {height, width}), and the native host (SidebarPopoverIslandHost.fit(height:width:)) sizes the hover card to it. The popover with a change list keeps its menu width. Gallery: popover-empty (shipped, link under the from line), popover-empty-inline (link at the end of the from line), popover-empty-title-row (link at the end of the title), popover-empty-same-version. I picked the stacked one: it is the narrowest, and the link reads as its own action.
  • Update Ready card (SidebarUpdateCardView): the gaps between the version line, the Automatic Updates switch and Restart to Update go from 8 to 6 pt.
  • Updated card: after an automatic install that relaunched cmux behind another app (nobody clicked Restart to Update, UpdateRelaunchFocus), the card says "Updated to Nightly in the background", so it no longer seems to come with no restart. A web-only update never shows this card (whatsNew.showsUpdatedCard follows the native version, and a web swap shows nothing, per the 2026-10-30 call), so an Updated card is always a native relaunch. New string updates.card.updatedBehind in all 21 locales. Gallery: card-background.

Spec: design/sidebar.md (update card). References: none of Leo's update-card references are in cmux-design-references.
Risk: low. The width is used only when the page reports one, and the popover with a change list is unchanged.

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

Makes the What's New hover popover fit its lines for updates with no change list, tightens the Update Ready card, and clarifies the Updated card after a background update.

Changes

  • The popover with no change list is now as wide as its lines (at most the menu width), with "See release notes" directly under the from line and no rule; the popover with a change list is unchanged. The page reports its own width and the host sizes the popover to it.
  • The Update Ready card's row gaps go from 8 pt to 6 pt.
  • After an automatic install that relaunched cmux behind another app, the Updated card now says "Updated to Nightly in the background"; the new string is translated in all 21 locales.

Written for commit 33e518c. Summary will update on new commits.

View guided diff Turn on auto-fix

…rd is tighter

Leo: "also MAN this looks ugly... stretched out wasted space". The update-ready
popover with no change list was the full 340 pt menu width, with See release notes
pushed to the far edge under a rule. It is now as wide as its lines (the page
reports its width; the host sizes to it, at most the menu width), with the link
directly under the from line. The Update Ready card's row gaps go from 8 to 6 pt.

The Updated card after an automatic install that relaunched cmux behind another
app now says "Updated to Nightly in the background".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
@teamleaderleo teamleaderleo added the leo-named-fix An obvious fix to something Leo named: lands on push, review runs in parallel label Nov 4, 2026
@github-actions

github-actions Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 33e518c: 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=pr34477 -f ref=leo/update-card-compact -f platform=macos -f backend_mode=local

Unclear: web / react-apps-check failed: no known signature; failed step: Check webview test shards. This PR merged before its CI finished: fix forward on main.

CI failed on 33e518c3d1 (run 41751787336 attempt 1): 1 code, 1 unknown.
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped.

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

Failures:

  • seen on other PRs queuePausedState.test.ts a turn sent now while the queue stays paused shows running: timed out after 30000ms (job)
  • seen on other PRs agent-pane-changes-placement.test.tsx the in-page changes view sits right of the transcript at every pane width: failed (job)
  • seen on other PRs agent-pane-changes-tab.test.ts the chat opens Changes as a tab for remote chats and non-repository turns, in the page only with no ...: failed (job)
  • seen on other PRs agent-pane-edited-calm.test.ts the diff: a regular file header, plain-text badges, terminal-sized code lines: failed (job)
  • seen on other PRs trailing-plates-diff.test.ts (unnamed): failed (job)
  • seen on other PRs changes-address-thread.test.ts (unnamed): failed (job)
  • seen on other PRs changes-review-threads.test.ts (unnamed): failed (job)
  • seen on other PRs changes-stage-hunk-keys.test.ts (unnamed): failed (job)
Matched log lines
web / react-apps-check (1): (fail) a turn sent now while the queue stays paused shows running [30000.00ms]

Not re-run automatically: web / react-apps-check (1), 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: web / Web status; a job it gathers is red on this change (its line here); do not merge until green; see lane-rules
red: web / react-apps-check; a job it gathers is red on this change (its line here); do not merge until green; see lane-rules
red: web / react-apps-check (1); NEW: step Fail on the gate checks (+5 more) passes on the base a7072f8; do not merge until green; see lane-rules

Shipped in:

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Nov 4, 2026
@teamleaderleo
teamleaderleo merged commit b7c9441 into feat-cmux-next Nov 4, 2026
164 of 189 checks passed
@teamleaderleo
teamleaderleo deleted the leo/update-card-compact branch November 4, 2026 01:16
lawrencecchen added a commit that referenced this pull request Nov 4, 2026
…dater

b7c9441 (#34477) added 9 App lines (arch ratchet app_lines +9): the
"delivery": "background" patch of the Updated card's JSON, in the App's
UpdateSurfaceProvider.

This change moves that logic to CmuxNextUpdater, which owns
UpdateHighlights and UpdaterService and already declares
CmuxNextSettings (JSONValue):
- UpdateHighlights.surfaceJSON(background:) encodes the highlights and
  adds "delivery": "background" when background is true.
- UpdaterService.surfaceHighlights(updated:) chooses the highlights of
  the Ready popover or of the Updated card (the same rule as before).

The provider keeps only the App facts: the surface kind and
AppServices.environment.relaunchBehind. Both targets use uiSwiftSettings
(MainActor default), so the isolation does not change. No Package.swift
change. The behavior does not change.

Takes back #34477: its App lines made the app_lines arch ratchet red.

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

Copy link
Copy Markdown
Contributor

Leo, a note about the update card: #34570 (commit 676c963330f) moves the logic that this PR added to CmuxNextApp/Pages/UpdateSurfaceIsland.swift into CmuxNextUpdater. This PR added +9 App lines to the app_lines arch ratchet red on feat-cmux-next.

What moved, to Packages/macOS/CmuxNext/Sources/CmuxNextUpdater/UpdaterService+SurfaceHighlights.swift:

  • UpdateHighlights.surfaceJSON(background:): the JSON encoding and the "delivery": "background" field.
  • UpdaterService.surfaceHighlights(updated:): the choice of the Ready popover's or the Updated card's highlights.

UpdateSurfaceProvider stays in the App and gives only the surface kind and environment.relaunchBehind. The behavior does not change.

lawrencecchen added a commit that referenced this pull request Nov 4, 2026
…t of CmuxNextApp (app_lines +198) (#34570)

* base red: move the Invite People card and rows out of CmuxNextApp

The arch ratchet row app_lines is red on feat-cmux-next: CmuxNextApp
Swift lines +231 over the last green arch tip 3232840. The cause is
26fd471 (#33967), which added the Invite People sheet views to
CmuxNextApp (+361 lines). Later commits removed 130 App lines.

This change moves the sheet views to CmuxNextNotifications, a ui-layer
target that already declares CmuxNextDaemonService (the sheet model)
and CmuxNextDesign (the design kit), and that CmuxNextAppTests declares:
- AgentShareInviteCard (Share/AgentShareInviteCard.swift)
- AgentShareInviteRowView (Share/AgentShareInviteRowView.swift)

Only the presenter stays in CmuxNextApp, in the old file
Share/AgentShareInviteSheet.swift (AgentShareInviteSheetPresenter:
the overlay host, AppServices, the first load). CmuxNextNotifications
does not declare CmuxNextIcons, so the presenter gives the card its close
icon (the same NSImage.icon(.actionClose, size: 12) as before).

The card is package access: its init, onClose, focusField, and the
members that the compiler requires (the overrides, the required init and
the text field delegate methods). The row view stays internal. No
Package.swift change, no new target and no new dependency edge.

The behavior does not change. AgentShareTests imports
CmuxNextNotifications and gives the card an empty close image.

Takes back #33967: its Invite People views are in CmuxNextApp, which
made the app_lines arch ratchet red at the feat-cmux-next tip.

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

* base red: the update surface's highlights and JSON move to CmuxNextUpdater

b7c9441 (#34477) added 9 App lines (arch ratchet app_lines +9): the
"delivery": "background" patch of the Updated card's JSON, in the App's
UpdateSurfaceProvider.

This change moves that logic to CmuxNextUpdater, which owns
UpdateHighlights and UpdaterService and already declares
CmuxNextSettings (JSONValue):
- UpdateHighlights.surfaceJSON(background:) encodes the highlights and
  adds "delivery": "background" when background is true.
- UpdaterService.surfaceHighlights(updated:) chooses the highlights of
  the Ready popover or of the Updated card (the same rule as before).

The provider keeps only the App facts: the surface kind and
AppServices.environment.relaunchBehind. Both targets use uiSwiftSettings
(MainActor default), so the isolation does not change. No Package.swift
change. The behavior does not change.

Takes back #34477: its App lines made the app_lines arch ratchet red.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
lawrencecchen added a commit that referenced this pull request Nov 4, 2026
…t spacing test's after() helper (#34577)

* base red: the What's New brief's More line sits on the spacing scale (design tokens)

check:design-tokens is red on feat since b7c9441 (#34477): the brief
popover's .wn-pop-more used margin-top 2px, off the token scale. It now
uses --ds-space-1 (4px), the same gap .wn-pop-all uses above it.

* base red: transcript spacing test defines after() again (webviews typecheck)

webviews typecheck is red on feat: test/transcript-spacing-kinds.test.ts:247
calls after(), which #34464 (1e8a45b) removed together with below()
while #34370 (8557b10, written on a base that still had them) added a
new use. Restore both helpers as #34370 measured with them; no other change.

* base red: cloudRun test names a string in its template (vp lint restrict-template-expressions)

#34592 (31ffec4) builds a call label with ${params.cwd}, an unknown;
vp lint treats that as an error in the pre-push web lint, so the merge
service's hook refused #34577's squash. String() it; no behavior change.

* base red: format three webviews files the way vp fmt --check wants

feat's emoji shortcode change (#34364) left App.tsx, emojiShortcodes.test.ts
and composer-emoji.browser.test.ts unformatted, so vp fmt --check fails the
pre-push web lint on every webviews push. Output of scripts/web-lint.sh --fix.

* base red: the Cloud start source check accepts the formatted App.tsx call

vp fmt puts cloudFolderGrant.granting(folder.cwd, pickFolder(...)) on
several lines, and cloudRun.test.ts read it as one line, so it failed
after the format commit. The pattern now allows whitespace between the
arguments. bun test cloudRun.test.ts: 21 pass, 0 fail.

This branch was successfully deployed

No deployments
ci-routing-agent — 33e518c3 Deployed Nov 4, 2026 by teamleaderleo via wait for same-key tree publisher #108422
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.

2 participants