Conflicts & Gaps
Momental continuously monitors the knowledge graph for contradictions between stored knowledge and current reality. These tools let you inspect and resolve those signals.
What Are Conflicts?
A conflict is a detected contradiction between two or more knowledge atoms - or between an atom and the current codebase. Conflicts are raised automatically by Momental's conflict detection system when it finds evidence that a stored claim no longer holds.
For example: an atom says "Our API responds within 200ms at p99", but recent monitoring data shows p99 has been 450ms for two weeks. Momental raises a conflict and routes it to the relevant team members for review.
Listing Conflicts
momental_conflicts_list
Returns all open conflicts visible to the current agent. By default returns only unresolved
conflicts. Pass includeResolved: true to include resolved history.
| Parameter | Type | Required | Description |
|---|---|---|---|
includeResolved | boolean | No | Include already-resolved conflicts (default: false) |
domain | string | No | Filter by knowledge domain |
limit | number | No | Maximum results (default: 20) |
const conflicts = await momental_conflicts_list();
// [
// {
// id: "conflict_abc",
// type: "CONTRADICTION",
// severity: "HIGH",
// summary: "Atom A says p99<200ms, but monitoring shows 450ms",
// atomIds: ["atom_001", "atom_002"],
// createdAt: "2026-03-25T09:00:00Z"
// }
// ]
momental_conflict_details
Returns the full details of a specific conflict, including the conflicting atoms, the evidence that triggered the conflict, and any prior resolution attempts.
| Parameter | Type | Required | Description |
|---|---|---|---|
conflictId | string | Yes | The conflict ID from momental_conflicts_list |
const details = await momental_conflict_details({ conflictId: "conflict_abc" });
// {
// id: "conflict_abc",
// conflictingAtoms: [
// { id: "atom_001", statement: "API p99 is under 200ms", createdAt: "..." },
// { id: "atom_002", statement: "p99 latency has been 450ms for 2 weeks", createdAt: "..." }
// ],
// evidence: "Monitoring data from Grafana dashboard shows consistent 450ms",
// suggestedResolution: "Update atom_001 to reflect current measured latency"
// }
Resolving Conflicts
momental_conflict_resolve
Marks a conflict as resolved and records your resolution rationale. The resolution is stored as a DECISION atom so future agents understand why the conflict was closed this way.
| Parameter | Type | Required | Description |
|---|---|---|---|
conflictId | string | Yes | The conflict to resolve |
resolution | string | Yes | How the conflict was resolved |
atomToKeep | string (UUID) | No | If two atoms contradict, which one is correct |
atomToRetire | string (UUID) | No | The atom that is now outdated/incorrect |
await momental_conflict_resolve({
conflictId: "conflict_abc",
resolution: "Updated atom to reflect current p99 of 450ms. Latency regression introduced in v2.3.1.",
atomToKeep: "atom_002", // the recent measurement
atomToRetire: "atom_001" // the outdated claim
});
momental_conflict_dismiss
Dismisses a conflict without resolving the underlying issue. Use when the conflict is a false positive - for example, when both atoms are correct but refer to different environments.
| Parameter | Type | Required | Description |
|---|---|---|---|
conflictId | string | Yes | The conflict to dismiss |
reason | string | Yes | Why this conflict is a false positive |
await momental_conflict_dismiss({
conflictId: "conflict_xyz",
reason: "Both atoms are correct - atom_001 is about staging, atom_002 is about production"
});
momental_conflict_feedback
Adds feedback to a conflict without resolving it. Useful for annotating a conflict with context while waiting for another team member to make the final call.
| Parameter | Type | Required | Description |
|---|---|---|---|
conflictId | string | Yes | The conflict to annotate |
feedback | string | Yes | Context or investigation notes |
Cross-Tree Conflicts
Cross-tree conflicts arise when two strategy nodes in different parts of the tree contain contradictory decisions - for example, two EPICs that each allocate the same budget resource. These are more strategic in nature and require team leadership to resolve.
momental_cross_tree_conflicts_list
Returns open cross-tree conflicts visible to the current agent.
momental_cross_tree_conflict_resolve
Resolves a cross-tree conflict with a rationale and the winning strategy node.
momental_cross_tree_conflict_dismiss
Dismisses a cross-tree conflict as a false positive with a reason.
Knowledge Gaps
A gap is a public surface that has no corresponding documentation or knowledge atom. Gaps are detected automatically via the weekly gap scan and can also be surfaced on demand.
momental_find_gaps
Scans the knowledge graph for surfaces (tools, agents, API endpoints) that have no linked documentation or atoms. Returns a prioritized list of coverage gaps.
| Parameter | Type | Required | Description |
|---|---|---|---|
scope | string | No | Filter by scope: "documentation", "knowledge", or "all" (default: "all") |
limit | number | No | Maximum gaps to return (default: 20) |
const gaps = await momental_find_gaps({ scope: "documentation" });
// [
// { surfaceId: "tool_xyz", surfaceName: "momental_code_deps", type: "MCP_TOOL", priority: "HIGH" },
// { surfaceId: "agent_abc", surfaceName: "Thor", type: "AGENT", priority: "MEDIUM" }
// ]
momental_gaps_list
Returns the current list of tracked gaps (gaps that have been formally added to the backlog,
as opposed to newly detected gaps from momental_find_gaps).
momental_gap_resolve
Marks a gap as resolved, typically after a doc page or knowledge atom has been created to cover the surface.
| Parameter | Type | Required | Description |
|---|---|---|---|
gapId | string | Yes | The gap to mark as resolved |
resolution | string | Yes | What was created to cover this gap |
momental_trigger_conflict_detection
Manually triggers the conflict detection scan for the current team. The scan normally runs weekly, but you can trigger it after a significant batch of knowledge updates to catch contradictions immediately.
// After a large batch of atom updates, trigger immediate conflict detection
await momental_trigger_conflict_detection();
// Returns: { status: "queued", estimatedSeconds: 30 }
Quick Reference
| Tool | Purpose |
|---|---|
momental_conflicts_list | List open conflicts |
momental_conflict_details | Full details of one conflict |
momental_conflict_resolve | Resolve with rationale |
momental_conflict_dismiss | Dismiss as false positive |
momental_conflict_feedback | Add notes without resolving |
momental_find_gaps | Find undocumented surfaces |
momental_gaps_list | List tracked gaps |
momental_gap_resolve | Mark a gap as covered |
momental_trigger_conflict_detection | Run conflict scan now |