Picker: keep Add harness in the harness strip

Merged
TE
7d ago
+281-184

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 (#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.

StateBase lightHead lightBase darkHead dark
Combined menubase combined lighthead combined lightbase combined darkhead combined dark
Claude menubase Claude lighthead Claude lightbase Claude darkhead Claude dark
Claude More modelsbase Claude More models lighthead Claude More models lightbase Claude More models darkhead 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.

Agent session: agent session