openclaw - ✅(Solved) Fix memory-core: managed dreaming cron not created after plugin startup or config change [1 pull requests, 3 comments, 3 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#62920Fetched 2026-04-09 08:00:40
View on GitHub
Comments
3
Participants
3
Timeline
6
Reactions
0
Timeline (top)
commented ×3cross-referenced ×3

Fix Action

Workaround

Manually creating a cron with the matching schedule and systemEvent payload works as a workaround:

gh issue create --repo openclaw/openclaw --title "Memory Dreaming Promotion workaround" --body "Manually created: openclaw cron add --name Memory\ Dreaming\ Promotion\ workaround --schedule \"cron 40 11 * * *\" --session-target main --payload-kind systemEvent --payload-text __openclaw_memory_core_short_term_promotion_dream__"

PR fix notes

PR #63962: fix(gateway): include selected memory slot in startup plugin scope

Description (problem / solution / changelog)

Summary

  • Problem: gateway startup plugin selection did not explicitly include the selected memory-slot plugin when it was not also a configured channel plugin or startup sidecar.
  • Why it matters: memory-slot startup surfaces can be skipped, which can prevent memory-driven startup reconciliation behaviors from running reliably.
  • What changed: resolveGatewayStartupPluginIds now includes the selected memory-slot plugin when activation state permits it.
  • What did NOT change: no cron execution internals, no plugin runtime API changes, no config schema changes.

Change Type (select all)

  • Bug fix
  • Feature
  • Refactor required for the fix
  • Docs
  • Security hardening
  • Chore/infra

Scope (select all touched areas)

  • Gateway / orchestration
  • Skills / tool execution
  • Auth / tokens
  • Memory / storage
  • Integrations
  • API / contracts
  • UI / DX
  • CI/CD / infra

Linked Issue/PR

  • Closes #
  • Related #63936
  • This PR fixes a bug or regression

Root Cause (if applicable)

  • Root cause: startup plugin ID resolution only included configured channel plugins plus startup sidecars; the selected memory-slot plugin can fall outside both sets.
  • Missing detection / guardrail: no startup invariant test that asserted selected memory slot plugin inclusion.
  • Contributing context (if known): related reports (#62920, #63465) show the same symptom family; #63097 addresses overlapping startup reconciliation behavior.

Regression Test Plan (if applicable)

  • Coverage level that should have caught this:
    • Unit test
    • Seam / integration test
    • End-to-end test
    • Existing coverage already sufficient
  • Target test or file: src/plugins/channel-plugin-ids.test.ts
  • Scenario the test should lock in:
    • default startup includes memory-core when selected in memory slot
    • custom memory slot selection includes only the selected memory plugin in startup IDs
    • restrictive allowlist expectations still include the selected memory-slot plugin
  • Why this is the smallest reliable guardrail: the bug is in startup plugin-ID classification, fully exercised by resolver unit tests.
  • Existing test that already covers this (if any): existing startup resolver table tests now extended.
  • If no new test is added, why not: N/A

User-visible / Behavior Changes

  • Gateway startup now consistently includes the selected memory-slot plugin in startup plugin scope.

Diagram (if applicable)

Before:
[gateway startup] -> [resolve startup plugin IDs]
                -> [memory-slot plugin may be excluded]
                -> [memory startup reconciliation may not run]

After:
[gateway startup] -> [resolve startup plugin IDs]
                -> [selected memory-slot plugin included]
                -> [memory startup reconciliation path available]

Security Impact (required)

  • New permissions/capabilities? No
  • Secrets/tokens handling changed? No
  • New/changed network calls? No
  • Command/tool execution surface changed? No
  • Data access scope changed? No
  • If any Yes, explain risk + mitigation: N/A

Repro + Verification

Environment

  • OS: Windows (dev), issue reports from macOS/Linux environments
  • Runtime/container: Node + pnpm workspace
  • Model/provider: N/A
  • Integration/channel (if any): N/A
  • Relevant config (redacted): default and custom plugins.slots.memory

Steps

  1. Select memory slot plugin in config (memory-core default or custom memory plugin).
  2. Resolve gateway startup plugin IDs.
  3. Verify selected memory-slot plugin is present in startup scope.

Expected

  • selected memory-slot plugin is included in startup plugin IDs.

Actual

  • verified by focused tests in src/plugins/channel-plugin-ids.test.ts.

Evidence

  • Failing test/log before + passing after
  • Trace/log snippets
  • Screenshot/recording
  • Perf numbers (if relevant)

Human Verification (required)

  • Verified scenarios: ran pnpm test -- src/plugins/channel-plugin-ids.test.ts and confirmed all resolver scenarios pass with the new memory-slot startup invariant.
  • Edge cases checked: restrictive allowlist startup case, custom memory slot selection, default startup path.
  • What you did not verify: full end-to-end gateway restart reproduction on a live memory-core installation.

Review Conversations

  • I replied to or resolved every bot review conversation I addressed in this PR.
  • I left unresolved only the conversations that still need reviewer or maintainer judgment.

Compatibility / Migration

  • Backward compatible? Yes
  • Config/env changes? No
  • Migration needed? No
  • If yes, exact upgrade steps: N/A

Risks and Mitigations

  • Risk: could load one additional plugin at startup in setups where memory slot is selected but previously omitted.
    • Mitigation: startup inclusion is constrained to selected memory slot plugin and existing activation-state checks.
  • Risk: overlap with #63097 implementation details.
    • Mitigation: this PR remains narrowly scoped to startup plugin ID classification and has focused regression tests.

Changed files

  • src/commands/doctor-bootstrap-size.test.ts (modified, +1/-0)
  • src/plugins/channel-plugin-ids.test.ts (modified, +68/-6)
  • src/plugins/channel-plugin-ids.ts (modified, +18/-0)

Code Example

"dreaming": {
     "enabled": true,
     "frequency": "40 11 * * *"
   }

---

2026-04-08T10:32:33.427+08:00 [plugins] memory-core: removed 1 managed dreaming cron job(s).

---

gh issue create --repo openclaw/openclaw --title "Memory Dreaming Promotion workaround" --body "Manually created: openclaw cron add --name Memory\ Dreaming\ Promotion\ workaround --schedule \"cron 40 11 * * *\" --session-target main --payload-kind systemEvent --payload-text __openclaw_memory_core_short_term_promotion_dream__"
RAW_BUFFERClick to expand / collapse

Bug Description

When plugins.entries.memory-core.config.dreaming.enabled is set to true (with a frequency configured, e.g. "40 11 * * *"), the memory-core plugin does not reliably create its managed cron job (Memory Dreaming Promotion). The cron is never visible in openclaw cron list, and no dreaming sweeps run regardless of the configured schedule.

Steps to Reproduce

  1. Have a fresh or existing OpenClaw installation at v2026.4.5
  2. Add the following to plugins.entries.memory-core.config in openclaw.json:
    "dreaming": {
      "enabled": true,
      "frequency": "40 11 * * *"
    }
  3. Start / restart the Gateway (openclaw gateway start or openclaw gateway restart)
  4. Run openclaw cron list — the Memory Dreaming Promotion managed cron is absent
  5. No dreaming event (__openclaw_memory_core_short_term_promotion_dream__) is ever triggered

Additional Observations

  • The plugin has created a managed cron in the past (gateway log shows: removed 1 managed dreaming cron job(s). during a config reload — confirming the plugin knows how to manage it, but fails to recreate)
  • After a config change that triggers a reload, the old managed cron is removed but no new one is created
  • Fully stopping and restarting the Gateway (not just a config reload) also does not recreate the cron
  • v2026.4.7 release notes include Memory/dreaming: ingest redacted session transcripts... (feature addition) but no mention of this managed cron registration bug being fixed

Gateway Log Evidence

2026-04-08T10:32:33.427+08:00 [plugins] memory-core: removed 1 managed dreaming cron job(s).

This line proves the plugin was capable of managing the cron at some point — it successfully removed it, but never recreated it.

Environment

  • OpenClaw version: 2026.4.5 (also confirmed present on fully restarted Gateway)
  • OS: macOS (Darwin)
  • Node.js: v24.14.0
  • Installation method: Homebrew (brew install openclaw)

Workaround

Manually creating a cron with the matching schedule and systemEvent payload works as a workaround:

gh issue create --repo openclaw/openclaw --title "Memory Dreaming Promotion workaround" --body "Manually created: openclaw cron add --name Memory\ Dreaming\ Promotion\ workaround --schedule \"cron 40 11 * * *\" --session-target main --payload-kind systemEvent --payload-text __openclaw_memory_core_short_term_promotion_dream__"

Expected Behavior

When dreaming.enabled = true, memory-core should automatically create and maintain a managed cron job that fires at the configured frequency, persisting across Gateway restarts and config reloads.

extent analysis

TL;DR

The memory-core plugin fails to create its managed cron job when dreaming.enabled is set to true, requiring a manual workaround to create the cron job.

Guidance

  • Verify that the memory-core plugin is properly configured and enabled in the openclaw.json file.
  • Check the Gateway logs for any errors or warnings related to the memory-core plugin or cron job creation.
  • Use the provided workaround to manually create a cron job with the matching schedule and systemEvent payload.
  • Consider upgrading to a newer version of OpenClaw, such as v2026.4.7, to see if the issue is resolved, although the release notes do not explicitly mention a fix for this bug.

Example

The following command can be used to manually create a cron job as a workaround:

openclaw cron add --name "Memory Dreaming Promotion workaround" --schedule "cron 40 11 * * *" --session-target main --payload-kind systemEvent --payload-text __openclaw_memory_core_short_term_promotion_dream__

Notes

The issue seems to be specific to the memory-core plugin and its interaction with the cron job system. The fact that the plugin was able to remove the managed cron job in the past suggests that it has the necessary functionality, but is failing to recreate it.

Recommendation

Apply the workaround to manually create the cron job, as the issue is not explicitly fixed in the available versions of OpenClaw.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING