#13383: fix(cron): route text-only payloads through direct delivery
stale
Cluster:
Cron Job Enhancements
Fixes #13289
## Problem
Cron jobs with `delivery.mode: "announce"` and `sessionTarget: "isolated"` fail to deliver to messaging channels. The isolated agent produces valid text output, but `runSubagentAnnounceFlow` sends it to the main session agent, which responds with `NO_REPLY` instead of forwarding the message.
This was introduced in v2026.2.6-4 when text-only isolated agent announces were routed through the shared subagent announce flow.
## Root Cause
`runSubagentAnnounceFlow` sends a trigger message to the main session that includes: "You can respond with NO_REPLY if no announcement is needed." After accumulated heartbeat context where NO_REPLY was the correct response, the main session agent responds NO_REPLY to everything — including legitimate check-in messages that should be delivered.
## Solution
Route all cron payloads (including text-only) through direct delivery via `deliverOutboundPayloads()`, bypassing the announce flow entirely.
The announce flow branch is preserved (but made unreachable) for potential future use if the NO_REPLY reliability issue is addressed separately.
## Testing
- Verified that cron jobs with `delivery.mode: "announce"` now deliver text-only payloads directly
- No regression for media/structured content payloads (already used direct delivery)
<!-- greptile_comment -->
<h2>Greptile Overview</h2>
<h3>Greptile Summary</h3>
This change updates the cron isolated-agent delivery logic so that *all* outbound cron payloads (including text-only outputs) are sent via `deliverOutboundPayloads()` instead of routing text through the shared subagent announce flow (which could elicit `NO_REPLY` from the main session and drop legitimate messages). The previous announce-flow code path is left in place but made intentionally unreachable.
The PR also includes a new `openclaw-2026-02-10.log` file containing what appears to be a local debug/runtime trace.
<h3>Confidence Score: 3/5</h3>
- This PR is not safe to merge as-is due to committed debug artifacts and intentionally dead code left in the delivery path.
- Core behavior change looks reasonable for fixing dropped text-only cron deliveries, but the PR adds a local log file to the repository and leaves a large unreachable branch (`false && ...`) that can confuse future maintenance and mask regressions.
- openclaw-2026-02-10.log, src/cron/isolated-agent/run.ts
<!-- greptile_other_comments_section -->
<sub>(2/5) Greptile learns from your feedback when you react with thumbs up/down!</sub>
<!-- /greptile_comment -->
Most Similar PRs
#13638: fix: pass delivery context to cron isolated agent subagents
by dario-github · 2026-02-10
84.5%
#6522: fix(cron): deliver original message when agent response is heartbea...
by sidmohan0 · 2026-02-01
83.9%
#11216: Fix nightly failures: cron webchat delivery result + media cleanup ...
by DeanoC · 2026-02-07
82.6%
#21014: fix(cron): suppress main-session summary for HEARTBEAT_OK responses
by nickjlamb · 2026-02-19
81.1%
#22609: feat(cron): add directText flag for text message dilivery and histo...
by bydsky · 2026-02-21
80.8%
#21485: feat(cron): add direct-text flag to deliver text message directly [...
by bydsky · 2026-02-20
79.7%
#21896: fix(cron): disable messaging tool when delivery.mode is none
by lailoo · 2026-02-20
79.5%
#8097: fix: auto-convert one-shot reminders for reliable delivery
by Gerrald12312 · 2026-02-03
78.5%
#23086: fix(cron): surface channel resolution error for isolated sessions w...
by hydro13 · 2026-02-22
78.3%
#6007: fix(cron): auto-map agentId to accountId for Discord deliveries
by dwfinkelstein · 2026-02-01
78.3%