Summary
Dreaming short-term promotion writes raw Candidate: User/Assistant: ... confidence: 0.00 evidence: ... lines directly into MEMORY.md without any summarization or distillation.
Problem
The promotion pipeline works as follows:
active-memory extracts recall entries from conversations → stored in .dreams/short-term-recall.json
- Dreaming Light/REM phases write these raw recall entries (including internal metadata like
confidence, evidence, status) into memory/YYYY-MM-DD.md under managed dreaming blocks
- On the next sweep,
memory/YYYY-MM-DD.md is scanned as a short-term memory source
rehydratePromotionCandidate() reads the original text range and returns it as snippet
buildPromotionSection() writes the raw snippet directly into MEMORY.md
This creates a garbage feedback loop: dreaming output flows back into memory sources, gets re-ingested, and raw internal data (Candidate entries with confidence scores, evidence paths, status fields) gets promoted as "long-term memory."
Expected Behavior
Promoted entries in MEMORY.md should be distilled/summarized knowledge, not raw dreaming pipeline artifacts.
Actual Behavior
MEMORY.md gets filled with entries like:
- Candidate: User: System: [2026-04-10 15:04:28 GMT+8] Model switched to codex-manager/gpt-5.4. Conversation info (untrusted metadata): ```json { "message_id": "1492058021642113084"... - confidence: 0.00 - evidence: memory/.dreams/session-corpus/2026-04-10.txt:40-40 - recalls: 0 - status: staged
Suggested Fixes
- Strip dreaming metadata before writing to daily files: When Light/REM phases write to
memory/YYYY-MM-DD.md, filter out lines matching Candidate:, confidence:, evidence:, status: staged patterns
- Add a distillation step before promotion: Run the snippet through an LLM call to summarize/extract key facts before writing to MEMORY.md
- Filter managed dreaming blocks from daily ingestion: When scanning
memory/YYYY-MM-DD.md for short-term recall, skip content inside <!-- openclaw:dreaming:xxx:start/end --> managed blocks to prevent feedback loops
Environment
- OpenClaw 2026.4.11
- memory.backend: qmd
- dreaming.enabled: true, frequency: 0 3 * * *
- active-memory: enabled
Summary
Dreaming short-term promotion writes raw
Candidate: User/Assistant: ... confidence: 0.00 evidence: ...lines directly into MEMORY.md without any summarization or distillation.Problem
The promotion pipeline works as follows:
active-memoryextracts recall entries from conversations → stored in.dreams/short-term-recall.jsonconfidence,evidence,status) intomemory/YYYY-MM-DD.mdunder managed dreaming blocksmemory/YYYY-MM-DD.mdis scanned as a short-term memory sourcerehydratePromotionCandidate()reads the original text range and returns it assnippetbuildPromotionSection()writes the raw snippet directly into MEMORY.mdThis creates a garbage feedback loop: dreaming output flows back into memory sources, gets re-ingested, and raw internal data (Candidate entries with confidence scores, evidence paths, status fields) gets promoted as "long-term memory."
Expected Behavior
Promoted entries in MEMORY.md should be distilled/summarized knowledge, not raw dreaming pipeline artifacts.
Actual Behavior
MEMORY.md gets filled with entries like:
Suggested Fixes
memory/YYYY-MM-DD.md, filter out lines matchingCandidate:,confidence:,evidence:,status: stagedpatternsmemory/YYYY-MM-DD.mdfor short-term recall, skip content inside<!-- openclaw:dreaming:xxx:start/end -->managed blocks to prevent feedback loopsEnvironment