Skip to content

Fix the combined model picker's harness list and sizing - #25796

Merged
teamleaderleo merged 5 commits into
feat-cmux-nextfrom
lane/nx-model-picker-toggle
Oct 27, 2026
Merged

teamleaderleo merged 5 commits into
feat-cmux-nextfrom
lane/nx-model-picker-toggle

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 27, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

The compact model menu can gain peer-machine harness rows and a blank block below Fast mode. Keep the bottom chip, list each current-machine harness once in a horizontal strip, size the menu to its visible content and window, and keep its opening side as tabs shrink. Fast mode is now a visible switch.

Leo's requirement (relayed): “harness list current machine only, each harness once; machines stay in machine chip.” Launch configurations such as claude-sr now live under Profile; Account keeps the existing signed-in subscription/API-key route choices. Before a session exists, the account API is unavailable, so New Tab offers profiles without inventing account identities.

Cause and related work

At original reproduction base 80818cb07d6b8cab7dd0622f39c5259d9bf72956; the rebased PR base is c5dd46c48719bb4403ec517e76b32a8c85da62ed, modelCatalog.ts:12,43–45 explicitly promotes probe-only IDs, including peers. direct.ts:5573–5579 merges local harness names with those model probes. The picker now admits only named local harnesses and ignores peer probes.

The vertical rail introduced by c61789058e363 stretches the short model list: modelPicker.css:265,308,327–332. The downward Claude browser reproduction leaves 131px after Fast with ten harnesses. Downward New Tab already has holdHeight=false on this base; its gap comes from the rail. Chat also reserves hidden tallest-tab rows. Both sizing paths are replaced here with content sizing and a strip at the chip-facing edge. The separate full picker's d9ce210e height floor is not involved.

I read the full #24194 diff at 724ea2ddd590960b5131bd415e2557a94234b433. This PR supersedes its tallest-tab/spacer sizing approach for the compact picker while retaining its no-jump intent through fixed opening side and chip-facing harness controls. No changes were made to #24194 or Lucas's branch. Requested lucasr1b review.

Takeback rationale

Takes back #24224: replace its bare Fast Off/On state text with the owner-requested accessible switch; the underlying Fast mode behavior and coverage remain.

Testing

On GCP gcp-agent-lane-1, worktree /home/cmux/Projects/checkouts/cmux/lane--nx-model-picker-toggle:

  • Red first: peer probes add extra harnesses; Fast says Fast modeOff; downward Claude leaves 131px; midpoint tall→short tabs change top→bottom. The repaired discriminators pass.
  • 44 focused tests pass across the layout, quick menu, local catalog, New Tab default, and model-pick suites. Seven are real Chromium tests covering downward/upward/flipped/midpoint placement, narrow windows, keyboard harness visibility, fade reset, Profile/Account separation and Fast.
  • All four production suites pass in separate Bun processes: compact 37, short-list 8, started-chat-fork 10, composer-fast-toggle 9 (64 total).
  • scripts/web-lint.sh --base c5dd46c48719bb4403ec517e76b32a8c85da62ed --new-only and the exact-head prepush gate pass. Two formatter findings are unchanged on the base.
  • New picker.profile text has 21 nonempty translations. The broad localization audit is blocked by existing catalog parity debt.
  • Fresh independent Codex gpt-6-astra xhigh review: SHIP at 9ce57d085312549d6e1386c9e00c4104f7f71116; both initial review blockers repaired and re-reviewed.

Observed / Not run

Real Chromium renders and records the shipped component through its existing gallery fixture; five final variants pass with no page errors. This is browser evidence, not a native app capture. Native builds/tests were not run locally.

A combined four-file JSDOM invocation fails the Effort-slider focus assertion. Restoring the exact base QuickModelMenu reproduces that same focus failure; each of the four suites passes in its own process.

Changelog

Fixed: The model picker shows local harnesses once, distinguishes profiles from accounts, and fits its content without jumping across the composer chip.

Proof

Matched cmux-design-references/apps/claude/live/model-picker-open.png: compact model/effort rows, quiet chip and a proper Fast switch. Before uses base picker source; after uses exact head 9ce57d085312549d6e1386c9e00c4104f7f71116. Gallery states include downward Claude, ten-harness stress, combined chat, Fast on, signed out, Profile and Account submenus. The shared gallery fixture supplies deterministic route identities; pre-session production API availability remains as described above.

Media upload was attempted through `scripts/pr-media.py`; the broker accepted the plan but did not return a write receipt before the bounded wait. Exact-head screenshots and recordings are retained under `/tmp/nx-picker-evidence` for the owner to attach through the media helper.\n\n

Agent session: agent session

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

Copy link
Copy Markdown
Collaborator Author

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

@teamleaderleo
teamleaderleo force-pushed the lane/nx-model-picker-toggle branch from 6aab090 to dff2ef3 Compare October 27, 2026 00:36
@github-actions

github-actions Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

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

Review dff2ef3: 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=pr25796 -f ref=lane/nx-model-picker-toggle -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 9ce57d0853 (run 40429038927 attempt 1): 4 code, 1 unknown.

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

Failures:

  • seen on other PRs agent-pane-background-tasks.test.ts the summary card lists the chat's background tasks: running ones first, the finished folded: failed (job)
  • seen on other PRs agent-pane-hairline-focus.test.ts composer at 1x: focus is the resting hairline a step brighter, no ring: failed (job)
  • seen on other PRs agent-pane-hairline-focus.test.ts newtab at 1x: focus is the resting hairline a step brighter, no ring: failed (job)
  • seen on other PRs agent-pane-hairline-focus.test.ts composer at 2x: focus is the resting hairline a step brighter, no ring: failed (job)
  • seen on other PRs agent-pane-hairline-focus.test.ts newtab at 2x: focus is the resting hairline a step brighter, no ring: failed (job)
  • seen on other PRs agent-pane-hairline-focus.test.ts under Increase Contrast a focused edge keeps the resting edge, never a dimmer one: failed (job)
  • seen on other PRs agent-pane-hairline-focus.test.ts keyboard focus changes what a solid Send, Stop, the prompt editor's Send and a plain button paint; s...: failed (job)
  • seen on other PRs agent-pane-jump-latest-motion.test.ts webkit: a reply streaming in during Jump to latest's glide is followed to its latest row: failed (job)
  • seen on other PRs accent-glass-invariants.test.ts no orange or system accent and no opaque glass on 2229 gallery stages: failed (job)
  • seen on other PRs agent-pane-agents-pill.test.ts by default the running agents sit in the tray above the composer, not in the transcript: failed (job)
  • ... 22 more in the job logs
Matched log lines
web / react-apps-base-check (4): (fail) the summary card lists the chat's background tasks: running ones first, the finished folded [937.59ms]
web / react-apps-base-check (2): (fail) no orange or system accent and no opaque glass on 2229 gallery stages [447077.38ms]
web / react-apps-base-check (3): (fail) every block in the chat column starts on the column's left edge [9029.91ms]
web / react-apps-base-check (1): (fail) a chat on an SSH machine > counts its running turn from the prompt and offers no machine switch mid-chat [30968.86ms]

Not re-run automatically: web / react-apps-base-check (4), web / react-apps-base-check (2), web / react-apps-base-check (3), web / react-apps-base-check (1), 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: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on c5dd46c to compare; do not merge until green; see lane-rules
red: web / Web status; NEW: green on the base c5dd46c; do not merge until green; see lane-rules
red: web / react-apps-base-check (1); no finished base run on c5dd46c to compare; do not merge until green; see lane-rules
red: web / react-apps-base-check (2); no finished base run on c5dd46c to compare; do not merge until green; see lane-rules
red: web / react-apps-base-check (3); no finished base run on c5dd46c to compare; do not merge until green; see lane-rules
red: web / react-apps-base-check (4); no finished base run on c5dd46c to compare; do not merge until green; see lane-rules
red: web / react-apps-check; no finished base run on c5dd46c to compare; do not merge until green; see lane-rules

Tour of 9ce57d0853 (run): no media.

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

gh run download 40427501064 -R manaflow-ai/cmux -n gallery-advisory-25796-dff2ef3e919e6a5fd09b15f3e19de3dec6686874 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.composer/new-chat Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer/new-chat Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer/side-session Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer/side-session Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer/new-chat-suggest-open Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer/new-chat-suggest-open Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer/new-chat-suggest-failing Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer/new-chat-suggest-failing Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer/new-chat-suggest-draft Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer/new-chat-suggest-draft Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer/new-chat-reasoning Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer/new-chat-reasoning Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer/agent-home Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer/agent-home Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer/agent-home-path Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer/agent-home-path Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer-pickers/closed Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer-pickers/closed Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer-pickers/pill-rail Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer-pickers/pill-rail Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer-pickers/model-menu Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer-pickers/model-menu Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer-pickers/model-more Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer-pickers/model-more Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer-pickers/model-focus Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer-pickers/model-focus Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer-pickers/model-press-drag-release Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer-pickers/model-press-drag-release Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer-pickers/effort-menu Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer-pickers/effort-menu Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer-pickers/effort-focus Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer-pickers/effort-focus Apple System Colors unchanged 0% own ComposerPickers.tsx

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

@blacksmith-sh

blacksmith-sh Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Found 8 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmp6o57_fsh/summary-missing.json (live):/summary-missing.json (live): View Logs
/tmp/tmp8q2xh_g5/summary-fail.json (live):/summary-fail.json (live): View Logs
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows/
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows
View Logs
[new_workspaces] the window draws no frames/[new_workspaces] the window draws no frames View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames 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
test_the_repository_highlights_validate (main.DigestTests.test_the_repository_highl
ights_validate)/
test_the_repository_highlights_validate (main.DigestTests.test_the_repository_highl
ights_validate)
View Logs

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

@teamleaderleo
teamleaderleo force-pushed the lane/nx-model-picker-toggle branch from dff2ef3 to 9ce57d0 Compare October 27, 2026 00:51
@cursor

cursor Bot commented Oct 27, 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.

@teamleaderleo
teamleaderleo merged commit e6525bd into feat-cmux-next Oct 27, 2026
137 of 147 checks passed
@teamleaderleo
teamleaderleo deleted the lane/nx-model-picker-toggle branch October 27, 2026 00:58
@github-actions

github-actions Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

lawrencecchen added a commit that referenced this pull request Oct 28, 2026
#25796 and #26071 made the model chip open the combined picker, 480px wide
and centred on the chip, so it lies over Steer, the trash can and the more
button alike. The model/more open-chip case could no longer press an
uncovered control. Replace it with a check that the picker covers every
action and a press there stays in the picker; the access-menu cases keep
covering the menuPressGuard regression.
lawrencecchen added a commit that referenced this pull request Oct 28, 2026
…ws (#25796, #26071)

#25796 made the rail tabs 6px rounded rows and #26071 gave each its harness
name, so the 50% round icon check no longer described the product. The test now
checks each tab shows its whole name on a rounded (not square) wash, and the
selected tab keeps its wash.
teamleaderleo added a commit that referenced this pull request Nov 1, 2026
teamleaderleo added a commit that referenced this pull request Nov 1, 2026
…ts rows), one tab per harness pinned (#30194)

* cmux NEXT model picker: as wide as the rows it shows, effort and keys close to the name; gallery widths and Leo's routes rail

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

* Compact looks drop the rail's fixed 480px; fit sizes to the open tab, stable to every tab

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

* Width test: compare the compact band with the fixed menu's

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

* Default to the stable compact width: a tab switch keeps the menu's width (#25796)

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

* A compact menu keeps its widest width while open, so a tab switch never narrows it

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

* Hold the compact width with a ResizeObserver on the rail's popup

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

* vp fmt

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

* Default to fit: as wide as the open tab's rows, held while open

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

* The held width never passes the pane's available width

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

---------

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

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 9ce57d08 Deployed Oct 27, 2026 by teamleaderleo via wait for same-key tree publisher #61221
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.

2 participants