Symptom
After openclaw doctor --fix on an install whose heartbeat was every: "0m", every new automation run fails with Automation migration is incomplete; run openclaw doctor --fix.
Evidence what you'll see
- The later heartbeat cadence and scratch steps provisioned job
Proactive check (<agent>)withenabled: true,every 30m, and receiptautomation-default:<store>:<agent> = {"phase":"pending"}. - Only
retireHeartbeatWithDoctorcompletes receipts, and that step had already run. The pending receipt then fails each tick insrc/cron/service/timer-execution.ts. - With several channels configured, the failure alert also failed with
Channel is required when multiple channels are configured. - Deleting the job is not a safe recovery: a later doctor run refuses an incomplete cutover whose job is gone (
src/commands/doctor-heartbeat-monitors.ts).
Why it happens
Heartbeat retirement strips the heartbeat keys before the standalone cadence and scratch steps run. Those steps then resolve the default agent from a leftover HEARTBEAT.md, and resolveLegacyHeartbeatIntervalMs defaults a missing interval to "30m". The code comment on job.enabled = enrolled && intervalMs !== null says an implicit cadence alone must not provision a job.
Affected versions
OpenClaw 2026.10.6 (main 17416f83ecf), git install, macOS 26 (Darwin 25.6.0). Before the upgrade, agents.defaults.heartbeat was { every: "0m", target: "discord", to: "channel:…", directPolicy: "block" }, plus one non-default agent with heartbeat: { every: "0m" }. The default workspace still had a template HEARTBEAT.md.
Fix steps
0 of 2 done
Your check marks stay in this browser only.
How to check it worked
- After doctor on a disabled heartbeat (
every: "0m"), no enabledProactive checkjob is created, the cutover receipt is not leftphase: "pending", and runs no longer printAutomation migration is incomplete; run openclaw doctor --fix.
If it still fails
- The reporter did not reproduce the sequence in a clean environment. The step order is from the doctor output and
src/commands/doctor-health-contributions-final.ts. Related open issue #145949 tracks a disabled heartbeat re-enabling itself. - The linked issue does not name a release that changes this step order. Main at
3b153699457is described as having no change to that order.
Sources and credit
Summarized in our own words from these public reports. Credit goes to their authors.
Provided as is, without warranty. Try changes in a non-production environment and back up first. Security-related steps: verify against the official docs. Terms · Request removal or attribution change
Hit an error we don't cover? Submit it