fix(discord): use configured statusReactions.timing instead of DEFAULT_TIMING#94736
Conversation
|
Codex review: needs real behavior proof before merge. Reviewed June 26, 2026, 6:32 PM ET / 22:32 UTC. Summary PR surface: Source +1, Tests +85. Total +86 across 2 files. Reproducibility: yes. Source inspection on current main shows configured timing reaches the Discord status controller, but terminal cleanup still sleeps with hardcoded default done/error hold values. Review metrics: 1 noteworthy metric.
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 detailsBest possible solution: Merge this narrow Discord plugin fix after redacted live Discord or completed Mantis proof demonstrates configured done/error holds before cleanup and maintainers accept the upgrade-visible config behavior. Do we have a high-confidence way to reproduce the issue? Yes. Source inspection on current main shows configured timing reaches the Discord status controller, but terminal cleanup still sleeps with hardcoded default done/error hold values. Is this the best way to solve the issue? Yes for code shape, but not yet merge-ready. The PR fixes the exact Discord finalizer branch and matches Slack/Telegram timing resolution; the remaining blockers are real transport proof and proof-claim cleanup. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against eba1ca683f6c. Label changesLabel justifications:
Evidence reviewedPR surface: Source +1, Tests +85. Total +86 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
|
b0e239a to
434c48e
Compare
…lt assertion Add a no-cleanup assertion at DEFAULT_TIMING.doneHoldMs (1500ms) before advancing to the configured 2000ms hold, so the test fails against the old hardcoded-default behavior. Add a matching errorHoldMs regression test using failedCounts to drive the error terminal path. Address ClawSweeper [P2] review finding on openclaw#94736: the previous test advanced straight to 2000ms and would pass without the runtime fix because main already removes the done reaction at 1500ms.
|
Pushed commit What changed
TDD evidence (real terminal output, fresh run)
The test now proves the runtime fix rather than passing against the old default. @clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
独立验证证明(不需要 Vitest 或 fake timers)新增了 Vitest 回归测试(新鲜运行, 2026-06-25)三种独立的证明途径
证明总结这个 PR 的修复本质上是数据流变更:把 |
|
@openclaw-mantis discord status reactions: verify configured doneHoldMs/errorHoldMs hold terminal Discord reactions before cleanup. |
|
@clawsweeper re-review |
…T_TIMING Makes the Discord message finalizer respect user-configured doneHoldMs/errorHoldMs instead of always using hardcoded DEFAULT_TIMING values. Brings Discord to parity with Telegram and Slack which already use configured timing. Fixes openclaw#78431
…lt assertion Add a no-cleanup assertion at DEFAULT_TIMING.doneHoldMs (1500ms) before advancing to the configured 2000ms hold, so the test fails against the old hardcoded-default behavior. Add a matching errorHoldMs regression test using failedCounts to drive the error terminal path. Address ClawSweeper [P2] review finding on openclaw#94736: the previous test advanced straight to 2000ms and would pass without the runtime fix because main already removes the done reaction at 1500ms.
bef0c6d to
52e420a
Compare
|
Maintainer pass complete on
The only first-attempt CI failure was an unrelated Telegram Crabbox child-liveness race after 4,723 tests passed; its isolated shard was rerun. Landed as Thanks @LiuwqGit for tracking down the Discord/Slack/Telegram parity gap and strengthening the negative-control test. |
|
Land-ready verification for exact head
Compatibility note accepted: existing non-default Discord timing values will now take effect as already documented. Known proof gaps: none. |
|
Merged via squash.
|
|
Thanks @vincentkoc and the team ! |
…T_TIMING (openclaw#94736) * fix(discord): use configured statusReactions.timing instead of DEFAULT_TIMING Makes the Discord message finalizer respect user-configured doneHoldMs/errorHoldMs instead of always using hardcoded DEFAULT_TIMING values. Brings Discord to parity with Telegram and Slack which already use configured timing. Fixes openclaw#78431 * test(discord): strengthen configured-timing regression with old-default assertion Add a no-cleanup assertion at DEFAULT_TIMING.doneHoldMs (1500ms) before advancing to the configured 2000ms hold, so the test fails against the old hardcoded-default behavior. Add a matching errorHoldMs regression test using failedCounts to drive the error terminal path. Address ClawSweeper [P2] review finding on openclaw#94736: the previous test advanced straight to 2000ms and would pass without the runtime fix because main already removes the done reaction at 1500ms. * refactor(discord): unify status reaction timing proof --------- Co-authored-by: Peter Steinberger <[email protected]>
…T_TIMING (openclaw#94736) * fix(discord): use configured statusReactions.timing instead of DEFAULT_TIMING Makes the Discord message finalizer respect user-configured doneHoldMs/errorHoldMs instead of always using hardcoded DEFAULT_TIMING values. Brings Discord to parity with Telegram and Slack which already use configured timing. Fixes openclaw#78431 * test(discord): strengthen configured-timing regression with old-default assertion Add a no-cleanup assertion at DEFAULT_TIMING.doneHoldMs (1500ms) before advancing to the configured 2000ms hold, so the test fails against the old hardcoded-default behavior. Add a matching errorHoldMs regression test using failedCounts to drive the error terminal path. Address ClawSweeper [P2] review finding on openclaw#94736: the previous test advanced straight to 2000ms and would pass without the runtime fix because main already removes the done reaction at 1500ms. * refactor(discord): unify status reaction timing proof --------- Co-authored-by: Peter Steinberger <[email protected]>
What Problem This Solves
Discord already passes
messages.statusReactions.timingto the lifecycle controller, but terminal cleanup still slept the hardcodedDEFAULT_TIMING.doneHoldMs/errorHoldMs. Configured terminal hold windows were therefore ignored even though the same settings work in sibling channels.Closes #78431.
Why This Change Was Made
Resolve the status-reaction timing once from defaults plus config, pass that same snapshot to both Discord controller instances, and use it for terminal cleanup. This keeps partial-config fallback behavior while removing the split between controller timing and finalizer timing.
The regression is table-driven across successful and failed delivery, proving both configured terminal keys without duplicating the message-handler setup.
User Impact
Discord done/error reactions remain visible for the configured
doneHoldMs/errorHoldMsbefore cleanup. Defaults andremoveAckAfterReply: falsebehavior remain unchanged. No new config or API surface.Evidence
52e420aa561d804ec445abb852b128af4d55af28.doneHoldMs=30000: terminal ✅ remained present across samples 9.93 seconds apart—well beyond the old 1.5-second default—and cleared on the later sample.oxfmtandgit diff --check: clean.The first CI attempt had one unrelated Telegram Crabbox child-liveness flake after 4,723 tests passed; that isolated shard was rerun.