conflicts operations
The exact fields each conflicts.* operation takes and returns.
Every op is POST /v1/<op> over HTTP and the MCP tool loom_<op>. The identity fields (org, namespace, agent, user_id, session_id) are filled from the token and the MCP session when a transport can; for an HTTP call with no token on a single-user server, the install's org on every op but code.* and tracker.* (which keep their plane's), and on some ops its namespace and agent; see identities and namespaces. The operations index explains role, kind and the MCP all listing. Unknown input fields are served and named in ignored_args.
conflicts.allowlist_list
List (memory_key, memory_key) pairs marked as known-non-conflicting so the conflicts worker stops flagging them.
POST /v1/conflicts.allowlist_list · MCP loom_conflicts_allowlist_list · role viewer · read · not listed under the MCP all toolset
| Input field | Type | Default | Meaning |
|---|---|---|---|
org |
str |
required | The tenant (first element of the identity tuple). |
namespace |
str |
required | The namespace the op reads or writes. |
limit |
int |
100 |
At most this many pairs, 1-1000, newest first. |
| Output field | Type | Meaning |
|---|---|---|
rows |
list[_AllowlistRow] |
Live allowed key pairs (memory_key_a sorts before memory_key_b), newest first. |
conflicts.allowlist_remove
Revoke an allow decision; the pair will re-flag on future writes.
POST /v1/conflicts.allowlist_remove · MCP loom_conflicts_allowlist_remove · role admin · idempotent · audited · not listed under the MCP all toolset
| Input field | Type | Default | Meaning |
|---|---|---|---|
org |
str |
required | The tenant (first element of the identity tuple). |
namespace |
str |
required | The namespace the op reads or writes. |
memory_key_a |
str |
required | One key of the allowed pair; the order of the two keys does not matter. |
memory_key_b |
str |
required | The other key of the pair. |
removed_by |
str |
'' |
Who revoked it; appended with reason to the pair's stored reason. |
reason |
str |
'' |
Why; appended to the pair's stored reason. |
| Output field | Type | Meaning |
|---|---|---|
removed |
bool |
False when no live allowed pair matched. |
conflicts.list
List unresolved conflicts where two memories contradict each other.
POST /v1/conflicts.list · MCP loom_conflicts_list · role viewer · read · not listed under the MCP all toolset
| Input field | Type | Default | Meaning |
|---|---|---|---|
org |
str |
required | The tenant (first element of the identity tuple). |
namespace |
str |
required | The namespace the op reads or writes. |
limit |
int |
50 |
At most this many rows, 1-500, newest version first. |
before_version |
int \| None |
None |
Keyset cursor — pass previous response's earliest version to paginate. |
count_only |
bool |
False |
A badge needs the number, not the rows. |
fresh |
bool |
False |
With count_only, count now instead of reading the minute-long cache; default off. |
keys_only |
bool |
False |
The Memories view marks cards that have a conflict and needs only the keys. |
fields |
list[str] \| None |
None |
The output fields the caller reads (a whitelist resolved against the row model; an unknown name is a 422); unset, every field. |
| Output field | Type | Meaning |
|---|---|---|
rows |
list[_ConflictRow] |
Conflicted memories, newest version first; empty on a count_only or keys_only call. |
next_before_version |
int \| None |
Pass as before_version for the next page; null on the last page. |
total |
int \| None |
The live conflicted count for the namespace; set on a count_only call. |
keys |
list[str] \| None |
The conflicted memory keys of the namespace; set on a keys_only call. |
conflicts.propose_revision
Return non-destructive revise/contract/allow suggestions.
POST /v1/conflicts.propose_revision · MCP loom_conflicts_propose_revision · role viewer · read · not listed under the MCP all toolset
| Input field | Type | Default | Meaning |
|---|---|---|---|
org |
str |
required | The tenant (first element of the identity tuple). |
namespace |
str |
required | The namespace the op reads or writes. |
memory_id |
str |
required | The conflicted memory to advise on (an org-wide id). |
peer_id |
str \| None |
None |
Limit the advice to this one peer from its conflict_with; None considers every peer. |
| Output field | Type | Meaning |
|---|---|---|
found |
bool |
False when the memory, or every row it names, is not live in namespace. |
memories |
list[_ConflictCandidateMemory] |
The target first (local_id 1), then its live peers, newest first. |
suggestions |
list[_ConflictRevisionSuggestion] |
At most one suggested conflicts.resolve, by local id: revise when the target is pinned or shares a peer's key, contract when a peer is pinned, else allow. |
note |
str |
Always says that nothing was applied: this operation only advises. |
conflicts.resolve
Pick the winner of a conflict (keep A, keep B, keep both, merge).
POST /v1/conflicts.resolve · MCP loom_conflicts_resolve · role admin · idempotent · audited · not listed under the MCP all toolset
| Input field | Type | Default | Meaning |
|---|---|---|---|
org |
str |
required | The tenant (first element of the identity tuple). |
namespace |
str |
required | The namespace the op reads or writes. |
memory_id |
str |
required | The conflicted memory the decision is about (an org-wide id); it must live in namespace. |
decision |
Literal['revise', 'contract', 'allow'] |
required | revise keeps it and tombstones the peers; contract tombstones it and reactivates the peers; allow reactivates all and allowlists each key pair. |
peer_id |
str \| None |
None |
Optional: scope the resolve to one specific peer (revise against just that one). |
reason |
str |
'' |
Why; appended to tombstoned rows' source_trace and stored on allowlist rows (first 512 characters). |
resolved_by |
str |
'' |
Who resolved it, recorded beside reason (first 128 characters); not checked against the token. |
| Output field | Type | Meaning |
|---|---|---|
resolved |
bool |
False when the memory or the named peer is unknown, or the memory is not in namespace; nothing was written then. |
decision |
Literal['revise', 'contract', 'allow'] |
The decision, echoed. |
affected_memory_ids |
list[str] |
Every memory id this call tombstoned or reactivated. |
resolved_at |
datetime \| None |
When the resolve ran (UTC); null when nothing was resolved. |
total |
int \| None |
The namespace's conflicted count under the caller's read scope, counted after the writes; null when nothing was resolved or the count failed. |