Summary
openclaw memory status --deep reports Dirty: yes immediately after a successful openclaw memory status --deep --index (which reports Dirty: no) even when no memory files change. This looks like a CLI/status semantics issue: dirty appears to be an in-memory flag that is re-initialized to true in a fresh process.
Environment
- OpenClaw: 2026.2.3-1 (macOS arm64)
- Memory backend: builtin
- MemorySearch provider: openai (
text-embedding-3-small), sqlite-vec enabled
- Workspace:
~/ .openclaw/clawd
Steps to Reproduce
- Run:
openclaw memory status --deep --index --json
Observe dirty: false (and indexing completes).
- Immediately run:
openclaw memory status --deep --json
Observe dirty: true.
- Confirm no memory files changed (optional):
stat/ls -lt on MEMORY.md and memory/*.md.
Expected
After a successful sync/index with no file changes, memory status should report not-dirty (or at least should not default back to dirty in a new invocation).
Actual
A subsequent memory status invocation reports dirty again.
Evidence / Root cause hint
In the distributed build, MemoryIndexManager sets dirty on construction:
- File:
/opt/homebrew/lib/node_modules/openclaw/dist/manager-rDmdE7O9.js
- Around line ~1397:
this.dirty = this.sources.has("memory");
This makes every fresh process start with dirty=true whenever the memory source is enabled, which makes openclaw memory status output misleading.
Suggested fix
- Persist a proper dirty state (e.g., compare file hashes/mtimes vs DB meta) for
status, or
- Rename output to clarify semantics (e.g.,
processDirty vs fsDirty), or
- Initialize
dirty from a persisted meta flag instead of sources.has("memory").
Summary
openclaw memory status --deepreportsDirty: yesimmediately after a successfulopenclaw memory status --deep --index(which reportsDirty: no) even when no memory files change. This looks like a CLI/status semantics issue:dirtyappears to be an in-memory flag that is re-initialized totruein a fresh process.Environment
text-embedding-3-small), sqlite-vec enabled~/ .openclaw/clawdSteps to Reproduce
dirty: false(and indexing completes).dirty: true.stat/ls -ltonMEMORY.mdandmemory/*.md.Expected
After a successful sync/index with no file changes,
memory statusshould report not-dirty (or at least should not default back to dirty in a new invocation).Actual
A subsequent
memory statusinvocation reports dirty again.Evidence / Root cause hint
In the distributed build,
MemoryIndexManagersetsdirtyon construction:/opt/homebrew/lib/node_modules/openclaw/dist/manager-rDmdE7O9.jsThis makes every fresh process start with
dirty=truewhenever thememorysource is enabled, which makesopenclaw memory statusoutput misleading.Suggested fix
status, orprocessDirtyvsfsDirty), ordirtyfrom a persisted meta flag instead ofsources.has("memory").