-
-
Notifications
You must be signed in to change notification settings - Fork 80.7k
ackReactionScope: "all" is silently overridden by isRoomEvent gate #87368
Copy link
Copy link
Closed
Labels
P2Normal backlog priority with limited blast radius.Normal backlog priority with limited blast radius.clawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.ClawSweeper found an open linked pull request for this issue.clawsweeper:needs-product-decisionClawSweeper marked this issue as needing a product or behavior decision.ClawSweeper marked this issue as needing a product or behavior decision.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.ClawSweeper found a high-confidence source-level issue reproduction.impact:message-lossChannel message delivery can be lost, duplicated, or misrouted.Channel message delivery can be lost, duplicated, or misrouted.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.Very strong issue quality with high-confidence source-level or clear reproduction.
Description
Metadata
Metadata
Assignees
Labels
P2Normal backlog priority with limited blast radius.Normal backlog priority with limited blast radius.clawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.ClawSweeper found an open linked pull request for this issue.clawsweeper:needs-product-decisionClawSweeper marked this issue as needing a product or behavior decision.ClawSweeper marked this issue as needing a product or behavior decision.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.ClawSweeper found a high-confidence source-level issue reproduction.impact:message-lossChannel message delivery can be lost, duplicated, or misrouted.Channel message delivery can be lost, duplicated, or misrouted.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.Very strong issue quality with high-confidence source-level or clear reproduction.
Type
Fields
Priority
None yet
Summary
channels.<provider>.ackReactionScope: "all"does not actually ack all inbound messages. A hardcoded!isRoomEventgate inmessage-handler.processsuppresses ack reactions for any inbound classified asroom_event, even though the scope explicitly says "all".This contradicts the schema description for
ackReactionScope, which advertises"all"as unconditional.Version
OpenClaw 2026.5.26 (10ad3aa)
Repro
openclaw config get.✨) appears on the user's message.messages.reactionsis[]for the user message.Manual reactions via
message(action=reactionAdd)work fine — the issue is specifically the auto-ack code path.Root cause
dist/message-handler.process-LhrhAUW3.js:904-905:The
!isRoomEventshort-circuit runs beforeshouldAckReaction(...), soscope: "all"never gets a chance to override it. TheshouldAckReactionhelper inack-reactions.tscorrectly returnstruefor scope"all", but the outer expression masks that.Because
messages.groupChat.unmentionedInbound: "room_event"is a legitimate, documented configuration (quiet always-on listening), inbound thread messages without an explicit @-mention are classified asroom_event— and ack reactions get silently dropped.Why it matters
ackReactionScopeschema help text says"all"= "always send the ack reaction" — users expect literally all messages.unmentionedInboundoverride at account / guild / channel level, so users can't selectively re-enable ack in a single thread.Proposed fix
Two viable options:
Option A (preferred) — Make scope
"all"truly bypassisRoomEvent:Option B — Add an explicit override flag:
Option A is cleaner since the contradiction is already in the doc/contract of
"all".Workaround for users today
@-mention the bot in the thread → classified as
user_request→ ack fires.