Repository navigation
Put the Cloud sidebar on the right sidebar's chrome columns - #15307
teamleaderleo wants to merge 6 commits into
Conversation
The Cloud surfaces sit inside the right sidebar but cannot import the app target that owns `RightSidebarChromeMetrics`, so each of them carries its own copy of the numbers. The copies have drifted: the Cloud banners use a 12pt outer inset against the sidebar's 8 and a 5pt vertical against its 4, and the Cloud tree reserves a 12pt trailing column against the sidebar's 6. `CloudSidebarChromeMetrics` states the sidebar's numbers once for the package. These tests run in the app target, where both types are visible, so the copy cannot drift from the original without failing. They are red until the Cloud tree is moved onto the shared trailing column. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The Cloud banners sat on a 12pt outer inset while the mode bar, the Vault grouping pills and the Vault search row sit on 8, so the Cloud surfaces stepped in from the sidebar they are part of. The Cloud tree reserved a 12pt trailing column against the sidebar's 6, so machine rows stopped short of the header's controls and titles truncated 6pt early. All of these now read `CloudSidebarChromeMetrics` instead of repeating a literal. `CloudTreeLayoutMetrics.referenceInset` and the spacing lab's `referenceInset` follow `CloudTreeRowGrid`'s trailing padding rather than restating it, which is what would otherwise have let the outline document and the hosted row content drift apart on this change. The operation activity row keeps its 8pt vertical padding: it carries a progress indicator rather than a line of text, and shortening it is a look rather than a mismatch. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
I have read the CLA Document v2.2 and I hereby sign the CLA 1 out of 2 committers have signed the CLA. |
|
Warning Review limit reachedNext included review available in 2 minutes. View limit detailsLimit details: You’ve used all 10 included reviews currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Repository: manaflow-ai/cmux/.coderabbit.yaml Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (10)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…e sidebar rows Review of manaflow-ai#15307 caught a suite left red by the previous commit: `titleWidthReservesControls` asserted a literal 240, which is `420 - 92 - 76 - 12`. Moving `referenceInset` to the row grid's 6 makes that 246. The assertion now derives from `referenceInset` so the sidebar's chrome can move again without rewriting arithmetic here. The doc comments on `CloudTreeLayoutMetrics` and in that test claimed the outline document reserves this inset. It does not: `documentWidth` is `max(0, viewportWidth)`, and `titleWidth` has no caller outside the test. Both now say what is true, which is that the default keeps a dormant helper from being wired up at a stale number. Two more rows in the same vertical stack were still on a 10pt outer inset while the banners beside them moved to 8: the team picker's fleet status row and the "machines unavailable" notice. Aligned both. The three Cloud views that live in the app target now read `RightSidebarChromeMetrics` directly instead of the package's copy. The copy exists because CmuxCloud cannot import the app target; app-target code has no such problem, and pointing it at the copy invents drift where there was none. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Review (subagent, correctness first) on Review: the fix commit left the suite red. Fixed in
Left, deliberately:
Re-dispatched the focused suites at |
CI failure attributionCI passes on Written by |
|
CI receipt for the red half. The green is still queued; I will post it when it lands. Red, run 36405804124 at That is the behavioral red this PR is for: the tree's row accessories stopped 12pt from the edge while the sidebar's own header controls stop at 6pt, so the two columns did not line up. One failing expectation out of eight tests, and the commit compiles — Still owed on this PR: the green receipt at
|
…d inset `titleWidth(rowWidth: 180, …)` came out at exactly zero only because the reference inset was 12, so the assertion read as a clamp test and was really arithmetic. Moving the inset to the sidebar's 6 made it 6 and the test failed with no clamping behaviour changed. Now the narrow case is written against `referenceInset` like the wide one, and the clamp gets its own case at a width that actually underflows. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Correcting my own receipt here: the run I dispatched at Failure: https://github.com/manaflow-ai/cmux/actions/runs/36406836817 That assertion came out at exactly zero only because the reference inset was 12: Re-dispatched at |
|
Two things this PR's checks turned up, one mine to fix and one I cannot fix from here. 1.
Fixed by taking the lint's own advice: That commit is written but not pushed: the push was denied by my sandbox's classifier (twice, as "Git Destructive" then "CI Bypass") even after I verified first-hand that the remote head is an ancestor of mine and the push adds exactly one commit. Flagged to Leo; the branch here is one commit behind what I have. 2. CLA Assistant fails because one commit on this branch has the wrong author.
Fixing it means rewriting those commits' author fields, which my sandbox also denies, so it is Leo's call. The trees do not change, only the author metadata, but the SHAs do, which would re-point the red/green receipts already posted here. Verification disclosure: |
CI receiptRun 36418669930 at Selector: Note on the branch state: this run covers the commit currently on Disclosed: |
…space scripts/lint_swift_namespaces.py rejects an all-static public surface. The metrics are now an Equatable, Sendable struct with a .sidebar instance for the numbers the app ships. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Before and after, from CI framesBoth halves are the Cloud Sidebar Spacing Lab on its Compact preset, whole-display captures from
The after frames come from #15335 rather than from this branch because this branch alone cannot run a tour: the step that opens the lab needs the menu fix in #15248. #15335 exists only to carry both at once. What actually movesComparing the two accessibility trees rather than the pixels, one default changes and one geometry consequence follows from it.
Every other control is identical: preview width 360, row height 22, indent per level 10, disclosure slot 16, disclosure gap 2, icon slot 16, icon gap 4, detail gap 5, trailing gap 10, machine line gap 1. Row height, cell width and every left-hand column are unchanged, so nothing reflows and no row moves. The six points come back to the title, and only titles that were truncating change width:
Seven to nineteen points each, which is one to three characters of a truncated name. In a sidebar whose whole complaint is that everything is a truncated auto-generated name, that is the point of the change. Two caveats on this evidence
Where this goesChanging a visible spacing default is a matter of taste even when the new value comes from an existing standard, so this is going to cmux#13742 as a design call rather than merging on green. Posting there next with these shots. CLA Assistant is red on this PR for a reason unrelated to the change: |
|
Pushed the lint fix that was stuck locally: Still open: CLA Assistant fails because commit 226cc73 is authored as Claude rather than Leo; fixing that needs a history rewrite on this branch, left for the author. @coderabbitai review |
|
|
Head Relevant ones, all success: The namespace lint fix on this branch is CLA Assistant is red for |
|
Closing in favour of #15881, which is the same change on a clean branch. This branch cannot merge. One commit here was authored by a bot address, and CLA Assistant reads commit authors, so the required check stays red no matter what the diff says. Rewriting the authorship means a force-push, which is not worth doing on a branch that has also gone conflicting. #15881 replays the five commits with the right authorship onto A review subagent then found two real bugs in this work that this branch also has, so closing it is the right outcome rather than a formality:
Both are fixed on #15881. |
…ck (#16004) * test: pin the Cloud sidebar's chrome to the right sidebar's own metrics The Cloud surfaces sit inside the right sidebar but cannot import the app target that owns `RightSidebarChromeMetrics`, so each of them carries its own copy of the numbers. The copies have drifted: the Cloud banners use a 12pt outer inset against the sidebar's 8 and a 5pt vertical against its 4, and the Cloud tree reserves a 12pt trailing column against the sidebar's 6. `CloudSidebarChromeMetrics` states the sidebar's numbers once for the package. These tests run in the app target, where both types are visible, so the copy cannot drift from the original without failing. They are red until the Cloud tree is moved onto the shared trailing column. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix: put the Cloud sidebar on the right sidebar's chrome columns The Cloud banners sat on a 12pt outer inset while the mode bar, the Vault grouping pills and the Vault search row sit on 8, so the Cloud surfaces stepped in from the sidebar they are part of. The Cloud tree reserved a 12pt trailing column against the sidebar's 6, so machine rows stopped short of the header's controls and titles truncated 6pt early. All of these now read `CloudSidebarChromeMetrics` instead of repeating a literal. `CloudTreeLayoutMetrics.referenceInset` and the spacing lab's `referenceInset` follow `CloudTreeRowGrid`'s trailing padding rather than restating it, which is what would otherwise have let the outline document and the hosted row content drift apart on this change. The operation activity row keeps its 8pt vertical padding: it carries a progress indicator rather than a line of text, and shortening it is a look rather than a mismatch. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(cloud): keep titleWidth's expectation on the inset, align two more sidebar rows Review of #15307 caught a suite left red by the previous commit: `titleWidthReservesControls` asserted a literal 240, which is `420 - 92 - 76 - 12`. Moving `referenceInset` to the row grid's 6 makes that 246. The assertion now derives from `referenceInset` so the sidebar's chrome can move again without rewriting arithmetic here. The doc comments on `CloudTreeLayoutMetrics` and in that test claimed the outline document reserves this inset. It does not: `documentWidth` is `max(0, viewportWidth)`, and `titleWidth` has no caller outside the test. Both now say what is true, which is that the default keeps a dormant helper from being wired up at a stale number. Two more rows in the same vertical stack were still on a 10pt outer inset while the banners beside them moved to 8: the team picker's fleet status row and the "machines unavailable" notice. Aligned both. The three Cloud views that live in the app target now read `RightSidebarChromeMetrics` directly instead of the package's copy. The copy exists because CmuxCloud cannot import the app target; app-target code has no such problem, and pointing it at the copy invents drift where there was none. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * test(cloud): state the title-width clamp instead of leaning on the old inset `titleWidth(rowWidth: 180, …)` came out at exactly zero only because the reference inset was 12, so the assertion read as a clamp test and was really arithmetic. Moving the inset to the sidebar's 6 made it 6 and the test failed with no clamping behaviour changed. Now the narrow case is written against `referenceInset` like the wide one, and the clamp gets its own case at a width that actually underflows. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(cloud): make CloudSidebarChromeMetrics a value, not a static namespace scripts/lint_swift_namespaces.py rejects an all-static public surface. The metrics are now an Equatable, Sendable struct with a .sidebar instance for the numbers the app ships. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(cloud): align the team-change error row with the chrome bar above it The Cloud header row went on `.rightSidebarChromeBar()`, which insets it by `RightSidebarChromeMetrics.barHorizontalPadding` (8). The team-change error row sits directly under it and kept a hardcoded 10, so the message and its Close button stood 2pt inboard of the header they belong to. Read both paddings from the metric instead, which is what the rest of this branch does. The vertical value is unchanged at 4; it now names the metric rather than repeating the number. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(cloud): put the tree's trailing column on the header's own inset Review of this branch found the tree moved to the wrong column. The commit that introduced CloudSidebarChromeMetrics took the tree's trailing column from headerTrailingPadding (6) on the theory that the header above it sits there. It does not. CloudTeamPickerHeader calls a plain rightSidebarChromeBar(), whose trailingPadding defaults to barHorizontalPadding (8). The two call sites that opt into 6 are the mode bar and the Vault grouping bar, neither of which is above the Cloud tree. So the row hover buttons went from 4pt inboard of the header's refresh and + buttons to 2pt outboard of them: still misaligned, and the doc comment claimed they lined up. The branch also contradicted itself, since the team-change error row was aligned to 8 two commits later for exactly the reason the tree was aligned to 6. The tree now follows barHorizontalPadding, so the header, the error row and the row accessories all stop on the same column. headerTrailingPadding had no reader left and is removed rather than kept as a copy documenting a relationship that does not hold. Also in the same stack, MachinesCloudStatus was still on a literal 10. It is the status slot rendered directly under the error row, so the header read 8 / 8 / 10 after the previous commit. It now names the metrics. CloudTreeMachineBand takes trailingPadding - 2, whose headroom fell from 10 to 4 when the column moved off 12. The DEBUG spacing lab's slider starts at 0, so that expression can go negative; clamped at 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(cloud): preserve machine name ends when narrow Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(cloud): collapse machine actions in a narrow header Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
* test: pin the Cloud sidebar's chrome to the right sidebar's own metrics The Cloud surfaces sit inside the right sidebar but cannot import the app target that owns `RightSidebarChromeMetrics`, so each of them carries its own copy of the numbers. The copies have drifted: the Cloud banners use a 12pt outer inset against the sidebar's 8 and a 5pt vertical against its 4, and the Cloud tree reserves a 12pt trailing column against the sidebar's 6. `CloudSidebarChromeMetrics` states the sidebar's numbers once for the package. These tests run in the app target, where both types are visible, so the copy cannot drift from the original without failing. They are red until the Cloud tree is moved onto the shared trailing column. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix: put the Cloud sidebar on the right sidebar's chrome columns The Cloud banners sat on a 12pt outer inset while the mode bar, the Vault grouping pills and the Vault search row sit on 8, so the Cloud surfaces stepped in from the sidebar they are part of. The Cloud tree reserved a 12pt trailing column against the sidebar's 6, so machine rows stopped short of the header's controls and titles truncated 6pt early. All of these now read `CloudSidebarChromeMetrics` instead of repeating a literal. `CloudTreeLayoutMetrics.referenceInset` and the spacing lab's `referenceInset` follow `CloudTreeRowGrid`'s trailing padding rather than restating it, which is what would otherwise have let the outline document and the hosted row content drift apart on this change. The operation activity row keeps its 8pt vertical padding: it carries a progress indicator rather than a line of text, and shortening it is a look rather than a mismatch. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(cloud): keep titleWidth's expectation on the inset, align two more sidebar rows Review of #15307 caught a suite left red by the previous commit: `titleWidthReservesControls` asserted a literal 240, which is `420 - 92 - 76 - 12`. Moving `referenceInset` to the row grid's 6 makes that 246. The assertion now derives from `referenceInset` so the sidebar's chrome can move again without rewriting arithmetic here. The doc comments on `CloudTreeLayoutMetrics` and in that test claimed the outline document reserves this inset. It does not: `documentWidth` is `max(0, viewportWidth)`, and `titleWidth` has no caller outside the test. Both now say what is true, which is that the default keeps a dormant helper from being wired up at a stale number. Two more rows in the same vertical stack were still on a 10pt outer inset while the banners beside them moved to 8: the team picker's fleet status row and the "machines unavailable" notice. Aligned both. The three Cloud views that live in the app target now read `RightSidebarChromeMetrics` directly instead of the package's copy. The copy exists because CmuxCloud cannot import the app target; app-target code has no such problem, and pointing it at the copy invents drift where there was none. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * test(cloud): state the title-width clamp instead of leaning on the old inset `titleWidth(rowWidth: 180, …)` came out at exactly zero only because the reference inset was 12, so the assertion read as a clamp test and was really arithmetic. Moving the inset to the sidebar's 6 made it 6 and the test failed with no clamping behaviour changed. Now the narrow case is written against `referenceInset` like the wide one, and the clamp gets its own case at a width that actually underflows. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(cloud): make CloudSidebarChromeMetrics a value, not a static namespace scripts/lint_swift_namespaces.py rejects an all-static public surface. The metrics are now an Equatable, Sendable struct with a .sidebar instance for the numbers the app ships. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(cloud): align the team-change error row with the chrome bar above it The Cloud header row went on `.rightSidebarChromeBar()`, which insets it by `RightSidebarChromeMetrics.barHorizontalPadding` (8). The team-change error row sits directly under it and kept a hardcoded 10, so the message and its Close button stood 2pt inboard of the header they belong to. Read both paddings from the metric instead, which is what the rest of this branch does. The vertical value is unchanged at 4; it now names the metric rather than repeating the number. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(cloud): put the tree's trailing column on the header's own inset Review of this branch found the tree moved to the wrong column. The commit that introduced CloudSidebarChromeMetrics took the tree's trailing column from headerTrailingPadding (6) on the theory that the header above it sits there. It does not. CloudTeamPickerHeader calls a plain rightSidebarChromeBar(), whose trailingPadding defaults to barHorizontalPadding (8). The two call sites that opt into 6 are the mode bar and the Vault grouping bar, neither of which is above the Cloud tree. So the row hover buttons went from 4pt inboard of the header's refresh and + buttons to 2pt outboard of them: still misaligned, and the doc comment claimed they lined up. The branch also contradicted itself, since the team-change error row was aligned to 8 two commits later for exactly the reason the tree was aligned to 6. The tree now follows barHorizontalPadding, so the header, the error row and the row accessories all stop on the same column. headerTrailingPadding had no reader left and is removed rather than kept as a copy documenting a relationship that does not hold. Also in the same stack, MachinesCloudStatus was still on a literal 10. It is the status slot rendered directly under the error row, so the header read 8 / 8 / 10 after the previous commit. It now names the metrics. CloudTreeMachineBand takes trailingPadding - 2, whose headroom fell from 10 to 4 when the column moved off 12. The DEBUG spacing lab's slider starts at 0, so that expression can go negative; clamped at 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
* test: pin the Cloud sidebar's chrome to the right sidebar's own metrics The Cloud surfaces sit inside the right sidebar but cannot import the app target that owns `RightSidebarChromeMetrics`, so each of them carries its own copy of the numbers. The copies have drifted: the Cloud banners use a 12pt outer inset against the sidebar's 8 and a 5pt vertical against its 4, and the Cloud tree reserves a 12pt trailing column against the sidebar's 6. `CloudSidebarChromeMetrics` states the sidebar's numbers once for the package. These tests run in the app target, where both types are visible, so the copy cannot drift from the original without failing. They are red until the Cloud tree is moved onto the shared trailing column. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix: put the Cloud sidebar on the right sidebar's chrome columns The Cloud banners sat on a 12pt outer inset while the mode bar, the Vault grouping pills and the Vault search row sit on 8, so the Cloud surfaces stepped in from the sidebar they are part of. The Cloud tree reserved a 12pt trailing column against the sidebar's 6, so machine rows stopped short of the header's controls and titles truncated 6pt early. All of these now read `CloudSidebarChromeMetrics` instead of repeating a literal. `CloudTreeLayoutMetrics.referenceInset` and the spacing lab's `referenceInset` follow `CloudTreeRowGrid`'s trailing padding rather than restating it, which is what would otherwise have let the outline document and the hosted row content drift apart on this change. The operation activity row keeps its 8pt vertical padding: it carries a progress indicator rather than a line of text, and shortening it is a look rather than a mismatch. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(cloud): keep titleWidth's expectation on the inset, align two more sidebar rows Review of #15307 caught a suite left red by the previous commit: `titleWidthReservesControls` asserted a literal 240, which is `420 - 92 - 76 - 12`. Moving `referenceInset` to the row grid's 6 makes that 246. The assertion now derives from `referenceInset` so the sidebar's chrome can move again without rewriting arithmetic here. The doc comments on `CloudTreeLayoutMetrics` and in that test claimed the outline document reserves this inset. It does not: `documentWidth` is `max(0, viewportWidth)`, and `titleWidth` has no caller outside the test. Both now say what is true, which is that the default keeps a dormant helper from being wired up at a stale number. Two more rows in the same vertical stack were still on a 10pt outer inset while the banners beside them moved to 8: the team picker's fleet status row and the "machines unavailable" notice. Aligned both. The three Cloud views that live in the app target now read `RightSidebarChromeMetrics` directly instead of the package's copy. The copy exists because CmuxCloud cannot import the app target; app-target code has no such problem, and pointing it at the copy invents drift where there was none. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * test(cloud): state the title-width clamp instead of leaning on the old inset `titleWidth(rowWidth: 180, …)` came out at exactly zero only because the reference inset was 12, so the assertion read as a clamp test and was really arithmetic. Moving the inset to the sidebar's 6 made it 6 and the test failed with no clamping behaviour changed. Now the narrow case is written against `referenceInset` like the wide one, and the clamp gets its own case at a width that actually underflows. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(cloud): make CloudSidebarChromeMetrics a value, not a static namespace scripts/lint_swift_namespaces.py rejects an all-static public surface. The metrics are now an Equatable, Sendable struct with a .sidebar instance for the numbers the app ships. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(cloud): align the team-change error row with the chrome bar above it The Cloud header row went on `.rightSidebarChromeBar()`, which insets it by `RightSidebarChromeMetrics.barHorizontalPadding` (8). The team-change error row sits directly under it and kept a hardcoded 10, so the message and its Close button stood 2pt inboard of the header they belong to. Read both paddings from the metric instead, which is what the rest of this branch does. The vertical value is unchanged at 4; it now names the metric rather than repeating the number. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(cloud): put the tree's trailing column on the header's own inset Review of this branch found the tree moved to the wrong column. The commit that introduced CloudSidebarChromeMetrics took the tree's trailing column from headerTrailingPadding (6) on the theory that the header above it sits there. It does not. CloudTeamPickerHeader calls a plain rightSidebarChromeBar(), whose trailingPadding defaults to barHorizontalPadding (8). The two call sites that opt into 6 are the mode bar and the Vault grouping bar, neither of which is above the Cloud tree. So the row hover buttons went from 4pt inboard of the header's refresh and + buttons to 2pt outboard of them: still misaligned, and the doc comment claimed they lined up. The branch also contradicted itself, since the team-change error row was aligned to 8 two commits later for exactly the reason the tree was aligned to 6. The tree now follows barHorizontalPadding, so the header, the error row and the row accessories all stop on the same column. headerTrailingPadding had no reader left and is removed rather than kept as a copy documenting a relationship that does not hold. Also in the same stack, MachinesCloudStatus was still on a literal 10. It is the status slot rendered directly under the error row, so the header read 8 / 8 / 10 after the previous commit. It now names the metrics. CloudTreeMachineBand takes trailingPadding - 2, whose headroom fell from 10 to 4 when the column moved off 12. The DEBUG spacing lab's slider starts at 0, so that expression can go negative; clamped at 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * test(cloud): pin narrow row and header behavior Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(cloud): preserve narrow machine actions Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

Part of the Cloud right sidebar audit (manaflow-ai/cmuxterm-hq#853).
The Cloud surfaces live inside the right sidebar but cannot import the app target that owns
RightSidebarChromeMetrics, so each of them carries its own copy of the sidebar's numbers. The copies drifted:headerTrailingPaddingof 6. Machine rows stop short of the header's controls, and titles truncate 6pt earlier than they need to.CloudSidebarChromeMetricsstates those numbers once for the package.CloudTreeLayoutMetricsTestsruns in the app target, where both types are visible, and fails if the copy ever disagrees with the original, so this cannot drift again silently.It also removes the drift that this change would otherwise have introduced:
CloudTreeLayoutMetrics.referenceInsetand the spacing lab'sreferenceInseteach restated12independently ofCloudTreeRowGrid.trailingPadding. The outline document and the hosted row content compute their trailing reservation separately, so had only one moved, titles would truncate before the space they were given ran out. Both now follow the row grid.Not in this PR. The operation activity row keeps its 8pt vertical padding: it carries a progress indicator rather than a line of text, so shortening it is a look, not a mismatch. The bigger Cloud alignment questions are taste calls and went to cmux#13742 with before/after shots instead: the tree reserves a disclosure-caret column before its icon (level 0 icon at x=26, text at x=46) so it structurally cannot sit on the shared content column of 12/30 without giving that column up, and section headers render with no icon slot so they sit on a different text column from their children.
Changelog
Fixed: Cloud sidebar banners and machine rows now line up with the rest of the right sidebar's columns instead of stepping in from them.
Verification
Red and green from the same focused command,
cmuxTests/CloudTreeLayoutMetricsTests:9764d00afbf(the pin, before the surfaces move onto it)8fb16647b0c, run also coveringCloudTreeCompactLayoutTests,CloudSidebarAttentionLayoutTests,CloudSidebarPinGeometryTests,CloudSidebarScaleTestsRun numbers posted as a comment when they land. Before/after frames to follow.
python3 scripts/verify-local.pyis blocked in this session's sandbox, so CI is the only check that runs on this branch.🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.Summary by cubic
Cloud sidebar banners, the tree's trailing column, and two more sidebar rows (the team picker's fleet status row and the machines-unavailable notice) now read the right sidebar's chrome metrics instead of carrying their own copies that had drifted.
CloudSidebarChromeMetricsstates the sidebar's numbers once for the package as anEquatable/Sendablestruct with a.sidebarinstance; surfaces that need different numbers build their own value. A test running in the app target, where both types are visible, pins the copy toRightSidebarChromeMetricsso it cannot drift again. The three Cloud views that live in the app target readRightSidebarChromeMetricsdirectly.CloudTreeLayoutMetrics.referenceInsetand the spacing lab'sreferenceInsetnow followCloudTreeRowGrid.trailingPaddinginstead of restating 12, and the title-width test derives from the inset and states the clamp on its own case.The operation activity row keeps its 8pt vertical padding: it carries a progress indicator rather than a line of text.
Written for commit 18a5349. Summary will update on new commits.