Skip to content

cmux NEXT: support inline /btw side questions - #24876

Closed
teamleaderleo wants to merge 5 commits into
feat-cmux-nextfrom
codex/cmux-next-btw
Closed

teamleaderleo wants to merge 5 commits into
feat-cmux-nextfrom
codex/cmux-next-btw

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 24, 2026 •

Copy link
Copy Markdown
Collaborator

What changed

Leo, 2026-10-24: “we need to support /btw”.

The composer needs /btw <question> while the main turn is running. The answer stays attached to the ask in a small dismissible aside and never becomes a steer, queued prompt, or main-turn message.

This adds inline /btw for every harness:

  • Claude Code sends the native side_question control request through the running stream-json process.
  • Codex and other harnesses use a bounded, one-shot read-only fork in the same cwd and current model, then discard it on success, refusal, or timeout.
  • The composer reserves /btw in slash completion, preserves legacy split side-chat callers, and keeps attachment drafts intact.
  • The transcript aside is session-bound, anchored near the ask, localized, accessible, and dismissible.

Fixes #24872

Validation

  • bun test test/btw-notes.test.ts test/cmux-command-btw.test.ts test/header-state-side-sessions.test.ts — 7 passed.
  • Chromium browser lane previously passed 6 tests / 20 assertions on the feature path; the post-review recursive-side regression was added but its rerun hit the shared Vite warm-up timeout (no feature assertion failure).
  • Gallery build bun run gallery:build; Chromium gallery matrix at exact head 5b558714a269ac9143e1e1ce70402a3b44ce48d9: before, answered light/dark, pending, failed, Arabic, and dismissible states mounted with no overflow or errors (play status pass/warn only).
  • scripts/web-lint.sh --base cf59385454b7187747e750ac207feffb7ec12a7c --new-only — passed; inherited base findings reported by the helper.
  • python3 scripts/cmux-next/prepush-gate.py --base cf59385454b7187747e750ac207feffb7ec12a7c --head 5b558714a269ac9143e1e1ce70402a3b44ce48d9 — no new violations.
  • cargo fmt --all -- --check, git diff --check, and Swift syntax verification passed.
  • Focused Rust test was attempted but the repository heavy-build guard blocked native cargo test on Big Red (receipt 8443c02a7d023125); no cargo-test green claim.

The full web check still reports existing base design-token/layer/text-focus/type findings; the new-only lint gate confirms this change adds none.

pr-overlap reported five hot-file overlaps (#24335, #24272, #24293, #24223, #24468), all unrelated translator/inspector features; no /btw implementation overlap was found.

agent-identity footer
Agent session: big-red

Gallery evidence

Exact-head Chromium gallery captures from agent-pane.btw-aside (5b558714a269ac9143e1e1ce70402a3b44ce48d9):

Before / after (dark):

before dark 640 en
answered dark 640 en

Light theme after:

answered light 640 en

@blacksmith-sh

blacksmith-sh Bot commented Oct 24, 2026 •

Copy link
Copy Markdown

Found 82 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmp1nan_r31/summary-fail.json (live):/summary-fail.json (live): View Logs
/tmp/tmpbfyvekcz/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
bench OTHER_SWIFT_FLAGS is 'OTHER_SWIFT_FLAGS=$(inherited) -DCMUX_BENCH_HOOKS -DCMUX_BL
OCKING_CHECKS'/
bench OTHER_SWIFT_FLAGS is 'OTHER_SWIFT_FLAGS=$(inherited) -DCMUX_BENCH_HOOKS -DCMUX_BL
OCKING_CHECKS'
View Logs
bench OTHER_SWIFT_FLAGS is 'OTHER_SWIFT_FLAGS=$(inherited) -DCMUX_BENCH_HOOKS -DCMUX_BL
OCKING_CHECKS'/
bench OTHER_SWIFT_FLAGS is 'OTHER_SWIFT_FLAGS=$(inherited) -DCMUX_BENCH_HOOKS -DCMUX_BL
OCKING_CHECKS'
View Logs
convention violations found (ERROR lines above)./
convention violations found (ERROR lines above).
View Logs
nightly.yml prepare-nightly-variant: 'Package prepared app for signing' is not in list/
nightly.yml prepare-nightly-variant: 'Package prepared app for signing' is not in list
View Logs

...and 72 more test failures. View all on Blacksmith: run 40246442704, run 40246442677

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-k6l3x created for this PR by the cmux coordinator.

@github-actions

github-actions Bot commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 5b55871: 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=pr24876 -f ref=codex/cmux-next-btw -f platform=macos -f backend_mode=local

Probably yours: composer-row-rhythm.test.ts fails here but not on main's latest full suite. Seen on other PRs too (likely flaky): agent-pane-agents-pill.test.ts, agent-pane-background-tasks.test.ts, changelog-pictures.test.tsx and 28 more.

CI failed on 5b558714a2 (run 40078284462 attempt 1): 4 code, 1 unknown.

Job Verdict Why
web / react-apps-check (1) code a web test failed
web / react-apps-check (2) code a web test failed
web / react-apps-check (3) code a web test failed
web / react-apps-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 agent-pane-agents-pill.test.ts by default the running agents sit in the tray above the composer, not in the transcript: failed (job)
  • seen on other PRs agent-pane-background-tasks.test.ts the summary card lists the chat's background tasks: running ones first, the finished folded: failed (job)
  • seen on other PRs changelog-pictures.test.tsx a change's picture opens enlarged on a click, and Close closes it: failed (job)
  • seen on other PRs chat-open-perf.test.ts a live row drawn before a slow chat is read shows whole, with no fade after: failed (job)
  • seen on other PRs composer-persistent-scrollbar.test.ts chromium > an overflowing draft keeps a thin thumb on every frame, through typing, idle, blur, focus...: failed (job)
  • seen on other PRs composer-persistent-scrollbar.test.ts webkit > an overflowing draft keeps a thin thumb on every frame, through typing, idle, blur, focus a...: failed (job)
  • seen on other PRs composer-row-rhythm.test.ts at 760 px (light): one gap in a group, one between groups, Send at the edge: failed (job)
  • new in this PR composer-row-rhythm.test.ts at 760 px (dark): one gap in a group, one between groups, Send at the edge: failed (job)
  • seen on other PRs claimPaint.test.tsx a pooled Settings page claimed by the host reports its paint once its first screen is in: failed (job)
  • seen on other PRs claimPaint.test.tsx a Settings page loaded fresh reports its first paint once its first screen is in: failed (job)
  • ... 22 more in the job logs
Matched log lines
web / react-apps-check (1): (fail) by default the running agents sit in the tray above the composer, not in the transcript [1456.34ms]
web / react-apps-check (2): (fail) a pooled Settings page claimed by the host reports its paint once its first screen is in [610.71ms]
web / react-apps-check (3): (fail) a chat on an SSH machine > counts its running turn from the prompt and offers no machine switch mid-chat [1619.41ms]
web / react-apps-check (4): (fail) agent history > lists every chat, multi-selects, and brings the selection into active sessions [31107.98ms]

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

Tour of 5b558714a2 (run): no media. The tour job failed before the tour ran (build or setup); the run log has the output.

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

gh run download 40078048828 -R manaflow-ai/cmux -n gallery-advisory-24876-5b558714a269ac9143e1e1ce70402a3b44ce48d9 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.btw-aside/before Apple System Colors Light new 0% own BtwAside.gallery.tsx
agent-pane.btw-aside/before Apple System Colors new 0% own BtwAside.gallery.tsx
agent-pane.btw-aside/answered Apple System Colors Light new 0% own BtwAside.gallery.tsx
agent-pane.btw-aside/answered Apple System Colors new 0% own BtwAside.gallery.tsx
agent-pane.btw-aside/pending Apple System Colors Light new 0% own BtwAside.gallery.tsx
agent-pane.btw-aside/pending Apple System Colors new 0% own BtwAside.gallery.tsx
agent-pane.btw-aside/failed Apple System Colors Light new 0% own BtwAside.gallery.tsx
agent-pane.btw-aside/failed Apple System Colors new 0% own BtwAside.gallery.tsx
agent-pane.btw-aside/dismiss Apple System Colors Light new 0% own BtwAside.gallery.tsx
agent-pane.btw-aside/dismiss Apple System Colors new 0% own BtwAside.gallery.tsx
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 changed 23.4% own App.tsx
agent-pane.chat-width/wide-blocks Apple System Colors Light unchanged 0% own App.tsx
agent-pane.composer/new-chat Apple System Colors Light unchanged 0% own Composer.tsx
agent-pane.composer/new-chat Apple System Colors unchanged 0% own Composer.tsx
agent-pane.composer/side-session Apple System Colors Light unchanged 0% own Composer.tsx
agent-pane.composer/side-session Apple System Colors unchanged 0% own Composer.tsx
agent-pane.composer/new-chat-suggest-open Apple System Colors Light unchanged 0% own Composer.tsx
agent-pane.composer/new-chat-suggest-open Apple System Colors unchanged 0% own Composer.tsx
agent-pane.composer/new-chat-suggest-failing Apple System Colors Light unchanged 0% own Composer.tsx
agent-pane.composer/new-chat-suggest-failing Apple System Colors unchanged 0% own Composer.tsx
agent-pane.composer/new-chat-suggest-draft Apple System Colors Light unchanged 0% own Composer.tsx
agent-pane.composer/new-chat-suggest-draft Apple System Colors unchanged 0% own Composer.tsx
agent-pane.composer/new-chat-reasoning Apple System Colors Light unchanged 0% own Composer.tsx
agent-pane.composer/new-chat-reasoning Apple System Colors unchanged 0% own Composer.tsx
agent-pane.composer/agent-home Apple System Colors Light unchanged 0% own Composer.tsx
agent-pane.composer/agent-home Apple System Colors unchanged 0% own Composer.tsx
agent-pane.composer/agent-home-path Apple System Colors Light unchanged 0% own Composer.tsx
agent-pane.composer/agent-home-path Apple System Colors unchanged 0% own Composer.tsx

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

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Independent xhigh review receipt: delegated Codex session review_btw_final inspected exact head 5b55871 against base cf59385 and returned SHIP with no P0-P3 findings. It verified the recursive side-session guard, inline read policy, native side_question path, fallback cleanup, transcript anchoring, localization, and focused tests.

@teamleaderleo teamleaderleo left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Independent xhigh review receipt from delegated Codex session review_btw_final: exact head 5b558714a269ac9143e1e1ce70402a3b44ce48d9 against base cf59385454b7187747e750ac207feffb7ec12a7c is SHIP with no P0-P3 findings. It verified the recursive side-session guard, inline ApproveReads/DenyAll policy, native side_question path, fallback cleanup, transcript anchoring, localization, and focused tests.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by nx-chat on big-red · session

Restores the palette action (agentPane.sideQuestion) behind the
sideSessions context bit that ActionRegistry.publishSideSessions keeps
in step with Debug Settings' Side sessions (/btw), with its 21-locale
strings and the regenerated action exports.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cursor

cursor Bot commented Oct 25, 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 14 h, and no lane holds a lease on it. The orphan sweep could not merge feat-cmux-next in: conflicts in cmux-tui/crates/acpmux/src/claude_stdio/mod.rs, cmux-tui/crates/acpmux/src/claude_stdio/outbound.rs, plans/cmux-next/actions.md, webviews/src/agent-session/acpmux/App.tsx. Listed for a lane to resolve.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra xhigh, next-review): BLOCK at b314e23

  • AgentPaneSideQuestionPaletteTests.swift:27: Passing nil restores the newly changed true default; it no longer disables side sessions. Both the “off by default” test and the toggle-off test at line 64 therefore fail. Set .bool(false) explicitly.
  • hub_integration/btw.rs:232: The new test expects exactly "echo: answer inline", but this non-forking harness receives and echoes the appended <cmux-btw-context> containing the earlier conversation. The exact-equality assertion fails; account for that context.

Tests could not be run from the supplied partial snapshot.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Superseded by #26108, which carries the inline /btw side-question implementation. Closing this stale conflicting branch so the replacement can land.

This branch had an error being deployed

2 failed and 2 inactive deployments
artifacts — b314e232 Deployed Oct 26, 2026 by teamleaderleo via publish to R2 #53023
sentry-dsyms — b314e232 Deployed Oct 26, 2026 by teamleaderleo via upload cmux-tui dSYMs to Sentry #53023
cmux-tui-merge-tree — b314e232 Deployed Oct 25, 2026 by teamleaderleo via publish the merge tree #5809
ci-routing-agent — b314e232 Deployed Oct 25, 2026 by teamleaderleo via namespace autofix #2748
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

media-tour Run the cmux-next UI tour (cmux-next-media.yml) on every push risk:high Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant