Sidebar: draw a Cloud machine's section like every other group
Leo-ask: ask-5ab56480d2
What
Leo, 2026-10-29, on the Cloud rows at the bottom of the sidebar:
"why is there all this weird stuff at the bottom of the sidebar"
"the rendering gets borked there too :("
"a whole lot of this cloud stuff ought to get better..."
Leo, 2026-10-30, on this PR's earlier capture (each Cloud machine a header with a green dot, over a row with a cloud icon, the title "cmux" and a second line "build-vm · ~"):
"but what? why is it styled like that in the first place ?"
"what the f*** is this ? why"
"when the f*** did i say i wanted a second fing line and a green dot and a fign ICON ON THE LEFT!??!!?!?!? JUST DEPICT IT SIMILARLY TO EVERYTHING ELSE"
A Cloud machine's section now draws like every other group in the one-list sidebar:
- Header: each Cloud machine with workspaces keeps its header in one list (
keepsHeaderInOneList), and it is the name, the chevron and the +. No status dot while connected (SectionHeaderRowView.tone, as This Mac already has). A down machine keeps its mark and words (Disconnected, #28409; Paused; Failed to start): that is information. - Rows: one line, the title, with no icon before it. The machine mark stays where base #29833 put it, in the trailing status column at a status mark's size, on every Cloud row (Leo, 2026-11-01: "WHY ARE THE CLOUD ICONS LIKE THIS ON THE LEFT WHO DID THIS", "I HATE HOW SMALL THEY ARE, I HATE THAT THEY'RE ON THE LEFT, I HATE THAT THEY'RE ON THE BOTTOM"). His complaint was the mark's place and size, not having it, so this PR no longer hides it under a Cloud header (it did at 2b1ccc08). No second line (base already removed it, #28510). VoiceOver says the machine (
machineLabel). - Title: an unnamed Cloud workspace whose shell idles at the machine's home reads "Terminal" (
SidebarMappinghomeShellTitle, localized by the App), never its account's home folder ("cmux") and never the machine's name. A shell whose own title (OSC) reads like that folder keeps its title; a title that is only the folder's path still reads "Terminal". A shell in a project folder keeps that folder's name (app); a named workspace or a tab the person named keeps its name. This replaces #28045's naming (which titled such a row by the machine), so the two never disagree. - Tab row: none. Base has since removed the sidebar's workspace tab rows (8a3af6be), so a Cloud row has no tab row under it, like every other row.
- This Mac and SSH: unchanged. An SSH header keeps its dot and an SSH row its mark (
anSSHRowKeepsItsMark,aDownCloudHeaderKeepsItsState); This Mac's and an SSH shell at home keep their folder name.
A Cloud machine with no workspace (paused, connecting) lists nothing in one list, as before.
Captures
The real SidebarListView drawn offscreen at 2x on a fleet Mac (Soft Blue), the same scene before and after: this Mac's "UI think tank" group and a loose row, then four Cloud machines made from one image, each with one unnamed workspace whose shell idles at /home/cmux. The before is the head Leo answered (workspace tabs on, as it had them); the after is the head on today's base, which has no tab rows.
| before (7d5deca3, the capture Leo answered) | after (918be695, head; a pinned Cloud row on top) | |
|---|---|---|
| light | ![]() | ![]() |
| dark | ![]() | ![]() |
Measured rows (the capture's own row table, light):
| before | after | |
|---|---|---|
| Cloud header | name, green dot, chevron, + | name, chevron, + |
| Cloud workspace row | cloud icon on the left, "cmux", second line "build-vm · ~", 37 pt | "Terminal", one line, 24 pt (as tall as "cmux NEXT coordinator"), base's trailing machine mark |
| its tab row | "/home/cmux" | none (base removed tab rows) |
| first Cloud header y / row y | 116 / 140 | 116 / 140 |
| four machines end at | y = 494 | y = 338 |
I viewed both after images at the head: each Cloud machine reads as a header like the group above it, one "Terminal" row under it with the small trailing mark, and the pinned "deploy" row keeps the same trailing mark.
Tests
scripts/ci/package-test-lane.sh suite Packages/macOS/CmuxNext SidebarCloudRowLookTests,SidebarCloudMachineHeaderTests,SidebarMachineMarkTests,SidebarNoSecondLineTests,CloudLinkEndedHeaderTests,SidebarTabHomeTitleTests,MachineLinkStateTests,SidebarLookContractTests through cmux-ci run --class light:
- Red at 69fc57a8 (this test on the code before the fix: the PR's 15baa6a6~1 plus the test's compile fix):
SidebarCloudRowLookTestsfails with 5 issues:aConnectedCloudHeaderHasNoDot(tone.success, connected and update-available),aCloudRowIsOneLineWithNoIcon(content.machineis thebuild-vmcloud mark),aCloudShellAtItsHomeReadsTerminal(/home/cmuxand/home/cmux/). ItsanSSHRowKeepsItsMark,anSSHOrLocalShellAtHomeIsUnchanged,aCloudWorkspaceWithANameKeepsItandaDownCloudHeaderKeepsItsStatepass, as doSidebarCloudMachineHeaderTests,SidebarMachineMarkTests,SidebarNoSecondLineTests,CloudLinkEndedHeaderTests,SidebarTabHomeTitleTests,MachineLinkStateTestsandSidebarLookContractTests(7 of 8 suites pass). - Green at 7f40cdc0: all 8 suites pass. After merging feat-cmux-next (28c330e6, a clean merge): all 8 suites pass again.
- Review fixes (Astra at 28c330e6: a pinned Cloud row lost its machine, also in VoiceOver; an OSC title like the home folder became "Terminal"), suites above plus
SidebarLayoutFoldTests: red at f5b07806 (the tests alone),aPinnedCloudRowKeepsItsMark(no mark, label "deploy" without "build-vm") andaCloudShellWithItsOwnTitleIsNotTerminalfail, 8 of 9 suites pass; green at 2b1ccc08 (head), all 9 pass. - Base #29833 (the trailing machine mark) at 918be695: the mark hiding is gone; the rest stays. Ten suites (the ones above,
SidebarLayoutFoldTests,SidebarHostGroupLayoutTests), by name against base at the merge base a85484e8: all 10 pass at the head (withSidebarMachineMarkTests, which failed at b68a26eb); on base only this PR's ownSidebarCloudRowLookTestsandSidebarCloudMachineHeaderTestsfail. - Review of 918be695 (a connected Cloud header's tooltip lost "Connected"; a shell titled with its home path,
/home/cmux, did not read "Terminal") fixed at 2bbc3388, test first at 9ed2b9e9. Eleven suites (the ten above plusCloudMachineCostTests): at 9ed2b9e9 onlySidebarCloudRowLookTests.aCloudShellWithItsOwnTitleIsNotTerminalandCloudMachineCostTests.theCloudHeaderTooltipCarriesTheCostLinefail; at 2bbc3388 all 11 pass. Delta review: SHIP at 2bbc3388. - The wait for Leo to look at the after capture is dropped: screenshots never block a land, he tries the build himself (Leo, 2026-10-31: "WE DON'T NEED SCREENSHOTS JUST LET ME TRY THE STUFF OUT").
- Codex review BLOCK at 8a39e401 (the row gap suites
SidebarCloudRowGapTestsandSidebarOneRowPerWorkspaceTestsmeasured workspace rows only, so a Cloud header's section spacing read as a band; an idle Cloud shell titledzsh,-bashor~at its home still read "cmux") fixed: tests at e4bf3db4, fix at c1e68590. Fleet, both on #34274 (base could not build its web bundles): with the tests only,SidebarCloudRowLookTests.aCloudShellTitledWithTheShellsNameReadsTerminalfails; with the fix, 12 of 13 suites pass, and the 13th,SidebarLookContractTests.theHoverCloseIsTheRowsTrailingX(the hover close 0.5 pt past the inset), fails the same way on #34274's head alone, a base red. Codex SHIP at c1e68590. - Base merge at 9a14b91a: base folded the Cloud and SSH loops in
SidebarBridgeinto one; each remote now carries itsterminalTitle(Cloud: "Terminal", SSH: none).
Earlier rounds on this PR (the header itself): red at f86f58b6 / green at 88add9fc (SidebarCloudMachineHeaderTests), red at 206f2a56 / green at bf372742 (theOnlyMachineBeingCloudKeepsItsOwnHeader).
Observed / Not run
- Observed: the fleet red/green runs and the before/after captures above.
- Not run: a dev build with live Cloud VMs.
Risk
Normal, structural: one header row per Cloud machine with workspaces in one list; Cloud rows lose their machine mark; a Cloud home shell's title. Held (hold label and the HOLD line) until Leo has looked at the after capture, then for a dogfood build. Sidebar look note updated (plans/cmux-next/sidebar-owner.md), Sidebar-Look: trailers on the code commits.
Changelog
Changed: each Cloud machine's workspaces list under a plain machine header, as one-line rows like every other workspace; an unnamed Cloud terminal reads "Terminal".
Viewed after image: yes (light, dark, pinned).
Agent session: agent session
🤖 Generated with Claude Code



