Context. The RKM validator pipeline detects conflicts (shadow.py subsumption/shadow/salience-inversion) and scores them (scoring.py 0.6/0.9 bands) but has no resolution step. MemGraphRAG's strongest ablation: removing Conflict Resolution is the single biggest accuracy hit — detection alone is insufficient. Nautilus already has the provenance substrate (LineageRecord observation_ids/sandbox_results/derived_from, mark_retired, Proposal.decisions) to do bounded, deterministic auto-resolution of a defined conflict subclass before falling back to humans.
Proposal. Insert a resolve stage: new nautilus/rkm/validator/resolve.py, resolve(shadow_flags, lineage_evidence) -> ResolutionDecision, handling only the deterministic subset — e.g. a subsumed_by flag where the existing rule is strictly broader / higher salience / richer provenance → auto-retire the redundant proposal. salience_inverts and mutually-exclusive cases still route to human review. Pure function over flags+lineage; never invokes an LLM (swaps the paper's LLM adjudicator for a rule/provenance-deterministic one — borrows the goal, not the method).
Where.
nautilus/rkm/validator/pipeline.py run_pipeline :21-66 (insert resolve after shadow_check/score).
- Consumes
shadow.ShadowFlag (shadow.py:33) + lineage.LineageRecord (lineage.py:29); status transitions via rkm/types.py Proposal.decisions :35 + ProposalStatus 'superseded'/'promoted' :14; auditability via LineageStore.mark_retired (lineage.py:201).
Acceptance criteria.
Caveat (sequencing). run_pipeline currently calls shadow_check({}, []) / sandbox_replay({}, audit_log) with empty inputs (it is itself a scaffold) — a resolve stage is only meaningful once the pipeline is fed real ruleset + history. Sequence after that wiring.
Source: arXiv:2606.00610v1 — "MemGraphRAG: Memory-based Multi-Agent System for Graph Retrieval-Augmented Generation". Distilled from arXiv-research/2606.00610v1/analysis.md; file refs verified against current main by the analysis pass.
Context. The RKM validator pipeline detects conflicts (
shadow.pysubsumption/shadow/salience-inversion) and scores them (scoring.py0.6/0.9 bands) but has no resolution step. MemGraphRAG's strongest ablation: removing Conflict Resolution is the single biggest accuracy hit — detection alone is insufficient. Nautilus already has the provenance substrate (LineageRecordobservation_ids/sandbox_results/derived_from,mark_retired,Proposal.decisions) to do bounded, deterministic auto-resolution of a defined conflict subclass before falling back to humans.Proposal. Insert a resolve stage: new
nautilus/rkm/validator/resolve.py,resolve(shadow_flags, lineage_evidence) -> ResolutionDecision, handling only the deterministic subset — e.g. asubsumed_byflag where the existing rule is strictly broader / higher salience / richer provenance → auto-retire the redundant proposal.salience_invertsand mutually-exclusive cases still route to human review. Pure function over flags+lineage; never invokes an LLM (swaps the paper's LLM adjudicator for a rule/provenance-deterministic one — borrows the goal, not the method).Where.
nautilus/rkm/validator/pipeline.pyrun_pipeline:21-66 (insert resolve after shadow_check/score).shadow.ShadowFlag(shadow.py:33) +lineage.LineageRecord(lineage.py:29); status transitions viarkm/types.pyProposal.decisions:35 +ProposalStatus'superseded'/'promoted' :14; auditability viaLineageStore.mark_retired(lineage.py:201).Acceptance criteria.
subsumed_bysubset; everything ambiguous → human review (fail-closed).mark_retiredwith lineage.Caveat (sequencing).
run_pipelinecurrently callsshadow_check({}, [])/sandbox_replay({}, audit_log)with empty inputs (it is itself a scaffold) — a resolve stage is only meaningful once the pipeline is fed real ruleset + history. Sequence after that wiring.Source: arXiv:2606.00610v1 — "MemGraphRAG: Memory-based Multi-Agent System for Graph Retrieval-Augmented Generation". Distilled from
arXiv-research/2606.00610v1/analysis.md; file refs verified against currentmainby the analysis pass.