From 223aa88a9938b8cd91ebfdeb05b9fedcc7fb7694 Mon Sep 17 00:00:00 2001 From: Wesley Simplicio Date: Sun, 5 Jul 2026 18:39:25 -0300 Subject: [PATCH] fix(slack): guard _resolve_thread_ts against async/cron deliveries using stale thread context Cron/async deliveries (reply_to=None) should always go to the home/target channel, but _resolve_thread_ts() returns metadata.thread_id/thread_ts even when reply_to is None, routing messages to the thread where the cron job was created instead of the configured home channel. Add early return None when reply_to is None, so async deliveries never inherit stale thread context from metadata. Closes #59097 --- plugins/platforms/slack/adapter.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/plugins/platforms/slack/adapter.py b/plugins/platforms/slack/adapter.py index bf76bd85021a..1342ae61c90a 100644 --- a/plugins/platforms/slack/adapter.py +++ b/plugins/platforms/slack/adapter.py @@ -2188,6 +2188,13 @@ class SlackAdapter(BasePlatformAdapter): thread replies. Messages that originate inside an existing thread are always replied to in-thread to preserve conversation context. """ + # Guard: async/cron deliveries (reply_to=None) should always go to + # the home/target channel, never to a stale thread context captured + # in metadata. Only real replies to inbound messages preserve thread + # routing. + if reply_to is None: + return None + # When reply_in_thread is disabled (default: True for backward compat), # only thread messages that are already part of an existing thread. # For top-level channel messages, the inbound handler sets