openclaw - ✅(Solved) Fix [Bug]: Slack exec approval button sends malformed 'always' instead of 'allow-always' [1 pull requests, 1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#59091Fetched 2026-04-08 02:28:45
View on GitHub
Comments
0
Participants
1
Timeline
4
Reactions
0
Participants
Timeline (top)
cross-referenced ×2closed ×1locked ×1

In Slack approval flows, clicking the approval button can send a malformed command payload using always instead of the documented allow-always. This causes approvals not to persist and leads to repeated approval prompts, expired approval IDs, and user confusion.

Root Cause

Because always is not valid, the approval does not persist. Users then see repeated prompts, and by the time they retry manually they may hit unknown or expired approval id.

Fix Action

Fix / Workaround

Environment

  • OpenClaw version: observed on 2026-04-01 against recent builds with other active exec-approval regressions
  • Surface: Slack
  • Context: direct/group Slack sessions via OpenClaw
  • Related local symptoms: repeated exec prompts, unknown or expired approval id, agent-scoped allowlists requiring manual patching

PR fix notes

PR #59217: fix(approvals): use canonical decision values in interactive button payloads

Description (problem / solution / changelog)

Summary

  • buildExecApprovalCommandText was converting allow-always to the shorter alias always in button payloads. On Slack, interactive button values bypass the text command parser's DECISION_ALIASES mapping, so the raw always value reaches the approval resolver instead of the expected allow-always. This causes approvals not to persist and leads to repeated prompts.
  • The fix uses canonical decision values (allow-always) directly in button payloads, eliminating the alias indirection. The text command parser still accepts both always and allow-always, so text-based approvals remain backward compatible.
  • Note: Telegram's standalone buildTelegramExecApprovalButtons in approval-buttons.ts intentionally retains the shorter always alias to stay within Telegram's 64-byte callback_data limit. Telegram's parser handles the alias translation correctly.

Closes #59091

Test plan

  • exec-approval-reply.test.ts (8 tests pass)
  • exec-approval-forwarder.test.ts (updated button value expectations)
  • plugin-approval-forwarder.test.ts (updated button value expectations)
  • approval-renderers.test.ts (updated button value expectations)
  • exec-approvals-handler.test.ts (Telegram handler, updated expectations)
  • inline-buttons.test.ts (Telegram standalone buttons, unchanged -- intentionally uses alias)

Changed files

  • extensions/telegram/src/exec-approvals-handler.test.ts (modified, +1/-1)
  • src/infra/exec-approval-forwarder.test.ts (modified, +3/-3)
  • src/infra/exec-approval-reply.test.ts (modified, +4/-4)
  • src/infra/exec-approval-reply.ts (modified, +1/-1)
  • src/infra/plugin-approval-forwarder.test.ts (modified, +1/-1)
  • src/plugin-sdk/approval-renderers.test.ts (modified, +2/-2)
RAW_BUFFERClick to expand / collapse

Summary

In Slack approval flows, clicking the approval button can send a malformed command payload using always instead of the documented allow-always. This causes approvals not to persist and leads to repeated approval prompts, expired approval IDs, and user confusion.

Environment

  • OpenClaw version: observed on 2026-04-01 against recent builds with other active exec-approval regressions
  • Surface: Slack
  • Context: direct/group Slack sessions via OpenClaw
  • Related local symptoms: repeated exec prompts, unknown or expired approval id, agent-scoped allowlists requiring manual patching

Repro

  1. Trigger an exec approval prompt in Slack.
  2. Use the interactive Slack button for the persistent approval path.
  3. Observe the button payload / resulting command text.

Observed

The Slack interaction payload used: /approve <full-id> always

Expected documented values are:

  • allow-once
  • allow-always
  • deny

Because always is not valid, the approval does not persist. Users then see repeated prompts, and by the time they retry manually they may hit unknown or expired approval id.

Expected

Slack approval buttons should emit the exact valid command: /approve <id> allow-always

Notes

This appears distinct from the broader exec approval regressions already open, because this is specifically a malformed Slack button payload / command generation issue.

It may be related to message button generation for approval actions or a mismatch between UI labels and backend enum values.

extent analysis

TL;DR

Update the Slack approval button payload to use the correct allow-always parameter instead of always to persist approvals.

Guidance

  • Verify the button payload generation logic to ensure it uses the correct parameter allow-always as documented.
  • Check the UI labels and backend enum values for any mismatches that could be causing the incorrect payload generation.
  • Test the approval flow with the corrected payload to ensure approvals persist and repeated prompts are resolved.
  • Review related issues and regressions to determine if this fix addresses other symptoms such as unknown or expired approval id.

Example

No code snippet is provided as the issue does not specify the exact code or implementation details.

Notes

This fix assumes that the issue is solely related to the malformed Slack button payload and does not address potential underlying issues with the approval flow or related regressions.

Recommendation

Apply workaround: Update the Slack approval button payload to use the correct allow-always parameter to persist approvals, as this is a targeted fix for the specific issue described.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING