Resolve a Conflict
When two atoms in your knowledge graph contradict each other — or when an atom contradicts a strategy node — Momental flags it as a conflict and notifies you. This is a feature, not a problem. Conflicts surface stale beliefs, competing assumptions, and misaligned strategy before they cause real damage.
Where conflicts appear
- UI: Knowledge → Conflicts shows all open conflicts
- Agent room: Huginn posts a brief when a high-confidence conflict is detected
- MCP:
momental_conflicts_list()
Reading a conflict
Every conflict shows you:
- The two atoms (or atom + strategy node) that conflict
- What kind of conflict it is — semantic (opposing meaning), logical (implied contradiction), temporal (scope mismatch), or cross-tree (atom vs. strategy)
- A confidence level — how certain Momental is this is a real conflict vs. noise
- The resolution options available to you
Example conflict
Atom A: "We prioritize mobile users. All new features ship mobile-first."
Created by: Sarah, 14 months ago
Atom B: "We are a desktop-first product. Mobile is read-only."
Created by: James, 3 months ago
Conflict type: SEMANTIC
Confidence: HIGH This is a real conflict — two authoritative statements saying opposite things. One of them is stale.
Your resolution options
| Option | What it does | When to use it |
|---|---|---|
| Keep existing | Marks the new atom as superseded. The old atom stays authoritative. | The old atom is still correct. The new one was a mistake or duplicate. |
| Keep new | Marks the old atom as superseded. The new one becomes authoritative. | The old atom is stale. The team's understanding has evolved. |
| Keep both | Marks the conflict as resolved without retiring either atom. Both stay active. | Both are true in different contexts (e.g., different product lines or time periods). |
| Merge | Combines both into a new atom that captures the nuance. Both originals are retired. | Both contain partial truth that should be unified into one statement. |
| Dismiss | Marks the conflict as a false positive. No atoms are changed. | The detection was wrong — the atoms don't actually conflict. |
Resolving via MCP
// List open conflicts
const conflicts = await momental_conflicts_list();
// Get details on a specific conflict
const conflict = await momental_conflict_details({ conflictId: conflicts[0].id });
// Resolve: keep the newer atom, retire the old one
await momental_conflict_resolve({
conflictId: conflict.id,
resolution: "KEEP_NEW",
rationale: "Strategy changed in Q3 — we are now desktop-first. Atom A is 14 months old and no longer reflects current direction."
}); Cross-tree conflicts
A cross-tree conflict is when an atom in your knowledge graph directly contradicts a strategy node. These are the most strategically significant — they mean what you believe and what you're trying to do are out of alignment.
Knowledge atom: "Free tier users are not strategic — focus on enterprise."
Strategy node: KEY_RESULT: "Grow free tier signups by 50% this quarter"
→ Cross-tree conflict: ATOM_CONTRADICTS_STRATEGY Resolving a cross-tree conflict usually means one of three things:
- The strategy is wrong — update it to reflect your actual direction
- The atom is wrong — the belief has changed, retire it
- Both are right in different scopes — add context to both to clarify
const crossTreeConflicts = await momental_cross_tree_conflicts_list();
await momental_cross_tree_conflict_resolve({
conflictId: crossTreeConflicts[0].id,
resolution: "ATOM_IS_STALE",
rationale: "We changed strategy in Q2 — free tier is now a growth lever, not a distraction."
}); When to dismiss vs. resolve
Dismiss when the detection is genuinely wrong — two atoms that use similar language but aren't actually contradictory. Resolve when there's a real tension, even if the answer is "keep both in different contexts."
A well-maintained workspace has zero open high-confidence conflicts. Low-confidence conflicts can be periodically reviewed and dismissed if they're false positives.