Peter Steinberger
3e2b3ea4d5
feat(cron): database-backed heartbeat monitor scratch replaces HEARTBEAT.md (#112967)
* feat(cron): move heartbeat context into database-backed per-job cron scratch
- new additive cron_job_scratch SQLite table (revision tombstones keep
compare-and-swap monotonic across unset/recreate; 256KiB cap)
- heartbeat runner reads monitor scratch instead of workspace HEARTBEAT.md;
heartbeat_respond gains a private scratch replacement parameter
- openclaw doctor --fix migrates HEARTBEAT.md into scratch (hash-verified,
archived under state backups, idempotent, symlink-contained)
- gateway cron.scratch.get/set admin RPCs + openclaw cron scratch CLI
- workspace bootstrap no longer seeds HEARTBEAT.md; Codex heartbeat file
guidance removed; docs and prompt snapshots updated
* fix(cron): review round 2 — shared-workspace heartbeat migration and non-default agent monitors
- doctor migration groups agents by heartbeat source file and imports into
every monitor before archiving/removing the shared file once
- exempt heartbeat payloads from the main-session default-agent restriction:
monitors only poke the wake bus, so non-default agents converge again
- document why disabled monitors retain their last cadence (config default
already resolves before the fallback)
* fix(cron): honor configured cron store, legacy heartbeat fallback, and safer doctor claim
* fix(cron): claim HEARTBEAT.md before committing scratch and restore without clobbering
* fix(cron): pin migration CAS to precondition revision, re-verify claim on release, archive first, report scratch as pending
* docs(heartbeat): remove retired config options
* fix(cron): crash-recoverable migration claims, partial-import rollback, latest-response scratch pairing
* test(heartbeat): keep latest scratch proposal paired
* fix(cron): roll back committed scratch on changed-claim release and restore no-row state
* fix(cron): revision-guarded rollback delete and recreated-file detection on claim release
* fix(cron): treat every failed claim re-verification as a migration conflict
* test(heartbeat): rename ack test after ackMaxChars retirement
* fix(heartbeat): keep monitor scratch out of bypass-scope runs
* fix(cron): resolve claimed symlinks on release and gate legacy fallback on proven scratch state
* fix(cron): strict claim-name recovery and per-entry migration grouping
* fix(ci): heartbeat scratch gate repairs — lint causes, dead exports, since-train, inventory path, prompt snapshot, regenerated docs map, SDK baseline, protocol bindings
* fix(cron): live-owner claim guard and canonical entry-key migration grouping
* fix(cron): archive claimed inode on release and flag orphan claims beside recreated files
* docs(cron): document process-global state-db invariant for scratch service ops
* chore(i18n): refresh native inventory line numbers after protocol binding regen
2026-07-23 11:10:49 -07:00
..
2026-07-22 18:00:37 -07:00
2026-07-19 11:04:48 -07:00
2026-07-18 02:54:26 +01:00
2026-07-17 06:11:20 +01:00
2026-07-23 10:03:11 +09:00
2026-07-12 17:24:45 -07:00
2026-07-12 17:24:45 -07:00
2026-07-11 06:15:41 -07:00
2026-07-11 06:15:41 -07:00
2026-06-23 14:01:29 +02:00
2026-07-10 10:42:36 +01:00
2026-07-13 01:29:33 -07:00
2026-07-18 02:54:26 +01:00
2026-07-15 01:22:20 -07:00
2026-07-12 17:24:45 -07:00
2026-07-12 17:24:45 -07:00
2026-07-11 06:15:41 -07:00
2026-07-14 03:52:44 -07:00
2026-07-11 06:15:41 -07:00
2026-07-12 10:26:32 +08:00
2026-07-12 10:26:32 +08:00
2026-07-11 06:15:41 -07:00
2026-07-11 11:44:34 -07:00
2026-07-16 08:06:06 -07:00
2026-07-16 17:09:56 -07:00
2026-07-16 17:22:28 -07:00
2026-07-22 00:14:33 -07:00
2026-07-11 06:15:41 -07:00
2026-07-15 03:34:08 -07:00
2026-07-14 00:21:36 -07:00
2026-07-12 12:09:17 +08:00
2026-07-15 22:40:00 -07:00
2026-07-14 22:11:22 -07:00
2026-07-14 01:12:36 -07:00
2026-07-14 10:21:56 -07:00
2026-07-12 10:17:00 +01:00
2026-07-07 16:59:51 -07:00
2026-07-23 16:17:13 +00:00
2026-07-11 13:15:16 -07:00
2026-07-19 11:04:48 -07:00
2026-07-16 18:56:18 -07:00
2026-07-11 06:15:41 -07:00
2026-07-12 17:24:45 -07:00
2026-07-20 19:42:56 -07:00
2026-07-16 20:56:23 -07:00
2026-07-10 08:18:44 -07:00
2026-07-05 08:00:23 -04:00
2026-07-17 16:25:37 +01:00
2026-07-15 22:40:00 -07:00
2026-07-23 07:18:55 -04:00
2026-07-16 21:19:06 -07:00
2026-07-11 06:15:41 -07:00
2026-07-23 00:53:23 -04:00
2026-07-15 22:40:00 -07:00
2026-07-23 10:03:11 +09:00
2026-07-23 10:03:11 +09:00
2026-07-17 01:40:42 -07:00
2026-07-11 06:15:41 -07:00
2026-07-13 01:53:28 -07:00
2026-07-20 23:26:00 -07:00
2026-07-19 20:04:14 -07:00
2026-07-19 20:04:14 -07:00
2026-07-11 06:15:41 -07:00
2026-07-13 11:44:28 -07:00
2026-07-13 11:44:28 -07:00
2026-07-15 22:40:00 -07:00
2026-07-12 10:17:00 +01:00
2026-07-12 22:18:10 -07:00
2026-07-15 22:40:00 -07:00
2026-07-18 06:42:27 +01:00
2026-07-18 06:42:27 +01:00
2026-07-19 00:37:06 +01:00
2026-07-19 00:37:06 +01:00
2026-07-13 23:33:30 -07:00
2026-07-11 06:15:41 -07:00
2026-07-14 10:21:56 -07:00
2026-07-23 10:03:11 +09:00
2026-07-11 06:15:41 -07:00
2026-07-10 17:31:42 -07:00
2026-07-11 06:15:41 -07:00
2026-07-10 16:59:10 +01:00
2026-07-11 06:15:41 -07:00
2026-07-10 19:01:30 +01:00
2026-07-11 06:15:41 -07:00
2026-07-10 16:59:10 +01:00
2026-07-12 10:19:26 +08:00
2026-07-20 19:42:56 -07:00
2026-07-12 17:24:45 -07:00
2026-07-19 08:58:43 -07:00
2026-07-19 08:58:43 -07:00
2026-07-11 06:15:41 -07:00
2026-07-11 06:15:41 -07:00
2026-07-12 17:24:45 -07:00
2026-07-23 10:03:11 +09:00
2026-07-23 10:03:11 +09:00
2026-07-11 02:31:17 -07:00
2026-07-11 02:31:17 -07:00
2026-07-22 19:57:42 -04:00
2026-07-16 03:31:11 -07:00
2026-07-16 16:47:25 -07:00
2026-07-12 07:17:48 +02:00
2026-07-15 09:52:01 +01:00
2026-07-21 20:28:43 -07:00
2026-07-12 17:24:45 -07:00
2026-06-23 10:31:05 +02:00
2026-07-14 23:56:09 -07:00
2026-07-11 06:15:41 -07:00
2026-06-21 21:27:57 +02:00
2026-07-21 20:28:43 -07:00
2026-07-21 20:28:43 -07:00
2026-06-26 07:51:07 +01:00
2026-07-23 10:03:11 +09:00
2026-07-11 06:15:41 -07:00
2026-07-19 11:04:48 -07:00
2026-07-15 22:40:00 -07:00
2026-07-15 22:40:00 -07:00
2026-07-20 22:43:04 -07:00
2026-07-20 22:43:04 -07:00
2026-07-11 06:15:41 -07:00
2026-07-12 17:24:45 -07:00
2026-07-23 10:03:11 +09:00
2026-07-11 06:15:41 -07:00
2026-07-12 23:07:25 -07:00
2026-07-20 21:45:23 -06:00
2026-07-20 21:45:23 -06:00
2026-07-11 06:15:41 -07:00
2026-07-11 06:15:41 -07:00
2026-07-23 00:53:23 -04:00
2026-07-16 08:35:10 -07:00
2026-07-18 15:57:22 +01:00
2026-07-19 11:04:48 -07:00
2026-07-19 11:04:48 -07:00
2026-07-19 11:04:48 -07:00
2026-07-20 21:45:23 -06:00
2026-07-20 21:45:23 -06:00
2026-07-19 11:04:48 -07:00
2026-07-19 11:04:48 -07:00
2026-07-21 20:28:43 -07:00
2026-07-23 17:43:10 +08:00
2026-07-03 20:20:28 -07:00
2026-07-15 20:02:53 +01:00
2026-07-11 06:15:41 -07:00
2026-07-23 10:03:11 +09:00
2026-07-23 10:03:11 +09:00
2026-07-23 10:03:11 +09:00
2026-07-11 06:15:41 -07:00
2026-06-23 13:38:40 +02:00
2026-07-23 09:36:48 -07:00
2026-07-03 17:58:15 -07:00
2026-07-03 17:58:15 -07:00
2026-07-13 01:53:28 -07:00
2026-07-13 01:53:28 -07:00
2026-07-13 21:50:36 -07:00
2026-07-15 23:16:10 -07:00
2026-07-13 03:51:25 -07:00
2026-07-13 09:09:21 +08:00
2026-07-15 22:40:00 -07:00
2026-07-23 10:21:05 -07:00
2026-07-13 22:12:21 -07:00
2026-07-11 06:15:41 -07:00
2026-07-14 00:27:34 +01:00
2026-07-18 06:42:27 +01:00
2026-07-18 06:42:27 +01:00
2026-07-04 08:00:15 +02:00
2026-07-11 06:15:41 -07:00
2026-06-22 19:11:46 +08:00
2026-07-11 06:15:41 -07:00
2026-07-16 05:58:53 -07:00
2026-07-16 05:58:53 -07:00
2026-07-12 19:58:55 -07:00
2026-07-11 06:15:41 -07:00
2026-07-17 01:01:06 -07:00
2026-07-07 16:59:51 -07:00
2026-07-11 06:15:41 -07:00
2026-07-05 12:16:41 -07:00
2026-07-19 12:44:18 -07:00
2026-07-11 06:15:41 -07:00
2026-07-11 01:09:51 -07:00
2026-07-11 02:31:17 -07:00
2026-07-23 11:10:49 -07:00