fix(cmux-next): clarify disclosed workspace tab hierarchy
Aziz reported: “This workspace tabs disclosure is annoying, can't make out workspace from non-workspace easily.”
This PR makes disclosed workspace tabs read as children at a glance while preserving disclosure, defaults, group rails, motion, selection/focus semantics, trailing columns, and all existing tab detail/status/icon behavior. The chosen hierarchy tokens are a 16 pt child title inset (Metrics.space6 via SidebarStyle.tabChildIndent) and the existing caption scale for tab titles/details. Plain tabs use secondary ink; focused, selected, and unread tabs retain primary ink and the existing focused fill.
SidebarWorkspaceTabHierarchyTests covers ungrouped, grouped, and nested workspaces; favicon and no-favicon tabs; focused/unread state; narrow widths; every density and Minimal Mode; exact 16 pt title anchoring; parent icon changes through model patches and full reloads with the parent offscreen; agent-mark setting changes; clipped text width; late parent realization through the page viewport and reuse pool; leading agent/machine marks; trailing alignment; and row reuse. The assertion-first test was committed before the implementation and failed on the base because tab titles did not meet the child inset contract. The implementation is now at this PR head.
Reference: Claude desktop’s sidebar-linked-session-nesting.png for clear parent/child indentation and secondary ink, using our colours and glass. Before/after evidence shows real disclosed workspace tabs in light and dark, built on the fleet and captured on owned capture minis. AATabLinesGalleryTests supplies the native gallery comparisons. The private Aziz screenshot remains private. The native gallery compares indentation-only, typography-only, and the chosen combined treatment at the same 280 × 360 pt viewport. The typography-only fixture restores the full available text width while keeping trailing controls fixed.
The existing row patch and shared tunable watcher invalidate affected child geometry. Status-only patches leave child layout untouched; this adds no timer or observer.
Risk: contained to tab-row title geometry and ink; no layout rows, disclosure state, animation, or interaction semantics change. Existing look, tab switch patch, icon, trailing-column, and tuck tests remain in scope. Swift validation runs through cmux-ci on the fleet; no local build is used.
Captures
Capture steps-e50ee2b79b at b4cc7d95c835 (fleet build, capture mini, text checked for private data)
| Light | Dark |
|---|---|
![]() | ![]() |
Before (188bd094cea3, earlier merge base):
| Light | Dark |
|---|---|
![]() | ![]() |
Changelog
- Changed: disclosed workspace tabs now read as a clear child hierarchy.
Agent session: agent session



