<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Bug on FixClaw</title>
        <link>https://fixclaw.dev/tags/bug/</link>
        <description>Recent content in Bug on FixClaw</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <lastBuildDate>Mon, 01 Jan 0001 00:00:00 +0000</lastBuildDate><atom:link href="https://fixclaw.dev/tags/bug/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>Agent Timeout Does Not Display Error in Web UI - UI Hangs Indefinitely</title>
            <link>https://fixclaw.dev/troubleshooting/agent-timeout-does-not-display-error-in-web-ui---ui-hangs-indefinitely/</link>
            <pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate>
            <guid>https://fixclaw.dev/troubleshooting/agent-timeout-does-not-display-error-in-web-ui---ui-hangs-indefinitely/</guid>
            <description>&lt;h2 id=&#34;symptom&#34;&gt;Symptom&#xA;&lt;/h2&gt;&lt;p&gt;When an LLM request exceeds the agent timeout threshold, the following behavior is observed:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Gateway logs&lt;/strong&gt; show &lt;code&gt;ConnectionAbortedError: [WinError 10053]&lt;/code&gt; indicating the client aborted the connection&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Agent logs&lt;/strong&gt; correctly log the timeout with &lt;code&gt;decision=surface_error reason=timeout&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Web UI&lt;/strong&gt; continues to display a loading spinner indefinitely&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;No error message&lt;/strong&gt; is presented to the user&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;User cannot retry&lt;/strong&gt; without manually refreshing the page, losing conversation context&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The user expects to see a timeout error message and have the ability to retry, but instead the UI becomes unresponsive.&lt;/p&gt;&#xA;&lt;h2 id=&#34;root-cause-analysis&#34;&gt;Root Cause Analysis&#xA;&lt;/h2&gt;&lt;p&gt;The investigation reveals that the root cause is a &lt;strong&gt;race condition in error event propagation&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;When the agent detects an LLM timeout, it correctly identifies the timeout condition and decides to surface an error (&lt;code&gt;decision=surface_error reason=timeout&lt;/code&gt;)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;However, the agent&amp;rsquo;s timeout mechanism terminates the connection (causing &lt;code&gt;ConnectionAbortedError&lt;/code&gt;) &lt;strong&gt;before&lt;/strong&gt; the WebSocket can send the &lt;code&gt;final&lt;/code&gt; event containing the &lt;code&gt;status: &amp;quot;timeout&amp;quot;&lt;/code&gt; information&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The Web UI client never receives the &lt;code&gt;final&lt;/code&gt; event because the connection has already been terminated, leaving it in an indeterminate state showing a perpetual loading spinner&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The custom gateway (&lt;code&gt;ai_router.py&lt;/code&gt;) functions correctly with retry logic, but cannot compensate for the agent aborting the connection prematurely&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The core issue is that the &lt;strong&gt;error status is logged but not communicated&lt;/strong&gt; to the UI before the connection teardown occurs.&lt;/p&gt;&#xA;&lt;h2 id=&#34;solution&#34;&gt;Solution&#xA;&lt;/h2&gt;&lt;p&gt;To resolve this issue, ensure that the &lt;code&gt;final&lt;/code&gt; event with error status is always sent to the Web UI &lt;strong&gt;before or during&lt;/strong&gt; connection teardown when a timeout occurs:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Modify the agent timeout handler&lt;/strong&gt; to ensure the &lt;code&gt;final&lt;/code&gt; event is flushed to the WebSocket before the connection is terminated&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Wrap the error propagation&lt;/strong&gt; in a try-finally block that guarantees the &lt;code&gt;final&lt;/code&gt; event is sent even when the connection is being aborted:&#xA;try:&#xA;# timeout handling logic&#xA;finally:&#xA;# Ensure final event is sent before connection abort&#xA;await send_final_event(status=&amp;ldquo;timeout&amp;rdquo;, error=&amp;ldquo;Agent request timed out&amp;rdquo;)&#xA;# Then safely abort the connection&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Add a timeout buffer&lt;/strong&gt; that allows the final event to be delivered before the connection is forcibly closed&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Verify WebSocket closure order&lt;/strong&gt; - the &lt;code&gt;final&lt;/code&gt; event should be sent and acknowledged before &lt;code&gt;ConnectionAbortedError&lt;/code&gt; is raised&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;code-location&#34;&gt;Code Location&#xA;&lt;/h3&gt;&lt;p&gt;The fix should be implemented in the agent&amp;rsquo;s timeout handling logic where the connection abort occurs, ensuring proper event sequencing.&lt;/p&gt;&#xA;&lt;h2 id=&#34;prevention&#34;&gt;Prevention&#xA;&lt;/h2&gt;&lt;p&gt;To prevent this issue from recurring:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Implement event-before-abort pattern&lt;/strong&gt;: Always send status events before terminating connections in any error scenario, not just timeouts&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Add integration tests&lt;/strong&gt;: Create tests that verify the UI receives proper error events when agents timeout, specifically checking for &lt;code&gt;final&lt;/code&gt; event delivery&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;WebSocket health checks&lt;/strong&gt;: Add monitoring to detect when the UI is stuck in a loading state and automatically trigger recovery&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Timeout handler review&lt;/strong&gt;: Audit all timeout and abort code paths to ensure consistent error event propagation&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Client-side timeout handling&lt;/strong&gt;: Add a client-side timeout fallback in the Web UI that detects when no events have been received for a configured period and displays an appropriate message&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;additional-information&#34;&gt;Additional Information&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Affected deployment&lt;/strong&gt;: Docker deployment on Ubuntu-based container with Windows 11 host&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Frequency&lt;/strong&gt;: Intermittent - occurs when LLM response exceeds the 60-second agent timeout threshold&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Workaround&lt;/strong&gt;: Refresh the page (loses conversation context)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Related components&lt;/strong&gt;:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Agent timeout handler&lt;/li&gt;&#xA;&lt;li&gt;WebSocket event dispatcher&lt;/li&gt;&#xA;&lt;li&gt;Web UI state management&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;sources&#34;&gt;Sources&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/openclaw/openclaw/issues/64793&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GitHub Issue #64793&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item><item>
            <title>TTS Voice Note Delivery Regression in v2026.4.9</title>
            <link>https://fixclaw.dev/troubleshooting/tts-voice-note-delivery-regression-in-v202649/</link>
            <pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate>
            <guid>https://fixclaw.dev/troubleshooting/tts-voice-note-delivery-regression-in-v202649/</guid>
            <description>&lt;h2 id=&#34;symptom&#34;&gt;Symptom&#xA;&lt;/h2&gt;&lt;p&gt;After upgrading to OpenClaw v2026.4.9, TTS (text-to-speech) voice note delivery is completely broken:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Outbound TTS (Voice Notes from Assistant):&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;User sends a text message to the assistant via Telegram&lt;/li&gt;&#xA;&lt;li&gt;Assistant calls &lt;code&gt;tts&lt;/code&gt; tool with &lt;code&gt;channel: &amp;quot;telegram&amp;quot;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Tool returns &lt;code&gt;Generated audio reply&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Expected:&lt;/strong&gt; Voice note delivered to user&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Actual:&lt;/strong&gt; Only text response received; no voice note&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Inbound STT (Voice Notes to Assistant):&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;User sends a voice note to the assistant via Telegram&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Expected:&lt;/strong&gt; Audio transcribed and processed&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Actual:&lt;/strong&gt; No transcription; &lt;code&gt;pdf&lt;/code&gt; tool fails with &amp;ldquo;Expected PDF but got audio/ogg&amp;rdquo;, &lt;code&gt;image&lt;/code&gt; tool fails with &amp;ldquo;Unsupported media type: audio&amp;rdquo;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Evidence from logs:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Gateway logs show &lt;strong&gt;no TTS-related events&lt;/strong&gt; after the &lt;code&gt;tts&lt;/code&gt; tool call&lt;/li&gt;&#xA;&lt;li&gt;No &lt;code&gt;sendVoice&lt;/code&gt; API calls are made to Telegram&lt;/li&gt;&#xA;&lt;li&gt;Text messages continue to work correctly (proving Telegram connectivity is intact)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Historical logs show the last &lt;code&gt;sendVoice&lt;/code&gt; attempts failing:&#xA;telegram sendVoice failed: Network request for &amp;lsquo;sendVoice&amp;rsquo; failed!&#xA;telegram final reply failed: HttpError: Network request for &amp;lsquo;sendVoice&amp;rsquo; failed!&lt;/p&gt;&#xA;&lt;h2 id=&#34;root-cause-analysis&#34;&gt;Root Cause Analysis&#xA;&lt;/h2&gt;&lt;p&gt;The investigation reveals that the &lt;strong&gt;tool→channel delivery handoff is broken&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;ElevenLabs API is functioning correctly&lt;/strong&gt; — Audio files are successfully generated by the &lt;code&gt;tts&lt;/code&gt; tool&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Tool reports success&lt;/strong&gt; — &lt;code&gt;Generated audio reply&lt;/code&gt; message confirms audio creation&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Broken handoff&lt;/strong&gt; — The audio file is &lt;strong&gt;never passed to the gateway&amp;rsquo;s Telegram channel&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;No &lt;code&gt;sendVoice&lt;/code&gt; call&lt;/strong&gt; — No Telegram API call is initiated to deliver the voice note&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Regression introduced in v2026.4.9&lt;/strong&gt; — The change from pre-v2026.4.9 behavior (corrupted delivery) to v2026.4.9 (no delivery) indicates a code regression in how the &lt;code&gt;tts&lt;/code&gt; tool result is handled by the channel delivery layer&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Pre-v2026.4.9 behavior:&lt;/strong&gt; TTS generated audio but it was corrupted (appearing as long strings of exclamation marks in webchat).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;v2026.4.9 behavior:&lt;/strong&gt; TTS generates audio but delivers nothing at all.&lt;/p&gt;&#xA;&lt;p&gt;The shift from &amp;ldquo;corrupted delivery&amp;rdquo; to &amp;ldquo;no delivery&amp;rdquo; suggests the audio file handling code path was either removed or broken during the v2026.4.9 update.&lt;/p&gt;&#xA;&lt;h2 id=&#34;solution&#34;&gt;Solution&#xA;&lt;/h2&gt;&lt;p&gt;This is a &lt;strong&gt;code regression bug&lt;/strong&gt; that requires a fix in the OpenClaw codebase. The following steps are needed:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Restore the &lt;code&gt;sendVoice&lt;/code&gt; call path&lt;/strong&gt; in the channel delivery layer — Ensure the audio file generated by the &lt;code&gt;tts&lt;/code&gt; tool is properly passed to &lt;code&gt;sendVoice&lt;/code&gt; for Telegram delivery&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Verify audio file handling&lt;/strong&gt; — Confirm the audio file path/content is correctly transferred between the tool result handler and the Telegram sender&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Add integration tests&lt;/strong&gt; for TTS→Telegram delivery to prevent future regressions&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Fix STT handling&lt;/strong&gt; — Ensure inbound voice notes are properly recognized and routed to the STT pipeline instead of being rejected as unsupported media types&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Temporary Workaround:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Users may attempt to use the &lt;code&gt;message&lt;/code&gt; tool with explicit media path for file attachment (untested)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;prevention&#34;&gt;Prevention&#xA;&lt;/h2&gt;&lt;p&gt;To prevent similar regressions in future releases:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Add automated TTS integration tests&lt;/strong&gt; — Create end-to-end tests that verify voice notes are actually delivered to Telegram (not just that the tool reports success)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Test the full delivery pipeline&lt;/strong&gt; — Ensure both generation AND delivery are tested together, not in isolation&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Monitor channel delivery layer changes&lt;/strong&gt; — Any modifications to how tool results are processed should include regression testing for media delivery&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Log delivery confirmation&lt;/strong&gt; — Add explicit logging when &lt;code&gt;sendVoice&lt;/code&gt; is called to make failures more visible in logs&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Multi-channel testing&lt;/strong&gt; — Test TTS functionality when multiple channels (Telegram + webchat) are active simultaneously, as session handling issues may compound the problem&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;additional-information&#34;&gt;Additional Information&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Affected versions:&lt;/strong&gt; OpenClaw v2026.4.9 (updated 2026-04-09) and potentially later versions&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Previous working behavior:&lt;/strong&gt; Pre-v2026.4.9 had corrupted audio delivery&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;TTS Provider tested:&lt;/strong&gt; ElevenLabs (&lt;code&gt;eleven_multilingual_v2&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Channel:&lt;/strong&gt; Telegram&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Network connectivity:&lt;/strong&gt; Confirmed working (text messages deliver successfully)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;API credentials:&lt;/strong&gt; ElevenLabs credentials verified functional via manual API calls&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Multi-session factor:&lt;/strong&gt; Session handling issues may contribute when Telegram and webchat are used simultaneously&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;sources&#34;&gt;Sources&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/openclaw/openclaw/issues/64272&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GitHub Issue #64272&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item><item>
            <title>Slack requireMention: true Bypassed for Thread Replies After Prior Bot Participation</title>
            <link>https://fixclaw.dev/troubleshooting/slack-requiremention-true-bypassed-for-thread-replies-after-prior-bot-participat/</link>
            <pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate>
            <guid>https://fixclaw.dev/troubleshooting/slack-requiremention-true-bypassed-for-thread-replies-after-prior-bot-participat/</guid>
            <description>&lt;h2 id=&#34;symptom&#34;&gt;Symptom&#xA;&lt;/h2&gt;&lt;p&gt;When OpenClaw is configured with &lt;code&gt;requireMention: true&lt;/code&gt; for a Slack channel, the bot still responds to messages in a thread that do not mention the bot, &lt;strong&gt;after&lt;/strong&gt; the bot has previously participated in that same thread.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Reproduction Steps:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Configure a Slack channel with &lt;code&gt;requireMention: true&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Start a thread and explicitly mention the OpenClaw bot in the first message (or any reply)&lt;/li&gt;&#xA;&lt;li&gt;Observe OpenClaw replies as expected&lt;/li&gt;&#xA;&lt;li&gt;Send another reply in the same thread &lt;strong&gt;without&lt;/strong&gt; mentioning the bot&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Unexpected behavior:&lt;/strong&gt; OpenClaw may still reply, despite &lt;code&gt;requireMention: true&lt;/code&gt; being set&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Impact:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bot generates unnecessary noise in Slack threads&lt;/li&gt;&#xA;&lt;li&gt;Responds on behalf of others without being explicitly requested&lt;/li&gt;&#xA;&lt;li&gt;Breaks user expectation that the bot only responds when tagged&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;root-cause-analysis&#34;&gt;Root Cause Analysis&#xA;&lt;/h2&gt;&lt;p&gt;The issue stems from how OpenClaw&amp;rsquo;s Slack integration handles &lt;strong&gt;implicit mentions&lt;/strong&gt; in threaded conversations.&lt;/p&gt;&#xA;&lt;h3 id=&#34;technical-flow&#34;&gt;Technical Flow&#xA;&lt;/h3&gt;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Thread Participation Tracking:&lt;/strong&gt;&#xA;When OpenClaw delivers a reply in a thread, it records the thread participation:&#xA;if (anyReplyDelivered &amp;amp;&amp;amp; participationThreadTs)&#xA;recordSlackThreadParticipation(account.accountId, message.channel, participationThreadTs);&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Implicit Mention Calculation:&lt;/strong&gt;&#xA;For subsequent messages in that thread, OpenClaw checks if the bot has participated:&#xA;const implicitMention = Boolean(&#xA;!isDirectMessage &amp;amp;&amp;amp;&#xA;ctx.botUserId &amp;amp;&amp;amp;&#xA;message.thread_ts &amp;amp;&amp;amp;&#xA;(&#xA;message.parent_user_id === ctx.botUserId ||&#xA;hasSlackThreadParticipation(account.accountId, message.channel, message.thread_ts)&#xA;)&#xA;);&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Mention Gating Logic:&lt;/strong&gt;&#xA;The &lt;code&gt;implicitMention&lt;/code&gt; flag is passed to the mention gating resolver:&#xA;const mentionGate = resolveMentionGatingWithBypass({&#xA;isGroup: isRoom,&#xA;requireMention: Boolean(shouldRequireMention),&#xA;canDetectMention,&#xA;wasMentioned,&#xA;implicitMention,&#xA;&amp;hellip;&#xA;});&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Effective Mention Decision:&lt;/strong&gt;&#xA;The gating function treats &lt;code&gt;implicitMention&lt;/code&gt; as equivalent to being mentioned:&#xA;function resolveMentionGating(params) {&#xA;const implicit = params.implicitMention === true;&#xA;const bypass = params.shouldBypassMention === true;&#xA;const effectiveWasMentioned = params.wasMentioned || implicit || bypass;&#xA;return {&#xA;effectiveWasMentioned,&#xA;shouldSkip: params.requireMention &amp;amp;&amp;amp; params.canDetectMention &amp;amp;&amp;amp; !effectiveWasMentioned&#xA;};&#xA;}&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;root-cause&#34;&gt;Root Cause&#xA;&lt;/h3&gt;&lt;p&gt;The core problem is that &lt;strong&gt;prior thread participation is treated as an implicit mention&lt;/strong&gt;, which effectively bypasses the &lt;code&gt;requireMention: true&lt;/code&gt; configuration. Once OpenClaw has replied in a thread, subsequent messages in that thread will always trigger responses, regardless of whether the bot is mentioned.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;solution&#34;&gt;Solution&#xA;&lt;/h2&gt;&lt;h3 id=&#34;immediate-workaround&#34;&gt;Immediate Workaround&#xA;&lt;/h3&gt;&lt;p&gt;Until this bug is fixed in a future release, consider the following workarounds:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Use Separate Threads for Bot Interactions:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Start a new thread when you want to interact with OpenClaw&lt;/li&gt;&#xA;&lt;li&gt;Avoid replying in threads where the bot has already participated&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Temporarily Disable Thread Replies:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If frequent in-thread discussions occur without wanting bot participation, manually archive or close threads&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Adjust &lt;code&gt;requireMention&lt;/code&gt; at the Cost of Usability:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Setting &lt;code&gt;requireMention: false&lt;/code&gt; globally will allow all messages to trigger responses (not recommended as a long-term solution)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;code-level-fix-for-developers&#34;&gt;Code-Level Fix (For Developers)&#xA;&lt;/h3&gt;&lt;p&gt;The fix should modify the Slack integration to respect &lt;code&gt;requireMention: true&lt;/code&gt; regardless of thread participation. In the &lt;code&gt;resolveMentionGating&lt;/code&gt; function, the logic should be updated so that when &lt;code&gt;requireMention&lt;/code&gt; is explicitly &lt;code&gt;true&lt;/code&gt;, only explicit mentions are accepted:&lt;/p&gt;&#xA;&lt;p&gt;function resolveMentionGating(params) {&#xA;const implicit = params.implicitMention === true;&#xA;const bypass = params.shouldBypassMention === true;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;// When requireMention is true, implicit mentions should not bypass the check&#xA;const effectiveWasMentioned = params.wasMentioned || (params.requireMention ? false : (implicit || bypass));&#xA;&#xA;return {&#xA;    effectiveWasMentioned,&#xA;    shouldSkip: params.requireMention &amp;amp;&amp;amp; params.canDetectMention &amp;amp;&amp;amp; !effectiveWasMentioned&#xA;};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;}&lt;/p&gt;&#xA;&lt;p&gt;Alternatively, the &lt;code&gt;implicitMention&lt;/code&gt; calculation could be modified to not consider thread participation when &lt;code&gt;requireMention&lt;/code&gt; is enabled for the channel.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;prevention&#34;&gt;Prevention&#xA;&lt;/h2&gt;&lt;p&gt;To prevent unexpected behavior until this bug is fixed:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Review Thread Usage:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Be aware that bot participation in a thread may cause unintended future replies&lt;/li&gt;&#xA;&lt;li&gt;Use direct messages for isolated bot interactions&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Monitor Bot Responses:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Keep an eye on channels with &lt;code&gt;requireMention: true&lt;/code&gt; for unexpected bot behavior&lt;/li&gt;&#xA;&lt;li&gt;Report any instances of the bot responding to untagged messages&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Stay Updated:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Monitor the GitHub issue for fixes and updates&lt;/li&gt;&#xA;&lt;li&gt;Apply patches promptly when they become available&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Documentation:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Document this known limitation for team members using the Slack integration&lt;/li&gt;&#xA;&lt;li&gt;Include workarounds in internal runbooks&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;additional-information&#34;&gt;Additional Information&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Affected Versions:&lt;/strong&gt; OpenClaw 2026.3.23-2 (and likely earlier versions)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Platform:&lt;/strong&gt; Amazon Linux 2023.10.20260302&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Install Method:&lt;/strong&gt; npm global&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Model:&lt;/strong&gt; openai/gpt-5.4&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The bug is classified as a &lt;strong&gt;behavior bug&lt;/strong&gt; rather than a crash, as it produces incorrect output without causing system failure. The severity is &amp;ldquo;Annoying&amp;rdquo; with frequency rated as &amp;ldquo;Each time.&amp;rdquo;&lt;/p&gt;&#xA;&lt;h3 id=&#34;related-code-locations&#34;&gt;Related Code Locations&#xA;&lt;/h3&gt;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;File&lt;/th&gt;&#xA;          &lt;th&gt;Purpose&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;/runtime-api-BI9wNO54.js&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Main Slack integration runtime&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;hasSlackThreadParticipation()&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Checks if bot participated in thread&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;recordSlackThreadParticipation()&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Records bot participation in thread&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;resolveMentionGating()&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Determines if bot should respond&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;sources&#34;&gt;Sources&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/openclaw/openclaw/issues/64277&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GitHub Issue #64277&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item></channel>
</rss>
