Skip to content

cmux NEXT composer: capability-driven Fast and work-on New Tab - #24631

Merged
teamleaderleo merged 16 commits into
feat-cmux-nextfrom
leo1023-ui
Oct 24, 2026
Merged

teamleaderleo merged 16 commits into
feat-cmux-nextfrom
leo1023-ui

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

The composer’s Fast affordance follows model capability instead of a harness-name guess. Models marked as a free, easy inline toggle show a lightning bolt directly beside the model name in the picker; paid or otherwise non-toggleable Fast stays tucked inside the model menu. Claude therefore has no bolt while Codex can show one. The New Tab Minimal default is the composer alone: no greeting or heading is shown until the user opts into the work-on question and other widgets.

Leo’s direction: “the bolt sits beside the model name only for harnesses where fast is a free, easy toggle (Codex). For Claude (paid fast), and any harness where fast isn't freely toggleable, keep fast tucked inside the model menu; show no bolt on the button.” He later clarified: “Default new tab: no heading text at all ... Add opt-in widgets above the composer, each its own toggle, all off by default.”

The new-tab customize menu and Settings expose independent toggles for the work-on heading, clock, stopwatch, original warm time-of-day lines, and a bundled public-domain quote. Gallery variants cover all widgets off and all on, plus Codex-above, Claude-below, and current-fixed layout comparisons.

Coordination

Validation

  • git diff --check
  • Capability fixtures cover Codex inline Fast and Claude menu-only Fast.
  • New-tab tests cover all widgets off, independent opt-ins, Settings defaults, and all-on/all-off gallery entries.
  • Browser/unit execution is pending the checkout’s missing @base-ui/utils/useIsoLayoutEffect dependency.

Changelog

Made Fast placement capability-driven and added opt-in New Tab widgets with a quiet composer-only default.

agent-identity footer
Agent session: big-red

Gallery: agent-pane.new-tab/widgets-all-off, agent-pane.new-tab/widgets-all-on, agent-pane.new-tab/layout-codex-tabs-above, agent-pane.composer/reasoning-codex

@cursor

cursor Bot commented Oct 23, 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 added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 23, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

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

@cursor

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

@cursor

cursor Bot commented Oct 23, 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 23, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 272d73a: 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=pr24631 -f ref=leo1023-ui -f platform=macos -f backend_mode=local

Gallery before/after for 272d73a: 4 states rendered, 8 images differ (picked by the Gallery: line in the PR body). Images are in the run's artifact, not on this public PR.

gh run download 40047934516 -R manaflow-ai/cmux -n gallery-advisory-24631-272d73a519dbe751092abbc4c2ba0f138ace2d47 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.new-tab/widgets-all-off Apple System Colors Light new 0% pr-body
agent-pane.new-tab/widgets-all-off Apple System Colors new 0% pr-body
agent-pane.new-tab/widgets-all-on Apple System Colors Light new 0% pr-body
agent-pane.new-tab/widgets-all-on Apple System Colors new 0% pr-body
agent-pane.new-tab/layout-codex-tabs-above Apple System Colors Light new 0% pr-body
agent-pane.new-tab/layout-codex-tabs-above Apple System Colors new 0% pr-body
agent-pane.composer/reasoning-codex Apple System Colors Light changed 1.57% pr-body
agent-pane.composer/reasoning-codex Apple System Colors changed 0.509% pr-body

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

Probably yours: docs-shortcuts.test.ts, docs-shortcuts.test.ts, model-catalog.test.ts fails here but not on main's latest full suite. Seen on other PRs too (likely flaky): categories.test.ts, categories.test.ts, categories.test.ts and 5 more.

CI failed on 272d73a519 (run 40047934541 attempt 1): 3 code, 1 unknown.

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

Failures:

  • new in this PR docs-shortcuts.test.ts keyboard shortcuts docs > the web/data copy is fresh against the catalog export and string catalogs: failed (job)
  • new in this PR docs-shortcuts.test.ts keyboard shortcuts docs > every catalog default shortcut is on the page with the same keys, and noth...: failed (job)
  • seen on other PRs categories.test.ts the categories are the approved ones, in order: failed (job)
  • seen on other PRs categories.test.ts a route to the Development category opens the default category outside DEV builds: failed (job)
  • seen on other PRs categories.test.ts the Development category shows only in DEV builds: failed (job)
  • seen on other PRs devices.test.tsx the card shows this Mac with its badge and fingerprint and reads again when it opens: failed (job)
  • seen on other PRs devices.test.tsx other devices show presence and an access picker that sends setAccess: failed (job)
  • seen on other PRs devices.test.tsx Rename… opens a form that sends rename with the new name: failed (job)
  • seen on other PRs devices.test.tsx Remove… asks for confirmation before it sends remove: failed (job)
  • seen on other PRs devices.test.tsx the sharing switch sends setSharing; a permission's button sends openPermission: failed (job)
  • ... 1 more in the job logs

A web test can import code this PR changes without being one of its files: python3 scripts/ci/web_test_verdict.py --pr 24631 --file web/tests/docs-shortcuts.test.ts checks its import graph (on Linux, in a sandbox) and its failures on other branches.

Matched log lines
web / Web tests (1/4): (fail) keyboard shortcuts docs > the web/data copy is fresh against the catalog export and string catalogs [5.56ms]
web / react-apps-check (2): (fail) the categories are the approved ones, in order [0.35ms]
web / Web tests (4/4): (fail) the checked-in catalog > acpmux bundles the same catalog [0.47ms]

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

Tour of 272d73a519 (run): no media. The tour job failed before the tour ran (build or setup); the run log has the output. Both apps run cmux-tui from be5d73b (tree 3845eaf717aa): the merge base's own tree 13e3b8355a6f was not published yet.

@blacksmith-sh

blacksmith-sh Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Found 77 test failures on Blacksmith runners:

Failures

Test View Logs
---/--- View Logs
---/--- View Logs
---/--- View Logs
---/--- View Logs
---/--- View Logs
---/--- View Logs
---/--- View Logs
---/--- View Logs
---/--- View Logs
---/--- View Logs

...and 67 more test failures. View all on Blacksmith: run 40047934541, run 40047934556, run 40047934523

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

@cursor

cursor Bot commented Oct 24, 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 left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

SHIP — exact head 272d73a.

Independent Codex review confirms capability-driven Fast placement, New Tab widget defaults/settings, all-locale generated strings, and optional-widget CSS. No P1/P2/P3 findings. Fleet app compile receipt b228b69108e4de7864f2bcca completed without compiler errors; controller reported no target list on this Linux compile lane.

@teamleaderleo
teamleaderleo merged commit 78d7472 into feat-cmux-next Oct 24, 2026
156 of 177 checks passed
@teamleaderleo
teamleaderleo deleted the leo1023-ui branch October 24, 2026 01:37
@github-actions

github-actions Bot commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

lawrencecchen added a commit that referenced this pull request Oct 25, 2026
Each fails on the bare tip (full run at 2ee04b0; again alone at e869761, step 280e825d1b47e01c8df4b8ff).
Stale premises (the test follows the change's intent):
- IconFamilyAttributeTests: 5e7966c made folding finished thoughts the default; the test passes that default.
- ContextMenuStandardTests: #24707 (0bf7675) put Inspect Element in the tab bar's + menu.
- AcpmuxRefusedDaemonTests: #24795 (c7daff2) rewrote the refusal copy (no socket path; Quit that app; the
  holder-less refusal reconnects on its own) and left its own test on the old copy.
- AgentPaneTranscriptStepTests, AgentPageProviderEventsTests: since #24617 (4abd404) a new subscription's
  events go out a main-actor turn later; the tests wait for them (bounded by the suite time limit).
Real breaks (the code is fixed):
- ActionSurfaceParityTests: #24707 made the sidebar section menu 13 top-level rows (the limit is 12); its Inspect
  Element goes in the Options folder.
- TabSelectionActionsTests: Save and Close Tab (#23176) had a target reason for a menu row only, so the palette's run
  on a terminal tab was enabled and then refused; the reason now covers the untargeted run too.
- SettingsSchemaExportTests: #24631 (78d7472) added four New Tab widget settings (clock, timer, warm greeting,
  quote) without strings or an agent policy: their 8 strings in all 21 locales, and the agent may set them.
- NativeTooltipGuardTests: Mac Screen (ffc998b, 0372726) and No Color (c3bd2b2) drew raw tool tips: the
  No Color swatch uses themedToolTip, the toolbar's own helper is renamed setThemedHelp (it already set
  themedToolTip), the menu bar status item is marked native.
- WorkspaceNameSourceTests: #24627 (f8c226e) counted any renamed '~' as unnamed (nameRevision > 0); only the
  automatic namer's '~' is.
- AgentPaneMediaNoAutoActionTests: #24619 (5ff4b0c) resolved every image.load through the raster-only image
  roots, so a chat's own SVG or PDF was refused; non-raster files resolve in the chat's roots again.
- BrowserProfileLinkMenuTests: e01bdd4 gave menu symbols their natural size; a profile's symbol is centered in
  the 16 pt square again, so names line up.
- PhoneProcessRunner (passed alone, failed in the full run): a captured run ended before its stderr was read; it now
  waits for the end of stderr too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lawrencecchen added a commit that referenced this pull request Oct 25, 2026
Each fails on the bare tip (full run at 2ee04b0; again alone at e869761, step 280e825d1b47e01c8df4b8ff).
Stale premises (the test follows the change's intent):
- IconFamilyAttributeTests: 5e7966c made folding finished thoughts the default; the test passes that default.
- ContextMenuStandardTests: #24707 (0bf7675) put Inspect Element in the tab bar's + menu.
- AcpmuxRefusedDaemonTests: #24795 (c7daff2) rewrote the refusal copy (no socket path; Quit that app; the
  holder-less refusal reconnects on its own) and left its own test on the old copy.
- AgentPaneTranscriptStepTests, AgentPageProviderEventsTests: since #24617 (4abd404) a new subscription's
  events go out a main-actor turn later; the tests wait for them (bounded by the suite time limit).
Real breaks (the code is fixed):
- ActionSurfaceParityTests: #24707 made the sidebar section menu 13 top-level rows (the limit is 12); its Inspect
  Element goes in the Options folder.
- TabSelectionActionsTests: Save and Close Tab (#23176) had a target reason for a menu row only, so the palette's run
  on a terminal tab was enabled and then refused; the reason now covers the untargeted run too.
- SettingsSchemaExportTests: #24631 (78d7472) added four New Tab widget settings (clock, timer, warm greeting,
  quote) without strings or an agent policy: their 8 strings in all 21 locales, and the agent may set them.
- NativeTooltipGuardTests: Mac Screen (ffc998b, 0372726) and No Color (c3bd2b2) drew raw tool tips: the
  No Color swatch uses themedToolTip, the toolbar's own helper is renamed setThemedHelp (it already set
  themedToolTip), the menu bar status item is marked native.
- WorkspaceNameSourceTests: #24627 (f8c226e) counted any renamed '~' as unnamed (nameRevision > 0); only the
  automatic namer's '~' is.
- AgentPaneMediaNoAutoActionTests: #24619 (5ff4b0c) resolved every image.load through the raster-only image
  roots, so a chat's own SVG or PDF was refused; non-raster files resolve in the chat's roots again.
- BrowserProfileLinkMenuTests: e01bdd4 gave menu symbols their natural size; a profile's symbol is centered in
  the 16 pt square again, so names line up.
- PhoneProcessRunner (passed alone, failed in the full run): a captured run ended before its stderr was read; it now
  waits for the end of stderr too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Oct 25, 2026
`web/tests/model-catalog.test.ts` "the checked-in catalog > acpmux bundles the
same catalog" is red on `feat-cmux-next`: it asserts the two files are
byte-identical, and #24631 added `inlineFast: true` to the nine OpenAI models in
`web/data/model-catalog/snapshot.json` without the bundled copy. That is the
`CI / web / Web tests (4/4)` red on every PR that pulls the web lane in.

`web/tools/refresh-model-catalog-snapshot.ts` writes one body to both paths, so
the snapshot is the source of truth and the bundled copy is its copy; this is
`cp web/data/model-catalog/snapshot.json
cmux-tui/crates/acpmux/catalog/models-v1.json`, nothing else. The only
difference was those nine `inlineFast` flags, and `inlineFast` is read by the
composer's model picker in `webviews/`, not by acpmux, which serves the bytes:
offline and first-run acpmux now offers the same inline Fast toggle as the live
feed, which is what #24631 intended.

### Observed / Not run
Observed: `cmp` on the two files now reports no difference; the structural diff
before this commit was exactly nine `"inlineFast": true` lines under the
`openai` provider's models.
Not run: the web Bun suite (no `bun install` for `web/` on this host); CI's web
lane runs it on this PR.

Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a174e4-3868-7f51-8f3d-21b34ad270b2&host=huge-blue
teamleaderleo added a commit that referenced this pull request Oct 26, 2026
…xture, and acpmux's bundled catalog (#25180)

* docs(web): the cmux-next CLI and settings references are fresh again (base red)

`web/tests/next-docs.test.ts` is red on `feat-cmux-next`: the CLI and MCP
reference last matched the action catalog at cf81808, and the catalog has
moved many times since (`remote.openRemote`, `sidebar.item.toggleArchive` and
others), while the settings reference misses
`agentPane.display.environment.placement`. Nothing regenerates them on a base
push, so the `CI / web / Web tests` shards fail on every PR that pulls that lane
in, and `web/tests/docs-search-cache.test.ts` fails with them.

Written by `bun web/scripts/export-next-docs.ts`, the generator the test's own
`expect(buildCliReference(...)).toEqual(...)` compares against. No hand edits.

### Observed / Not run
Observed: at `origin/feat-cmux-next`, the generator rewrites both files to these
bytes, so both assertions' inputs were stale.
Not run: the web Bun suite itself (no `bun install` for `web/` on this host);
CI's web lane runs it on this PR.

Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a174e4-3868-7f51-8f3d-21b34ad270b2&host=huge-blue

* CI: the two cmux-next docs references join the generated-files baseline

`cmux-next no new generated files` errors on a PR that edits a tracked generated
file no "committed" generator and no baseline line covers, and both next-docs
references are exactly that: git tracks them (cf81808) and
generated-files.json has no entry for `bun web/scripts/export-next-docs.ts`.
So the regeneration this PR is, which is the only way to make
web/tests/next-docs.test.ts green, cannot pass that guard without the lines.

The baseline is defined as "the generated files git still tracks that no
committed generator covers", and the base tracks both, so this is the guard's
own door for them; its other two (a new committed export in generated_outputs.py,
a widened committed generator) are refused on purpose, because outputs may only
move out of git. The cutover that gitignores these and generates them with the
docs removes both lines again.

Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a174e4-3868-7f51-8f3d-21b34ad270b2&host=huge-blue

* test(web): the docs-search fixture links web/data, which the generator imports (base red)

`web/tests/docs-search-cache.test.ts` is red on `feat-cmux-next`: its fixture
symlinks `app`, `i18n`, `messages` and `node_modules` into a temp `web/` and runs
`tools/build-docs-search.mjs` there, but cf81808 gave that generator three
imports under `../data/next-docs/` (the generated CLI and settings references and
`pages`). The fixture cannot resolve them, so every build in the test dies with
"Cannot find module '../data/next-docs/cli-reference.generated.json'" before any
assertion runs, which is the `CI / web / Web tests (2/4)` and `(4/4)` red on every
PR that pulls the web lane in.

`data` joins the symlinked directories. It is read-only in the fixture, like the
other four; nothing in the test writes under it.

### Observed / Not run
Observed: the import list in web/tools/build-docs-search.mjs:15-17 against the
fixture's symlink list at web/tests/docs-search-cache.test.ts:55, and the CI log's
module-resolution failure naming exactly that path.
Not run: the test itself (no `bun install` for `web/` on this Linux host, and the
test needs pagefind from node_modules); CI's web lane runs it on this PR.

Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a174e4-3868-7f51-8f3d-21b34ad270b2&host=huge-blue

* model catalog: acpmux's bundled copy is the snapshot again (base red)

`web/tests/model-catalog.test.ts` "the checked-in catalog > acpmux bundles the
same catalog" is red on `feat-cmux-next`: it asserts the two files are
byte-identical, and #24631 added `inlineFast: true` to the nine OpenAI models in
`web/data/model-catalog/snapshot.json` without the bundled copy. That is the
`CI / web / Web tests (4/4)` red on every PR that pulls the web lane in.

`web/tools/refresh-model-catalog-snapshot.ts` writes one body to both paths, so
the snapshot is the source of truth and the bundled copy is its copy; this is
`cp web/data/model-catalog/snapshot.json
cmux-tui/crates/acpmux/catalog/models-v1.json`, nothing else. The only
difference was those nine `inlineFast` flags, and `inlineFast` is read by the
composer's model picker in `webviews/`, not by acpmux, which serves the bytes:
offline and first-run acpmux now offers the same inline Fast toggle as the live
feed, which is what #24631 intended.

### Observed / Not run
Observed: `cmp` on the two files now reports no difference; the structural diff
before this commit was exactly nine `"inlineFast": true` lines under the
`openai` provider's models.
Not run: the web Bun suite (no `bun install` for `web/` on this host); CI's web
lane runs it on this PR.

Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a174e4-3868-7f51-8f3d-21b34ad270b2&host=huge-blue

* docs(web): the settings reference picks up agentPane.attachmentView

The base merge added the setting; the generated reference follows the schema.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-24ce2bb1cc47fb95fa20

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
lawrencecchen added a commit that referenced this pull request Oct 28, 2026
#24631 made Add Widgets a disclosure whose role=menu list stayed in the DOM
while closed. The page's Escape handler stands down for any open menu, so
Escape never ended edit mode. The menu now renders only while open, a pick
closes it, and Escape closes it before it ends edit mode.

new-tab-widget-edit now drives the widget menu (show) instead of the old
{edit: add} button.

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 272d73a5 Deployed Oct 24, 2026 by teamleaderleo via namespace autofix #2235
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