Contradiction Resolution Pass
Consolidation pass that resolves contradictions among ACTIVE propositions by delegating classification to an injected PropositionReviser and retiring the losing side of each conflict.
This pass does NOT re-implement contradiction detection. For each ACTIVE proposition it asks reviser.classify() to compare it against its entity-overlapping ACTIVE peers; for every pair the reviser reports as PropositionRelation.CONTRADICTORY, the weaker member (lower Proposition.effectiveConfidence; ties favor the proposition being classified) is transitioned to PropositionStatus.CONTRADICTED.
Classification uses PropositionReviser.classify — NOT a contraster — because resolving a contradiction is a lifecycle transition, not an articulation of differences.
Pinned losers are surfaced, not silently dropped
A pinned proposition is conflict-protected and is never auto-retired. Rather than skip it in silence — which would let a wrong pin accumulate contradicting evidence invisibly — the pass emits a PropositionRoutedToReview for it via eventListener, so a human (or a later pass) is prompted to resolve the conflict or unpin it.
Idempotency
Only ACTIVE propositions are compared and only an ACTIVE loser is transitioned, so once a conflict is resolved the retired proposition drops out of the candidate set and is never re-classified. A re-run over an already-resolved snapshot therefore yields ConsolidationPassResult.NoOp. Candidates are pruned to those sharing at least one resolved entity, bounding classify() fan-out.
Constructors
Properties
Functions
Consolidate the snapshot propositions for contextId, reporting the outcome.