fix(exec-approval): stop misattributing Allow Always unavailability to policy#97740
Conversation
|
Codex review: needs maintainer review before merge. Reviewed July 11, 2026, 5:56 AM ET / 09:56 UTC. Summary PR surface: Source -22, Tests +125. Total +103 across 50 files. Reproducibility: yes. Native Telegram before/after proof uses the same redirected command, and current-main source confirms the false explanation is emitted when Allow Always is absent. Review metrics: none identified. Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Risk before merge
Maintainer options:
Next step before merge
Maintainer decision needed
Security Review detailsBest possible solution: Refresh this complete neutral-copy implementation onto current main, regenerate the conflicted i18n metadata, run exact-head shared approval and UI i18n gates, land it as the single canonical fix, and then close the overlapping candidates with merge proof. Do we have a high-confidence way to reproduce the issue? Yes. Native Telegram before/after proof uses the same redirected command, and current-main source confirms the false explanation is emitted when Allow Always is absent. Is this the best way to solve the issue? Yes. Neutral wording is the narrowest truthful fix because the shared renderer inputs do not carry a canonical cause; it covers all existing callers without new API, configuration, or protocol surface. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against d8bf51b4625d. Label changesLabel justifications:
Evidence reviewedPR surface: Source -22, Tests +125. Total +103 across 50 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
Review history (4 earlier review cycles)
|
|
Heads up: the only red check ( |
Mantis Telegram Desktop ProofSummary: Mantis captured Telegram Desktop before/after proof for the exec approval prompt wording.
Motion-trimmed clips: |
012c66f to
8aa5b6f
Compare
|
Addressed both review blockers: (1) the i18n defect is fixed — all 20 locale bundles now carry the translated neutral string and meta hashes legitimately match regenerated bundles (no more stale-but-marked-current); (2) added a real after-fix approval prompt render in the PR body with the main-vs-branch contrast for |
8aa5b6f to
1396383
Compare
6922240 to
bbb3886
Compare
bbb3886 to
4b85e7b
Compare
4b85e7b to
4eab04b
Compare
…o policy Allow Always is dropped both when policy ask=always AND when a command is non-persistable (e.g. shell redirect `2>&1` -> one-shot), but the prompt always claimed 'effective approval policy requires approval every time'. That's misleading for the non-persistable case (openclaw#97069). Reword to reason-neutral 'Allow Always is unavailable for this command.' across all approval surfaces, update en + 20 locale bundles, refresh i18n meta, and the matching tests. Closes openclaw#97069
4eab04b to
a53668a
Compare
* origin/main: fix(cron): abort superseded reconciliation hooks (#104368) ci(release): expose Telegram runtime preflight stage (#104387) fix(status): avoid false shell-wrapper audit warnings (#81778) fix: retry live Gateway readiness proof (#104374) fix(exec-approval): stop misattributing Allow Always unavailability to policy (#97740) fix: preserve Mac bundle during live builds (#104376) chore(docs): translate with GPT-5.6 xhigh test: wire Control UI suite into CI, fix its broken tests, drop dead harness surface (#104361) fix(ui): hide group submenu separator when New group is the only entry (#104370) fix(discord): reset progress drafts across queued turns (#102341) docs(cli): clarify that exec-policy show and approvals get exclude per-session /exec overrides (#94999) fix(discord): single-source thread-binding default placement and guard artifact parity (#104342) fix(agents): add tool-activity heartbeat to keep subagent alive during tool calls (#95536) fix(maint): reuse recent same-PR hosted gates (#104355)
…o policy (openclaw#97740) * fix(exec-approval): stop misattributing Allow Always unavailability to policy Allow Always is dropped both when policy ask=always AND when a command is non-persistable (e.g. shell redirect `2>&1` -> one-shot), but the prompt always claimed 'effective approval policy requires approval every time'. That's misleading for the non-persistable case (openclaw#97069). Reword to reason-neutral 'Allow Always is unavailable for this command.' across all approval surfaces, update en + 20 locale bundles, refresh i18n meta, and the matching tests. Closes openclaw#97069 * fix(exec-approval): stop misattributing Allow Always unavailability to policy * test(ui): await exec approval render updates * chore(ui): sync approval i18n metadata --------- Co-authored-by: saju01 <[email protected]> Co-authored-by: openclaw-clownfish[bot] <280122609+openclaw-clownfish[bot]@users.noreply.github.com> Co-authored-by: Vincent Koc <[email protected]>
* origin/main: fix(cron): abort superseded reconciliation hooks (openclaw#104368) ci(release): expose Telegram runtime preflight stage (openclaw#104387) fix(status): avoid false shell-wrapper audit warnings (openclaw#81778) fix: retry live Gateway readiness proof (openclaw#104374) fix(exec-approval): stop misattributing Allow Always unavailability to policy (openclaw#97740) fix: preserve Mac bundle during live builds (openclaw#104376) chore(docs): translate with GPT-5.6 xhigh test: wire Control UI suite into CI, fix its broken tests, drop dead harness surface (openclaw#104361) fix(ui): hide group submenu separator when New group is the only entry (openclaw#104370) fix(discord): reset progress drafts across queued turns (openclaw#102341) docs(cli): clarify that exec-policy show and approvals get exclude per-session /exec overrides (openclaw#94999) fix(discord): single-source thread-binding default placement and guard artifact parity (openclaw#104342) fix(agents): add tool-activity heartbeat to keep subagent alive during tool calls (openclaw#95536) fix(maint): reuse recent same-PR hosted gates (openclaw#104355)




What Problem This Solves
Fixes an issue where users running a command with a shell redirect (e.g.
openclaw --version 2>&1) underask=on-misssaw the approval prompt claim "The effective approval policy requires approval every time, so Allow Always is unavailable." That is false: the same command without2>&1does offer Allow Always, so the policy is not "always". The real reason is the command is non-persistable (runtime shell payload → one-shot), but the message blamed policy, misleading operators into thinking their config required per-command approval.Affected surface: exec approval prompts across all channels (chat reply, native forwarder, plugin reaction runtime, exec runtime, gateway server-method, Web UI) + all 20 localized Control UI bundles.
Why This Change Was Made
Allow Always is dropped in two distinct cases — policy
ask=always, and the command being non-persistable/one-shot — but a single message hard-asserted the policy case. Reworded to a reason-neutral, truthful line for both: "Allow Always is unavailable for this command." No decision/behavior logic changed. English + 20 locale bundles + generated i18n meta are all updated together so localized users get the corrected copy and the i18n check stays consistent.User Impact
Operators no longer get a misleading claim that their approval policy requires approval every time when they merely piped/redirected a command, in any language.
Evidence
Real after-fix prompt (rendered live from this branch,
ask=always, redirected command):Before, on origin/main (same inputs):
The effective approval policy requires approval every time, so Allow Always is unavailable.Real setup tested: built tree, full
pnpm install; rendered both viabuildExecApprovalPendingReplyPayload; ran vitest + typecheck + i18n.Commands run after this patch:
Observed result after fix: neutral copy across all 6 emit-sites; 20 locales regenerated with translated neutral string (no English fallbacks); i18n meta consistent; tests/typecheck/lint green.
Not tested: no UI screenshot (string-only); translations are direct, native-equivalent rewords of the existing key.
Closes #97069