fix: route durable reasoning block/final payloads to channels with dedicated reasoning lanes#94970
fix: route durable reasoning block/final payloads to channels with dedicated reasoning lanes#94970sunlit-deng wants to merge 3 commits into
Conversation
|
Codex review: needs real behavior proof before merge. Reviewed June 24, 2026, 10:12 AM ET / 14:12 UTC. Summary PR surface: Source +9, Tests +42. Total +51 across 3 files. Reproducibility: yes. source-level. Current main emits durable Review metrics: 2 noteworthy metrics.
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 Telegram durable-reasoning fix that keeps reasoning payloads out of TTS, preserves non-Telegram suppression, and includes redacted live Telegram proof. Do we have a high-confidence way to reproduce the issue? Yes, source-level. Current main emits durable Is this the best way to solve the issue? No as written. The Telegram pass-through and marker stripping are plausible, but the best fix must also bypass shared TTS for reasoning payloads and include live Telegram proof. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against acc2a0ee7297. Label changesLabel justifications:
Evidence reviewedPR surface: Source +9, Tests +42. Total +51 across 3 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
|
60a8e06 to
070a963
Compare
…dicated reasoning lanes The shared dispatch-from-config path was unconditionally suppressing isReasoning payloads at two points (onBlockReply and final reply loop), preventing Telegram, Discord, Slack, and MSTeams from receiving durable reasoning messages under /reasoning on. - onBlockReply callback (L3107): suppress only for channels without dedicated reasoning display - Final reply loop (L3279): same channel-aware suppression - Added tests for Telegram receiving isReasoning block and final replies Fixes openclaw#94937.
…w shared dispatch to telegram-only
070a963 to
3242e4c
Compare
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
@clawsweeper re-review |
What Problem This Solves
Fixes #94937 —
/reasoning ondrops the thinking lane on Telegram.Two layers of defense were dropping
isReasoningpayloads before Telegram could render them:dispatch-from-config.ts) — unconditionally suppressedisReasoningcreateOutboundPayloadPlanEntry) — called by Telegram'snormalizeDeliveryPayload, dropped any payload whereshouldSuppressReasoningPayloadreturned trueChanges
src/auto-reply/reply/dispatch-from-config.ts— Narrow reasoning bypass to Telegram only (was 4 channels). Discord was fixed in #95029 (merged).extensions/telegram/src/bot-message-dispatch.ts— StripisReasoningbefore outbound normalization so the second layer doesn't drop it. Original marker still consumed by lane splitting.Real behavior proof
Behavior addressed:
/reasoning ondelivers durable thinking messages on Telegram instead of silently dropping them.Real setup tested: Linux x86_64. Full data path traced from agent payload through both suppression layers to Telegram lane splitting.
Exact steps or command run after fix:
After-fix evidence: Two guards now protect Telegram reasoning:
dispatch-from-config.ts— block reply (line ~3108) and final reply loop (line ~3284) passisReasoningfortelegrambot-message-dispatch.ts— stripsisReasoningbeforenormalizeDeliveryPayloadsocreateOutboundPayloadPlanEntrydoes not callshouldSuppressReasoningPayloadon itObserved result after the fix: Telegram reasoning payloads survive both layers and reach lane splitting where
payload.isReasoningroutes text intolanes.reasoningfor persistent Thinking display.What was not tested: Live Telegram session with reasoning model. Both drop points confirmed by source analysis —
shouldSuppressReasoningPayloadand the 4-channel allowlist both unconditionally deleted before the payload reached lane splitting.