cmux NEXT sidebar: hover card names a Cloud machine once, closes tabs, stops re-hover flicker
Treat as a leo-named-fix (lanes can't add that label): every change here is a fix to something Leo named.
Takes back #29833: Leo asked to drop the sidebar row's machine glyph ("the tiny cloud icon the repeated cloud cloud cloud"). The row's accessibility label still names the machine.
Takes back #28897: the hover card's separate machine row is gone and the machine is named once in the header, so the machine-colour test now reads the header's name.
Leo, 2026-11-02, on a Cloud workspace's hover card that said Cloud four times (a cloud icon before the title, a "Cloud" row with another cloud icon, "Cloud" under the Terminal tab, and the tiny cloud mark on the sidebar row behind it):
isn't this extremely stupid looking?
the tiny cloud icon the repeated cloud cloud cloud
Leo, 2026-11-02 23:55Z, on the same card's tab rows:
WE SHOULD IMPROVE THIS AREA STILL YOU SHOULD BE ABLE TO CLOSE THESE TABS FROM THE HOVER PREVIEW AND THE HOVER PREVIEW SHOULD NOT MAKE THE SIDEBAR FLICKER IT DOES THAT WHEN I HOVER BACK TO IT SOMETIMES IT'S SOME STUPID THING WHERE I HAVE IT AS MY LAST HOVERED THING THEN I LEAVE IT THEN I GO BACK AND IT RE-RENDERS THE SPINNER VIEW IT'S BAD
PLUS THE PLACEMENT LOOKS LIKE STUFF
What changes
Machine named once
- Hover card header: the machine is named once, as "Cloud" or the remote machine's name, right after the title.
- It uses the secondary ink, or the machine's
appearance.machineColorspick when one is set. - Its connection dot sits beside it.
- The title has no icon on such a card, and there is no separate host row.
- Local cards show no machine in the header.
- It uses the secondary ink, or the machine's
- Tab rows: a row names a machine only when the tab runs somewhere other than the header says, such as a remote terminal's own session. "This Mac" no longer appears on every row; the old look survives as the gallery variant
namesLocalMachine. - Sidebar row: the workspace row draws no machine glyph (the trailing mark from #29833). Its accessibility label still names the machine.
Close tabs from the hover card
- A hovered tab row shows a ✕ in its trailing slot. The ✕ takes the first click and sends a new
SidebarIntent.closeTab, which closes the tab through the same path as the palette's Close Tab. - The card stays open, and the closed tab leaves it on the next content update.
- A card that can't close tabs shows no ✕.
No flicker on re-hover
HoverCardMachineremembers the last shown target. Coming back to a row whose card is still fading out shows the same card as a non-sliding show.HoverCardPanel.presentno longer crossfades a body over itself just because it was dismissing.- The card and its spinners therefore stay in place instead of being redrawn.
- A row configured again with the same tab keeps its hover state.
Placement
- A working tab's spinner sits right after its title, centred on the title line.
- The meta line drops "Working", since the spinner already says it.
- The meta line truncates with an ellipsis instead of being clipped.
- A lane-style session name such as
lane-vm-11/nightly-rollbackshows only its last part. - The card's width follows its content, up to its max.
Gallery and spec
- Gallery cards:
- "Cloud workspace · machine named once · chosen"
- "Tab rows · spinner after the title · chosen"
- "Tab rows · close ✕ on hover · chosen"
- "Tab rows · only another machine named · chosen"
- "Tab rows · machine on every line" (the old look, for comparison)
design/sidebar.mdin our notes repo andplans/cmux-next/sidebar-owner.mdrecord the rules.- On remote cards, this replaces the host row from #30244 and the per-row machine from #31511.
Tests
WorkspaceHoverHostIdentityTests.aCloudCardNamesItsMachineExactlyOnceWorkspaceTabHoverCardTests.aHoveredRowsCloseButtonClosesItsTabAndKeepsTheCardWorkspaceHoverCardBehaviorTests.comingBackToTheSameRowShowsTheSameCardWithNoCrossfade(new);comingBackSoonupdatedWorkspaceTabHoverCardRichRowsTests:rowsNeverRepeatTheCardsMachinetheThisMacVariantNamesThisMacaRemoteWorkspacesTabNamesOnlyAnotherMachineagentRowsShowModelAndTimeAndLeaveWorkingToTheSpinneraLanePathSessionShowsItsShortName
SidebarMachineMarkTests.aRowOnAnotherMachineDrawsNoMachineGlyphHoverCardMachineColorTests- Contrast and gallery-count expectations updated
Observed / Not run
- Ran
python3 scripts/cmux-next/prepush-gate.py: no new violations. - Not run locally: the Swift build and these suites, because this machine has no build host. PR CI runs them.
- Not checked by hand: the flicker fix on a Mac.
- No capture: Leo tries the build himself.
Changelog
Changed: A Cloud or remote workspace's hover card names its machine once, beside the title. Its tab rows close with a ✕ on hover and no longer flicker when you hover back. They show a shorter line, with the spinner next to the title. Sidebar rows no longer draw a machine icon.
🤖 Generated with Claude Code
Agent session: agent session