Skip to content

Agent chat: an approved permission ask reads on its tool row; Bypass permissions' own approvals draw nothing - #33408

Merged
teamleaderleo merged 1 commit into
feat-cmux-nextfrom
fix/approved-row-bypass
Nov 3, 2026
Merged

teamleaderleo merged 1 commit into
feat-cmux-nextfrom
fix/approved-row-bypass

Conversation

@teamleaderleo

Copy link
Copy Markdown
Collaborator

Leo, on a loose transcript line in the NEXT nightly, Approved: cd /tmp; for i in 1 2 3; do gh issue create --repo manaflow-ai/cmux --title "$( [ $i = 1 ] && echo 'Cloud start-session: (Bypass permissions): "but what's going on with these?"

Cause

acpmux logs permission_auto with fullAccess whenever a chat in Bypass permissions (Claude Code) or Full access (Codex) approves an ask on its own, including Claude Code's own guards (#25214). The pane (direct.ts recordFullAccess) drew every one of those as a permissionRecord row: "Approved: {title} ({mode})". The title is Claude Code's permission title, which is the raw command cut to a length, so the line showed half a command with the mode glued onto it. Ask-mode approvals (recordPermission) drew the same kind of loose line ("Allowed: …").

Change

  • An ask the chat's Bypass permissions or Full access approved on its own, with no card shown, draws nothing. The call's own row already shows what ran.
  • An approval the person gave (Allow, Always allow, or switching to the highest mode while the card was open) puts a dim Approved mark at the edge of the tool row it approved (ApprovedMark.tsx, tool.approved). It no longer draws a receipt line. The mark stays on the call as its result streams in.
  • Denied and unanswered asks keep their receipt line ("Denied: …", "Not answered: …"). So does an approval whose call this page has not drawn.
  • New string tools.approved, with its translations taken from the existing header.prReview.approved.

Gallery: agent-pane.approved-tool-row (ask-mode-approved, run-one-approved, bypass-nothing).
Spec: leo-workspace design/chat-transcript.md ("Permission approvals"), updated alongside.

Tests

  • test/agent-pane-permission-receipt.test.ts is rewritten to match: approved asks show no receipt line and mark call-test; bypass, full-access and policy approvals show nothing; mode-switch approvals, live and replayed, mark the call once; a resync marks it once and keeps the reply whole.
  • Typecheck, lint and pane-english pass on the fleet. The browser test runs in CI.

🤖 Generated with Claude Code

Agent session: agent session

…permissions' own approvals draw nothing

Leo, 2026-11-02, on a loose 'Approved: cd /tmp; for i in 1 2 3; do gh issue create ... (Bypass permissions)' line: "but what's going on with these?"

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
@teamleaderleo teamleaderleo added the leo-named-fix An obvious fix to something Leo named: lands on push, review runs in parallel label Nov 3, 2026
@teamleaderleo
teamleaderleo merged commit 6479948 into feat-cmux-next Nov 3, 2026
69 of 87 checks passed
@teamleaderleo
teamleaderleo deleted the fix/approved-row-bypass branch November 3, 2026 08:35
@github-actions

github-actions Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 5970dc5: 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=pr33408 -f ref=fix/approved-row-bypass -f platform=macos -f backend_mode=local

Gallery before/after for 5970dc5: the capture produced no images (run).

Yours to fix: agent-pane-permission-receipt.test.ts (a file this PR changes), agent-pane-permission-receipt.test.ts (a file this PR changes), agent-pane-permission-receipt.test.ts (a file this PR changes). This PR merged before its CI finished: fix forward on main.

CI failed on 5970dc5328 (run 41604368177 attempt 1): 1 code, 1 unknown.

Job Verdict Why
web / react-apps-base-check (1) code a web test failed
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Failures:

  • yours agent-pane-permission-receipt.test.ts answered live, the card goes and its receipt shows in the turn: failed (job)
  • yours agent-pane-permission-receipt.test.ts switching either harness to full access settles its live card as an approval on its call: failed (job)
  • yours agent-pane-permission-receipt.test.ts a resync that brings the answer keeps one approval and the reply that streams after it whole: failed (job)
Matched log lines
web / react-apps-base-check (1): (fail) answered live, the card goes and its receipt shows in the turn [6527.60ms]

Not re-run automatically: web / react-apps-base-check (1), 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; a job it gathers is red on this change (its line here); do not merge until green; see lane-rules
red: web / react-apps-base-check (1); NEW webview test reds: test/agent-pane-permission-receipt.test.ts > switching either harness to full access settles its live card as an approval on its call; test/agent-pane-permission-receipt.test.ts > answered live, the card goes and its receipt shows in the turn; test/agent-pane-permission-receipt.test.ts > a resync that brings the answer keeps one approval and the reply that streams after it whole; do not merge until green; see lane-rules
red: web / react-apps-check; a job it gathers is red on this change (its line here); do not merge until green; see lane-rules

Shipped in:

@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Nov 3, 2026
teamleaderleo added a commit that referenced this pull request Nov 3, 2026
The live and resync cases of agent-pane-permission-receipt checked the Approved mark while the call
still ran, when the live line draws it; they now finish the call first. Fixes the red #33408 left.


Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
teamleaderleo added a commit that referenced this pull request Nov 3, 2026
Fix-forward of the review finding on #33408: an MCP call renders through McpCallRows, which never drew tool.approved, so its approval vanished once the receipt line went.


Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
cmux-bot Bot pushed a commit that referenced this pull request Nov 3, 2026
…29938's live line (#33614)

* base red: the spacing table finds the live line across its lead span (#33241)

#33241 draws the live line's verb in its own span ("Sending" | " message to …"),
so no single text node holds "Sending message to" and step-to-live / live-to-step
measured nothing. The test now finds the live line by its row's text.

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

* base red: the codex live line test reads the live line's column class (#33157)

#33157 gives the live line `cv-worked--live` (its words on the status rows' text
column), so its quiet box renders "cv-worked cv-worked--live is-quiet".

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

* base red: the working-counts tray lists its subagents newest first (#33364)

#33364 orders the open running tray newest first: Tester (spawned after Reviewer)
now leads.

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

* base red: the live permission tests move the turn past the approved call (#33408, #33439)

In a running turn with nothing after it, the latest finished call is lifted onto the
live line (turns.ts liftedStep, #29938), so its row and its Approved mark are not drawn.
#33439 pushed only the call's completion; the tests now push the reply's first words
after it, the state the passing resync test already reaches.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

This branch was successfully deployed

No deployments
ci-routing-agent — 5970dc53 Deployed Nov 3, 2026 by teamleaderleo via cmux-tui tree preflight #104978
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

leo-named-fix An obvious fix to something Leo named: lands on push, review runs in parallel risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant