Expand description
v0.4.7 — Current-fact resolver: an opt-in post-processor over the
standard recall result set.
§Anchor
arXiv:2605.18565 (MINTEval —
Memory Interference under Targeted Edits) measures how often
memory systems return a superseded value of a fact after the
same fact has been revised K times. The default mnemo recall
path (semantic + BM25 + graph + recency) is unaware of fact
identity — every write is a separate MemoryRecord. Under
interference, the recency lane alone is often not enough: high-
semantic-score older versions can still outrank the most recent
write.
The current-fact resolver runs after the normal recall result
set is computed. Given a fact_key (a metadata JSON pointer the
operator chose to scope fact identity by — typical convention
is "fact_id"), the resolver groups candidates by their value
under that key, picks the most-recent write per group, and
optionally returns the older writes in that group as a
supersession chain.
§Design contract
- Opt-in. Triggered only when
RecallRequest::current_fact_resolverisSome. The default read path is unchanged. - Post-processor, not a replacement. The resolver runs over
whatever candidates the underlying
RetrievalModeproduced. It does not re-issue a query. - Most-recent wins. Within each fact-identity group, the
record with the latest
updated_at(falling back tocreated_at) is the current fact. If two records share the same timestamp, the higher base score wins; if scores tie, the higher UUID v7 wins (which is itself time-sortable). - Supersession chain. Older writes in a group are returned
in
RecallResponse::supersededwhenCurrentFactResolverConfig::include_supersession_chainistrue. Chain is ordered newest-superseded → oldest. - Records without the
fact_keystay in the result set untouched (they have no fact identity to resolve against).
§What this module is NOT
- Not a contradiction detector. Two records with the same
fact_keyvalue are treated as versions of one fact; the resolver does NOT inspect content to detect semantic contradiction. The operator choosesfact_keyto mean what they want it to mean. - Not a write-side guard. The resolver only re-ranks reads.
Operators wanting to prevent contradictory writes use the
existing conflict-resolution path (
crate::query::conflict). - Not a benchmark. The MINTEval-shaped interference scenario
that exercises this resolver lives in
bench/locomo/src/bin/interference.rs.
Structs§
- Current
Fact Resolver Config - Opt-in config for the current-fact resolver. Carried on
RecallRequest::current_fact_resolver. - Resolver
Output - Output of the resolver: the kept (current) candidates + (when requested) the superseded ones grouped by fact identity.
Functions§
- resolve
- Apply the current-fact resolver to a result set produced by the
standard recall path. Groups by
cfg.fact_key, keeps the most recent write per group, and optionally collects the older writes as a supersession chain.