Summary
OpenClaw v2026.2.3 introduced a backward compatibility bug that broke all existing isolated + agentTurn cron jobs. Jobs with incomplete delivery configuration now fail silently instead of running with fallback behavior.
Issue
Backward Compatibility Bug: v2026.2.3 "hard-migration" breaks all existing jobs instead of providing graceful degradation.
Expected Behavior: Jobs with incomplete delivery config should:
- Continue running with fallback delivery (e.g., main session summary)
- Log warnings about deprecated config
- Gracefully degrade, not fail silently
Actual Behavior: Jobs fail silently without any error message or fallback.
Expected Backward Compatible Behavior
Jobs with incomplete delivery config should continue working:
{
"sessionTarget": "isolated",
"payload": {"kind": "agentTurn", "message": "Test"},
"delivery": {"mode": "announce"} // Incomplete but should work
}
Expected Result:
- Job runs successfully
- Falls back to main-session summary (or last route)
- Logs deprecation warning: "delivery.channel/to missing, using fallback"
- User gets functionality + warning, not silent failure
Reproduction Steps
1. Create Job Before v2026.2.3
{
"sessionTarget": "isolated",
"payload": {"kind": "agentTurn", "message": "Test"},
"delivery": {"mode": "announce"} // ❌ Missing channel/to
}
Expected: Job runs and announces
Actual: Job never runs (no error, just silent failure)
2. Working Syntax After v2026.2.3
{
"sessionTarget": "isolated",
"payload": {"kind": "agentTurn", "message": "Test"},
"delivery": {
"mode": "announce",
"channel": "telegram", // ✅ Required after v2026.2.3
"to": "28738XXXX" // ✅ Required after v2026.2.3
}
}
Might be related to #8540
Impact
- ALL existing isolated cron jobs stopped working after v2026.2.3 update
- No error messages - jobs appear active but never execute
- No automatic migration - requires manual recreation
- Silent failure mode makes debugging difficult
Evidence
- Release notes mention "hard-migrate" but don't explain breaking changes
- Jobs created before v2026.2.3:
createdAtMs: 1770357972016 (2026-02-06 07:06) → never run
- Jobs created after with new syntax: immediately functional
cron runs --id <jobId> shows empty entries array for affected jobs
Proposed Solution
- Backward compatibility restoration: Jobs with incomplete delivery config should run with fallback behavior
- Graceful degradation: Default to main-session summary when
delivery.channel/delivery.to missing
- Deprecation warnings (not silent failure) for incomplete configs
- Automatic migration for existing jobs during startup
- Documentation update explaining the transition period
Environment
- OpenClaw Version: 2026.2.3
- Platform: Unraid Docker
- Affected Components: Cron scheduler, isolated jobs, delivery system
Timeline
- 2026-02-05 22:16: Jobs created with old syntax
- 2026-02-06 early AM: v2026.2.3 deployed
- 2026-02-06 07:00: First scheduled job failed silently
- 2026-02-06 07:36: New syntax test successful
- 2026-02-06 07:54: All jobs recreated with new syntax
Severity: Critical
- Backward compatibility violation: Breaks fundamental software engineering principle
- Silent failure mode: No error messages, extremely difficult to debug
- Affects all users: Anyone with existing isolated cron jobs experiences regression
- No migration path: Users must manually recreate all jobs without guidance
Summary
OpenClaw v2026.2.3 introduced a backward compatibility bug that broke all existing
isolated+agentTurncron jobs. Jobs with incomplete delivery configuration now fail silently instead of running with fallback behavior.Issue
Backward Compatibility Bug: v2026.2.3 "hard-migration" breaks all existing jobs instead of providing graceful degradation.
Expected Behavior: Jobs with incomplete delivery config should:
Actual Behavior: Jobs fail silently without any error message or fallback.
Expected Backward Compatible Behavior
Jobs with incomplete delivery config should continue working:
{ "sessionTarget": "isolated", "payload": {"kind": "agentTurn", "message": "Test"}, "delivery": {"mode": "announce"} // Incomplete but should work }Expected Result:
Reproduction Steps
1. Create Job Before v2026.2.3
{ "sessionTarget": "isolated", "payload": {"kind": "agentTurn", "message": "Test"}, "delivery": {"mode": "announce"} // ❌ Missing channel/to }Expected: Job runs and announces
Actual: Job never runs (no error, just silent failure)
2. Working Syntax After v2026.2.3
{ "sessionTarget": "isolated", "payload": {"kind": "agentTurn", "message": "Test"}, "delivery": { "mode": "announce", "channel": "telegram", // ✅ Required after v2026.2.3 "to": "28738XXXX" // ✅ Required after v2026.2.3 } }Might be related to #8540
Impact
Evidence
createdAtMs: 1770357972016(2026-02-06 07:06) → never runcron runs --id <jobId>shows empty entries array for affected jobsProposed Solution
delivery.channel/delivery.tomissingEnvironment
Timeline
Severity: Critical