Skip to content

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.