Skip to content

cmux NEXT New Tab: the model menu keeps the harness rail once the page's chat starts behind it - #28966

Merged
teamleaderleo merged 2 commits into
feat-cmux-nextfrom
fix/newtab-harness-rail
Oct 31, 2026
Merged

teamleaderleo merged 2 commits into
feat-cmux-nextfrom
fix/newtab-harness-rail

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 31, 2026 •

Copy link
Copy Markdown
Collaborator

Leo, on the cmux NEXT New Tab composer (2026-10-30/31), verbatim:

  • "i cant fucking swtich harnesses in the main new tab composer is complete garbage"
  • "IM SAYING I CANT FUCKING SEE ANY HARNESS"

His screenshots: with the New Tab field empty, the model menu shows the harness rail. With "helo" typed, the same menu shows only Opus 5.5 / Fable 5.1 / Sonnet 5.5 / Haiku 5.5 / More models / Fast mode, and no harness at all.

Cause

ComposerPickers fixes a chat's harness once it has a message: locked = !harnessSwitch && summary.harness && (turnCount > 0 || snapshot.rows.length > 0). locked becomes harnessFixed, and ModelPicker.quickFamilies then returns no rail. A pick or typed prompt on a New Tab starts the page's deferred chat behind it (chat.new {deferred}). That session draws its sessionStart row before any prompt is sent, so rows.length > 0 read the New Tab as a started chat and the rail went away.

A jsdom probe at tip (815c758fd30) through NewTabScreen + NewTabComposerChips:

New Tab state rail
empty / typed, no session shown (Claude Code, Codex, …)
deferred session, turnCount: 0, no rows shown
deferred session, turnCount: 0, only its sessionStart row none

Ruled out for Leo's case: current?.folder (#24942) hides the rail too, but cmux harness list --folder ~/Projects/leo-workspace/briefs/2026-10-20-gui-push on cosmic-gray lists no folder profiles. The #26969 folding leaves several tabs, so it does not empty the rail.

Fix

  • DefaultComposerChips passes startsChat to ComposerPickers. A New Tab never locks the harness, because no prompt has gone from it.
  • A sessionStart row alone is not a message, so a fresh chat with no prompt yet also keeps its harness switch. A chat with a real message keeps its own harness's list as before (Leo 2026-10-13, and the Fork-to rail from 2026-10-22 is unchanged).

This changes nothing in the picker's design (design/model-picker.md): the rail placement, the symbols work in #27889 and the folder-profile rule from #24942 stay as they are.

Tests

webviews/test/new-tab-harness-rail.test.tsx (jsdom, real NewTabScreen / NewTabComposerChips / ChatComposerChips):

  • a New Tab with typed text shows Claude Code and Codex on the rail;
  • a New Tab whose deferred chat has started (only its start row) still shows them (red before the fix);
  • a fresh chat whose only row is its session start still shows them (red before the fix);
  • a chat with a user message shows no rail (unchanged).

Evidence on cmux-ci (Linux pool): with the fix, the new test plus the neighbouring picker suites (new-tab-deferred-pickers, new-tab-ask-model, model-menu-started-chat-fork, model-menu-compact, signed-out-rail, QuickModelMenu) pass 117/0, and bun run typecheck reports no errors. With the fix reverted, the two middle tests fail and the other two pass.

Screenshots

Waived by Leo for this PR, verbatim (2026-10-31, relayed by claude-sr2-coord): "WE DONT NEED FUCKIGN SCREENSHOTS JUST LET ME TRY THE SHIT OUT". The rail this brings back is the existing one, unchanged; Leo checks it in the nightly himself. Reviewers: the screenshot and viewed-the-after-image requirements do not apply to this PR, so judge it on correctness.

Prior art acknowledged: #27889 (symbols on top, open, separate), #28050 / #27692 (per-harness tabs, not landing), #24942 (folder profiles off the rail), #26969.

Agent session: agent session

…e's deferred chat starts

A pick or typed prompt on a New Tab starts its deferred chat behind the
page. That session's start row counted as a message, so ComposerPickers
locked the harness (harnessFixed) and the model menu dropped the rail to
one harness's plain model list. A New Tab never fixes the harness now,
and a session start row alone no longer counts as a message.

Leo, 2026-10-31: "IM SAYING I CANT FUCKING SEE ANY HARNESS"

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

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 1342cd3: 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=pr28966 -f ref=fix/newtab-harness-rail -f platform=macos -f backend_mode=local

Gallery before/after for 1342cd3: 16 states rendered, 0 images differ, 1180 more touched states not rendered. Images are in the run's artifact, not on this public PR; the independent review of this head reads them on its own, so the PR needs no hand-made screenshots of these states.

gh run download 41176672809 -R manaflow-ai/cmux -n gallery-advisory-28966-1342cd372a7467455b9def8f4a96754d6e02face (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.chat-width/standard Apple System Colors Light unchanged 0% own App.tsx
agent-pane.chat-width/standard Apple System Colors unchanged 0% own App.tsx
agent-pane.chat-width/wide Apple System Colors Light unchanged 0% own App.tsx
agent-pane.chat-width/wide Apple System Colors unchanged 0% own App.tsx
agent-pane.chat-width/wide-blocks Apple System Colors Light unchanged 0% own App.tsx
agent-pane.chat-width/wide-blocks Apple System Colors unchanged 0% own App.tsx
agent-pane.composer/font-size-chat-14 Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer/font-size-chat-14 Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer/font-size-new-chat-14 Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer/font-size-new-chat-14 Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer/font-size-new-tab-14 Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer/font-size-new-tab-14 Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer/font-size-chat-21 Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer/font-size-chat-21 Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer/font-size-new-chat-21 Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer/font-size-new-chat-21 Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer/font-size-new-tab-21 Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer/font-size-new-tab-21 Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer/font-size-chat-28 Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer/font-size-chat-28 Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer/font-size-new-chat-28 Apple System Colors Light unchanged 0% own ComposerPickers.tsx
agent-pane.composer/font-size-new-chat-28 Apple System Colors unchanged 0% own ComposerPickers.tsx
agent-pane.composer-edge/short-edge Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-edge/short-edge Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-edge/wide-edge Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-edge/wide-edge Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-edge/no-edge Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-edge/no-edge Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-floats/scrolled-to-end Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-floats/scrolled-to-end Apple System Colors unchanged 0% own App.tsx
agent-pane.composer-floats/composer-grown Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer-floats/composer-grown Apple System Colors unchanged 0% own App.tsx

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

Shipped in:

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high, router-review): BLOCK at a654cf5

BLOCK at a654cf5

Visual verdict: Incomplete—no after screenshots were supplied.

  1. [P1] [blocking] review/pr.body:35 — Restoring the harness rail visibly changes the menu, so the no-visible-effect exception does not apply. Supply after screenshots and record in the PR body that the landing lane viewed them. Their absence blocks the required visual comparison.

No additional correctness defects found by static inspection. Tests could not run because Bun and dependencies are unavailable.

@teamleaderleo teamleaderleo removed the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026
@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at a654cf5

SHIP at a654cf5

Visual verdict: Waived per the PR body; no after screenshots were supplied.

  1. No correctness findings.

Tests were not run locally because bun is unavailable in the review box.

Follow-ups: none

@teamleaderleo teamleaderleo removed the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026
@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-d750cf10922c785efa64
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex, router-review): SHIP at 1342cd3

Follow-ups: 1. Each lands as an issue in this repo that links this receipt; the lane that opened the PR fixes it forward.

SHIP at 1342cd3

Visual verdict: no images; Leo tries the build

  1. [P2] [follow-up] No after screenshots were supplied, so visual comparison was unavailable; the PR explicitly waives screenshots.

Follow-ups:

  • [P2] [follow-up] Missing after screenshots; Leo tries the build.

@teamleaderleo teamleaderleo removed the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026
@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 31, 2026
@teamleaderleo
teamleaderleo merged commit de23a47 into feat-cmux-next Oct 31, 2026
165 of 168 checks passed
@teamleaderleo
teamleaderleo deleted the fix/newtab-harness-rail branch October 31, 2026 07:47

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 1342cd37 Deployed Oct 31, 2026 by teamleaderleo via cmux-tui tree preflight #87963
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