Skip to content

feat(cmux-next): ship inline /btw side questions - #26108

Merged
teamleaderleo merged 45 commits into
feat-cmux-nextfrom
lane/btw-inline
Oct 29, 2026
Merged

teamleaderleo merged 45 commits into
feat-cmux-nextfrom
lane/btw-inline

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 27, 2026 •

Copy link
Copy Markdown
Collaborator

/btw <question> is enabled by default and answers in a small dismissible aside. It never becomes a steer, queued prompt, or main-turn message. This supersedes #24876; #25441 supplies the separate native palette action and #26105 supplies /side.

Leo, word for word: "So how about the slash side and the slash BTW command? Why are these commands not in yet? They need to be in. And they need to be in fast."

Claude uses its native side_question callback during an active turn. Idle chats and an unavailable callback use a bounded, disposable read-only fork, as other supported harnesses do. Native and fallback futures are boxed separately and share the 110-second deadline. Cleanup removes the acpmux record and the temporary Claude or Codex transcript, including when fork creation is cancelled.

The daemon advertises btw-inline-v1. Older daemons receive only the legacy request shape; an older app host's native.invalid_request or WebKit unsupported reply falls back to a regular side session. Selection checks prevent late replies from opening beside another chat. Quick Composer does not advertise /btw.

The native handler consumes one gesture, checks the source chat, and forwards the app origin marker so daemon folder trust remains enforced. Trust refusals retain their reason and folder and open the pane's existing Trust route. The aside offers a separate Retry click after Trust so both actions receive their own gesture. Tests use an open transport and a real Unix socket stand-in; the relay assertion waits for the observed request to avoid racing Network.framework delivery. A DEBUG input fix sends Chromium child-window capture events through the owning pane's existing gesture monitor.

Size rationale: the change stays together because the web aside, Swift native request, capability negotiation, Claude callback, disposable fork lifecycle, transcript cleanup, and regression tests implement one cross-language request contract. Splitting it would leave an app or daemon half unable to serve the command. The overlapping palette slice was removed.

Validation at 6100c9667405be0ec13cb713e981044ea664ff58:

  • Focused Rust/acpmux BTW integration run 40819866199: 10/10 passed, including idle and active Claude fallback and Codex fallback cleanup.
  • Rust unit regression run 40820231517: cancelled fork creation purges the transcript.
  • Earlier browser, Swift, and real-app validation remains documented in the comments; the exact-head Astra review, Swift suite, defaults guard, and capture are refreshed for this head.

Capture tour-agent-pane at eb4083f095b9 (fleet build, capture mini, text checked for private data)

Light Dark
light dark

Only pr-media captures are used. Historical tour stills: light, dark.

Current settled head: 8c32e12ebe7ad80a491b479fd86de353961be020.

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 5345db4: 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=pr26108 -f ref=lane/btw-inline -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 5345db46df (run 40940087919 attempt 1): 1 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 (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 chat-open-long.test.ts a 700-turn chat opened cold on a busy daemon shows its rows with the attach, never an empty page: failed (job)
  • seen on other PRs reasoning-own-control.test.ts New Tab at 760 px: the model button opens its menu, whose Effort row lists live levels: failed (job)
  • seen on other PRs reasoning-own-control.test.ts New Tab at 400 px: the model button opens its menu, whose Effort row lists live levels: failed (job)
  • seen on other PRs reasoning-own-control.test.ts New Tab at 300 px: the model button opens its menu, whose Effort row lists live levels: failed (job)
  • seen on other PRs reasoning-own-control.test.ts live chat at 760 px: the model button opens its menu, whose Effort row lists live levels: failed (job)
  • seen on other PRs reasoning-own-control.test.ts live chat at 400 px: the model button opens its menu, whose Effort row lists live levels: failed (job)
  • seen on other PRs reasoning-own-control.test.ts live chat at 300 px: the model button opens its menu, whose Effort row lists live levels: failed (job)
Matched log lines
web / react-apps-base-check (2): (fail) a 700-turn chat opened cold on a busy daemon shows its rows with the attach, never an empty page [17134.15ms]

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

Gallery before/after for 5345db4: 16 states rendered, 10 images differ, 2254 more touched states not rendered. Images are in the run's artifact, not on this public PR.

gh run download 40940087656 -R manaflow-ai/cmux -n gallery-advisory-26108-5345db46df0d66f5458e85bbb8b3e6e5c5445e10 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.auth-health/signed-in Apple System Colors Light unchanged 0% own mock.ts
agent-pane.auth-health/signed-in Apple System Colors unchanged 0% own mock.ts
agent-pane.auth-health/signed-out Apple System Colors Light unchanged 0% own mock.ts
agent-pane.auth-health/signed-out Apple System Colors unchanged 0% own mock.ts
agent-pane.auth-health/expired Apple System Colors Light unchanged 0% own mock.ts
agent-pane.auth-health/expired Apple System Colors unchanged 0% own mock.ts
agent-pane.auth-health/unknown Apple System Colors Light unchanged 0% own mock.ts
agent-pane.auth-health/unknown Apple System Colors unchanged 0% own mock.ts
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 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 Composer.tsx
agent-pane.composer/font-size-chat-14 Apple System Colors unchanged 0% own Composer.tsx
agent-pane.composer/font-size-new-chat-14 Apple System Colors Light unchanged 0% own Composer.tsx
agent-pane.composer/font-size-new-chat-14 Apple System Colors unchanged 0% own Composer.tsx
agent-pane.composer/font-size-new-tab-14 Apple System Colors Light unchanged 0% own Composer.tsx
agent-pane.composer/font-size-new-tab-14 Apple System Colors unchanged 0% own Composer.tsx
agent-pane.composer/font-size-chat-21 Apple System Colors Light unchanged 0% own Composer.tsx
agent-pane.composer/font-size-chat-21 Apple System Colors unchanged 0% own Composer.tsx

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

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

blacksmith-sh Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Found 7 test failures on Blacksmith runners:

Failures

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

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

@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.

@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

Review (review_btw_26108): SHIP at 936cf63

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Addressed review-26108-75b9. Added the missing bun:test imports. Inline fallback names now include a request UUID before publication, preventing concurrent requests from sharing a cleanup name; timeout cleanup therefore targets only its own session/transcript. New head: aafc5ddf9badfcdd2f2e9652fc71b5b9f1fd943a. Please rerun the box, GUI suite, capture, and defaults guard at this head.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Swift suites for inline /btw at 75b955eec5e82901227cf9f107862008db6753ee, run on an owned Mac display worker (package-test-lane.sh suite, CMUX_TEST_REQUIRE_GUI=1). The PR head is now 8c32e12ebe7ad80a491b479fd86de353961be020. The commits after 75b955ee change only cmux-tui Rust, the fake harness and a webview test, with no Swift, so these results hold for 8c32e12e too.

Head step aef8f0bdbc6081a98b13a856. Base step at the merge base e275db3f: a3f170bc097ffe3ba21a4882.

suite tests pass fail base (e275db3f)
AgentPaneBtwInlineRequestTests 4 (5 cases) 3 1: inlineBtwPreservesTrustRefusal, both cases not on base: the file is new in this PR
remoteInlineBtwDoesNotConsumeGesture 1 1 0 not on base: new
inlineBtwActionIsAllowlisted (AgentPageOpsBtwTests) 1 1 0 not on base: new
AgentPaneSideSessionsHeaderTests 3 3 0 2 tests, both pass
LocalRouterLongHomeTests 2 2 0 2 tests, both pass
DebugChromiumGestureTests 1 1 0 not on base: new
AgentPaneBtwInlineRequestTests.swift:89:5: Expectation failed: await relay.waitForRequest(containing: "_acpmux/btw")
  ↳ the request reached the daemon relay      (reason → "trust.pending" and "trust.untrusted")
  • Still red at 75b955ee, the same failure as at 50fb83db. It's a plain failed check, not a crash.
  • What passes: every check before line 89, which covers the refusal code, session_host origin, retryable, details.reason, details.cwd and the spent gesture.
  • What fails: the relay never records an _acpmux/btw request. Since eb4083f0 the model calls transport.acpmuxSocket ?? transport.socketPath, so the request may go to the handshake socket rather than the OneShotRelay path the test watches.
  • Owner: the test is new in this PR, so this red is not a base red and belongs to the PR.

Every other suite passes, including the new remoteInlineBtwDoesNotConsumeGesture.

Agent session: agent session

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by an agent session · took over from an earlier session · session

…line

# Conflicts:
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPageProvider.swift
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Merged feat-cmux-next into this branch with merge commits (0b48d96, then 2c83874 to pick up base's BrowserEntryRetirementTests strict-concurrency fix). No rebase or force push.

Conflict: the cmux.agent.* op list in Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPageProvider.swift. This PR adds chat.btw.inline and base adds chat.computerUsePreview on the same line. I kept both ops. Everything else merged cleanly.

Checks: cmux-ci compile-check --package CmuxNext passed at 2c83874. At 0b48d96 the only compile error was in BrowserEntryRetirementTests.swift, which is base's file and was already fixed on base. Rust, webview and guard checks are left to the PR's own CI.

This needs a re-review at the new head.

Agent session: agent session

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

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

BLOCK

  1. [P2] cmux-tui/crates/acpmux/src/hub/btw.rs:145: Transcript cleanup uses unresolved parent environment values. For example, a supported profile setting CLAUDE_CONFIG_DIR="${home}/isolated-claude" is expanded during spawn, but HarnessHomes::with_env skips values containing $. An inline fallback on a chat without completed turns therefore writes its transcript into the custom directory and searches the default directory during cleanup, leaving a discoverable ghost conversation. Family-default environment overrides are also omitted. Resolve the temporary session’s actual store path using the same environment layers and expansion as spawn before deleting its transcript.

teamleaderleo and others added 2 commits October 29, 2026 04:27
…ession spawned with

The inline fallback's cleanup looked for the temporary Claude/Codex
transcript with the parent chat's raw profile and preset env, so a store
set with a template (CLAUDE_CONFIG_DIR="${home}/isolated-claude", which
HarnessHomes::with_env skips) or by a family default was searched in the
default store and the ghost conversation stayed discoverable.

btw_cleanup now resolves the side session's env with spawn_profile_for,
the spawn's own layering (family and profile defaults, preset, ${home} /
${cwd} / ${model} / ~/ expansion, chat store, session env, route), read
before the kill. The parent env remains only as a fallback when the
profile no longer resolves. Tests cover a ${home} profile store and a
family-default store.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-ab1f035a409b977caceb
Resolves the composerSnapshot deps conflict in App.tsx: keeps this branch's always-reserved /btw (no opensSideSessions dep) and base's /side action (localCwd, quick).

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

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high, review-router): SHIP at 4424606

The earlier cleanup BLOCK is fixed: cleanup rebuilds the spawn-time profile, preset, family defaults and ${home}/${cwd} expansion before locating transcripts. No other P0-P2 correctness issues found. (Reviewed through the review-router route because no review box would start.)

Agent session: agent session

…gallery plays

- The /btw highlight names a Try it action (release-notary needs a tryIt or docs link).
- App.tsx's merged dependency list takes vp fmt's one-line form.
- The /btw aside gallery plays ask through an acpmux client: the asking variants run the
  mock daemon (which can now name capabilities for a gallery, here btw-inline-v1), show
  the chat it attached to in a folder it trusts, wait for the trust answer before typing,
  and answer chat.btw.inline as { text } like the app does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-ab1f035a409b977caceb
@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): BLOCK at 44f3394

BLOCK

  1. [P2] Creation errors bypass transcript cleanup — cmux-tui/crates/acpmux/src/hub/btw.rs:106–107. This branch propagates creation errors without removing the temporary harness transcript. For example, fork() copies the Claude/Codex transcript before saving the new session; if that save fails, the copied conversation remains discoverable. CreationGuard only purges acpmux state, and is installed after that save. Give the inline creation path ownership of transcript cleanup on errors as well as successful answers and timeouts.

teamleaderleo and others added 2 commits October 29, 2026 06:44
… btw path

Addresses review-26108-44f3's BLOCK at 44f3394.

- A fork whose session cannot be saved removes the transcript it copied (or its agent
  made) before returning the error: nothing owns it, and an inline /btw's fork must not
  outlive the question. The parent's own transcript is never touched.
- An inline creation that fails after publishing cleans up the request's own session and
  its transcript (found by the request-unique name and parent), as timeouts already did.
- Regression: inline_btw_fork_that_fails_to_save_leaves_no_copied_transcript (fails
  without the fork.rs change, passes with it).
- The btw request, harness env, mode, fork point, settle, model and cleanup futures are
  boxed: at 4424606, a_codex_side_session_runs_sandboxed_read_only_and_the_adapter_is_refused
  overflowed its stack under plain `cargo test` (it passes on feat-cmux-next 90e1666 and
  now passes here).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-ab1f035a409b977caceb
…into lane/btw-inline

# Conflicts:
#	cmux-tui/crates/acpmux/src/capabilities.rs
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

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

BLOCK

  1. [P2] Failed creation can still leave harness transcripts behind — btw.rs:121. new_session calls discard_failed_creation before returning startup/configuration errors (lifecycle.rs:312,407), removing the session from hub.sessions(). Consequently, targets() is empty here and btw_cleanup never runs. If the harness created a transcript before failing, it remains discoverable after the inline request fails. Retain the created session independently of the registry, or clean its transcript before purging it; cover a failure after harness initialization.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

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

BLOCK

  1. [P2] cmux-tui/crates/acpmux/src/hub/btw.rs:121 — Failed creation can still leave a harness transcript behind. If the fresh-session fallback starts its harness but then fails model/effort setup, new_session awaits discard_failed_creation before returning (lifecycle.rs:405–408). That removes the session from hub.sessions(), so targets() here returns nothing and btw_cleanup never runs. The ordinary purge deletes acpmux’s records, not the harness transcript. Retain the created session independently of the registry, or clean its transcript before purging it; add coverage for failure after harness startup.

…nscript

Addresses review-26108-e717's BLOCK at e717025 (and review-26108-80c4's at 80c4f4b).

`new_session` and `fork` discard a creation that fails after publishing
(`discard_failed_creation`, directly or through CreationGuard) before the inline request
can see the session, so its harness transcript survived. The inline request now marks its
request-unique session name for its lifetime (`Hub::inline_btw`, `InlineOwned`), and
`discard_failed_creation` runs `btw_cleanup` (purge plus the transcript in the session's
spawn store) for a marked session. Any other discarded session keeps its harness's files,
as before.

Regression: discarded_inline_creation_removes_its_transcript_and_only_its_own (fails
without the lifecycle.rs change, passes with it). hub_integration: 545 pass; the 2 that
fail (auto_resume retry stop, transcript_events orchestration fields) fail the same way on
feat-cmux-next 51e238d.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-ab1f035a409b977caceb
@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): BLOCK at 68fb280

BLOCK

  1. cmux-tui/crates/acpmux/src/hub/btw.rs:102 — [P2] Cleanup ownership can expire before cancelled creation is discarded. At timeout, with_inline_creation snapshots sessions before aborting. A fork running on another worker can publish after that snapshot, then be cancelled at its next await. Its CreationGuard schedules asynchronous cleanup, but task.await does not wait for that cleanup. The request can therefore remove this marker before discard_failed_creation looks it up, causing ordinary session deletion while leaving the copied harness transcript discoverable. Capture the cleanup metadata in CreationGuard, or retain ownership until its cleanup completes.

… with

Addresses review-26108-68fb's BLOCK at 68fb280.

CreationGuard purges a cancelled creation on a spawned task, which can run after the
inline request ended and dropped its mark; the purge then deleted the session but left
its harness transcript. The guard now reads the inline owner when it is made (right after
the session is published, while the request is alive) and passes it to the purge
(`discard_failed_creation_owned`). Direct discards still read the mark, which the request
holds while it awaits them.

Regression: a_creation_guard_cleans_the_inline_transcript_after_the_request_ended (fails
when the guard reads the mark at purge time instead, passes with the capture).
hub_integration: 545 pass; the 2 failures fail the same way on feat-cmux-next 51e238d.

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

Copy link
Copy Markdown
Collaborator Author

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

BLOCK

  1. [P2] webviews/src/agent-session/acpmux/App.tsx:5284 — Inline asides are invisible in an attached chat with no turns. /btw is enabled whenever a session ID exists, but its notes only enter transcriptRows; freshView still derives from the unchanged main transcript, so line 10420 keeps rendering EmptyState. The composer clears and the request runs, but neither its answer nor failure appears. Include the current session’s BTW notes in the empty-state decision so submitting a question reveals its aside.

Addresses review-26108-1e23's BLOCK at 1e23d62.

/btw is offered in any attached chat, but its aside is a transcript row, and a chat with
no turn kept drawing its empty state, so neither the answer nor a failure appeared. The
empty state now gives way once the chat has an aside (`hasBtwNotes`); the BtwNotes store
is read before `freshView` for that.

Regression (browser): "/btw in a chat with no turn yet leaves the empty state and shows
its aside" in agent-pane-btw-side-session.test.ts, red with App.tsx at 1e23d62, green
here; the file's other 11 tests still pass.

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

Copy link
Copy Markdown
Collaborator Author

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

SHIP

JSONSerialization writes `/` as `\/`, so waitForRequest(containing: "_acpmux/btw")
never matched and both "native inline btw preserves folder trust refusals" cases
failed (CI swift test priority run and fleet run at aecd470). Compare against
the unescaped request text.

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

Copy link
Copy Markdown
Collaborator Author

Review (codex gpt-6-astra high, review-router): SHIP at 5345db4

Full diff 51e238d..5345db4 plus the delta since the previous SHIP at aecd470 (OneShotRelay.waitForRequest now matches the unescaped JSON, since JSONSerialization writes / as \/).

Findings: No correctness, security, regression, or test-validity findings.

@github-actions

github-actions Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

This branch was previously deployed

3 inactive (2 outdated) deployments
ci-routing-agent — 5345db46 Deployed Oct 29, 2026 by teamleaderleo via wait for same-key tree publisher #77899
artifacts — 1e23d620 Deployed Oct 29, 2026 by teamleaderleo via publish the Windows daemon to R2 #77310
sentry-dsyms — 1e23d620 Deployed Oct 29, 2026 by teamleaderleo via upload cmux-tui dSYMs to Sentry #77310
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:high Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant