cmux-next: notification text under sidebar rows, and move notified workspaces to the top (cx-sv425)
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.pyruns 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
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.