CmuxNext: one-line sidebar rows by default; notification text in the hover card

Merged
TE
23d ago
+81-25

Compact sidebar rows are one line by default again. sidebar.workspaceRow.notification is now off, so an unread notification's text no longer adds a second line under the row. The status glyph carries the state, and the text now reads in the row's hover card.

Call owner: Leo, 2026-10-14. On the #20410 capture, Leo asked "why is it even 2 lines in the first place?". The coordinator confirmed that question is the call, and this PR cites it as the call-owner approval for the default change.

Background: #19862 (hq#1870 P1 11) turned the setting on for parity with classic's sidebar.showNotificationMessage. @austinywang, FYI: the classic-parity behavior is still one toggle away. Settings > Appearance > Workspace Rows > Latest Notification (sidebar.workspaceRow.notification: true) draws the text under the row again. The classic settings migration still carries an explicit showNotificationMessage value across. Moving a notified workspace to the top (notifications.attention.moveToTop) is unchanged.

Changes

  • WorkspaceRowElements.standard drops .notification.

  • The workspace hover card shows the unread notification's text as a fact (bell icon, up to two lines).

  • Defaults snapshot, settings schema and MDM exports now show false.

  • scripts/cmux-next/sidebar-notification-e2e.py now expects a one-line row by default.

  • Custom hover cards: the template (docs/cmux-next/sidebar-customization/main.js) lists the new notification fact (bell icon) so a card made from it keeps the text; the fact kinds doc and hovercard-live.py follow.

  • The defaults snapshot regenerated on the merged base also picks up setting.freeModel.enabled, which base had in its schema but not yet in its snapshot.

Tests

  • SidebarOneLineRowsTests:
    • A notified row at the default settings is one line, has no detail, and its hover card has the text.
    • Turning the setting on brings the second line back.
  • Red on the test commit and green on the fix: fleet receipts will follow below.

In the app

DEV builds of base and this head, same scene (three workspaces get a notification). Top: base draws the text as a second line; this PR keeps every row one line. Bottom: hovering api puts the text in the hover card, with a bell icon.

oneline before after

Turning on Settings > Appearance > Workspace Rows > Latest Notification in the same run brings the second line back on every notified row.

Pre-existing, on base too: a notification's text can reach the sidebar a few seconds after its unread badge, so a row (or its card) shortly after the notification may not have the text yet.

Changelog

  • Changed: Sidebar rows stay one line when a workspace has an unread notification; the notification's text shows in the row's hover card, and Settings > Appearance > Workspace Rows > Latest Notification puts it back under the row.

🤖 Generated with Claude Code