fix(acp): require owner for runtime controls#97953
Conversation
|
Codex review: needs maintainer review before merge. Reviewed June 29, 2026, 8:13 PM ET / 00:13 UTC. Summary PR surface: Source +6, Tests +32, Docs +6. Total +44 across 4 files. Reproducibility: yes. Current main is source-reproducible and the Mantis Telegram proof shows /acp status reaching the ACP handler on main, then being denied on the PR for the same non-owner user. Review metrics: 1 noteworthy metric.
Stored data model Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Land the centralized ACP owner gate once maintainers explicitly accept the compatibility change for owner-gated ACP runtime controls, especially /acp status. Do we have a high-confidence way to reproduce the issue? Yes. Current main is source-reproducible and the Mantis Telegram proof shows /acp status reaching the ACP handler on main, then being denied on the PR for the same non-owner user. Is this the best way to solve the issue? Yes for the code shape. The central ACP dispatcher is the narrowest maintainable gate point; the remaining question is maintainer acceptance of the compatibility change. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 2cf765f73263. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source +6, Tests +32, Docs +6. Total +44 across 4 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
|
@openclaw-mantis telegram desktop proof: verify a non-owner is blocked from /acp spawn while an owner can still run an allowed ACP command. |
Mantis Telegram Desktop ProofSummary: Mantis captured native Telegram Desktop before/after GIFs for /acp spawn command access.
Motion-trimmed clips: |
Behavioral proof on PR head
|
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
(cherry picked from commit 6ead092)
(cherry picked from commit 6ead092)




Summary
What Problem This Solves
Fixes an issue where an authorized non-owner channel sender could invoke ACP runtime controls that are reserved for owners or internal Gateway administrators.
Why This Change Was Made
ACP runtime-control actions now use the existing owner gate in addition to the existing internal
operator.adminscope gate. Read-only diagnostics and discovery remain available to authorized non-owner senders.Changes
operator.adminenforcement for internal Gateway clients./acp sessions,/acp doctor,/acp install, and/acp helpavailable to authorized non-owners.User Impact
Non-owner channel users can no longer create, steer, close, or reconfigure ACP runtime sessions. Existing owner and internal Gateway admin workflows continue to work.
Validation
Evidence
eca0f26e6ca8af7d4d68e971f4b856fd13685939: the same authorized non-owner/acp statusrequest reaches the ACP handler on main, while the candidate repliesYou are not authorized to use this command.(run, artifact, inline proof)operator.writereturnsThis /acp action requires operator.admin on the internal channel.; internaloperator.adminresolvessenderIsOwner: trueand reaches the ACP status handler, which returns the expectedACP_SESSION_INIT_FAILEDfor the deliberately non-ACP proof session.node scripts/run-vitest.mjs src/auto-reply/reply/commands-acp.test.ts --reporter=verbose(60 tests passed, including all 12 owner-gated actions, retained non-owner diagnostics, internal write denial, and internal admin success)node scripts/run-oxlint.mjs src/auto-reply/reply/commands-acp.ts src/auto-reply/reply/commands-acp.test.tsnode_modules/.bin/oxfmt --check docs/tools/acp-agents.md docs/tools/slash-commands.md src/auto-reply/reply/commands-acp.ts src/auto-reply/reply/commands-acp.test.tsnode scripts/check-docs-mdx.mjs docs README.mdnode scripts/format-docs.mjs --checkgit diff --checkNotes
/acp sessions,/acp doctor,/acp install, and/acp help.