Skip to content

follow-up: carry #24194 stable model menu fix - #24676

Merged
teamleaderleo merged 9 commits into
feat-cmux-nextfrom
codex/carry-lucas-24194
Oct 24, 2026
Merged

teamleaderleo merged 9 commits into
feat-cmux-nextfrom
codex/carry-lucas-24194

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

Carries Lucas Ribeiro’s #24194 model-menu stability improvement onto current feat-cmux-next. The follow-up preserves the compact menu height/width behavior and its tests while integrating the current base.

agent-identity footer
Agent session: big-red


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


Summary by cubic

Carries Lucas Ribeiro's #24194 fix onto feat-cmux-next so the compact model menu no longer shifts while open: the menu holds the tallest tab's height and widest tab's width for the whole opening, so switching provider tabs or typing a filter no longer moves the rail out from under the pointer.

  • A hidden spacer keeps the tallest tab's rows and separators, and a probe holds the widest tab's width.
  • Tab, filter, and backspace changes scroll the list back to the top.
  • The probe stays in sync with the drawn rows, keeping the account and fork rows intact.

Written for commit 7a13c11. Summary will update on new commits.

View guided diff Turn on auto-fix

…ider tabs

the menu opens above its chip, so a tab with more or fewer rows moved its top edge and the rail
tabs moved out from under the pointer. the list now holds the tallest tab's rows and separators
unseen in its grid cell, for the whole opening.

(cherry picked from commit b67f160)
Agent-Session: https://cmux.com/deeplink/agent?harness=codex&session=01a16b1f-a6cb-7430-97ab-4e969f2e0014&host=big-red
@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 7a13c11: 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=pr24676 -f ref=codex/carry-lucas-24194 -f platform=macos -f backend_mode=local

Gates only: only gate jobs failed; see the run.

CI failed on 7a13c11185 (run 40046164161 attempt 1): no failed job besides the gates.

Not re-run automatically: only gate jobs failed.

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 e4351b1 to compare; do not merge until green; see lane-rules
red: web / Web status; NEW: green on the base e4351b1; do not merge until green; see lane-rules

Stale: these images are of 7637a71; the head is now 7a13c11 and a new capture is running.

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

gh run download 40045024122 -R manaflow-ai/cmux -n gallery-advisory-24676-7637a71fff571200f2e0af57a924149ea30ef940 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.composer-pickers/closed Apple System Colors Light unchanged 0% own modelPicker.css
agent-pane.composer-pickers/closed Apple System Colors unchanged 0% own modelPicker.css
agent-pane.composer-pickers/pill-rail Apple System Colors Light unchanged 0% own modelPicker.css
agent-pane.composer-pickers/pill-rail Apple System Colors unchanged 0% own modelPicker.css
agent-pane.composer-pickers/model-menu Apple System Colors Light unchanged 0% own modelPicker.css
agent-pane.composer-pickers/model-menu Apple System Colors unchanged 0% own modelPicker.css
agent-pane.composer-pickers/model-more Apple System Colors Light unchanged 0% own modelPicker.css
agent-pane.composer-pickers/model-more Apple System Colors unchanged 0% own modelPicker.css
agent-pane.composer-pickers/model-focus Apple System Colors Light unchanged 0% own modelPicker.css
agent-pane.composer-pickers/model-focus Apple System Colors unchanged 0% own modelPicker.css
agent-pane.composer-pickers/model-press-drag-release Apple System Colors Light unchanged 0% own modelPicker.css
agent-pane.composer-pickers/model-press-drag-release Apple System Colors unchanged 0% own modelPicker.css
agent-pane.composer-pickers/effort-menu Apple System Colors Light unchanged 0% own modelPicker.css
agent-pane.composer-pickers/effort-menu Apple System Colors unchanged 0% own modelPicker.css
agent-pane.composer-pickers/effort-focus Apple System Colors Light unchanged 0% own modelPicker.css
agent-pane.composer-pickers/effort-focus Apple System Colors unchanged 0% own modelPicker.css
agent-pane.composer-row/claude-auto Apple System Colors Light unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/claude-auto Apple System Colors unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/long-model Apple System Colors Light unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/long-model Apple System Colors unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/leo-report Apple System Colors Light unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/leo-report Apple System Colors unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/granted Apple System Colors Light unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/granted Apple System Colors unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/fast-off Apple System Colors Light unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/fast-off Apple System Colors unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/fast-on Apple System Colors Light unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/fast-on Apple System Colors unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/queued Apple System Colors Light unchanged 0% own QuickModelMenu.tsx
agent-pane.composer-row/queued Apple System Colors unchanged 0% own QuickModelMenu.tsx
agent-pane.model-button-default-effort/profile-default Apple System Colors Light unchanged 0% own modelPicker.css
agent-pane.model-button-default-effort/profile-default Apple System Colors unchanged 0% own modelPicker.css

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 23, 2026
@blacksmith-sh

blacksmith-sh Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Found 14 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmpo39q4h0i/summary-missing.json (live):/summary-missing.json (live): View Logs
/tmp/tmpptdd7xa1/summary-fail.json (live):/summary-fail.json (live): View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
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
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs
convention violations found (ERROR lines above)./
convention violations found (ERROR lines above).
View Logs
test_a_pull_request_that_changes_the_shortcut_inputs_still_rewrites_them (main.Sett
ingsOnlyArtifactLeavesTheActionFollowers.test_a_pull_request_that_changes_the_shortcut_
inputs_still_rewrites_them) (job='repair')/
test_a_pull_request_that_changes_the_shortcut_inputs_still_rewrites_them (main.Sett
ingsOnlyArtifactLeavesTheActionFollowers.test_a_pull_request_that_changes_the_shortcut_
inputs_still_rewrites_them) (job='repair')
View Logs
test_base_passes (main.NoticesPairTests.test_base_passes)/
test_base_passes (main.NoticesPairTests.test_base_passes)
View Logs
test_every_routed_input_triggers_the_workflow (main.PullRequestTiers.test_every_rou
ted_input_triggers_the_workflow) (path='.git/config')
View Logs

...and 4 more test failures. View all on Blacksmith: run 40046164065, run 40046164102

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

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

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

@teamleaderleo
teamleaderleo merged commit f1f6ba2 into feat-cmux-next Oct 24, 2026
131 of 150 checks passed
@teamleaderleo
teamleaderleo deleted the codex/carry-lucas-24194 branch October 24, 2026 00:51
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Landed with Leo's OK after an independent review (#24676).

@github-actions

github-actions Bot commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

teamleaderleo added a commit that referenced this pull request Oct 25, 2026
…menu, command tray, tool results)

Every agent-pane state below has failed gallery health on feat-cmux-next with "play: waitFor did not
hold within 5000 ms". Each play waits on something its component no longer does:

- composer image-sent-as-path, file-saved-as-path, pdf-attached, image-failed: #24652 moved uploads
  to chat.upload.begin and falls back to chat.upload only when the host refuses it as unsupported. The
  frame answered every unmocked call null, so every paste failed with "The upload could not be
  started." The frame now refuses an unanswered chat.upload.begin as an older host does, unless a
  variant answers or delays it. Intake also changed on purpose: a pasted .md is saved too (3 chips, not 2),
  and a pasted PDF or undrawable image goes as a path, so pdf-attached and image-failed now show the PDF
  card and the failed-image chip from a kept draft (chat.draftAttachments.get), the path that still
  makes them.
- new-tab model-picker-open: #24676's hidden width probe repeats "More models" after the real row, and a
  text target takes the last match; the hover now targets the menuitem by role.
- subagent-tray after-latest-message: #24779 opens a command's live tail only with a connected process
  source, which the gallery's preview transport never has; the play checks the row opens instead.
- transcript tool-result-envelopes: since #24986 the rows scroll the transcript, and the runner's
  nearest-scroll parked the last row under Jump to latest, which took the click; each row is centered
  before its click.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1708f-432e-7f23-a9e8-11c5945da2f6&host=cosmic-gray
teamleaderleo added a commit that referenced this pull request Oct 25, 2026
…red: health 0-3, part 2) (#25034)

* fix(gallery): the pane's sheets come from dev.tsx, as build-agent-pane-web.sh derives them

8125a40 moved build-agent-pane-web.sh from a hand-kept list of `$SRC/...css` lines to the sheets
dev.tsx reaches (bundle.mjs --css-inputs-only). galleryHost.ts's agentPaneStylesheets still scraped
the script for those lines, found no shared/styles.css and threw, so scripts/gallery/touched.ts (and
every gallery health shard on feat-cmux-next) failed before rendering.

agentPaneStylesheets now runs the script's own command over dev.tsx, keeps the walk's order, puts
Tailwind's entry last as the script does, and strips every sheet's @import (the walk already lists an
imported local sheet before its importer, so inlining it again duplicated git.css). The list is
memoized; the dev server derives it again when a saved source imports a stylesheet. touched.ts
treats dev.tsx like the script: a change to it re-renders every entry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1708f-432e-7f23-a9e8-11c5945da2f6&host=cosmic-gray

* fix(gallery): stale plays on base gallery health (attachments, model menu, command tray, tool results)

Every agent-pane state below has failed gallery health on feat-cmux-next with "play: waitFor did not
hold within 5000 ms". Each play waits on something its component no longer does:

- composer image-sent-as-path, file-saved-as-path, pdf-attached, image-failed: #24652 moved uploads
  to chat.upload.begin and falls back to chat.upload only when the host refuses it as unsupported. The
  frame answered every unmocked call null, so every paste failed with "The upload could not be
  started." The frame now refuses an unanswered chat.upload.begin as an older host does, unless a
  variant answers or delays it. Intake also changed on purpose: a pasted .md is saved too (3 chips, not 2),
  and a pasted PDF or undrawable image goes as a path, so pdf-attached and image-failed now show the PDF
  card and the failed-image chip from a kept draft (chat.draftAttachments.get), the path that still
  makes them.
- new-tab model-picker-open: #24676's hidden width probe repeats "More models" after the real row, and a
  text target takes the last match; the hover now targets the menuitem by role.
- subagent-tray after-latest-message: #24779 opens a command's live tail only with a connected process
  source, which the gallery's preview transport never has; the play checks the row opens instead.
- transcript tool-result-envelopes: since #24986 the rows scroll the transcript, and the runner's
  nearest-scroll parked the last row under Jump to latest, which took the click; each row is centered
  before its click.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1708f-432e-7f23-a9e8-11c5945da2f6&host=cosmic-gray

* fix(gallery): format the command tray play's wait

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1708f-432e-7f23-a9e8-11c5945da2f6&host=cosmic-gray

* fix(gallery): a saved source derives the pane's sheets again; bundle.mjs and its plugins re-render every entry

Review (Codex): a source that drops its last stylesheet import kept the sheet until a restart, and a
change to bundle.mjs (which now derives the list) touched no entry. Every saved source under src/
derives the list again off the save's path (one run more for saves during a run), and the combined
sheet reloads only when the list changed; bundle.mjs and the plugins its --css-inputs-only run loads
join touched.ts's EVERYTHING.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1708f-432e-7f23-a9e8-11c5945da2f6&host=cosmic-gray

* fix(gallery): the frame stages uploads as the app does; attachment plays check what their notes say

Review (Codex): refusing every unanswered chat.upload.begin sent the gallery down the older single
call, so no play exercised begin, chunks and finish. The frame now answers the staged upload as the
app's host does (a variant that answers or delays a step takes it over; file-not-attached refuses
both, as a host that saves nothing). image-failed checks its text and remove button, pdf-attached its
file name, file-saved-as-path each chip's name, note and saved path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1708f-432e-7f23-a9e8-11c5945da2f6&host=cosmic-gray

* fix(gallery): the frame's staged upload checks a paste's batch as the host does

Review (Codex): the frame ignored begin's batch manifest and never answered a batch token, so a
several-file paste never ran cloudUploads.ts's continuation. The first begin of a batch gets a token;
each later file must present it and be the manifest's next entry, else begin fails.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1708f-432e-7f23-a9e8-11c5945da2f6&host=cosmic-gray

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Oct 27, 2026
…picker-height

Every commit of this branch, through 724ea2d, already landed on feat-cmux-next as #24676
(f1f6ba2, "follow-up: carry #24194 stable model menu fix"), and later base PRs (#24224,
#24530, #25182, #25183, #25167) built on that code. The conflicts in QuickModelMenu.tsx and
model-menu-compact.test.tsx are base's later edits to the same lines, so they resolve to base's
side; the height spacer, width probe and check-in-probe behaviour are all in base's version.
The branch now matches feat-cmux-next.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-f68ebdd9a3c1704ffb42
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