Skip to content

fix(next): contain project and environment dropdowns - #26945

Closed
teamleaderleo wants to merge 58 commits into
feat-cmux-nextfrom
lane/picker-dropdown-containment
Closed

teamleaderleo wants to merge 58 commits into
feat-cmux-nextfrom
lane/picker-dropdown-containment

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

Project and environment dropdown containment

Follow-up replacement for #26636's project/environment menu containment work. Menus use shared down-first placement, flip above only when below truly lacks room, and keep folder/project result viewports inside their popup in short windows. Project galleries keep 3/8/15 rows visibly distinct with bounded scrolling; environment and folder lists remain reachable. Model-picker behavior is unchanged.

The implementation preserves the existing pinned-action keyboard collection and scrollbar behavior. It uses flex min-height: 0 and bounded nested viewports so popup bounds, not intrinsic list height, control layout.

Leo's direction: “For these left two dropdowns, we want to make it not cover the, you know, not open upwards, right? Like if you see the other dropdowns, you'll note that they open downwards, aka away from the chat. They don't hide the chat.”

Gallery/design work from #26636 is retained in design/composer-menus.md, with aligned, airy and quiet-icon variants.

Base: feat-cmux-next
Head: cb669ab23044eb3d8f8ac240164bbbc836593a04

Validation pending on the exact head: focused containment tests and web check through cmux-ci. Native captures are not required for this webview-only change.

Changelog

Changed: keep project and environment dropdowns contained and down-first while preserving keyboard and scrollbar behavior.

Agent session: agent session


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


Summary by cubic

Changes the composer's project and environment dropdowns to open downward, away from the chat, instead of upward, and keeps their result lists contained inside the popup in short windows. Placement flips above only when the space below is too small.

  • Menus pick their side once on open and keep it while filtering, so rows never jump.
  • Project galleries keep 3/8/15 rows visible with bounded scrolling; environment and folder lists stay reachable.
  • Scratch folders stay searchable but out of the unfiltered project list unless selected.
  • The current environment leads the environment list.
  • Project badges fall back to a quiet monogram instead of a generic folder tile when no icon is found.
  • Existing pinned-action keyboard navigation and scrollbar behavior is preserved.

Written for commit cb669ab. Summary will update on new commits.

View guided diff Turn on auto-fix

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

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

@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 cb669ab: 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=pr26945 -f ref=lane/picker-dropdown-containment -f platform=macos -f backend_mode=local

Probably yours: agent-pane-bottom-stack.test.ts, agent-pane-bottom-stack.test.ts, agent-pane-short-pane-composer.test.ts and 5 more fails here but not on main's latest full suite.

CI failed on cb669ab230 (run 40764939700 attempt 1): 1 code, 1 unknown.

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

Failures:

  • new in this PR agent-pane-bottom-stack.test.ts in a 320 px pane with a 12-line draft the card and its quiet row stay inside and clickable: failed (job)
  • new in this PR agent-pane-bottom-stack.test.ts in a 400 px pane with a 12-line draft the card and its quiet row stay inside and clickable: failed (job)
  • new in this PR agent-pane-short-pane-composer.test.ts chromium: in a 260 px pane a grown prompt keeps the card, its controls and the quiet row inside the ...: failed (job)
  • new in this PR agent-pane-short-pane-composer.test.ts chromium: in a 330 px pane a grown prompt keeps the card, its controls and the quiet row inside the ...: failed (job)
  • new in this PR agent-pane-short-pane-composer.test.ts webkit: in a 260 px pane a grown prompt keeps the card, its controls and the quiet row inside the pa...: failed (job)
  • new in this PR agent-pane-short-pane-composer.test.ts webkit: in a 330 px pane a grown prompt keeps the card, its controls and the quiet row inside the pa...: failed (job)
  • new in this PR agent-question-keyboard.test.ts Other resizes without field-sizing through multiline edits, width changes and IME: failed (job)
  • new in this PR check-type-scale.test.ts check-type-scale > this checkout matches its baseline: failed (job)
Matched log lines
web / react-apps-check (1): (fail) in a 320 px pane with a 12-line draft the card and its quiet row stay inside and clickable [3775.41ms]

Not re-run automatically: web / react-apps-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: web / Web status; base red: the same failure on the base 3a7653b; does not block
red: web / react-apps-check; base red: the same failure on the base 3a7653b; does not block
red: web / react-apps-check (1); NEW: step Fail on the gate checks (+13 more) passes on the base 3a7653b; do not merge until green; see lane-rules

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

gh run download 40764939530 -R manaflow-ai/cmux -n gallery-advisory-26945-cb669ab23044eb3d8f8ac240164bbbc836593a04 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.add-project-panel/environment Apple System Colors Light unchanged 0% own styles.css
agent-pane.add-project-panel/environment Apple System Colors unchanged 0% own styles.css
agent-pane.add-project-panel/sources Apple System Colors Light unchanged 0% own styles.css
agent-pane.add-project-panel/sources Apple System Colors unchanged 0% own styles.css
agent-pane.add-project-panel/directory Apple System Colors Light unchanged 0% own styles.css
agent-pane.add-project-panel/directory Apple System Colors unchanged 0% own styles.css
agent-pane.add-project-panel/keyboard Apple System Colors Light unchanged 0% own styles.css
agent-pane.add-project-panel/keyboard Apple System Colors unchanged 0% own styles.css
agent-pane.changes-file-menu/closed Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-file-menu/closed Apple System Colors unchanged 0% own styles.css
agent-pane.changes-file-menu/open Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-file-menu/open Apple System Colors unchanged 0% own styles.css
agent-pane.changes-file-menu/keyboard Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-file-menu/keyboard Apple System Colors unchanged 0% own styles.css
agent-pane.changes-git-actions/toolbar Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-git-actions/toolbar Apple System Colors unchanged 0% own styles.css
agent-pane.changes-git-actions/commit-form Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-git-actions/commit-form Apple System Colors unchanged 0% own styles.css
agent-pane.changes-git-actions/include-new Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-git-actions/include-new Apple System Colors unchanged 0% own styles.css
agent-pane.changes-git-actions/keyboard Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-git-actions/keyboard Apple System Colors unchanged 0% own styles.css
agent-pane.changes-git-actions/busy Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-git-actions/busy Apple System Colors unchanged 0% own styles.css
agent-pane.changes-git-actions/push-refused Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-git-actions/push-refused Apple System Colors unchanged 0% own styles.css
agent-pane.changes-options-menu/closed Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-options-menu/closed Apple System Colors unchanged 0% own styles.css
agent-pane.changes-options-menu/open Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-options-menu/open Apple System Colors unchanged 0% own styles.css
agent-pane.changes-options-menu/keyboard Apple System Colors Light unchanged 0% own styles.css
agent-pane.changes-options-menu/keyboard Apple System Colors unchanged 0% own styles.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 28, 2026
@blacksmith-sh

blacksmith-sh Bot commented Oct 28, 2026

Copy link
Copy Markdown

Found 33 test failures on Blacksmith runners:

Failures

Test View Logs
---/--- View Logs
---/--- View Logs
---/--- View Logs
---/--- View Logs
test/agent-pane-bottom-stack.test.ts/agent-pane-bottom-stack.test View Logs
test/agent-pane-bottom-stack.test.ts/agent-pane-bottom-stack.test View Logs
test/agent-pane-short-pane-composer.test.ts/agent-pane-short-pane-composer.test View Logs
test/agent-pane-short-pane-composer.test.ts/agent-pane-short-pane-composer.test View Logs
test/agent-pane-short-pane-composer.test.ts/agent-pane-short-pane-composer.test View Logs
test/agent-question-keyboard.test.ts/agent-question-keyboard.test View Logs

...and 23 more test failures. View all on Blacksmith

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 cb669ab

  • webviews/src/ui/Combobox.tsx:158-160,252-260 — Nonempty queries remove pinned actions from enabledSuggestions while still rendering them with index -1. Base UI keyboard navigation therefore cannot reach actions such as Add/Browse or No project while filtering.

  • webviews/src/agent-session/acpmux/EnvironmentPicker.tsx:182-193,367 — The current environment is moved to the front for display, but shortcut labels use the original order while shortcut handling uses the reordered list. Visible ⌥⌘N labels select the wrong machines whenever the current environment was not originally first.

  • webviews/src/agent-session/acpmux/composerLocation.css:1048-1050 — Folder lists default to overflow: hidden; only environment popovers restore scrolling. FolderPopover instances with no pinned actions therefore clip long folder lists and make later folders unreachable.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Orphaned: no activity for 14 h, and no lane holds a lease on it. The orphan sweep could not merge feat-cmux-next in: conflicts in scripts/cmux-next/type-scale-baseline.tsv, webviews/src/agent-session/acpmux/locationPopover.ts, webviews/src/agent-session/acpmux/styles.css. Listed for a lane to resolve.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Closing as superseded. #26536 (0b6bb12) already landed the pinned actions and in-menu scrollbars, and #27146 (59fa54b) landed the down-first location menus this PR describes. This branch would also undo work that has since landed: #26739 (question card styles), #26874 (paused Cloud machine banner), #26551 (New Tab footer and its refit test), #26850 (FolderPopover tooltip), and the deliberatelyHighlighted handling from #26536. Anything still wanted (current environment and project first, the scratch-folder filter, the monogram badge) should be a fresh small PR off feat-cmux-next, on top of the composer-context-top preferred-side work.

This branch was previously deployed

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