openclaw - 💡(How to fix) Fix Cron jobs with delivery.mode:none still post placeholder stubs to Slack [1 comments, 1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#62171Fetched 2026-04-08 03:08:07
View on GitHub
Comments
1
Participants
1
Timeline
2
Reactions
0
Participants
Timeline (top)
closed ×1commented ×1

Cron jobs configured with delivery.mode: "none" still post :mailbox_with_mail: ... placeholder stub messages to Slack channels. The placeholder is posted by the session dispatch code path via chat.postMessage, bypassing the delivery mode check entirely.

Root Cause

Cron jobs configured with delivery.mode: "none" still post :mailbox_with_mail: ... placeholder stub messages to Slack channels. The placeholder is posted by the session dispatch code path via chat.postMessage, bypassing the delivery mode check entirely.

Fix Action

Fix / Workaround

Cron jobs configured with delivery.mode: "none" still post :mailbox_with_mail: ... placeholder stub messages to Slack channels. The placeholder is posted by the session dispatch code path via chat.postMessage, bypassing the delivery mode check entirely.

  • The placeholder posts are not logged as delivered reply in the gateway log, making the issue difficult to diagnose
  • requireMention: true on the channel does not prevent this, since the placeholder is posted outbound by the dispatch mechanism, not triggered by an inbound message
  • Changing the cron job's sessionKey to an isolated key does not prevent this
  • The only workaround is to disable the cron job entirely
RAW_BUFFERClick to expand / collapse

Summary

Cron jobs configured with delivery.mode: "none" still post :mailbox_with_mail: ... placeholder stub messages to Slack channels. The placeholder is posted by the session dispatch code path via chat.postMessage, bypassing the delivery mode check entirely.

Reproduction

  1. Create a cron job with delivery.mode: "none" and sessionTarget: "isolated"
  2. Configure at least one Slack channel
  3. Wait for the cron job to fire
  4. Observe: a :mailbox_with_mail: ... placeholder message is posted to a Slack channel despite delivery.mode: "none"

The placeholder is never cleaned up if the session completes silently or the LLM times out, resulting in orphaned stubs accumulating in the channel.

We observed 999 orphaned stubs in a single channel over the course of a day from two cron jobs (one firing every 15 minutes, one every 30 minutes), both configured with delivery.mode: "none".

Expected behavior

When delivery.mode is "none", no messages of any kind — including placeholder/preview stubs — should be posted to any channel. The session should run completely silently.

Additional details

  • The placeholder posts are not logged as delivered reply in the gateway log, making the issue difficult to diagnose
  • requireMention: true on the channel does not prevent this, since the placeholder is posted outbound by the dispatch mechanism, not triggered by an inbound message
  • Changing the cron job's sessionKey to an isolated key does not prevent this
  • The only workaround is to disable the cron job entirely

Environment

  • OpenClaw v2026.4.5
  • Slack socket mode
  • streaming: "partial", nativeStreaming: true
  • Node.js v25.5.0 / Linux

extent analysis

TL;DR

Modify the session dispatch code path to respect the delivery.mode check and prevent posting placeholder stub messages when set to "none".

Guidance

  • Review the session dispatch code to identify where the delivery.mode check is being bypassed and modify it to handle the "none" mode correctly.
  • Consider adding logging for placeholder posts to facilitate diagnosis of similar issues in the future.
  • Investigate whether the chat.postMessage function can be modified or wrapped to respect the delivery.mode setting.
  • Evaluate the feasibility of implementing a cleanup mechanism for orphaned stubs to prevent their accumulation in channels.

Example

// Pseudo-code example of modified session dispatch code
if (deliveryMode === "none") {
  // Skip posting placeholder stub message
  return;
}
// Existing code to post placeholder stub message

Notes

The provided guidance assumes that the issue lies within the session dispatch code and that modifying it to respect the delivery.mode check will resolve the problem. However, without access to the specific codebase, this is an educated guess based on the information provided.

Recommendation

Apply a workaround by modifying the session dispatch code to respect the delivery.mode check, as upgrading to a fixed version is not mentioned as an option in the provided issue context. This recommendation is based on the assumption that the root cause of the issue is the bypassing of the delivery.mode check in the session dispatch code path.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

When delivery.mode is "none", no messages of any kind — including placeholder/preview stubs — should be posted to any channel. The session should run completely silently.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING