Bug report
Describe the bug
When a memory is marked as superseded (e.g. after a duplicate merge, the superseded_by column is set), it is still returned by semantic recall — and often as a top result, since the vector embedding is unchanged.
To reproduce
- Store two similar memories.
- Merge them by setting
superseded_by on the older one (the server's merge/MarkOutdated path).
- Run
memory action=recall with a query matching the older entry.
- The superseded entry still appears in the results, even though its successor should be the only relevant hit.
Expected behavior
Superseded entries are excluded from semantic recall; the successor carries the current knowledge. Maintenance tools (List/ListLightweight) should still see them for temporal history.
Environment
- agent-memory-mcp v0.9.1
- Ubuntu 24.04, Linux
Root cause
internal/memory/read.go: the Recall loop has no check on m.SupersededBy, unlike the review-queue exclusion.
Fix available
See PR #17 (excludes superseded_by entries in the recall loop).
Bug report
Describe the bug
When a memory is marked as superseded (e.g. after a duplicate merge, the
superseded_bycolumn is set), it is still returned by semanticrecall— and often as a top result, since the vector embedding is unchanged.To reproduce
superseded_byon the older one (the server's merge/MarkOutdated path).memory action=recallwith a query matching the older entry.Expected behavior
Superseded entries are excluded from semantic recall; the successor carries the current knowledge. Maintenance tools (
List/ListLightweight) should still see them for temporal history.Environment
Root cause
internal/memory/read.go: theRecallloop has no check onm.SupersededBy, unlike the review-queue exclusion.Fix available
See PR #17 (excludes
superseded_byentries in the recall loop).