Skip to content

cmux NEXT sidebar: hover card names a Cloud machine once, closes tabs, stops re-hover flicker - #32688

Merged
teamleaderleo merged 5 commits into
feat-cmux-nextfrom
lane/hover-card-cloud-once
Nov 3, 2026
Merged

teamleaderleo merged 5 commits into
feat-cmux-nextfrom
lane/hover-card-cloud-once

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

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.machineColors pick 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.
  • 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 cmux NEXT sidebar: machine mark in the trailing column, status-mark size, one neutral colour #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

  • HoverCardMachine remembers 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.present no 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-rollback shows only its last part.
  • The card's width follows its content, up to its max.

Gallery and spec

Tests

  • WorkspaceHoverHostIdentityTests.aCloudCardNamesItsMachineExactlyOnce
  • WorkspaceTabHoverCardTests.aHoveredRowsCloseButtonClosesItsTabAndKeepsTheCard
  • WorkspaceHoverCardBehaviorTests.comingBackToTheSameRowShowsTheSameCardWithNoCrossfade (new); comingBackSoon updated
  • WorkspaceTabHoverCardRichRowsTests:
    • rowsNeverRepeatTheCardsMachine
    • theThisMacVariantNamesThisMac
    • aRemoteWorkspacesTabNamesOnlyAnotherMachine
    • agentRowsShowModelAndTimeAndLeaveWorkingToTheSpinner
    • aLanePathSessionShowsItsShortName
  • SidebarMachineMarkTests.aRowOnAnotherMachineDrawsNoMachineGlyph
  • HoverCardMachineColorTests
  • 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

Leo, 2026-11-02, on a Cloud workspace's hover card: "isn't this extremely
stupid looking?" / "the tiny cloud icon the repeated cloud cloud cloud".

The card's header names the machine once ("Cloud" or the remote machine's
name, secondary ink or its colour pick) right after the title, its
connection dot beside it. The title carries no icon on such a card and the
separate host row is gone. Tab rows name a machine only when the tab runs
somewhere other than the header says. The workspace row no longer draws a
machine glyph; its accessibility label still names the machine.

Sidebar-Look: "isn't this extremely stupid looking?" "the tiny cloud icon the repeated cloud cloud cloud"
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-66d7e9fe71444b4a2123
@teamleaderleo teamleaderleo added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Nov 2, 2026
@github-actions

github-actions Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 22e4c97: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr32688 -f ref=lane/hover-card-cloud-once -f platform=macos -f backend_mode=local

Default changes

This pull request changes 7 defaults at 22e4c970077f (what everyone gets without configuring anything):

  • tunable-source.CmuxNextSidebar/Logic/SidebarEdits.swift:apply: "36fcd38afd375ee95558948be9c063c4e28add43fb73fe2c529ea05ad4292d87" -> "b9f4c5ec79cf5d2dc077100bb0fb9596794af65532d45f8e6d24d8cf349f854b"
  • tunable-source.CmuxNextSidebar/Logic/WorkspaceTabHoverCardLine.swift:machineText: "c70e00f5766a3385c96bce887c9192074a91c76d04faf680a82dd82967d22159" -> "493d34d0ff32980103882e417ced96ad051a1ae21c07cc9266ab665b9d551672"
  • tunable-source.CmuxNextSidebar/Logic/WorkspaceTabHoverCardLine.swift:separator: (none) -> "b180e96df5690ba6c1c1f624611d9e4f187c5a174f66e36103fc235698e5c4c2"
  • tunable-source.CmuxNextSidebar/Logic/WorkspaceTabHoverCardLine.swift:shortSessionName: (none) -> "6bef7e45e8a4fe026ccd03ecb4bd9b6fab2cd6533125e2267b35aedbb5f1b2ad"
  • tunable-source.CmuxNextSidebar/Logic/WorkspaceTabHoverCardLine.swift:text: "91b27239de496e446e92fc91a83c2d4b056d03c31af589b64c6ad6851a635006" -> "b49c65dfb36ab98a6077e5b780114ebe12789ea301361762c512d3f911553ebf"
  • tunable-source.CmuxNextSidebar/Logic/WorkspaceTabHoverCardLine.swift:title: "41c994452a7728da07ddb26075453372c0fde975626755d36ef17277fcb01cbd" -> "90a26013fd06fbee6c3a521b255b9819644e8c3baa6b6910b3cf2fe52d4ff55c"
  • tunable-source.CmuxNextSidebar/Views/WorkspaceHoverCardGallery.swift:cloudCard: (none) -> "6f629bc06248974db6c24c27edfd4d3bf47b8d1110f2465f87d5a0f21d9dacb8"

Signed off on this commit by review (subagent claude-opus-5-5 medium).

Merge receipt: merged as 901d7e6450f1 with these defaults changed, signed off by review (subagent claude-opus-5-5 medium).

Regenerate the snapshot with python3 scripts/ci/defaults_guard.py snapshot.

Shipped in:

teamleaderleo and others added 2 commits November 2, 2026 23:57
…card-cloud-once

# Conflicts:
#	Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/WorkspaceRowView+Rendering.swift
#	Packages/macOS/CmuxNext/Sources/CmuxNextSidebar/Views/WorkspaceRowView.swift
Sidebar-Look: no visual change

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-66d7e9fe71444b4a2123
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (subagent claude-opus-5-5 medium): SHIP at 02ffacf

Visual verdict: no images; the header, tab-row and row changes match Leo's ask by code reading.
Checked: no references remain to the removed host row, row machine mark or machineMarkImage anywhere in the package's Sources and Tests. The header uses only public APIs with the right access (HoverCardAccessoryView, MachineColor.pickedColor, performWithTheme, an @objc appearance override). The title row's gravity and its wrap width are correct, and every test expectation was traced against the code (lines, the tab-row machine rule, the gallery count). The base merge resolves the row's view lists correctly; base's Chief avatar removal and this PR's mark removal are both kept. The defaults guard's two changes (machineText, the gallery's cloudCard) are this PR's intended behaviour.
Follow-ups: none

@blacksmith-sh

blacksmith-sh Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

Found 1 test failure on Blacksmith runners:

Failure

Test View Logs
test_big_red (main.FleetRuleLints.test_big_red)/
test_big_red (main.FleetRuleLints.test_big_red)
View Logs

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

teamleaderleo added a commit that referenced this pull request Nov 3, 2026
…ark's size

#32688 removes the workspace rows' machine mark and its image helper, so the
header no longer borrows WorkspaceRowView.machineMarkImage and the test pins
the header's mark to the status mark size every row's trailing mark takes,
not to a row's machine mark. Either PR now lands first without breaking the
other.

Sidebar-Look: the sizes of the icons for groups and workspaces aren't the same size anymore they should be
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-37e34789fdc077e9813b
…tidy its tab rows

A hovered tab row shows a close button that closes the tab and keeps the card open.
Coming back to the row whose card is fading out shows the same card with no crossfade,
and the rows' spinners keep turning instead of redrawing. The spinner sits after the
title; the meta line drops "Working" and "This Mac" and truncates with an ellipsis.

Sidebar-Look: Leo 2026-11-02: "YOU SHOULD BE ABLE TO CLOSE THESE TABS FROM THE HOVER PREVIEW AND THE HOVER PREVIEW SHOULD NOT MAKE THE SIDEBAR FLICKER" / "PLUS THE PLACEMENT LOOKS LIKE SHIT"

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-66d7e9fe71444b4a2123
@teamleaderleo teamleaderleo changed the title cmux NEXT sidebar: a Cloud workspace's hover card names its machine once cmux NEXT sidebar: hover card names a Cloud machine once, closes tabs, stops re-hover flicker Nov 3, 2026
teamleaderleo added a commit that referenced this pull request Nov 3, 2026
* fix(sidebar): a remote group's machine mark is its rows' size

Leo (2026-11-02): "the sizes of the icons for groups and workspaces aren't
the same size anymore they should be". #29833 drew each workspace row's
machine mark at a status mark's size but left the group header's trailing
mark (added in 4ef89f1) at the leading glyph's side, larger than the
rows under it. The header now draws the rows' mark image at their size; the
leading look keeps the icon column's glyph. Adds SidebarGroupIconSizeTests
(group icon vs workspace icon box, group vs row machine mark, every density
and text size).

Sidebar-Look: the sizes of the icons for groups and workspaces aren't the same size anymore they should be
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-37e34789fdc077e9813b

* fix(sidebar): the group's machine mark draws its own image at a row mark's size

#32688 removes the workspace rows' machine mark and its image helper, so the
header no longer borrows WorkspaceRowView.machineMarkImage and the test pins
the header's mark to the status mark size every row's trailing mark takes,
not to a row's machine mark. Either PR now lands first without breaking the
other.

Sidebar-Look: the sizes of the icons for groups and workspaces aren't the same size anymore they should be
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-37e34789fdc077e9813b

* test(sidebar): the group mark's box carries the size; its image rasters at the icon floor

Review at 0ea3e2b: NSImage.icon rasters at max(iconFloor, size), 12 pt, so the
image-size check could not hold at a 10 pt status mark.

Sidebar-Look: no visual change
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-37e34789fdc077e9813b

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…on the ✕

Review at 51fa9e9: the rows' and header's spinners joined the panel before it showed, so with
occlusion tracking off they drew a still arc. Coming back to a fading card no longer crossfades,
which keeps them turning in place. Also drops a duplicated test, lets the ✕ take the first click
in the never-key panel, and clears the card's close handler on deactivate.

Sidebar-Look: Leo 2026-11-02: "IT RE-RENDERS THE SPINNER VIEW IT'S BAD"

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-66d7e9fe71444b4a2123
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (subagent claude-opus-5-5 medium): SHIP at 22e4c97

The first pass at 51fa9e9 found a duplicated test and spinners that would freeze once occlusion tracking was off. Both are fixed: the duplicate is gone and occlusion tracking is back to base. The flicker fix now rests on the no-crossfade return and lastShownID. The ✕ takes the first click, and the close handler is cleared when the card deactivates.

Follow-ups:

  • After a ✕ closes a tab, the row that moves under the pointer shows its ✕ only after the pointer leaves and comes back.
  • A row can keep a stale hover fill if the card hid without the pointer leaving the row.
  • In the one-line style, the space the detail line is fitted to doesn't subtract the spinner's room.
  • Confirm on a DEV build that the re-hover spinner no longer redraws.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6.1-sol high, sweep, via the review router; full diff from merge base ed4e6a8 to this head): BLOCK at 51fa9e9

No P1/P2 findings.

@teamleaderleo
teamleaderleo merged commit 901d7e6 into feat-cmux-next Nov 3, 2026
162 of 166 checks passed
@teamleaderleo
teamleaderleo deleted the lane/hover-card-cloud-once branch November 3, 2026 00:45
teamleaderleo added a commit that referenced this pull request Nov 3, 2026
#32688 named the personal machine once more in HoverCardMachineColorTests, so the
fleet rule lint (big-red) went red on base. The fixture now uses "my-vm", as the
allowlist entry asked, and the entry is removed since nothing matches any more.

python3 tests/test_ci_fleet_rule_lints.py: test_big_red passes (red at 901d7e6).


Agent-Session: https://cmux.com/deeplink/agent?id=aid-66d7e9fe71444b4a2123

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 22e4c970 Deployed Nov 3, 2026 by teamleaderleo via cmux-tui tree preflight #103146
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant