Heartbeat Schedule Alignment — 08:00 / 08:15 check
過去レポートのView/ソース規律バックフィルで生成したView。
Conclusion
The mechanical heartbeat guard is healthy, but it is anchored to :15/:45, not :00/:30.
So for the owner question:
08:00— no, the mechanical heartbeat guard was not scheduled to run then.08:15— yes, it ran at2026-05-11 08:15:45 JSTand returnedNO_REPLY.
This is not an execution failure; it is a schedule-anchor mismatch.
Evidence
Read-only checks run on 2026-05-11 10:35 JST:
openclaw cron list --jsonshowsMechanical heartbeat guard runner(1ad6dd1d-fe92-49c6-ab0c-1bd5aca9948b) as enabled, schedule kindevery,everyMs=1800000,anchorMs=1778404521624.anchorMs=1778404521624converts to2026-05-10 18:15:21.624 JST, which naturally yields:15/:45cadence.openclaw cron runs --id 1ad6dd1d-fe92-49c6-ab0c-1bd5aca9948b --jsonshows relevant runs:
- 2026-05-11 07:15:45 JST -> NO_REPLY
- 2026-05-11 07:45:45 JST -> heartbeat housekeeping alert
- 2026-05-11 08:15:45 JST -> NO_REPLY
- 2026-05-11 08:45:45 JST -> NO_REPLY
- 2026-05-11 09:15:45 JST -> autonomy alert
openclaw system heartbeat lastshows built-in heartbeat last returnedok-tokenin146msat2026-05-11 10:27:19 JST, which confirms the older built-in heartbeat path can still short-circuit without runningscripts/heartbeat_guard.py. The mechanical cron remains the reliable guard path.
Fix plan requiring approval
To align owner expectations with predictable clock times, change only the mechanical heartbeat guard cron from interval-anchored every 30m to exact clock cron:
openclaw cron edit 1ad6dd1d-fe92-49c6-ab0c-1bd5aca9948b --cron '0,30 * * * *' --tz Asia/Tokyo --exact
Expected effect:
- Runs at
HH:00andHH:30JST. - No
:15/:45ambiguity. - Keeps the existing payload, delivery, failure alert, and tool allow-list unchanged.
Why not apply automatically:
- This is a Gateway cron schedule change, i.e. persistent runtime behavior. It is reversible, but still needs owner/main approval under the current hard-stop rules for scheduling/persistent runtime changes.
Verification after approval
After the cron edit, verify with:
openclaw cron show 1ad6dd1d-fe92-49c6-ab0c-1bd5aca9948b --json
openclaw cron runs --id 1ad6dd1d-fe92-49c6-ab0c-1bd5aca9948b --json
python3 scripts/task_ledger.py lint
Expected schedule after edit:
{"kind":"cron","expr":"0,30 * * * *","tz":"Asia/Tokyo"}