Skip to content

New Tab: keep project selection at zero layout shift - #26850

Merged
teamleaderleo merged 2 commits into
feat-cmux-nextfrom
lane/nx-newtab-headline-cls
Oct 28, 2026
Merged

teamleaderleo merged 2 commits into
feat-cmux-nextfrom
lane/nx-newtab-headline-cls

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

Selecting a project on New Tab collapsed the optional headline from two rows to one and resized the footer's folder/icon column. The title moved by 22px and neighboring controls moved with the shorter folder name. Reserve the headline row and the location group's existing 45% responsive allocation, left-align its label, and share the existing 14px ghost icon size with project badges. Long names consume available space and keep a full-path tooltip.

Leo: "lawrence thinks we should have better alignment of stuff in general / see claude code, then see ours / we can do a lot better i think". This fixes the real project-selection interaction exposed by #26828. Send performance is tracked separately in #26807.

Reference: cmux-design-references/apps/cmux/live/new-workspace-composer-default.jpg; retains the existing quiet composer, colors and glass. The fixed left slot leaves quiet space after a short folder name; long names use that space instead of moving the machine and permission controls.

Performance

Same mounted gallery interaction, Chromium Linux, 2x, Apple System Colors dark/light. The regression opens the real project option, chooses it, then reopens the menu; it counts every layout-shift entry and requires exactly zero. Immutable runtime base bd735a6e46772724c6af19010a7ea171dd65f6b4 and final head use the identical test/fixture.

metric before after delta harness or run link
CLS, 900x800, cmux, dark/light 0.0033658477044753083 0 -0.0033658477044753083 mounted Chromium regression
CLS, 900x800, long synthetic name, dark/light 0.018515426697530864 0 -0.018515426697530864 mounted Chromium regression
CLS, 540x420, cmux, dark/light 0.01427356150793651 0 -0.01427356150793651 mounted Chromium regression
CLS, 540x420, long synthetic name, dark/light 0.06151531268371546 0 -0.06151531268371546 mounted Chromium regression

Before / after

Actual gallery screenshots from the matched local Chromium lane (100% product UI, synthetic data only). Each pair shows the same selected project at the same viewport; all eight assets passed the broker's privacy check.

State Before After
900x800, normal name, dark
900x800, normal name, light
540x420, long name, dark
540x420, long name, light

Validation

  • Failing behavioral commit ae57efb9c3049155ef3bbb70621a476cb13b69b0, then the layout repair.
  • CMUX_BROWSER_TESTS=1 bun test test/new-tab-headline-selection-cls.test.ts: base 8 fail on nonzero CLS; head 8 pass / 160 assertions. Checks real selection, reopening, stable title/composer/footer rectangles, visible controls within bounds, and full-name tooltip carrier.
  • scripts/web-lint.sh and python3 scripts/cmux-next/prepush-gate.py pass.
  • Design-token baseline lowers one removed literal-height allowance; this tightens the ratchet.
  • Exact-source receipt and all 32 PNG digests: gcp-agent-lane-2:/home/cmux/scratch/newtab-headline-cls-proof/receipt.json. No native build or hosted performance run was dispatched.

Final owner loop: nx-composer root owns independent exact-head review, required-check reconciliation and the pinned squash.

Agent session: agent session

@github-actions

github-actions Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 9e11b1c: 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=pr26850 -f ref=lane/nx-newtab-headline-cls -f platform=macos -f backend_mode=local

Unclear: web / react-apps-check failed: no known signature; failed step: Check webview test shards. This PR merged before its CI finished: fix forward on main.

CI failed on 9e11b1cefd (run 40677859283 attempt 1): 2 code, 1 unknown.

Job Verdict Why
web / react-apps-base-check (1) code a web test failed
web / react-apps-base-check (4) code a web test failed
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Failures:

  • seen on other PRs layout.test.ts only page.css imports the page's sheets: failed (job)
  • seen on other PRs agent-pane-attach-huge-files.test.ts 3 .png 200 MP paste remote: failed (job)
  • seen on other PRs agent-pane-attach-huge-files.test.ts 3 .png 200 MP drop remote: failed (job)
  • seen on other PRs agent-pane-attach-huge-files.test.ts 4 text 100 MB drop remote: failed (job)
  • seen on other PRs agent-pane-queue-scroll-bottom.test.ts chromium > the queue opened, the view scrolled to its end shows the last row whole, and it stays: failed (job)
  • seen on other PRs agent-pane-queue-scroll-bottom.test.ts chromium > the queue closed at the latest row keeps the last row on the stack, with no room that gli...: failed (job)
  • seen on other PRs agent-pane-queue-scroll-bottom.test.ts chromium > a prompt the fold hides, run elsewhere, leaves no room as the stack shrinks, opens and cl...: failed (job)
  • seen on other PRs agent-pane-queue-scroll-bottom.test.ts webkit > the queue closed at the latest row keeps the last row on the stack, with no room that glide...: failed (job)
  • seen on other PRs accent-glass-invariants.test.ts no orange or system accent and no opaque glass on the gallery stages: failed (job)
  • seen on other PRs agent-pane-peer-chat.test.ts a chat on an SSH machine > counts its running turn from the prompt and offers no machine switch mid-...: failed (job)
  • ... 6 more in the job logs
Matched log lines
web / react-apps-base-check (1): (fail) only page.css imports the page's sheets [27.63ms]
web / react-apps-base-check (4): (fail) no orange or system accent and no opaque glass on the gallery stages [536787.37ms]

Not re-run automatically: web / react-apps-base-check (1), web / react-apps-base-check (4), web / react-apps-check are not machine failures.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

red: web / Web status; base red: the same failure on the base 7197093; does not block
red: web / react-apps-base-check (1); no finished base run on 7197093 to compare; do not merge until green; see lane-rules
red: web / react-apps-base-check (4); no finished base run on 7197093 to compare; do not merge until green; see lane-rules
red: web / react-apps-check; base red: the same failure on the base 7197093; does not block

Gallery before/after for 9e11b1c: 16 states rendered, 2 images differ, 1774 more touched states not rendered. Images are in the run's artifact, not on this public PR.

gh run download 40677859133 -R manaflow-ai/cmux -n gallery-advisory-26850-9e11b1cefdacd4fbb88e189058649ae47e03c3a9 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.composer-context/closed Apple System Colors Light unchanged 0% own FolderPopover.tsx
agent-pane.composer-context/closed Apple System Colors unchanged 0% own FolderPopover.tsx
agent-pane.composer-context/folder-menu Apple System Colors Light unchanged 0% own FolderPopover.tsx
agent-pane.composer-context/folder-menu Apple System Colors unchanged 0% own FolderPopover.tsx
agent-pane.composer-context/folder-favicons Apple System Colors Light unchanged 0% own FolderPopover.tsx
agent-pane.composer-context/folder-favicons Apple System Colors unchanged 0% own FolderPopover.tsx
agent-pane.composer-context/framework-marks Apple System Colors Light unchanged 0% own FolderPopover.tsx
agent-pane.composer-context/framework-marks Apple System Colors unchanged 0% own FolderPopover.tsx
agent-pane.composer-context/duplicate-worktrees Apple System Colors Light unchanged 0% own FolderPopover.tsx
agent-pane.composer-context/duplicate-worktrees Apple System Colors unchanged 0% own FolderPopover.tsx
agent-pane.composer-context/duplicate-search Apple System Colors Light unchanged 0% own FolderPopover.tsx
agent-pane.composer-context/duplicate-search Apple System Colors unchanged 0% own FolderPopover.tsx
agent-pane.composer-context/repo-worktrees Apple System Colors Light unchanged 0% own FolderPopover.tsx
agent-pane.composer-context/repo-worktrees Apple System Colors unchanged 0% own FolderPopover.tsx
agent-pane.composer-context/repo-worktrees-open Apple System Colors Light unchanged 0% own FolderPopover.tsx
agent-pane.composer-context/repo-worktrees-open Apple System Colors unchanged 0% own FolderPopover.tsx
agent-pane.new-chat-composer/claude Apple System Colors Light unchanged 0% own FolderPopover.tsx
agent-pane.new-chat-composer/claude Apple System Colors unchanged 0% own FolderPopover.tsx
agent-pane.new-chat-composer/codex Apple System Colors Light unchanged 0% own FolderPopover.tsx
agent-pane.new-chat-composer/codex Apple System Colors unchanged 0% own FolderPopover.tsx
agent-pane.new-chat-composer/project Apple System Colors Light unchanged 0% own FolderPopover.tsx
agent-pane.new-chat-composer/project Apple System Colors unchanged 0% own FolderPopover.tsx
agent-pane.new-chat-composer/remote Apple System Colors Light unchanged 0% own FolderPopover.tsx
agent-pane.new-chat-composer/remote Apple System Colors unchanged 0% own FolderPopover.tsx
agent-pane.new-chat-composer/folder-menu Apple System Colors Light unchanged 0% own FolderPopover.tsx
agent-pane.new-chat-composer/folder-menu Apple System Colors unchanged 0% own FolderPopover.tsx
agent-pane.new-chat-composer/choose-folder Apple System Colors Light unchanged 0% own FolderPopover.tsx
agent-pane.new-chat-composer/choose-folder Apple System Colors unchanged 0% own FolderPopover.tsx
agent-pane.new-chat-composer/first-send Apple System Colors changed 0.0303% own FolderPopover.tsx
agent-pane.new-chat-composer/first-send Apple System Colors Light changed 0.026% own FolderPopover.tsx
agent-pane.new-chat-composer/started Apple System Colors Light unchanged 0% own FolderPopover.tsx
agent-pane.new-chat-composer/started Apple System Colors unchanged 0% own FolderPopover.tsx

Pick other states with a Gallery: entry.id, entry.id/variant line in the PR body.

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

Copy link
Copy Markdown
Collaborator Author

Bead cx-aagqv5 created for this PR by the cmux coordinator.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

@blacksmith-sh

blacksmith-sh Bot commented Oct 28, 2026

Copy link
Copy Markdown

Found 5 test failures on Blacksmith runners:

Failures

Test View Logs
build_only must be a conjunctive exclusion on the helper, signing, and publication jobs
, and must not gate the unsigned app build/
build_only must be a conjunctive exclusion on the helper, signing, and publication jobs
, and must not gate the unsigned app build
View Logs
nightly.yml must derive the embedded key and sign every appcast through the helper/
nightly.yml must derive the embedded key and sign every appcast through the helper
View Logs
test_prepare_runs_on_linux_and_executes_no_mach_o (main.NightlyPooledRoutingTests.t
est_prepare_runs_on_linux_and_executes_no_mach_o)/
test_prepare_runs_on_linux_and_executes_no_mach_o (main.NightlyPooledRoutingTests.t
est_prepare_runs_on_linux_and_executes_no_mach_o)
View Logs
test_the_next_feed_keeps_its_newest_nightly_item_before_it_goes_live (main.Workflow
Tests.test_the_next_feed_keeps_its_newest_nightly_item_before_it_goes_live)/
test_the_next_feed_keeps_its_newest_nightly_item_before_it_goes_live (main.Workflow
Tests.test_the_next_feed_keeps_its_newest_nightly_item_before_it_goes_live)
View Logs
test_the_nightly_is_covered (main.NightlyStepCoverageTests.test_the_nightly_is_cove
red)/
test_the_nightly_is_covered (main.NightlyStepCoverageTests.test_the_nightly_is_cove
red)
View Logs

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

@teamleaderleo
teamleaderleo merged commit 0339b44 into feat-cmux-next Oct 28, 2026
185 of 199 checks passed
@teamleaderleo
teamleaderleo deleted the lane/nx-newtab-headline-cls branch October 28, 2026 11:33
@github-actions

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40682236069 at 8114288 failed: cmux-next generated files.
Those jobs last passed at ed7d5da. This pull request is one of 3 merged since: #26823, #26850, #26817.
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.

@github-actions

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40681979402 at d6c40eb failed: cmux-next checks (god files, concurrency, crash safety, l10n), cmux-next generated files.
Those jobs last passed at ed7d5da. This pull request is one of 3 merged since: #26823, #26850, #26817.
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.

@github-actions

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40681192502 at 3da6f43 failed: cmux-next checks (god files, concurrency, crash safety, l10n), cmux-next generated files.
Those jobs last passed at 52314b8. This pull request is one of 2 merged since: #26823, #26850.
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.

@github-actions

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40680946738 at 0339b44 failed: cmux-next checks (god files, concurrency, crash safety, l10n), cmux-next generated files.
Those jobs last passed at 52314b8. This pull request is one of 2 merged since: #26823, #26850.
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.

@github-actions

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40683834325 at 2645001 failed: cmux-next checks (god files, concurrency, crash safety, l10n), cmux-next generated files.
Those jobs last passed at 52314b8. This pull request is one of 3 merged since: #26823, #26850, #26817.
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.

@github-actions

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40683016589 at 9fbc12e failed: cmux-next checks (god files, concurrency, crash safety, l10n), cmux-next generated files.
Those jobs last passed at 52314b8. This pull request is one of 3 merged since: #26823, #26850, #26817.
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.

@github-actions

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40686413651 at a0c8bdb failed: cmux-next checks (god files, concurrency, crash safety, l10n), cmux-next generated files.
Those jobs last passed at 7f18564. This pull request is one of 2 merged since: #26850, #26817.
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.

@github-actions

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40684373512 at 42bbb37 failed: cmux-next checks (god files, concurrency, crash safety, l10n), cmux-next generated files.
Those jobs last passed at 7f18564. This pull request is one of 2 merged since: #26850, #26817.
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.

@github-actions

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40684174353 at 442849d failed: cmux-next checks (god files, concurrency, crash safety, l10n), cmux-next generated files.
Those jobs last passed at 7f18564. This pull request is one of 2 merged since: #26850, #26817.
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.

@github-actions

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40684605734 at 1048c0f failed: cmux-next generated files.
Those jobs last passed at 7f18564. This pull request is one of 2 merged since: #26850, #26817.
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.

@github-actions

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40684922462 at 28d9a7d failed: cmux-next checks (god files, concurrency, crash safety, l10n), cmux-next generated files.
Those jobs last passed at 7f18564. This pull request is one of 2 merged since: #26850, #26817.
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.

@github-actions

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40686199378 at c02ae48 failed: cmux-next Release compile (fleet fast check), cmux-next generated files.
Those jobs last passed at 7f18564. This pull request is one of 2 merged since: #26850, #26817.
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.

@github-actions

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40688911044 at 52bbe91 failed: cmux-next checks (god files, concurrency, crash safety, l10n), cmux-next generated files.
Those jobs last passed at 7f18564. This pull request is one of 3 merged since: #26850, #26817, #26840.
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.

@github-actions

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40690021866 at 1e8fb3c failed: cmux-next checks (god files, concurrency, crash safety, l10n), cmux-next generated files.
Those jobs last passed at 7f18564. This pull request is one of 4 merged since: #26850, #26817, #26840, #26852.
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.

lawrencecchen added a commit that referenced this pull request Oct 28, 2026
…eading token

#26850 kept the chooser row's room after a pick with a min-height built
from --text-heading--line-height (26px), but Hero's question sits on a
28px line, so picking a project shrank the headline 2px and moved it
(new-tab-headline-selection-cls). One --nt-headline-line now sets both the
question's line and the reserved height, per look.
@github-actions

github-actions Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

lawrencecchen added a commit that referenced this pull request Oct 28, 2026
…ner frame timing

new-tab-gallery-reached graded steps itself: it tolerated only the
project pick's layout shift and failed any other problem, so a 60-100 ms
frame on a busy runner failed it on every push (the rule other play tests
follow since cx-mfkky is that runner timing never fails a play). The pick
now keeps CLS 0 (#26850 and the headline line fix), so the shift tolerance
is gone too: playFailures fails a thrown play, a moved anchor or any shift.

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 9e11b1ce Deployed Oct 28, 2026 by teamleaderleo via cmux-tui tree preflight #71526
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