cmux-next sidebar: a crisp session hover card that never scrolls
Leo 2026-10-20: the session hover card was a scrolling "History" of truncated prompts and "claude-sr2 finished" lines, with mushy styling and an awkward inner scroll. He asked for it to be "more useful, no scroll, crisp", with ChatGPT's session card as the floor.
The compact layout is now the default, reworked:
- First line: the title (at most two lines), its kind or machine icon, the relative age, and an unread dot in the accent color.
- Status: the status line with how long it has held ("Working 4m").
- Facts: why it waits or its task, then folder, branch, pull request, ports and machine.
- Last message: the agent's last message, up to three lines, rendered from markdown. Bold, italic and code use the card's fonts. Headings, quotes, list marks and code fences are dropped, so the raw marks never show.
- Recent moments: the last three, one line each, with no header and no scroller. The list is as tall as its lines, so the card has a fixed shape.
- Look: glass and theme colors are unchanged (the shared hover-card overlay).
The timeline, log, classic and minimal layouts are still in Settings (sidebar.hoverCards.layout). The settings sources are regenerated. settings-schema.json, docs/mdm/* and the defaults snapshot are left to the autofix.
Follow-ups:
- Tint the machine glyph with
MachineColoronce #22763 lands. - Token counts. SidebarWorkspace has no token count yet.
Test: WorkspaceHoverCardSummaryTests (commit 5307c722, failing first) covers three things: compact is the default; the card has the unread dot, age, folder, branch and PR, the rendered last message in three lines and three moments; the card never scrolls, is under 360 pt tall and has no raw markdown marks. The timeline tests now ask for .timeline explicitly.
Observed / Not run
- Observed:
gen-settings-sources.pyregenerated the two hover-card Swift files.prepush-gate.pyreported no new violations. - Not run: no Swift build or tests on this Mac (the rules forbid it). The red-then-green of
WorkspaceHoverCardSummaryTestscomes from CI on the two commits. No screenshot yet.
Changelog
Changed: The sidebar's workspace hover card is now a compact summary (status, folder, branch, PR, the last message rendered, the last three moments) that never scrolls.
Landing (orphan-sweep, 2026-10-22)
Adopted from its dead owner. Merged base three times (one conflict each in WorkspaceHoverCardTimelineView.swift, base's by-frame layout, and in WorkspaceHoverCardContent.swift, base #24059's Fact.machine beside this PR's Fact.markdown). Lander commits:
- The compact card keeps base #23510's "Since you looked" line, and its unread dot is
Palette.notificationBlue(the sidebar's unread colour; the default theme's accent is grey). - The unread dot's baseline makes no
supercall (crash-class selector gate), and it sits on the title's capitals like base's hover card icons. - From the Codex review: settings and scroll tests now expect the compact default (the long-history scroll test asks for
.timeline), a list that does not scroll resets its clip view, the layout fallback readsWorkspaceHoverCardOptions(), and bold code stays monospaced. - Settings exports (MDM docs,
settings-schema.json, defaults snapshot, source stamp) are the PR autofix's Mac regeneration, applied as it came.
Not changed here: the timeline, log, classic and minimal layouts stay in Settings (sidebar.hoverCards.layout).
Capture steps-6c4aeac71e at 4a0c6246b96c (fleet build, capture mini, text checked for private data)
| Light | Dark |
|---|---|
![]() | ![]() |
Capture: the sidebar session cards in the hover-card gallery (debug.hover_cards, the first steps of tour:hover-card). The tour's last step (workspace.showResources) cannot open on a capture mini, so it was left out.
Agent session: cosmic-gray
🤖 Generated with Claude Code
Lander session: Air-Blue

