Skip to content

composer: keep Fast mode in the picker - #26555

Merged
teamleaderleo merged 9 commits into
feat-cmux-nextfrom
lane/nx-picker-fast-toggle
Oct 28, 2026
Merged

teamleaderleo merged 9 commits into
feat-cmux-nextfrom
lane/nx-picker-fast-toggle

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

What changed

Leo asked for Fast mode to be tucked into the model picker. The compact picker and full picker now use the harness-reported Fast mode config option for every harness, including Codex. The separate lightning control is gone from chat and New Tab, while the native config id, on/off values, and current default remain unchanged.

“we just want to have that toggle inside the model picker” — Leo, 2026-10-28

Scope

  • Reuses the existing Fast mode checkbox row after Account in QuickModelMenu.
  • Keeps the full ModelPicker Fast mode row in the same surface.
  • Removes the separate speed bolt rendering and its speed prop path.
  • Takes back cmux NEXT composer: capability-driven Fast and work-on New Tab #24631: Leo explicitly asked to tuck Fast mode inside the model picker and remove the separate lightning control; this replaces only that PR's adjacent Codex bolt, while keeping its capability-driven New Tab behavior.
  • Scopes remembered higher Fast tiers to the active chat, harness and option, so a newly selected chat does not inherit a previous chat's speed.
  • Updates the Codex gallery state and narrow layout note to assert no bolt and a menu toggle.
  • The New Tab path uses the same QuickModelMenu through ComposerPickers; no separate behavior or default was introduced.

Gallery variants

The composer gallery covers Claude and Codex Fast mode states, off and on, in chat and New Tab. The Codex variant now captures the before/after behavior: the model picker contains the toggle and the composer row has no lightning control.

Before and after

Actual React gallery captures, rendered on gcp-agent-lane-1 with Chromium at the same viewport per pair. Before is feat-cmux-next c30fa03db4b0f4c3da53d7c52e7af9172a872249; after is the reviewed PR head ffb90c3e667e95209dc1150cd2e311c9892ea539. The chat pair uses agent-pane.composer-pickers#model-menu at 640 × 560 CSS px; New Tab uses agent-pane.new-tab#model-picker-open at 760 × 560 CSS px. Both are gallery fixtures, not native fleet screenshots.

Surface and theme Before After
Codex chat, dark Before: separate Fast bolt beside model After: Fast toggle inside model menu
Codex chat, light Before: separate Fast bolt beside model After: Fast toggle inside model menu
New Tab, dark Before: New Tab model picker without Fast row After: New Tab model picker with Fast row
New Tab, light Before: New Tab model picker without Fast row After: New Tab model picker with Fast row

Performance

No perf numbers: This changes the placement and state of a configuration control; it does not change runtime performance.

Validation

  • bun test src/agent-session/acpmux/FastModeState.test.ts test/composer-fast-toggle.test.tsx src/agent-session/acpmux/QuickModelMenu.test.tsx src/agent-session/acpmux/EffortPicker.test.tsx (21 pass, 162 expectations)
  • Mounted composer chat-switch regression was red before the session-scoped memory fix and green after it: chat B chooses its first Fast tier, not chat A's remembered ultrafast tier.
  • CMUX_BROWSER_TESTS=1 bun test test/gallery-agent-pane-entries.test.ts --test-name-pattern="composer-pickers#fast-mode" (pass)
  • Targeted gallery health: agent-pane.composer#reasoning-codex failed at the earlier head due to a static-fixture assertion and now passes. agent-pane.composer#file-not-attached fails on both this head and current base c30fa03. Five nearby model/narrow/headline states also fail identically on that base.
  • vp fmt --check, vp lint, vp check --no-fmt --no-lint, python3 scripts/cmux-next/prepush-gate.py (pass)

Review (Astra independent, xhigh): SHIP at ffb90c3.

agent-identity footer
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 ffb90c3: 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=pr26555 -f ref=lane/nx-picker-fast-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 ffb90c3e66 (run 40649297503 attempt 1): 4 code, 1 unknown.

Job Verdict Why
web / react-apps-base-check (2) code a web test failed
web / react-apps-base-check (4) code a web test failed
web / react-apps-base-check (1) code a web test failed
web / react-apps-base-check (3) 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-dock-gutters.test.ts chromium > the gutter beside every part of the stack scrolls the transcript, and the part keeps the ...: failed (job)
  • seen on other PRs agent-pane-dock-gutters.test.ts webkit > the gutter beside every part of the stack scrolls the transcript, and the part keeps the po...: failed (job)
  • seen on other PRs agent-pane-queue-steer.test.ts queued and steering prompts > the queue takes its own place in the stack: nothing is cut off or draw...: failed (job)
  • seen on other PRs composer-edges.test.ts composer card: appearance.borders = none draws no edge: failed (job)
  • seen on other PRs composer-edges.test.ts composer card: one hairline edge by default: failed (job)
  • seen on other PRs composer-foot-pill-inset.test.ts the row's padding is counted from the inset, so only the pill grows, not the text's place: failed (job)
  • seen on other PRs composer-foot-pill-inset.test.ts the context ring uses one compact control size in the main and quiet rows: failed (job)
  • seen on other PRs composer-footer-plain.test.ts at 760 px (light): on, plain text at rest, same labels, no overlap: 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-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 (2): (fail) chromium > the gutter beside every part of the stack scrolls the transcript, and the part keeps the pointer [8412.86ms]
web / react-apps-base-check (4): (fail) no orange or system accent and no opaque glass on the gallery stages [732255.34ms]
web / react-apps-base-check (1): (fail) only page.css imports the page's sheets [28.66ms]
web / react-apps-base-check (3): (fail) the summary card lists the chat's background tasks: running ones first, the finished folded [936.73ms]

Not re-run automatically: web / react-apps-base-check (2), web / react-apps-base-check (4), web / react-apps-base-check (1), web / react-apps-base-check (3), 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 59d518f; does not block
red: web / react-apps-base-check (1); no finished base run on 59d518f to compare; do not merge until green; see lane-rules
red: web / react-apps-base-check (2); no finished base run on 59d518f to compare; do not merge until green; see lane-rules
red: web / react-apps-base-check (3); no finished base run on 59d518f to compare; do not merge until green; see lane-rules
red: web / react-apps-base-check (4); no finished base run on 59d518f to compare; do not merge until green; see lane-rules
red: web / react-apps-check; base red: the same failure on the base 59d518f; does not block

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

gh run download 40649297331 -R manaflow-ai/cmux -n gallery-advisory-26555-ffb90c3e667e95209dc1150cd2e311c9892ea539 (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 changed 0.576% own ComposerPickers.gallery.tsx
agent-pane.composer-pickers/closed Apple System Colors changed 0.553% own ComposerPickers.gallery.tsx
agent-pane.composer-pickers/pill-rail Apple System Colors Light changed 0.576% own ComposerPickers.gallery.tsx
agent-pane.composer-pickers/pill-rail Apple System Colors changed 0.553% own ComposerPickers.gallery.tsx
agent-pane.composer-pickers/model-menu Apple System Colors Light changed 0.546% own ComposerPickers.gallery.tsx
agent-pane.composer-pickers/model-menu Apple System Colors changed 0.542% own ComposerPickers.gallery.tsx
agent-pane.composer-pickers/model-more Apple System Colors Light changed 0.546% own ComposerPickers.gallery.tsx
agent-pane.composer-pickers/model-more Apple System Colors changed 0.542% own ComposerPickers.gallery.tsx
agent-pane.composer-pickers/model-focus Apple System Colors Light changed 0.576% own ComposerPickers.gallery.tsx
agent-pane.composer-pickers/model-focus Apple System Colors changed 0.553% own ComposerPickers.gallery.tsx
agent-pane.composer-pickers/model-press-drag-release Apple System Colors Light changed 0.576% own ComposerPickers.gallery.tsx
agent-pane.composer-pickers/model-press-drag-release Apple System Colors changed 0.553% own ComposerPickers.gallery.tsx
agent-pane.composer-pickers/effort-menu Apple System Colors Light changed 0% own ComposerPickers.gallery.tsx
agent-pane.composer-pickers/effort-menu Apple System Colors changed 0% own ComposerPickers.gallery.tsx
agent-pane.composer-pickers/effort-focus Apple System Colors Light changed 0.576% own ComposerPickers.gallery.tsx
agent-pane.composer-pickers/effort-focus Apple System Colors changed 0.553% own ComposerPickers.gallery.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-c5w0yd created for this PR by the cmux coordinator.

@blacksmith-sh

blacksmith-sh Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Found 128 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
src/pages/settings/layout.test.ts/layout.test View Logs
src/pages/settings/layout.test.ts/layout.test View Logs
test/agent-pane-attach-huge-files.test.ts/agent-pane-attach-huge-files.test View Logs
test/agent-pane-attach-huge-files.test.ts/agent-pane-attach-huge-files.test View Logs
test/agent-pane-background-tasks.test.ts/agent-pane-background-tasks.test View Logs
test/agent-pane-background-tasks.test.ts/agent-pane-background-tasks.test View Logs
test/agent-pane-chat-unavailable.test.ts/agent-pane-chat-unavailable.test View Logs
test/agent-pane-chat-unavailable.test.ts/agent-pane-chat-unavailable.test View Logs

...and 118 more test failures. View all on Blacksmith: run 40649297503, run 40649297551

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

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high, next-review): BLOCK at b75ad04

  • webviews/src/agent-session/acpmux/ComposerPickers.tsx:904–906: Removing the tier-cycling bolt makes Ultrafast unreachable for an option offering standard, fast, and ultrafast. Starting at standard, the replacement only toggles fast ↔ standard; the full picker uses the same logic. Remembering a previously active tier cannot select it initially. Preserve tier selection inside the picker.

@teamleaderleo
teamleaderleo merged commit eaffd0e into feat-cmux-next Oct 28, 2026
176 of 189 checks passed
@teamleaderleo
teamleaderleo deleted the lane/nx-picker-fast-toggle branch October 28, 2026 08:05
@github-actions

github-actions Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

teamleaderleo added a commit that referenced this pull request Nov 1, 2026
…aude included (#31287)

* cmux NEXT composer test: a bolt beside the model while Fast mode is on, Claude included (failing)

Leo-ask: ask-6071cce53e

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

* cmux NEXT composer: a bolt beside the model while Fast mode is on, every harness

Leo 2026-10-23: "even on, I think Claude mode, you just want the lightning bolt to be right beside the model".
#24151 drew it for Codex only and #26555 dropped it with the inline toggle; the toggle stays the menu's
Fast mode row, the chip only marks the state.

red: bun test test/composer-fast-toggle.test.tsx on base: 2 fail; green here: 8 pass.

Leo-ask: ask-6071cce53e

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

---------

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

This branch was previously deployed

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