fix(memory): persist dirty flag to prevent false positive on status #4386
+160
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
The memory index
dirtyflag was showing a false positive after a clean sync. When runningclawdbot memory status, it would always reportDirty: yeseven after a successfulclawdbot memory sync, causing confusion about whether the index actually needed reindexing.Root Cause
Each
clawdbot memorycommand creates a freshMemoryIndexManagerinstance. The issue occurred because:this.dirty = this.sources.has("memory")(line 248)sync()would setthis.dirty = falseafter successful indexingclose()removes the manager from cachetrueagainThe actual indexing logic was working correctly (using file hashes to skip unchanged files), but the dirty flag was purely a UX issue showing incorrect state.
Solution
Persist the
dirtyflag to the database metadata so it survives across manager instances:MemoryIndexMetatype to include optionaldirty?: booleanfieldthis.dirty = meta?.dirty ?? this.sources.has("memory")persistDirtyState()helper that updates the dirty flag in metadatadirty = false)dirty = true)Testing
Added comprehensive test suite in
manager-dirty-flag.test.tsthat verifies:Impact
true(safe fallback)