Skip to main content

Module current_fact_resolver

Module current_fact_resolver 

Source
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_resolver is Some. The default read path is unchanged.
  • Post-processor, not a replacement. The resolver runs over whatever candidates the underlying RetrievalMode produced. It does not re-issue a query.
  • Most-recent wins. Within each fact-identity group, the record with the latest updated_at (falling back to created_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::superseded when CurrentFactResolverConfig::include_supersession_chain is true. Chain is ordered newest-superseded → oldest.
  • Records without the fact_key stay 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_key value are treated as versions of one fact; the resolver does NOT inspect content to detect semantic contradiction. The operator chooses fact_key to 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§

CurrentFactResolverConfig
Opt-in config for the current-fact resolver. Carried on RecallRequest::current_fact_resolver.
ResolverOutput
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.