Skip to content

cmux NEXT: first-run New Tab opens harness setup and shows No project / Browse - #26084

Merged
teamleaderleo merged 24 commits into
feat-cmux-nextfrom
next-ux/first-run-newtab-recovery
Oct 30, 2026
Merged

teamleaderleo merged 24 commits into
feat-cmux-nextfrom
next-ux/first-run-newtab-recovery

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 27, 2026 •

Copy link
Copy Markdown
Collaborator

New Tab now opens harness setup when a user starts a chat without an installed harness. Closing setup preserves the draft, attachments, and project choice. Start Chat after setup continues that pending chat with the selected harness and the same draft, attachments, and project. A clean project card shows Browse and No project.

Requested notes:

No directory has this weird pane...
Need to bundle your

The adopted first-run specification:

Return on a prompt with no harness opens the Harnesses setup surface and keeps the draft; the empty New chat action follows the same path.

Explicit address navigation and search choices retain their existing actions. The New Tab page uses React Activity during setup to preserve state and suspend hidden input listeners without changing the layout.

Risk: contained New Tab routing and setup lifecycle changes. The main regression risks are draft loss and keyboard handling while setup is open; focused tests cover those paths.

Gallery: agent-pane.first-run/project-card, agent-pane.first-run/minimal, agent-pane.first-run/minimal-projects

The project-card version keeps the existing environment card and exposes its empty state actions. The design reference is Claude Code's new-session project/composer arrangement; cmux colours and glass are preserved.

Verification

At 49dfe8a29c6a2768d5e9bdb817e9a82f0c09e4e6, run 40550998124 verified the exact tree (7c087b55f9c88c72f9913a8bdef45727424bc6eb): formatting, scoped lint with zero warnings/errors, typecheck of 2,880 files, and all 41 focused tests. Tests cover setup continuations, rejected sandbox starts, interrupted video metadata reads, stale replies, and retained metadata. Run 40518495825 also covers prompt/image/project preservation and reproduces the reload-hold and inherited-home Browse regressions with their fixes removed.

Setup's parent protects the hidden draft from automatic reloads. Start Chat resumes after attachment effects reconnect, and a refused start releases the create guard. Interrupted video reads retry on reveal; settled reads remain complete. The submission wait counts reads before their effects restart, so setup cannot send the draft during the reveal step. The browser regression reproduces early submission with the fix removed in run 40559612546, and passes with the fix in run 40560351009. The latter exposed an old hidden-state count assertion, now updated to distinguish pending work from an active host request.

Exact-head gallery run 40552650597 has nine broken states matching the actual-base reproduction in run 40547039412. Its streaming interaction took 17,349 ms against a 2,000 ms budget; base took 17,461 ms. The computer-search case passed on retry. Release guard failures also reproduce on base: highlight digest validation, Sparkle helper validation, and the appcast fixture. The two cancelled static/autofix checks are not passing receipts.

Current head: 25df5157dea5504f3ba408f0020c560a9c77eaed. The final focused suite is run 40560916680, pending. The video fix passed formatting, lint and typechecking in run 40557947333; that run then stopped on an unavailable historical file before executing tests. Review (codex gpt-6-astra xhigh, review-26084h): SHIP at 25df515

No remaining review findings.

Adopted head 8ad19e615927d2a9d888d35fcdf1eaf2fad258a5

  • Updated from base twice. Conflicts are resolved in App.tsx (base's NewTabScreen props onCmuxCommand, onImportFile, importError, importSandboxed and onPlusCommand carried onto the Activity-wrapped page), NewTabScreen.tsx and NewTabScreen.test.tsx (both sides' tests kept). new-tab-add-harness-chip.test.tsx is gone, because base deleted it.
  • Base's sign-in preflight (feat(composer): preflight selected session auth #26643) refuses a send while the target harness's check is pending. Setup's Start Chat resumed inside that window and dropped the draft (three first-run Start Chat browser tests timed out). The resume now waits for the check on the harness setup just made ready. If the person picks another target meanwhile, the resume is dropped: nothing is sent, and the draft stays.
  • Fleet runs at the base-merged head: typecheck and lint clean, and 86 focused tests pass (run 40999395433; newtab/, agent-pane-harness-catalog including the Start Chat cases, composer-video-attachment, harnesses-page, new-tab-ask-model, new-tab-row-still).
  • Independent Codex gpt-6-astra (high, fast) review: SHIP at this head.
  • The before/after captures above are unchanged by the adoption: the project card and setup surfaces look the same.

Before / after

The same agent-pane.first-run/project-card gallery entry rendered with the base and changed project card:

Before After
Before: empty project card After: Browse and No project actions

Light before · Light after · Minimal variant · Minimal projects variant

Refreshed public-safe before/after captures completed in run 40547032803, using the same inherited-home fixture with base 2e489426cba445b3e0a2ab820fba1425b1b4f77c and head 850c3886e3c45b9e031bb536d3b53f060af04623. All 12 gallery captures completed without errors.

Changelog

Fixed: New Tab guides first chats into harness setup and a project or no-project choice.

Agent session: agent session

@github-actions

github-actions Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 834242a: 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=pr26084 -f ref=next-ux/first-run-newtab-recovery -f platform=macos -f backend_mode=local

Passes: CI passes on 43358bef5b.

CI passes on 43358bef5b (run 41012857828 attempt 1).

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 1a3add7; does not block

Gallery before/after for 43358be: the capture produced no images (run).

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

Copy link
Copy Markdown
Collaborator Author

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

@blacksmith-sh

blacksmith-sh Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Found 2 test failures on Blacksmith runners:

Failures

Test View Logs
test_every_listed_hook_is_one_glaeda_released_with_the_check (main.SigningHooksInSt
epWithGlaedaTests.test_every_listed_hook_is_one_glaeda_released_with_the_check)/
test_every_listed_hook_is_one_glaeda_released_with_the_check (main.SigningHooksInSt
epWithGlaedaTests.test_every_listed_hook_is_one_glaeda_released_with_the_check)
View Logs
test_the_repository_highlights_validate (main.DigestTests.test_the_repository_highl
ights_validate)/
test_the_repository_highlights_validate (main.DigestTests.test_the_repository_highl
ights_validate)
View Logs

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

@teamleaderleo

teamleaderleo commented Oct 27, 2026 •

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

New Tab regression suite: 6 tests pass in cmux-ci run 40482530157. Added gallery variants for Cards and Minimal project choices.

Agent-Session: https://cmux.com/deeplink/agent?id=aid-fe641d6bf0659eb61cfc
@cursor

cursor Bot commented Oct 27, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

What it does

The lane's first-run journey note says:

With no harness, the model chip says Add harness, but Return and New chat were no-ops. This was the clearest first-use dead end.

  1. Return on a prompt with no harness opens the Harnesses setup surface and keeps the draft; the empty New chat action follows the same path.
  2. A clean environment card exposes No project directly.
  3. A clean environment card exposes Browse directly when no recent project exists.
  • NewTabScreen.tsx: when no harness is installed, Return (on an empty composer or with a prompt) and the empty New chat action call openHarnessesPage() instead of returning silently. The draft stays in place.
  • StageCards.tsx: on a clean workspace with no current project, the environment card shows a "No project" row. If there are also no recent projects, it shows a "Browse" row too.
  • NewTabScreen.test.tsx: tests for both new paths.

Risk: low to medium. This changes New Tab behaviour only when no harness is installed or no project has been chosen. Existing users with a harness and a project see no change.

Provenance

A Codex UX lane wrote this on a VM that couldn't publish: its GitHub broker had no token and it had no push access. claude-sr2's helper copied the commit off that VM and cherry-picked it onto the latest feat-cmux-next with no conflicts. Authorship and the original Agent-Session trailer are kept. The lane couldn't run tests or take captures there (no webview dependencies were installed and it had no capture credentials), so this PR still needs a CI run, before/after screenshots and a cross-model review.

Agent session: agent session

🤖 Generated with Claude Code


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

Verification

Focused New Tab regression tests passed in cmux-ci run 40482530157 (6 pass, 0 fail) before the current base merge; final exact-head tests are running in cmux-ci run 40486435611 for a028ec5. The pre-push gate passed at the merged head.

The full web lint reports only unchanged base findings: SendScrollSetting.gallery.tsx type-scale, settings channelsCard.test.tsx/store.ts formatting, existing App.tsx hook dependency warnings, and stale generated ACPMUX methods. The exact changed files format and typecheck cleanly.

Gallery: agent-pane.first-run/project-card, agent-pane.first-run/minimal, agent-pane.first-run/minimal-projects

The fleet gallery capture script exercised all three variants in dark and light with public-safe fixture text. The first capture run produced before/after images for the project-card and minimal-projects states; its final variant rerun is cmux-ci run 40486435611 after the readiness fix.

Review (): SHIP at a028ec5

Changelog

Fixed: New Tab guides first chats into harness setup and a project or no-project choice.

Proof

Gallery variants and fleet captures cover the clean project card and Minimal layouts in dark and light.

agent-identity footer

@blacksmith-sh

blacksmith-sh Bot commented Oct 27, 2026

Copy link
Copy Markdown

@teamleaderleo

What it does

The lane's first-run journey note says:

With no harness, the model chip says Add harness, but Return and New chat were no-ops. This was the clearest first-use dead end.

  1. Retu...

I can't find a request in this comment, so I haven't changed anything. It's a copy of the PR description, and the "Tag @codesmith-bot" line in the footer is what triggered me.

Tell me what you want done here, for example a review of the diff, a fix for the failing Blacksmith tests, or screenshots for the first-run states.

View with [code]smith

@cursor

cursor Bot commented Oct 27, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Orphaned: no activity for 15 h, and no lane holds a lease on it. The orphan sweep could not merge feat-cmux-next in: conflicts in webviews/src/agent-session/acpmux/newtab/NewTabScreen.tsx, webviews/test/new-tab-add-harness-chip.test.tsx. Listed for a lane to resolve.

…st-run-newtab-recovery

# Conflicts:
#	webviews/src/agent-session/acpmux/App.tsx
#	webviews/src/agent-session/acpmux/newtab/NewTabScreen.tsx
#	webviews/test/new-tab-add-harness-chip.test.tsx
Base's auth preflight (#26643) refuses askChat while the target harness's
sign-in check is pending. Setup has just made the harness ready, so Start
Chat's resume hit that window and dropped the draft (three first-run Start
Chat tests timed out). Hold the resume until the check answers; a sign-in it
finds missing still keeps the draft with its note.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-f8805b2d0f3b1303441e
…st-run-newtab-recovery

# Conflicts:
#	webviews/src/agent-session/acpmux/App.tsx
#	webviews/src/agent-session/acpmux/newtab/NewTabScreen.test.tsx
#	webviews/src/agent-session/acpmux/newtab/NewTabScreen.tsx
@cursor

cursor Bot commented Oct 30, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

…check

Wait while the check for the harness setup just made ready is pending, not
another selected harness's. A resume whose target changes while it waits is
dropped: nothing is sent, the draft stays.

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

Copy link
Copy Markdown
Collaborator Author

Review (Codex gpt-6-astra high, fast; independent, via review-router): SHIP at 8ad19e6

No findings. The conflict resolutions keep base's props and branch order. The setup resume's wait is keyed to its own harness's sign-in target, is dropped when that target changes, sends no duplicates, and keeps the draft when the check finds no sign-in.

…st-run-newtab-recovery

# Conflicts:
#	webviews/src/agent-session/acpmux/App.tsx
#	webviews/src/agent-session/acpmux/newtab/NewTabScreen.test.tsx
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (Codex gpt-6-astra high, fast; carried): SHIP at 43358be

Carried from the independent SHIP at 8ad19e6. This head only merges feat-cmux-next in. Base reverted #26568 (#27913), so the onPlusCommand prop and its New Tab + test that the earlier merge had carried over are gone. Otherwise the PR diff against its merge base is the same. Fleet run 41012875623 at this head: bun run check (format, lint, types, catalog keys, protocol) clean, and 85 focused tests pass.

@teamleaderleo
teamleaderleo merged commit 79d7a02 into feat-cmux-next Oct 30, 2026
153 of 160 checks passed
@teamleaderleo
teamleaderleo deleted the next-ux/first-run-newtab-recovery branch October 30, 2026 06:59
@github-actions

Copy link
Copy Markdown
Contributor

Shipped in:

@github-actions

Copy link
Copy Markdown
Contributor

Shipped in:

This branch was previously deployed

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