cmux-next: notification text under sidebar rows, and move notified workspaces to the top (cx-sv425)

Merged
TE
1mo ago
+162-0

Summary

Classic parity for hq#1870 P1 #11 (bead cx-sv425). In classic, a notification does two things in the sidebar, both on by default:

  • sidebar.showNotificationMessage: the row shows the latest unread notification's text under the workspace name.
  • app.reorderOnNotification: the workspace moves to the top of the unpinned rows. It doesn't move when the notification is for the pane you're looking at.

cmux-next does neither, and neither key exists in its settings. This PR adds both, with classic's defaults.

Work in progress: the behavior test is committed red first; the fix follows on this branch.

Testing

  • scripts/cmux-next/sidebar-notification-e2e.py runs against a tagged build on a capture slot. Red run on the test-only head: pending.

Changelog

  • Added: cmux-next shows a workspace's latest notification text under its sidebar row and moves the workspace to the top when a notification arrives, as classic did (sidebar.showNotificationMessage, app.reorderOnNotification).

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.


Summary by cubic

Adds an end-to-end script that verifies cmux-next matches classic's sidebar notification behavior for hq#1870 P1 #11 (cx-sv425).

The script checks two behaviors, both on by default in classic: the workspace's row shows the latest unread notification's text under its name (sidebar.showNotificationMessage), and a notification moves the workspace to the top of the unpinned rows (app.reorderOnNotification) unless it's for the workspace in view. It attaches to a running tagged build over the debug socket, creates workspaces, posts notifications through the daemon as cmux notify does, and asserts on the rows returned by debug.sidebar_rows.

This is the test-only head, committed red first; the implementation follows on this branch. Run it with scripts/cmux-next/sidebar-notification-e2e.py --socket /tmp/cmux-debug-<tag>[-capslot<N>].sock against a capture slot or tagged build.