fix(slack): prefer current thread session for inherited outbound replies#97168
Conversation
|
Codex review: needs real behavior proof before merge. Reviewed June 30, 2026, 7:30 PM ET / 23:30 UTC. Summary PR surface: Source +3, Tests +27. Total +30 across 2 files. Reproducibility: yes. at source level: inherited reply metadata can become 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. Rank-up moves:
Proof guidance:
Mantis proof suggestion Risk before merge
Maintainer options:
Next step before merge
Security Review findings
Review detailsBest possible solution: Land one canonical Slack route-level fix that makes inherited same-thread outbound mirrors use the root/current thread session, preserves explicit and unknown reply targeting, and is backed by real Slack or session-store proof. Do we have a high-confidence way to reproduce the issue? Yes, at source level: inherited reply metadata can become Is this the best way to solve the issue? No as written. The current branch changes only Slack Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against a841c2788202. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source +3, Tests +27. Total +30 across 2 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
|
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
4ae0243 to
7f934f3
Compare
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
Land-ready maintainer verification for
Known proof gap: no credentialed live Slack workspace replay was run. The reporter supplied deployment evidence, and the repaired owner path plus tri-state regression coverage directly proves the routing decision. |
…ies to avoid delivery-mirror session sprawl
7f934f3 to
adb1979
Compare
|
Merged via squash.
|
…ies (openclaw#97168) * fix(slack): prefer current thread session for inherited outbound replies to avoid delivery-mirror session sprawl * fix(slack): require explicit replyToIsExplicit===false for current-session precedence * fix(slack): canonicalize inherited thread replies --------- Co-authored-by: Peter Steinberger <[email protected]>
…ies (openclaw#97168) * fix(slack): prefer current thread session for inherited outbound replies to avoid delivery-mirror session sprawl * fix(slack): require explicit replyToIsExplicit===false for current-session precedence * fix(slack): canonicalize inherited thread replies --------- Co-authored-by: Peter Steinberger <[email protected]>
…ies (openclaw#97168) * fix(slack): prefer current thread session for inherited outbound replies to avoid delivery-mirror session sprawl * fix(slack): require explicit replyToIsExplicit===false for current-session precedence * fix(slack): canonicalize inherited thread replies --------- Co-authored-by: Peter Steinberger <[email protected]>
…ies (openclaw#97168) * fix(slack): prefer current thread session for inherited outbound replies to avoid delivery-mirror session sprawl * fix(slack): require explicit replyToIsExplicit===false for current-session precedence * fix(slack): canonicalize inherited thread replies --------- Co-authored-by: Peter Steinberger <[email protected]>
…ies (openclaw#97168) * fix(slack): prefer current thread session for inherited outbound replies to avoid delivery-mirror session sprawl * fix(slack): require explicit replyToIsExplicit===false for current-session precedence * fix(slack): canonicalize inherited thread replies --------- Co-authored-by: Peter Steinberger <[email protected]> (cherry picked from commit 5e572dc)
…ies (openclaw#97168) * fix(slack): prefer current thread session for inherited outbound replies to avoid delivery-mirror session sprawl * fix(slack): require explicit replyToIsExplicit===false for current-session precedence * fix(slack): canonicalize inherited thread replies --------- Co-authored-by: Peter Steinberger <[email protected]> (cherry picked from commit 5e572dc)
Closes #96535
What Problem This Solves
Slack message-tool replies inside an existing thread could mirror each inherited child reply timestamp into a new
:thread:<childTs>session instead of reusing the conversation's root thread session. Active Slack conversations accumulated near-empty delivery-mirror sessions and fragmented persisted history.Why This Change Was Made
Slack already receives the canonical root
threadId, the childreplyToId, and the tri-statereplyToIsExplicitsignal in itsresolveReplyTransporthook. The fix now uses that existing Slack-owned seam:replyToIsExplicit === false): prefer the valid root thread timestamp;true): preserve the requested child reply target;off: preserve the existing reply suppression behavior.Canonicalizing before outbound delivery keeps Slack's actual
thread_tsand the delivery-mirror session route aligned. No public channel/session-route API was added.User Impact
Threaded Slack replies now stay attached to the conversation's existing root session instead of creating one mirror-only session per child reply. Explicit reply targeting and existing callers that omit the new-origin signal keep their prior behavior.
Evidence
mainpassed inherited childreplyToIdbefore the rootthreadIdin Slack's reply transport, then mirrored the resulting child timestamp through the default reply-first session route.node scripts/run-vitest.mjs extensions/slack/src/channel.test.ts src/infra/outbound/message-action-runner.threading.test.ts extensions/slack/src/thread-ts.test.tsblacksmith-testbox/tbx_01kwdcpeaf5b93cdw6vyk3jfxeOPENCLAW_CHECK_CHANGED_REMOTE_CHILD=1 OPENCLAW_CHANGED_LANES_RAW_SYNC=1 corepack pnpm check:changedgit diff --checkpassed.Known proof gap: no credentialed live Slack workspace replay was run. The issue includes deployment evidence, and the repaired source path plus focused tri-state regression tests prove the routing decision directly.