fix(sidebar): attach workspace hover previews to the row
Final landing verification
Final head f3769628205cedb74e2f2131d6b974cd21c29552 corrects the stale update-card parity test: the update card retains its one-device-pixel gap, while workspace previews touch their rows. The earlier broad exit 143 is not classified as a base red; focused execution below supplies the relevant final-head proof.
Review (Sol): SHIP at f3769628205cedb74e2f2131d6b974cd21c29552, complete final diff, no findings. Primary review confirmed the test-only delta and unchanged production blobs. Syntax and prepush pass.
Matching nine-suite GUI runs completed through scripts/ci/package-test-lane.sh, with gui-session-v1 and CMUX_TEST_REQUIRE_GUI=1:
- Head
f3769628205cedb74e2f2131d6b974cd21c29552, jobea94253eccc08490180c7e0c: 47 tests executed; eight suites passed. Workspace dismissal, pinned-row, rail, geometry, update-card gap, and dwell tests passed. - Base
2289f95c73d846c1761d3ca83ba94da658a14203, joba5c27017b724dcc8a9821d25: 47 tests executed; seven suites passed.movingDownPastTheRowsRightEndDismissesTheCard()fails on base and passes on head. - Both runs fail only the same two morph assertions in
SidebarOneMorphingCardTests:goingFromAWorkspaceCardToTheUpdateCardMorphsTheOneCard()andgoingFromTheUpdateCardToAWorkspaceCardMorphsBackAndParksTheHighlights()record empty animated sizes.scripts/ci/test_reds.py classifyreportsown: falsewith those exact two shared failures. Both runs completed all requested suites; no crash or cut-short result is excused. - Exact-head compile and fast gates passed. The static job fails only the unchanged base SwiftUI findings in
HomeChatColorsPanel.swiftandHomeChatColorsView.swift; the sources, checker and allowlist are identical at base and head.
Summary
Workspace hover previews touch the drawn workspace row, before the sidebar resize/drag thumb. Pinned workspaces use their drawn pill. Horizontal pixel snapping goes toward the row so fractional coordinates leave no seam; top alignment, dwell and preview contents stay the same. Group/rail previews use zero gap at their existing column anchor.
Leo, 2026-10-28:
“I mean the gap between the hover preview and the, you know, the workspace sidebar element thingy.”
Folded into S2. Reference: the cmux NEXT hover-preview treatment in cmux-design-references/apps/cmux/live/sidebar-hover-preview-session-list.png; keep our colours and glass. Non-sidebar update and PR cards retain their existing one-device-pixel gap.
Testing
- Integrated
feat-cmux-nextat2289f95c73d846c1761d3ca83ba94da658a14203; then-reviewed headd3f0e0762a994eb63ff5cac70cb0d191e05775ce. The product diff has the same stable patch ID as the previously reviewed fix. The only merge conflict was independent additions to the sidebar ownership notes; both were retained. - Review (Sol): SHIP at
d3f0e0762a994eb63ff5cac70cb0d191e05775ce, whole final diff, no findings. Base hover sweep behavior is preserved. - Focused command:
scripts/ci/package-test-lane.sh suite Packages/macOS/CmuxNext HoverCardEscapeGeometryTests,HoverCardRowAlignmentTests,HoverCardWindowClampTests,SidebarHoverCardEscapeTests,PinnedRowHoverCardTests,SidebarRailHoverCardTests, through the fleet withgui-session-v1andCMUX_TEST_REQUIRE_GUI=1. - Green: fleet job
5c46d28d158411204dc4b893atd3f0e076passed all six suites (exit 0). - Red: the same suite runner with
SidebarHoverCardEscapeTestsat pre-fix0fd91e18e1f85110f6a4bde9dc9d303cd06abfcd, jobde1fad7638ed726dc5a7c447, executed six tests and failed the no-gap assertions: card starts at 440.0 pt while the row ends at 438.5 pt, a 1.5 pt gap. This valid assertion receipt replaces the earlier GUI-session-loss runb4cae97fbc9fb0d2a101fa39. - Swift syntax (13 files),
git diff --check, and the static prepush gate passed. Hosted static-check job has only the baseNo new SwiftUIfindings inHomeChatColorsPanel.swiftandHomeChatColorsView.swift; both offending files, checker and allowlist are byte-identical to the integration base. Hosted pushed-commit checks passed.
Observed / Not run
Observed: final-head native test execution and independent whole-diff review. General local verification still reports localization debt; this PR changes no catalog, checker, rule or baseline inputs. The real before/after captures below remain bound to their stated original SHAs; no new capture was generated for this base merge. Product merge is governed by the exact-head review and focused head/base receipts below.
Risk: horizontal anchor and tracked hit geometry change for workspace previews. Existing screen clamps, top alignment, dwell and non-sidebar placement remain in use.
Captures
Real fleet captures use the same focused workspace-preview fixture and passed the mini privacy scan (no private terms).
After steps-b280978dd1 at 6287fdf3b289 (fleet build b5aea4f557f42ad5dab0bff5, capture mini, privacy checked)
| Light | Dark |
|---|---|
![]() | ![]() |
Before steps-b280978dd1 at 3a7653b054ed (fleet build 9b15699f0e22c859756839ba, capture mini, privacy checked)
| Light | Dark |
|---|---|
![]() | ![]() |
![View with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-dark-v3-3x.png)
![Autofix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark-3x.png)
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Sidebar workspace and group hover previews now sit flush with the row's drawn fill instead of one device pixel outside the sidebar's edge, so each preview reads as one surface attached to the row.
- The shared placement rule covers workspace rows, pinned workspace pills, group headers, and the compact rail; cards keep their row's top alignment.
- Pointer escape and placement use the same drawn fill, so moving below the row dismisses the preview.
- Non-sidebar
.besidecards (update cards, pull request badges) keep their existing one-pixel breathing room. - The hover-card capture tour now creates and focuses the new workspace before capturing its card, so the sample shows a real workspace preview.
Agent session: agent session
2026-10-29 landing evidence
- Exact head
d3f0e0762a994eb63ff5cac70cb0d191e05775ce: fleet step065089c9f6aca6e06b69082epassed all six focused hover-card suites (exit 0). - Base
2289f95c73d846c1761d3ca83ba94da658a14203: fleet stepca5a53fe4801f24192fda88bcompleted with only the existingSidebarHoverCardEscapeTestsandSidebarRailHoverCardsTestsbase failures; the other four suites passed. - Independent Astra exact-head review is running for the final merge head; merge remains pinned to this SHA.
Agent session: agent session



