Skip to content

Make conversation forking one step across entry points - #26619

Merged
teamleaderleo merged 16 commits into
feat-cmux-nextfrom
rail-opus-fork
Oct 29, 2026
Merged

teamleaderleo merged 16 commits into
feat-cmux-nextfrom
rail-opus-fork

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

Fork now runs immediately from the message footer, message or empty-space context menu, chat header, /fork, command palette and ⌥⌘Y. Every entry uses AgentForkDestination.default (currently Right); Option-click and the separate Fork to… item expose the seven existing destinations. A refused host open selects and focuses the fork. Hand off to… has its own menu group and explicitly retains its existing tab placement.

And then forking. Man, there's too many fucking steps here. We need to make it nicer, more ergonomic, more intuitive. There's too many steps to, like, go through it. It's too much of a hassle. We don't like it.

The fork request still uses the parent's harness, model, mode and working directory. The single default remains .right pending #26582's session placement rule. AgentTabs+Fork.swift is unchanged, preserving #26093's subagent placement work.

Entry Before (reported steps) After
Hover Fork 2 1
Right-click Fork 2 1
Header ⋯ Fork 2–3 1
/fork 2 1
Palette 4 1
⌥⌘Y 1 1

After counts mean one activation of the exposed Fork command, excluding opening the surrounding menu/palette. Before counts are from the approved request, not instrumented timing.

Validation: the default-placement regression fails on the original base with eight expected assertions (receipt 603d4530b51c3e4aea0f6cc1). The original implementation passed six native suites (receipt a469aea5b93c51ad0b292eba). Final verification and the repaired crash regression are recorded below.

Real-app captures use the same completed fake-harness conversation on base and head. They run through WebKit's native click path because the capture driver's Chromium click did not supply the gesture ticket needed for folder trust. The product's engine default is unchanged. Reference: Claude desktop session overflow menu, using separate command groups; private reference imagery is not attached.

Before After
Before, light After, light
Before, dark After, dark

The context-menu test budget changes from 12 to 13 only for agent-chat and terminal-selection menus, accommodating the separately exposed Fork and Fork to… commands; all other menus retain 12.

A real header click created a distinct right-side session and the debug readback reported composer_focused: true and focus: composer. Result capture.

Risk: changes default fork placement from a tab to the shared right destination. No new timers, observers or animation loops; the weak-self destination-menu task finishes when its native menu closes. No per-token transcript work added.

Current verification:

The fork request and default destinations were verified through real-app interaction above. The modifier repairs have remote browser regressions; they have not yet been recaptured in the native app. The diff stays below 800 changed lines.

Agent session: agent session

@github-actions

github-actions Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Default changes

This pull request changes 4 defaults at 5af5233f9cc5 (what everyone gets without configuring anything):

  • tunable-source.CmuxNextActions/ActionSurfaceCatalog+MenusContent.swift:contentPlacements: "79a906ee164b61f61a7a235b1100bae5a09af3035dda1d0a78d2be2df8278b07" -> "85a61ae1a4a29ef175d0f2d43558e50993425d2a2a966ca25c8d97790e46f797"
  • tunable-source.CmuxNextApp/Handlers/AgentHandlers.swift:bind: "436de1e90df83b1185e077ae3171f58f641c171008a0bbaa6952774d27c8c604" -> "16e3f7aeaa396d1177bb5d6cacbf7ebf7bf18a5dec6ac5bdf171e7e97038d955"
  • tunable-source.CmuxNextApp/Handlers/AgentHandlers.swift:fork: "b9bc3a51051d4bbfe6067d6e36b8b121641c8d2f656e93002d3a9f565d239191" -> "379b2d240c539dbef7832d1001ddb2055e32a744f72c9b74eff4d40341d83b19"
  • tunable-source.CmuxNextApp/Handlers/AgentHandlers.swift:forkActions: "d112cfb30087caa1865c3ae3a7613154d99e6e8234475ef30776876c14eed1e5" -> "d16b1173b589175a85d7c6d2fa09b9718aa448fdb1ff249d1abcc68bd8372080"

Signed off on this commit by review (codex-review-box/gpt-6-astra high, lane-place).

Merge receipt: merged as 25b666bcbe9d with these defaults changed, signed off by review (codex-review-box/gpt-6-astra high, lane-place).

Regenerate the snapshot with python3 scripts/ci/defaults_guard.py snapshot.

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

Copy link
Copy Markdown
Collaborator Author

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

@blacksmith-sh

blacksmith-sh Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Found 6 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmp6gs0_e0k/summary-fail.json (live):/summary-fail.json (live): View Logs
/tmp/tmprh9_uxh6/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

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

@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 8faf473: 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=pr26619 -f ref=rail-opus-fork -f platform=macos -f backend_mode=local

Unclear: web / react-apps-check failed: no known signature; failed step: Check webview test shards. This PR merged before its CI finished: fix forward on main.

CI failed on 5af5233f9c (run 40870560764 attempt 1): 2 code, 1 unknown.
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped.

Job Verdict Why
web / react-apps-base-check (1) code a web test failed
web / react-apps-base-check (2) 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 queuedMessages.test.ts each agent message is a received-card row, in the queue's order, with its promptId: failed (job)
  • seen on other PRs markdown-table-obsidian.test.ts markdown tables (webkit) > a drag across cells selects text from the press to the pointer, not whole...: failed (job)
  • seen on other PRs transcript-gutter-select-browser.test.ts chromium: a drag from each row gap starts at its nearest mounted caret: failed (job)
  • seen on other PRs transcript-gutter-select-browser.test.ts chromium: the selection keeps its start when the view scrolls its row far out, until it is cleared (...: failed (job)
  • seen on other PRs transcript-gutter-select-browser.test.ts webkit: the selection keeps its start when the view scrolls its row far out, until it is cleared (vi...: 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 glyph-alignment.test.ts glyphs use shared row geometry in light and dark: failed (job)
  • ... 4 more in the job logs
Matched log lines
web / react-apps-base-check (1): (fail) keeps shell command dollar signs as plain text without dropping content [4.55ms]
web / react-apps-base-check (2): (fail) search renders Bubble Style in the Look card [3548.74ms]

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

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

gh run download 40870415679 -R manaflow-ai/cmux -n gallery-advisory-26619-5af5233f9cc56c41b2200b6b216550dbbdcd7725 (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.coderouter-offer/claude-key Apple System Colors Light unchanged 0% own TurnRows.tsx
agent-pane.coderouter-offer/claude-key Apple System Colors unchanged 0% own TurnRows.tsx
agent-pane.coderouter-offer/deepseek-key Apple System Colors Light unchanged 0% own TurnRows.tsx
agent-pane.coderouter-offer/deepseek-key Apple System Colors unchanged 0% own TurnRows.tsx
agent-pane.coderouter-offer/sign-in Apple System Colors Light unchanged 0% own TurnRows.tsx
agent-pane.coderouter-offer/sign-in Apple System Colors unchanged 0% own TurnRows.tsx
agent-pane.coderouter-offer/rate-limited Apple System Colors Light unchanged 0% own TurnRows.tsx
agent-pane.coderouter-offer/rate-limited Apple System Colors unchanged 0% own TurnRows.tsx
agent-pane.coderouter-offer/on-coderouter Apple System Colors Light unchanged 0% own TurnRows.tsx
agent-pane.coderouter-offer/on-coderouter Apple System Colors unchanged 0% own TurnRows.tsx
agent-pane.coderouter-offer/moving Apple System Colors Light unchanged 0% own TurnRows.tsx
agent-pane.coderouter-offer/moving Apple System Colors unchanged 0% own TurnRows.tsx
agent-pane.composer-edge/short-edge Apple System Colors changed 0.0051% own App.tsx
agent-pane.composer-edge/short-edge Apple System Colors Light 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 changed 0.0056% 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
agent-pane.continuation-spacing/shipped Apple System Colors Light unchanged 0% own App.tsx
agent-pane.continuation-spacing/shipped Apple System Colors unchanged 0% own App.tsx
agent-pane.continuation-spacing/two-thirds Apple System Colors Light unchanged 0% own App.tsx
agent-pane.continuation-spacing/two-thirds Apple System Colors unchanged 0% own App.tsx

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

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · session

@teamleaderleo
teamleaderleo marked this pull request as ready for review October 29, 2026 07:51
@cursor

cursor Bot commented Oct 29, 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

Review (codex-review-box/gpt-6-astra high, lane-place): SHIP at 80f135a

SHIP

  1. No blocking findings in the full diff at 80f135a1ffbe00eaafb6b831cb9df67f51ca5eee. The prior Option-drag defect is fixed: webviews/src/ui/pressRelease.ts:61 forwards the release event, and webviews/src/ui/Menu.tsx:105 preserves its modifiers in the dispatched click.
  2. Reviewed fork placement, focus, shared defaults, palette, shortcut, message/header menus, and native context-menu paths. No additional correctness regression found.

Read-only static review; no builds or tests run. Reported CI results were not independently verified.

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

Copy link
Copy Markdown
Collaborator Author

Review (codex-review-box/gpt-6-astra high, lane-place): BLOCK at 6195022

BLOCK

  1. webviews/src/agent-session/acpmux/header/forkMenu.ts:18 — Option-click still forks immediately when the header menu escapes into the native popup. This occurs when no handoff targets are available and the menu exceeds the pane height. WebPopupHost.picked sends only the row ID, and popupHost.ts:367 invokes target.click(), losing Option. The repaired Menu.tsx path is bypassed. Preserve modifiers through the native popup bridge too.

Verification limits: reviewed the full exact-head diff and surrounding paths. Could not rerun browser or native tests: Bun, Swift, and webview dependencies are absent.

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

Copy link
Copy Markdown
Collaborator Author

Review (codex-review-box/gpt-6-astra high, lane-place): SHIP at 5af5233

SHIP

No concrete correctness findings in head 5af5233f against base 17d64ea2, including DockBadge integration and modifier preservation.

Verification limits: read-only full diff and surrounding implementation review; reverse-patch and catalog JSON checks passed. Native/browser tests and app compilation could not run here because Swift, Bun, and web dependencies are unavailable. Pending integrated results remain unverified.

@teamleaderleo teamleaderleo removed the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 29, 2026
@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 29, 2026
@teamleaderleo
teamleaderleo merged commit 25b666b into feat-cmux-next Oct 29, 2026
208 of 214 checks passed
@teamleaderleo
teamleaderleo deleted the rail-opus-fork branch October 29, 2026 12:32
@github-actions

github-actions Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 5af5233f Deployed Oct 29, 2026 by teamleaderleo via namespace autofix #6204
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