Skip to content

fix(cmux-next): clarify disclosed workspace tab hierarchy (carries #27128) - #27530

Merged
teamleaderleo merged 28 commits into
feat-cmux-nextfrom
lane/takeover-sidebar-tab-hierarchy
Oct 30, 2026
Merged

teamleaderleo merged 28 commits into
feat-cmux-nextfrom
lane/takeover-sidebar-tab-hierarchy

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 29, 2026 •

Copy link
Copy Markdown
Collaborator

Carries #27128 (its commits and authorship unchanged) on top of the current base. Its owner lane is unreachable, so this PR lands it in its place; #27128 gets a comment linking here.

Leo, 2026-10-29: "F***ING JUST DO IT" (the sidebar work is ordered in; the sidebar dogfood HOLD comes off, and the #26809 HOLD only ever covered #26809).

The base merge had one conflict, in plans/cmux-next/sidebar-owner.md (notes only). Both sides were kept.

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
light dark

Before (188bd094cea3, earlier merge base):

Light Dark
before light before dark

Changelog

  • Changed: disclosed workspace tabs now read as a clear child hierarchy.

Capture steps-97bedbfd7b at 3548852dbba9 (fleet build, capture mini, text checked for private data)

Light Dark
light dark

Agent session: agent session


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


Summary by cubic

Fixes the disclosed workspace tab hierarchy so disclosed tabs read as children of their workspace at a glance. Carries #27128 onto the current base; its owner lane is unreachable, so this PR lands it in its place and comments on #27128.

  • Disclosed tab titles sit 16 pt inside the workspace title column and use the caption scale; plain tabs take secondary ink while focused, selected, and unread tabs keep primary ink and the existing focus fill.
  • Tab anchors follow parent icon and leading-mark changes, including offscreen and late-realized parents; status-only patches no longer invalidate child layout.
  • SidebarWorkspaceTabHierarchyTests covers ungrouped, grouped, and nested parents, every density and Minimal Mode, narrow widths, favicon and no-favicon tabs, and row reuse.

Behavior is unchanged for disclosure, defaults, group rails, motion, selection/focus semantics, trailing columns, and all existing tab detail/status/icon behavior. Risk is contained to tab-row title geometry and ink.

Written for commit c9c58f0. Summary will update on new commits.

View guided diff Turn on auto-fix

Workspace rows remain the visual root while disclosed tabs use a 16 pt child inset and quiet secondary typography. Focused, selected, and unread tabs retain primary contrast.

Sidebar-Look: Aziz: "This workspace tabs disclosure is annoying, can\x27t make out workspace from non-workspace easily."
Agent-Session: https://cmux.com/deeplink/agent?id=aid-b0423583d921f5ee2f35
Use throwing native fixture setup, direct workspace-column assertions, and primary/secondary ink checks across focus, unread, reconfigure, and reuse transitions.

Sidebar-Look: Aziz: "This workspace tabs disclosure is annoying, can\x27t make out workspace from non-workspace easily."
Agent-Session: https://cmux.com/deeplink/agent?id=aid-22454abfd16b2868c248
Keep the regression fixture compilable on the base ref by finding the production ChromeLabel and checking its actual frame, font, and theme-resolved ink across state transitions and reuse.

Sidebar-Look: Aziz: "This workspace tabs disclosure is annoying, can\x27t make out workspace from non-workspace easily."
Agent-Session: https://cmux.com/deeplink/agent?id=aid-22454abfd16b2868c248
Render native disclosed tab rows at 200 pt in light and dark for indentation-only, typography-only, and the combined treatment; keep the variants fixture-only and add disclosed tabs to the existing sidebar look gallery.

Sidebar-Look: Aziz: "This workspace tabs disclosure is annoying, can\x27t make out workspace from non-workspace easily."
Agent-Session: https://cmux.com/deeplink/agent?id=aid-22454abfd16b2868c248
Keep the throwing favicon fixture syntactically complete before GUI validation.

Sidebar-Look: Aziz: "This workspace tabs disclosure is annoying, can\x27t make out workspace from non-workspace easily."
Agent-Session: https://cmux.com/deeplink/agent?id=aid-22454abfd16b2868c248
Remove tab-row debug-only geometry and ink accessors now that the regression finds the production ChromeLabel directly.

Sidebar-Look: Aziz: "This workspace tabs disclosure is annoying, can\x27t make out workspace from non-workspace easily."
Agent-Session: https://cmux.com/deeplink/agent?id=aid-22454abfd16b2868c248
Sidebar-Look: Aziz: "This workspace tabs disclosure is annoying, can\x27t make out workspace from non-workspace easily."
Sidebar-Look: Aziz: "This workspace tabs disclosure is annoying, can\x27t make out workspace from non-workspace easily."
Sidebar-Look: keep disclosed tabs anchored after parent layout
Sidebar-Look: compare child tabs with the workspace text column
Sidebar-Look: keep hierarchy assertions independent of icon width
Sidebar-Look: keep disclosed tabs anchored after parent layout
# Conflicts:
#	plans/cmux-next/sidebar-owner.md
Use a nonoptional view sequence and stop at the first sidebar ancestor. Account for the existing agent brand in the exact title inset regression.

Sidebar-Look: no visual change
Keep model patches targeted, resolve child geometry on reload and agent-mark settings changes, and compare native gallery treatments in equal viewports.

Sidebar-Look: disclosed tabs retain their title-column anchor
…b-hierarchy

# Conflicts:
#	plans/cmux-next/sidebar-owner.md
@cursor

cursor Bot commented Oct 29, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@github-actions

github-actions Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

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

Review b3bae4d: 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=pr27530 -f ref=lane/takeover-sidebar-tab-hierarchy -f platform=macos -f backend_mode=local

red: cmux-next checks (god files, concurrency, crash safety, l10n); NEW: red check: Script tests (pin-cmux-tui, embed-cef, ensure-cef store) (+1 more) is not red on the base 9e700f3; do not merge until green; see lane-rules

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40999786770 at e58eb64 failed: cmux-next checks (god files, concurrency, crash safety, l10n).
Those jobs last passed at 16e03d3. This pull request is one of 2 merged since: #27542, #27530.
If the failure is in your change, fix forward on feat-cmux-next. Pull requests run only the tiers their paths reach (docs/ci/cmux-next-tiers.md); label a batch PR full-ci to run them all before merging.

@teamleaderleo

teamleaderleo commented Oct 29, 2026 •

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

…er-sidebar-tab-hierarchy

# Conflicts:
#	plans/cmux-next/sidebar-owner.md
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex-review-box/gpt-6-astra high, lane-place): SHIP at 326aedb

SHIP

No blocking findings. AppKit tests could not run in this Linux box; review was static.

@teamleaderleo teamleaderleo removed the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 29, 2026
@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 29, 2026

@cmux-bot cmux-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cmux-bot approves 326aedb: an independent review passed this exact head (review box review-27530-326aedb1 receipt by teamleaderleo). A push needs a new review; a later BLOCK at this head dismisses this approval.

…er-sidebar-tab-hierarchy

# Conflicts:
#	scripts/ci/display-suites.txt
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high, next-review): SHIP at b3bae4d

No blocking findings.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6.1-sol high, next-review): SHIP at c9c58f0

No blocking findings.

@teamleaderleo
teamleaderleo merged commit e58eb64 into feat-cmux-next Oct 30, 2026
155 of 164 checks passed
@teamleaderleo
teamleaderleo deleted the lane/takeover-sidebar-tab-hierarchy branch October 30, 2026 03:52
@github-actions

github-actions Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

lawrencecchen added a commit that referenced this pull request Oct 30, 2026
The slice head 2b2fc8e (= 43037147a0b's tree: slice + trunk sync c09bb74) merges the feat tip, 130 new
commits. 58 files conflicted:
- 0 reuse the previous round's resolutions: this round's base is the previous feat tip a14725a, so no hunk had
  all three sides equal to 5f39f9e's inputs.
- Regenerated, not hand-merged: the 4 CmuxMessagesLab patches (Fixture, Layout, RowDrawing, WindowView) from the
  merged vendored sources against the pinned upstream reconstructed from the side whose patch was consistent (feat's
  for 3, perf's for WindowView; feat 65de604 edited WindowView.swift without rewriting its patch).
- 54 resolved by porting feat's change into perf's shape:
  - Package.swift (CmuxNext: Floating tests get CmuxNextDesign with perf's Wakeups deps; CmuxMobileKit: Model gets
    feat's Resources with perf's CmuxSafeConcurrency).
  - Lineage parents #24136: SidebarSessionTreeFeed (recordedParents and per-host links on perf's ServiceObservation),
    RemoteAcpmuxWire (host/linksAlias notes posted on perf's mainWork; test-only inits take them too),
    AgentTabRemoteHost, AgentTabs+Wiring, AgentSessionWorkspace (the record is one completion task on main), tests.
  - Artifact sandbox #26216: perf's page-host PageArtifactFrame already serves the sandboxed endpoint; feat's
    navigation tests ported to PageNavigation, frame-ancestors expectation added, artifactFrameURL keeps only the
    page host, webviews tests on perf's URLs.
  - pane.commandAvailability (#25405) and chief.face (#27914) beside perf's keyToPaint and Wiring init.
  - State files off main #27749: AgentUnsentDrafts (perf's ObservedMap) and ScrollAnchors (blockingDecode) on
    AgentPaneStateFile.
  - AgentPaneTransport.close: perf's close reason plus feat's host-request failure and trust reset.
  - CloudService: perf's file, plus #27104 signedOutCreation (scope, policy, stop, signOut in +Machines) and #26740
    autosize/sizePick; listIsCurrent moved to +AppServer as feat did.
  - debug.object_menu into perf's DebugDriverControl; Home fixture presence/faces beside perf's field.
  - Palette overlay window #26951 into perf's paletteBuilt.
  - Per-window Home #27880 in perf's dockTab helper; active team (1bb1b96) on perf's cloudAuth.
  - Busy refusal (a930474, 2a9b813) in perf's LineTransport split (+State, +Route, framed write).
  - Launch snapshot sidebar doc (dc38061): DaemonLaunchSnapshot.sidebarDoc, shown once settled
    (whenSettled), its connect follow a ServiceObservation; the Rust test moved to launch_snapshot_tests.rs.
  - Hover card corners (bc66475) with perf's interactive flag; Chief pet state (#25671) on perf's
    ServiceObservation and AppearanceSignals; Chief picture crop (#27933) on perf's lanes and optional store;
    Home presence (#25578) as a FrameObservation; sidebar tab look (#27530) via SidebarLookFollower; settleOpenings
    (#24374) with perf's snap; Omnibar imports.
  - acpmux: inbox digest senders without slicing; withdraw_queued async with from_agents_only; cmux-tui-core and
    platform: connection leases beside perf's modules and InlineSocket (bounded_outbound.rs takes back the
    `platform::transport` import perf had dropped, which feat's claim_watched_connection names).
  - webviews: App/NewTab/NewTabScreen (retry, slash commands, at), settings keys moved to cardRows.ts.
- Feat's tests that call perf-changed inits fixed: TabConcentricCornerTests (input:), HomeChatPresenceFacesTests
  (deadlines:, frame delivery), RemoteChildSessionsTests (main run loop for posted notes).

Generators: cargo metadata in cmux-tui, cmux-tui/fuzz, Native/DiffSidecar and optchat-chief changed no lock;
gen-features.py --check, gen-chromium-host-wire.py --check and --check-ops, sync-resource-api.py --check pass.
webviews: bun run check passes. schemas/settings/settings-schema.json stays perf's (generated; the autofix
regenerates it): until then feat's chiefLook.test.tsx misses the home.bubbleColors rows.
teamleaderleo added a commit that referenced this pull request Oct 30, 2026
Resolves the WorkspaceRowView.configure conflict with #27530: the harness
fallback glyph moves into Self.agentMarkImage (so the offscreen title column
matches the drawn mark), and the stable fallback colour comes from
Self.agentMarkFallbackColor.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-8ac862c5f65d08f98445
teamleaderleo added a commit that referenced this pull request Oct 31, 2026
Conflicts kept base's new behaviour (sidebar.textSize glyph step, the empty
group's +, the empty section hint, #27530's tab hierarchy, pinned-only pin
button) with positions read from the shared sidebar columns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-ac5053f7854c8635a4d0
teamleaderleo added a commit that referenced this pull request Oct 31, 2026
… padding

Leading glyphs start on lead at base's size (Lawrence's titlesStartAsFarLeftAsTheRowAllows:
an icon sits where text would start); only the text column after them is the grid's
(36 compact, 44 comfortable). SidebarGridAlignmentTests reads base's new group edge padding
(63d46f8) and leaves the tab row's lead to #27530's hierarchy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-ac5053f7854c8635a4d0
teamleaderleo added a commit that referenced this pull request Nov 1, 2026
* Add shared layout grid tokens and validate their CSS and Swift copies

Agent-Session: https://cmux.com/deeplink/agent?id=aid-2bd8d22f53cb987a8eea

* test(webviews): measure gallery grid lines from runtime tokens

Add warning-level surface scenes, baseline/cap-height text measurements, named optical offsets, and recoverable per-line JSON evidence. Missing mounts and unknown selector coverage fail. Browser measurements and full checks are delegated to the parent fleet run; scoped lint, formatting, browser lane discovery, gallery IDs, and TypeScript syntax checked locally.

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

* Add transcript rhythm tokens and role-based grid measurement selectors

Agent-Session: https://cmux.com/deeplink/agent?id=aid-2bd8d22f53cb987a8eea

* Keep selector fallback valid when the marked surface is the target itself

Agent-Session: https://cmux.com/deeplink/agent?id=aid-2bd8d22f53cb987a8eea

* test(webviews): align grid scenes with shared surface roles

Use stable surface IDs across variants and ink-only role hints with selector fallbacks. Add existing plus, mode, project and tray scenes plus a 31-row expanded subagent fixture. Retain transcript action coverage and leave toolgroup/rhythm implementation to its owner. Scoped lint/format and gallery entry discovery passed; browser measurement remains delegated to parent fleet integration.

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

* Identify repeated grid scenes by their measured root

Agent-Session: https://cmux.com/deeplink/agent?id=aid-2bd8d22f53cb987a8eea

* Add shared transcript between-turn gap token

Agent-Session: https://cmux.com/deeplink/agent?id=aid-2bd8d22f53cb987a8eea

* Run layout grid validation in NEXT checks and scale the base unit

Agent-Session: https://cmux.com/deeplink/agent?id=aid-2bd8d22f53cb987a8eea

* Run layout grid drift check in the webviews warning branch

Agent-Session: https://cmux.com/deeplink/agent?id=aid-2bd8d22f53cb987a8eea

* Keep sidebar trailing marks fixed across densities

Agent-Session: https://cmux.com/deeplink/agent?id=aid-2bd8d22f53cb987a8eea

* Add canonical composer foot gap token and measure against it

Agent-Session: https://cmux.com/deeplink/agent?id=aid-2bd8d22f53cb987a8eea

* Measure visible placeholder ink and emit each grid scene baseline

Agent-Session: https://cmux.com/deeplink/agent?id=aid-2bd8d22f53cb987a8eea

* test(webviews): correct card grid fixture selectors

Read card fixture JSX: command permission body is its scope line; inline summary omits popover fold and close controls; glance inspector sections have distinct body labels and only Context/Connectors supply header icons. Scope absence diagnostics by fixture/section without changing coverageFailure assertions. Scoped format/lint, gallery discovery, and diff checks passed. Browser validation remains with parent fleet run.

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

* Set composer foot gap token to four points

Agent-Session: https://cmux.com/deeplink/agent?id=aid-2bd8d22f53cb987a8eea

* test(sidebar): pin row columns and optical centers to the layout grid

Keep row heights on sidebarRowHeight and preserve section density metrics. Exercise compact/comfortable columns, three nesting depths and one/two marks without a window. Fleet coordinator runs the red/green comparison.

Agent-Session: https://cmux.com/deeplink/agent?id=aid-6422d9d11f16e2728d06

* fix(sidebar): share grid columns across native rows

Use LayoutGrid through sidebar density metrics for leading, text, nesting and trailing geometry. Preserve metric row heights and existing section heights and spacing. Keep trailing marks on fixed 20-point pitches and center text by its capital baseline. Preserve the beside-name workspace caret and hover target.

Sidebar-Look: Leo 2026-10-29: We need to have the fucking shit aligned on fucking grids and lines and whatever the fuck.
Agent-Session: https://cmux.com/deeplink/agent?id=aid-6422d9d11f16e2728d06

* fix(sidebar): preserve iconless and group member text columns

Keep text-only rows at lead instead of reserving an empty icon column. Preserve the group rail offset and existing look contracts; expand grid coverage for iconless workspace titles.

Sidebar-Look: Lawrence 2026-10-23: text needs to be as left as possible (how it originally was); the header name keeps its members text column.
Agent-Session: https://cmux.com/deeplink/agent?id=aid-6422d9d11f16e2728d06

* fix(sidebar): preserve base density rail geometry and hit targets

Keep alignment changes in content columns. Restore comfortable row height, existing font rules, 1.5-point row edge, 20-point control targets, and base group rail/bar positions. Preserve full section/group fill heights. Pin these contracts in SidebarGridAlignmentTests.

Sidebar-Look: Leo 2026-10-27: one or two pixels, 1.5. Grid review: columns only; density, control hit boxes and group rails stay as base.
Agent-Session: https://cmux.com/deeplink/agent?id=aid-6422d9d11f16e2728d06

* fix(sidebar): retain session tree depth token

Restore the base SidebarDensityTokens.depthIndent compatibility API used by WorkspaceRowView session-tree layout. Keep its original Metrics.space4 geometry while grid columns remain independent.

Sidebar-Look: no visual change; restore the existing session-tree geometry.
Agent-Session: https://cmux.com/deeplink/agent?id=aid-6422d9d11f16e2728d06

* fix(sidebar): preserve base trailing and title columns

Keep base trailing inset and control sizing while adapting content columns to the shared grid. Preserve iconless title intent and group member alignment.

Sidebar-Look: preserve base trailing, title and group rail contracts while aligning content columns.
Agent-Session: https://cmux.com/deeplink/agent?id=aid-6422d9d11f16e2728d06

* fix(sidebar): align text-only and band columns

Keep iconless titles on the lead column, align group names with member text, and preserve the base trailing edge while using the shared column source.

Sidebar-Look: align text-only, group and band columns to the shared grid.
Agent-Session: https://cmux.com/deeplink/agent?id=aid-6422d9d11f16e2728d06

* fix(sidebar): keep iconless lead at the row inset and band marks on the trailing line

Lead sits horizontalInset inside the highlight (12 compact, 16 comfortable), so
iconless titles keep Lawrence's as-far-left contract and group header names stay on
their members' column. Band rows measure the shared columns from their pill, so their
dots and statuses center on the same 24 pt trailing line as list rows. Pinned rows and
headers keep the pin on the icon column with icon and title one column in. Row and
band fills return to base's full row height.

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

* fix(sidebar): tabs one grid indent under their workspace; titleFrame reports drawn text

A workspace's tab rows take depth 1 on the shared columns (+16), keeping base's
inset of tabs under their workspace on the grid. The test-only titleFrame accessor
returns the caption's alignment rect (the drawn text, without the label cell's 2 pt
side padding) so it compares with a workspace title's marquee frame.

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

* fix(sidebar): keep base's icon box outside the row columns

The footer avatar and glyph column, chips and icon-only items keep base's
app-density icon box; only list rows take the grid's density icon box (20 at
comfortable).

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

* fix(sidebar): glyphs keep base's icon box, centered in the grid's icon column

SidebarStyle.iconBox (avatar, footer, chips, row glyphs) stays at base's size;
only the icon column (SidebarColumns.iconBox: 16, comfortable 20) widens, and
row glyphs, pins and color dots center in it.

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

* fix(sidebar): glyphs start on lead; grid test follows base's new rail padding

Leading glyphs start on lead at base's size (Lawrence's titlesStartAsFarLeftAsTheRowAllows:
an icon sits where text would start); only the text column after them is the grid's
(36 compact, 44 comfortable). SidebarGridAlignmentTests reads base's new group edge padding
(63d46f8) and leaves the tab row's lead to #27530's hierarchy.

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

* test(sidebar): the hit-box check lays out a pinned expanded row (base shows its pin button only then)

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

* fix(sidebar): a quiet tab keeps its trailing inset; the comfortable icon frame is the 20 pt column box

Tabs with no trailing mark stop their text horizontalInset short of the row end again.
Leading icon frames take the grid's icon column box (16 compact, 20 comfortable) and draw
their glyph, emoji or well at its own size centered in it, so the text column is 8 pt after
the frame at both densities. Tests for both.

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

* test(sidebar): lay out the icon view before reading its glyph frame

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

* docs(sidebar): log #27598's pre-trailer grid commits in the sidebar owner note

The prepush gate's sidebar sweep now names a PR's own commits that lack a
`Sidebar-Look:` trailer (#27632). Six of this branch's commits predate the
check; each is a reviewed visual change from the grid request, so the owner
note logs their shas, as it does for other pre-check commits.

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

---------

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

This branch was previously deployed

1 inactive deployment
ci-routing-agent — c9c58f0f Deployed Oct 30, 2026 by teamleaderleo via wait for same-key tree publisher #79684
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