mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-28 18:33:35 +00:00
* fix(cron): default missing sessionTarget on load and guard assertSupportedJobSpec * fix(cron): use Object.hasOwn for payload.kind check and log the backfill Address review feedback on #70367: - Switch the new payload.kind lookup from `in` to `Object.hasOwn` so prototype pollution cannot drive the defaulter (Aisle Low finding). - Log a warning when a job is auto-defaulted at load time, matching the adjacent legacyJobIdIssue pattern so operators can run `openclaw doctor --fix` to persist the canonical shape (Greptile P2). * fix(cron): dedupe sessionTarget backfill warn per jobId and sharpen crash site reference Address deep-review feedback on #70367: - The code comment referenced assertSupportedJobSpec as the tick-time crash site, but that function is only called from create/patch (jobs.ts:607, 686) and manual-run preflight (ops.ts:516). The actual on-tick TypeError surfaces in runIsolatedAgentJob (server-cron.ts). Update the comment to say so. - ensureLoaded runs with forceReload:true on every onTimer tick (~60s). Before this change, a persistent legacy job missing sessionTarget produced one warn line per tick, forever. Add a per-jobId dedupe set on CronServiceState (mirroring the existing warnedDisabled flag) so the warn fires once per job per process. - Drop the 'run openclaw doctor --fix' remediation from the warn message. Doctor's cron-store migration has no trackIssue entry for missing sessionTarget (doctor-cron-store-migration.ts CronStoreIssueKey), so doctor --fix on a store whose only defect is missing sessionTarget silently returns without writing anything. Point operators at jobs.json directly until that gap is closed. * docs(changelog): note cron session target repair --------- Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com> Co-authored-by: Vincent Koc <vincentkoc@ieee.org>