Contradiction (Cl)
Element: Chlorine (Cl · 17) · the opposite of sodium; with it forms salt.
What it does
Finds pairs of notes where you assert opposing positions — the kind of slow disagreement that only becomes visible across months.
Two variants ship:
- v0 (default): heuristic pair-pre-filter on similarity + signal detection (negation, reversal, polarity-pair). Output is the pair + signals + score.
- v1 (with
--llm): also calls the LLM to produce a verdict (proven/apparent/undetermined) plus a short reason. The v0 pair always ships; v1 just decorates.
Algorithm sketch
- Extract candidate claim sentences (sentences with a polarity-bearing verb)
- For each pair within an embedding-similarity window, run the 21 polarity-pair classifiers (e.g. “must / must not”, “always / sometimes”, “preserved / removed”)
- Filter by recency span (default: ≥ 30 days apart) to bias toward slow drift
- Rank by polarity strength × embedding distance
Polarity pairs
The 21 pairs are listed in SPEC.md §7.3. They were tuned against George’s
vault and the bundled fixtures; tuning them per-vault is on the roadmap.
False positives
- Rhetorical opposition. “Some people think X; I think Y” can register as a contradiction with itself. The audit pass catches most.
- Quoted text. Sentences inside blockquotes are still indexed but get
down-weighted via the
quote_penaltyfactor.
Confidence
Pair confidence multiplies polarity strength × embedding distance × recency gap. A high-confidence contradiction is the kind worth investigating; a low-confidence one is usually you exploring an idea.