Skip to content

Picker: keep Add harness in the harness strip - #26503

Merged
teamleaderleo merged 14 commits into
feat-cmux-nextfrom
lane/picker-add-harness
Oct 29, 2026
Merged

teamleaderleo merged 14 commits into
feat-cmux-nextfrom
lane/picker-add-harness

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

The picker keeps Add harness… in the existing harness strip. The compact and full pickers now end that strip with a clearly labelled + item; More models contains models only, and the model list no longer has a separate Add harness row.

Leo, word for word:

how the fuck was that your fucking first instinct? ... If you're thinking about adding a harness, where the fuck would you put it? If not already in the existing harnesses area, that section.

The + item is available in both the composer chat picker and New Tab picker, with the accessible name “Add harness…”. Existing model selection and harness rows remain unchanged. This is the d follow-up to #26071.

Keyboard behavior: the rail arrows reach the trailing Add action without changing the selected harness. Enter/Space keep native button activation. Returning to a harness restores focus even with a hidden search field. New Tab renders one Add action, and More models is absent when the harness has no extra models.

Validation:

  • Branch base: dfdfc55265f4d5caefa8b8148618ee368382fc98 (fix(composer): align search fields with menu rows #26589).
  • Head: add512615797846ae25d1f380f8fc5bbe260a1dc.
  • Focused verification: run 40657628190. Both return-from-Add regressions fail against a033e89; all three focused files pass at add512615797 without retries (model-picker-picks, QuickModelMenu, new-tab-add-harness-chip). The full webviews check passes: formatting, lint, typecheck, guards, and generated protocol.
  • The empty-search keyboard repair lets ArrowDown reach Add harness and Enter activate it; returning through the current harness or directly to search clears Add so Enter selects the model; the New Tab gallery play now checks the rail action and models-only More models.
  • Gallery comparison: run 40648057223 rendered the More models play in both themes. The base and head share the existing disclosure-step base red: base layout shift 0.068107, head 0.069632 in both themes (the 0.001525 increase is ~2.2%); this is recorded as a base red and the disclosure source is unchanged.

Gallery: new-tab.quick-model-menu/combined, new-tab.quick-model-menu/claude, new-tab.quick-model-menu/claude-more-models, agent-pane.model-picker/quick-menu

Before / after

Synthetic gallery captures from advisory run 40644096979, rendered at base dfdfc552 and the pre-repair visual head c588a33. The follow-up commits only repair keyboard activation and gallery assertions, so these visual states are unchanged at final head add512615797; the captures contain no private data.

State Base light Head light Base dark Head dark
Combined menu base combined light head combined light base combined dark head combined dark
Claude menu base Claude light head Claude light base Claude dark head Claude dark
Claude More models base Claude More models light head Claude More models light base Claude More models dark head Claude More models dark

The rail action is a + Add harness item in the head; More models contains models only. The full picker and compact picker preserve the existing menu model list.


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


Summary by cubic

Keeps "Add harness…" in the harness rail so both the compact and full pickers end the strip with a clearly labelled + item instead of a row in the model list.

  • "More models" now contains models only; the separate Add row is gone from the model list and submenu.
  • The Add rail item is reachable via click and rail arrows; focus moves between it and neighboring harness tabs without changing the selection.
  • Rail arrows reach Add even when search is hidden, empty, or the picker has no matches, with focus wrapping between Add and the Starred tab.
  • Cmd-Ctrl-M over the compact menu now replaces it with the full picker instead of keeping the compact menu open.

Written for commit 655b347. Summary will update on new commits.

View guided diff Turn on auto-fix

Agent session: 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 655b347: 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=pr26503 -f ref=lane/picker-add-harness -f platform=macos -f backend_mode=local

Gallery before/after for 655b347: 4 states rendered, 6 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 40869397792 -R manaflow-ai/cmux -n gallery-advisory-26503-655b347ebc990be6e2586e4b71c694bb05a5b958 (then read gallery-review.json)

States
State Theme Status Diff Picked by
new-tab.quick-model-menu/combined Apple System Colors Light changed 0.179% pr-body
new-tab.quick-model-menu/combined Apple System Colors changed 0.178% pr-body
new-tab.quick-model-menu/claude Apple System Colors Light changed 0.179% pr-body
new-tab.quick-model-menu/claude Apple System Colors changed 0.178% pr-body
new-tab.quick-model-menu/claude-more-models Apple System Colors Light changed 2.77% pr-body
new-tab.quick-model-menu/claude-more-models Apple System Colors changed 2.58% pr-body
agent-pane.model-picker/quick-menu Apple System Colors Light unchanged 0% pr-body
agent-pane.model-picker/quick-menu Apple System Colors unchanged 0% pr-body

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

Unclear: web / react-apps-check failed: no known signature; failed step: Check webview test shards.

CI failed on 655b347ebc (run 40869398275 attempt 1): 2 code, 1 unknown.

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

Failures:

  • seen on other PRs MarkdownMath.test.tsx keeps shell command dollar signs as plain text without dropping content: failed (job)
  • seen on other PRs chiefLook.test.tsx search renders Bubble Style in the Look card: failed (job)
  • seen on other PRs rowSummary.test.tsx no description line on any Settings page is over 60 characters, in any language: failed (job)
  • seen on other PRs rowSummary.test.tsx every schema summary fits 60 characters in every language: failed (job)
  • seen on other PRs themePane.test.tsx the Theme page draws each theme key once, in one card, with no second App Theme group: failed (job)
  • seen on other PRs agent-pane-pending-steer.test.tsx Send now on a waiting steer asks queue_edit send_now for its promptId, and goes once it is read: failed (job)
  • seen on other PRs clickable-cursor.test.ts no stylesheet sets the arrow or auto on a clickable element: failed (job)
  • seen on other PRs motion-scale.test.ts motion scale > no webview CSS, TS or TSX animates off the scale: failed (job)
  • seen on other PRs inspector-section-order-browser.test.tsx Session Info's six-dot handles > every section has one: failed (job)
Matched log lines
web / react-apps-base-check (1): (fail) keeps shell command dollar signs as plain text without dropping content [5.10ms]
web / react-apps-base-check (4): (fail) Session Info's six-dot handles > every section has one [0.41ms]

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

@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 28 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmp1ykyvi76/summary-fail.json (live):/summary-fail.json (live): View Logs
/tmp/tmp_qdyagy1/summary-missing.json (live):/summary-missing.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
src/agent-session/acpmux/conversation/MarkdownMath.test.tsx/MarkdownMath.test.tsx View Logs
src/agent-session/acpmux/conversation/MarkdownMath.test.tsx/MarkdownMath.test.tsx View Logs
src/pages/settings/chiefLook.test.tsx/chiefLook.test.tsx View Logs
src/pages/settings/chiefLook.test.tsx/chiefLook.test.tsx View Logs

...and 18 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

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

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

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

  • ModelPicker.tsx:1279-1285 — The new + option is always active={false} and has no keyboard handler. PickerOption therefore gives it tabIndex=-1; rail arrow navigation only traverses harness tabs, so keyboard users cannot reach or activate “Add harness…”.
  • QuickModelMenu.tsx:575-578 — New Tab’s inline “More models” path still renders a textual Add harness item. The new rail button is also rendered at :779, leaving duplicate Add harness controls and violating the strip-only behavior.
  • QuickModelMenu.tsx:635-664 — The chat compact menu still creates a More models submenu when onAddHarness is present even if there are no older models. After removing the Add harness child, that submenu can be empty.

@teamleaderleo
teamleaderleo force-pushed the lane/picker-add-harness branch from 1db2878 to 8179506 Compare October 28, 2026 05:54
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Orphaned: no activity for 12 h, and no lane holds a lease on it. The orphan sweep could not merge feat-cmux-next in: conflicts in webviews/test/model-menu-compact.test.tsx. Listed for a lane to resolve.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · took over from an earlier session · session

…-add-harness

# Conflicts:
#	webviews/test/model-menu-compact.test.tsx
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high, review-router): SHIP at 655b347

No blocking findings at this head (base merge plus conflict resolution reviewed with the full diff).

Agent session: agent session

@teamleaderleo
teamleaderleo merged commit 6034e76 into feat-cmux-next Oct 29, 2026
174 of 182 checks passed
@teamleaderleo
teamleaderleo deleted the lane/picker-add-harness branch October 29, 2026 14:49
@github-actions

github-actions Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

teamleaderleo added a commit that referenced this pull request Oct 31, 2026
…rtcuts, folder profiles and fallback

The compact menu's web version (QuickModelMenuFallback) is base's QuickModelMenu as it stands,
and the native menu carries base's changes since: each model's effort as a side dropdown (#27948),
the Chief's own-model menu, the Account switcher with Cmux under Provider (#28020), Add harness in
the harness strip (#26503) and No models for an empty tab (#26962).

Review fixes (Sol BLOCK at 124eada):
- A digit on an empty search, or on the list, lands its numbered row instead of typeahead.
- The full picker lists this folder's profiles natively.
- An opening the native host refuses to show falls back to the web popup instead of closing.
- Keys start on the list, not the rail, so Return in the search lands the first match.
- Edits and picks made at an earlier revision of the open popup still land.
- Native rail clicks during a search leave it (Astra BLOCK at 8f4777b).

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

This branch was previously deployed

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