Repository navigation
agent pane: a failed turn shows an error card with its cause and way out - #24312
Conversation
…ay out Leo: "we need to have prettier errors" and "we also wanna make sure we have good recoverable/informative disk errors tailscale erros for acpmux". A failed turn showed acpmux's bare "agent process closed" with an outlined Copy error. It now draws a card: one human cause line, the way out first (Retry, or Switch model for capacity and keys), and Details opening the agent's own words with Copy error. New kinds: a full disk, a tailnet that no longer reaches the chat's machine, an agent that quit mid-turn and one that could not start; anything unnamed reads "<agent> ran into a problem and stopped." acpmux's typed reason (the turn's errorCode, a string) wins over the words when it names one. The surface is the turn-error-card experiment (glass card, accent rail, quiet note); the glass card ships. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16162-34a1-7a20-bb81-72d00a8457c8&host=cosmic-gray
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Gallery before/after for
States
Pick other states with a Passes: CI passes on CI passes on Written by red: cmux-next checks (god files, concurrency, crash safety, l10n); NEW: Tour of |
|
Found 8 test failures on Blacksmith runners: Failures
|
|
Review (codex gpt-6.1-sol): BLOCK at 15fdf4f Blocking findings:
Non-blocking findings: None. Checked: the complete diff; classification precedence/false positives and human fallback; Retry row/prompt wiring and footer Retry; existing |
…ot connect Codex r1 at 15fdf4f: - "agent process closed" with a login or key error in its stderr read as the agent quitting, hiding Sign in again and Switch model. Quit and could-not-start now come last, after every named cause. - A tailnet host in a message that answered (a 401, a 529) read as Tailscale. Tailscale now needs a sign it did not connect. - A capacity failure drew no Retry in the card, though the test and the docs promise one after Switch model: Retry follows it, unfilled. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16162-34a1-7a20-bb81-72d00a8457c8&host=cosmic-gray
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16162-34a1-7a20-bb81-72d00a8457c8&host=cosmic-gray
Bugbot needs on-demand usage enabledBugbot 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. |
|
Bead |
|
Review (codex gpt-6.1-sol): BLOCK at fac5aa6 Blocking findings:
Non-blocking findings: None. Checked: complete diff; r1 process-wrapper/auth precedence and secondary Retry fixes; classification false positives, typed-code precedence and human fallback; Retry row/prompt wiring, footer Retry, Sign in again, Switch model, Copy error and Details chevron against the three existing tests; experiment arms/gallery, token-based CSS, five catalog keys across 21 locales and string |
Codex r3 at fac5aa6: "HTTP 401 Unauthorized from https://proxy.tail123.ts.net/...: user is logged out; please sign in again" matched the tailnet host and "logged out", so it read as Tailscale and lost Switch model. A sign-in refusal comes from a host that answered: it is never Tailscale now. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16162-34a1-7a20-bb81-72d00a8457c8&host=cosmic-gray
Bugbot needs on-demand usage enabledBugbot 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. |
|
Review (codex gpt-6.1-sol): BLOCK at 136f107 Blocking findings:
Non-blocking findings: None. Checked: full change and bounded head-pinned surrounding code; prior process-wrapper/auth precedence and secondary Retry fixes, the body-bearing 401 fix and remaining tailscale/unreachable/auth ordering, typed-code propagation/signatures and human fallback, card Retry row/prompt wiring and button order, the three existing Details/layout/signed-out tests and footer actions, experiment arms/gallery, token-based CSS and five catalog additions. No checkout, clone, fetch, builds, tests or tsc run; execution remains PR CI's responsibility. Head rechecked unchanged before posting. |
Codex r4 at 136f107: a timed-out request to https://proxy.tail123.ts.net/oauth/token read as answered (the URL says oauth), so it showed a proxy sign-in refusal instead of Tailscale. Only words outside URLs and tailnet host names count as a host's answer now. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16162-34a1-7a20-bb81-72d00a8457c8&host=cosmic-gray
|
Review (codex gpt-6.1-sol): BLOCK at cc4a073 Blocking findings:
Non-blocking findings: None. Checked: complete diff and six targeted head-pinned source/test files; r1 process-wrapper/auth precedence and secondary Retry fixes; r3 body-bearing 401 and r4 URL-only timeout cases; remaining tailscale/unreachable/auth ordering, typed-code propagation/signatures and human fallback; Retry row/prompt wiring, footer Retry, Sign in again, Switch model, Copy error and Details chevron against the three existing tests; experiment arms/gallery, token-based CSS, and five catalog keys across 21 locales with intact placeholders. No checkout, clone, fetch, builds, tests or tsc run; execution remains PR CI's responsibility. Head rechecked unchanged before posting. |
An auth word outside an address ("OAuth token refresh failed: … dial tcp …: i/o timeout") named
the operation, not a reply, so the card said proxy sign-in. Only an HTTP status or its reason
phrase counts as an answer, and a failed dial outranks it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16162-34a1-7a20-bb81-72d00a8457c8&host=cosmic-gray
Bugbot needs on-demand usage enabledBugbot 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. |
|
Review (codex gpt-6.1-sol): BLOCK at 2f1c67d Blocking findings:
Non-blocking findings: None. Checked: complete diff and six targeted head-pinned source/test files; r1 process-wrapper/auth precedence and secondary Retry, r3 body-bearing 401, r4 URL-only timeout and r5 OAuth-prefix timeout; remaining classification ordering, human fallback, Retry row/prompt wiring, footer Retry, Sign in again, Switch model, Copy error and Details chevron against the three existing tests; experiment arms/gallery, shared glass class and token-based CSS, five catalog keys across 21 locales with intact placeholders, and string errorCode propagation/signatures. No checkout, clone, fetch, builds, tests or tsc run; execution remains PR CI's responsibility. Head rechecked unchanged before posting. |
In a compact JSON error the address pattern ran on through `","status":401`, so the 401 a tailnet proxy answered was stripped with the URL and its "logged out" body read as Tailscale. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16162-34a1-7a20-bb81-72d00a8457c8&host=cosmic-gray
Bugbot needs on-demand usage enabledBugbot 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. |
|
Review (codex gpt-6.1-sol): BLOCK at d957826 Blocking findings:
Non-blocking findings: None. Checked: complete diff and six targeted head-pinned source/test files; r1 process-wrapper/auth precedence and secondary Retry, r3 body-bearing 401, r4 URL-only timeout, r5 OAuth-prefix dial timeout, and r6 compact-JSON delimiter fix; remaining classification ordering, human fallback, Retry row/prompt wiring, footer Retry, Sign in again, Switch model, Copy error and Details chevron against the three existing DOM tests; experiment arms/gallery, token-based CSS/shared glass class, five catalog keys across 21 locales with intact placeholders, and string errorCode propagation/signatures. No checkout, clone, fetch, builds, tests or tsc run; execution remains PR CI's responsibility. Head rechecked unchanged before posting. |
…ction A 401 from https://…ts.net/v1/messages?error=ETIMEDOUT read as a failed dial, so the card said Tailscale. Every connection check now reads only the words outside addresses. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16162-34a1-7a20-bb81-72d00a8457c8&host=cosmic-gray
|
Review (codex gpt-6.1-sol): SHIP at 1a9acbb Blocking findings: None found. Non-blocking findings: None. Checked: complete diff and six targeted head-pinned source/test files; independently traced the earlier process-wrapper/auth, secondary Retry, body-bearing 401, URL-only timeout, OAuth-prefix dial timeout, compact-JSON delimiter, and URL-embedded ETIMEDOUT regressions. Address exclusion now applies consistently to connection and answer evidence while preserving tailnet identification. Reviewed classification order/false positives, string errorCode propagation and signatures, human fallback, Retry row/prompt binding and button order, footer Retry/Sign in again/Switch model, Details chevron/Copy error against the three existing DOM tests, experiment arms/gallery, token-based CSS/shared ui-glass class, and five catalog keys across 21 locales with intact placeholders. No checkout, clone, fetch, builds, tests or tsc run; test execution and typechecking remain PR CI's responsibility. Head rechecked unchanged immediately before posting. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Orphaned: no activity for 13 h, and no lane holds a lease on it. The orphan sweep could not merge |
…card-merge # Conflicts: # webviews/src/agent-session/acpmux/conversation/TurnRows.tsx # webviews/src/experiments/registry.ts
|
Review (codex xhigh, correctness first): BLOCK at 61953c2 Blocking findings:
Non-blocking findings: None. Checked classification precedence and URL masking, recovery/button wiring, Details/Chevron/Copy behavior, footer actions, errorCode propagation, experiment registration, localization, and CSS; tests and tsc are CI-only here. |
|
Owned by transcript-parity on cosmic-gray · took over from session 01a16162 · session |
|
|
|
|
…quit; Retry needs its row Codex review: "pnpm: command not found" in the stderr of an agent that ran read as the agent failing to start, and the card offered Retry for a turn with no prompt row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…24312) (#24529) * Agent pane: localized strings for the failed-turn causes (split from #24312) Five turn.failure keys in 21 languages: diskFull, tailscale, agentExited, spawnFailed, generic. #24312 uses them; landing them first keeps that PR under the size rule. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Agent pane strings: Japanese disk-full line says the agent could not go on Codex review nit: the line read as "could not continue {harness}". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
Review (codex xhigh, correctness first): SHIP at e246f5e gpt-6.1-sol xhigh on cmux16, diff-only, after adopting this PR:
|
registry.ts conflicted with #24312, which registered turnErrorCard where this branch registered threadMinimapLit; both stay registered. Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16030-bf28-7072-b1f6-b83bbd0beacc&host=cosmic-gray
|
Shipped in:
|
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Leo-ask: ask-427cc7d8f5 (error card, relayed by claude-sr2)
Leo: "we need to have prettier errors" and "we also wanna make sure we have good recoverable/informative disk errors tailscale erros for acpmux".
What changes
A failed turn showed acpmux's bare
agent process closedabove an outlined Copy error button. Now a failed turn draws one card:ENOSPC,no space left,disk quota exceeded.tailscale,tailnet,*.ts.net.agent process closed, an exit code or signal, a broken pipe.ENOENT,command not found.ECONNREFUSED) still wins over "it quit".errorCodewhen it is a string, now reaches the row and wins over the text. The mapping matches words (disk/no_space,tailscale,peer/unreachable,spawn,exit/closed), so the codes acpmux-unify is adding (disk, tailscale, peer, spawn) map without a second change here.Versions
There are three versions as the
turn-error-cardexperiment: Glass card (ui-glass), Accent rail and Quiet note. They sit side by side in the gallery entryagent-pane.turn-error-card→ Compare arms. The variants cover Leo's "agent process closed", disk full, Tailscale, a typeddisk.full, spawn failure, rate limit, unknown, and Details open. I picked Glass card as the shipped default: it reads as the turn's answer, the way out is the one filled button, and it uses our glass. To dogfood the other arms, setlocalStorage["cmux.experiments"] = {"turn-error-card":"rail"}.Follow-ups (not in this PR)
app.actiononly runs New Tab omnibar actions), so those need a small native handler; that is its own PR. Until then the cause line says what to do and Retry is the way out.Size
About 570 lines of code and tests. The 660 catalog lines (five strings × 21 locales, non-English marked
needs_review) are split into #24529, which lands first. This PR's catalog lines are the same as #24529's, so once #24529 is in the base they drop out of this diff.Tests
test/turn-error-card.test.tsxcovers classification, the typed code, the human sentence, recovery order, and the card's DOM.turn-error-details,turn-error-layoutandsigned-out-harness(.cv-turn-note, the Details chevron, Sign in again, Switch model, Copy error).pr-owner(comment 6363193552). Changes since the earlier review:vp checkandvp fmt --checkadd no errors. The only errors are three base type errors intest/thread-minimap-stream.test.tsx, red on base 4213444 too.No capture: webview-only; the gallery entry above is the visual.
Original session: cosmic-gray
Agent session: cosmic-gray
🤖 Generated with Claude Code