[memory-core] "managed dreaming cron could not be reconciled (cron service unavailable)" startup race warning
Environment
- openclaw
2026.4.29
memory-core plugin with dreaming.enabled: true
- External cron via
~/.openclaw-secretary/cron/jobs.json works correctly (job Memory Dreaming Promotion id=90f6cecb…, schedule 0 3 * * *, last run status=ok 12.2s)
Symptom
On every gateway startup the log emits:
memory-core: managed dreaming cron could not be reconciled (cron service unavailable)
The warning is harmless — the cron does run on schedule via the external cron/jobs.json reconciliation that initializes after memory-core. But the noise:
- Hides real issues during startup log review.
- Misleads operators into thinking dreaming is broken (it isn't).
- Suggests
memory-core queries the cron service before the cron plugin's croner module has finished registering.
Proposed fix
memory-core should defer cron reconciliation until the cron plugin signals ready (e.g., await gateway.plugins.waitFor('cron') or subscribe to a plugin:ready:cron event).
- Alternatively, downgrade the message to
info level and add a one-shot retry on next event-loop tick.
Repro
- Enable
plugins.entries.memory-core.config.dreaming.enabled = true.
- Restart gateway, grep first 5 seconds of logs:
journalctl --user -u openclaw-<profile>-gateway.service -n 200 | grep "memory-core"
- Observe the warning, then verify via
cron/jobs.json that the dreaming cron actually executes on schedule.
[memory-core] "managed dreaming cron could not be reconciled (cron service unavailable)" startup race warning
Environment
2026.4.29memory-coreplugin withdreaming.enabled: true~/.openclaw-secretary/cron/jobs.jsonworks correctly (jobMemory Dreaming Promotionid=90f6cecb…, schedule0 3 * * *, last runstatus=ok12.2s)Symptom
On every gateway startup the log emits:
The warning is harmless — the cron does run on schedule via the external
cron/jobs.jsonreconciliation that initializes aftermemory-core. But the noise:memory-corequeries the cron service before the cron plugin'scronermodule has finished registering.Proposed fix
memory-coreshould defer cron reconciliation until the cron plugin signalsready(e.g., awaitgateway.plugins.waitFor('cron')or subscribe to aplugin:ready:cronevent).infolevel and add a one-shot retry on next event-loop tick.Repro
plugins.entries.memory-core.config.dreaming.enabled = true.cron/jobs.jsonthat the dreaming cron actually executes on schedule.