Skip to content

[Bug]: memory-core dreaming promotion always finds 0 candidates - recallCount never accumulates (normalized recall artifacts resets scores) #64068

@ymzhang10

Description

@ymzhang10

Bug Description

Summary: The short-term dreaming promotion step consistently reports candidates=0, applied=0, failed=0 across all workspaces. Inspection of .dreams/short-term-recall.json shows 1323 entries where every entry has recallCount: 0 and totalScore never exceeds 0.62 — both below the promotion thresholds (minScore=0.800 and minRecallCount=3).

Root Cause Hypothesis

The gateway log shows this sequence during each dreaming run:

memory-core: light dreaming staged 67 candidate(s) [workspace=.../workspace]
memory-core: REM dreaming wrote reflections from 1323 recent memory trace(s)
memory-core: normalized recall artifacts before dreaming (rewrote recall store)  ← ⚠️
memory-core: dreaming promotion complete (workspaces=5, candidates=0, applied=0, failed=0)

The normalized recall artifacts before dreaming (rewrote recall store) step appears to reset recallCount to 0 for all entries. Because this normalization runs on every dreaming cycle, recall counts can never accumulate between runs, making promotion permanently impossible.

Evidence

.dreams/short-term-recall.json inspection (1323 entries):

{
  "key": "memory:memory/2026-04-08.md:5:5",
  "totalScore": 0.62,
  "recallCount": 0,
  "dailyCount": 1,
  "groundedCount": 0
}
  • Max totalScore across all 1323 entries: 0.62
  • recallCount for every single entry: 0
  • Promotion candidates meeting threshold (score >= 0.8 AND recallCount >= 3): 0

Full log excerpt (2026-04-09T17:45:00Z):

memory-core: light dreaming staged 67 candidate(s) [workspace=/Users/.../workspace]
memory-core: REM dreaming wrote reflections from 1323 recent memory trace(s)
memory-core: normalized recall artifacts before dreaming (rewrote recall store)
memory-core: light dreaming staged 72 candidate(s) [workspace=.../workspace-scout]
memory-core: REM dreaming wrote reflections from 386 recent memory trace(s)
memory-core: REM dreaming wrote reflections from 1116 recent memory trace(s)
memory-core: normalized recall artifacts before dreaming (rewrote recall store)
memory-core: dreaming promotion complete (workspaces=5, candidates=0, applied=0, failed=0)

Expected Behavior

  • recallCount should persist and accumulate between dreaming cycles
  • Entries that are repeatedly retrieved during memory searches should gradually reach promotion threshold
  • Promotion should eventually write high-signal snippets into MEMORY.md or designated long-term memory files

Actual Behavior

  • recallCount is reset to 0 on every dreaming run ("rewrote recall store")
  • No entries ever reach the promotion threshold
  • dreams/ directory shows no new promotions despite weeks of operation
  • lastDurationMs for the dreaming cron is ~4ms (effectively a no-op)

Environment

  • OpenClaw version: 2026.4.9 (build 0512059)
  • Node.js: v25.9.0
  • Platform: macOS Darwin 25.4.0 (arm64)
  • memory-core config:
{
  "enabled": true,
  "config": {
    "dreaming": {
      "enabled": true,
      "frequency": "45 1 * * *"
    }
  }
}

Relation to Other Issues

The "normalization" resetting recallCount appears to be a separate, independent defect from both of the above.

Suggested Fix

In the normalizeRecallArtifacts (or equivalent) function, the normalization step should:

  1. Preserve recallCount, dailyCount, groundedCount and cumulative score fields — only normalize structural/schema issues, not semantic state
  2. If a schema migration is necessary, add a version guard to avoid re-normalizing already-normalized stores
  3. The totalScore accumulation logic should not depend on recallCount alone; alternatively, lower or make the promotion threshold configurable

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions