Akashik Protocol
Types

Conflict

A detected contradiction between two memory units.

Conflict

A Conflict represents a detected contradiction between two memory units. The protocol treats conflicts as expected events, not errors. Conflicts are declared explicitly by agents at every level (via a contradicts relation), and detected automatically at every level — mechanically (key-value disagreement, no embeddings) starting at Level 1, semantically at Level 2+.

A conflict's shape also depends on level. At Level 1, a conflict is a stateless fact: two unit IDs and the fields they disagree on — useful because there is nothing yet to do with it except surface it. At Level 2+, once MERGE exists to act on it, a conflict becomes a stateful, ID-addressable resource with a resolution lifecycle.

Schema

{
  "id": "<string | null>",
  "type": "factual | interpretive | strategic | priority | null",
  "status": "detected | resolving | resolved | escalated | null",
  "unit_a": "<string>",
  "unit_b": "<string>",
  "conflicting_fields": ["<string>"],
  "description": "<string>",
  "detected_by": "explicit | mechanical | semantic | logical | temporal",
  "resolution": {
    "strategy": "<ConflictStrategy>",
    "winner_id": "<string | null>",
    "rationale": "<string>",
    "resolved_by": "<string>",
    "epoch_resolved": "<number>"
  }
}

Field Reference

FieldTypeRequiredDescription
idstring or nullLevel 2+Unique conflict identifier, auto-assigned by the Field. null at Level 1 — a stateless conflict has no identity to reference later.
typestring or nullLevel 2+factual, interpretive, strategic, or priority. Unset at Level 1.
statusstring or nullLevel 2+Current state of the conflict. Unset at Level 1.
unit_astringID of the first conflicting memory unit.
unit_bstringID of the second conflicting memory unit.
conflicting_fieldsstringFor mechanical detectionThe shared fields the two units disagree on.
descriptionstringLevel 2+Human-readable description of the contradiction.
detected_bystringHow the conflict was discovered.
resolutionobjectPopulated once the conflict is resolved (Level 2+ only — there is no resolution lifecycle at Level 1).

Required Fields by Level

FieldLevel 1Level 2+
unit_a, unit_bREQUIREDREQUIRED
detected_byREQUIREDREQUIRED
conflicting_fieldsREQUIRED for mechanical detectionREQUIRED for mechanical detection
descriptionOPTIONALREQUIRED
idREQUIRED
typeREQUIRED
statusREQUIRED
resolutionREQUIRED once resolved

At Level 1, a Conflict is a stateless fact recomputed on demand — it has no identity to reference later and no lifecycle, because MERGE, the only operation that would advance it through one, doesn't exist yet.

Conflict Types

TypeDescription
factualTwo units make opposing factual claims (e.g., conflicting market size figures)
interpretiveTwo units interpret the same evidence differently
strategicTwo units recommend conflicting courses of action
priorityTwo units assign different priority to the same goal or task

Detection Methods

MethodDescriptionRequired Level
explicitAn agent included a contradicts relation in a RECORD request1+
mechanicalTwo committed units share a scoping key and disagree on the value of another shared primitive field. No embeddings or configuration required.1+
semanticEmbedding similarity detected opposing claims2+
logicalA finding's assumptions contradict another finding's content2+
temporalA newer finding contradicts an established, higher-confidence finding2+

Status Lifecycle

Applies from Level 2+, once MERGE exists to drive it. At Level 1, a Conflict has no status to transition.

detected → resolving → resolved
detected → escalated → resolved (human operator resolves)
resolving → escalated (strategy fails or times out)
StatusDescription
detectedConflict found; no resolution initiated yet.
resolvingAn agent or the Field has initiated resolution with a chosen strategy.
resolvedSuccessfully resolved. Both original units updated to superseded or one is superseded.
escalatedAutomatic resolution not possible; flagged for human review.

Conflict Resolution Strategies

StrategyDescriptionRequired Level
last_write_winsMost recent memory unit prevails2+
confidence_weightedHigher confidence score prevails2+
human_escalationFlag for human review2+
authoritySpecified agent/role has final say3
evidence_countUnit with more supporting evidence prevails3
synthesisCreate a new unit reconciling both3
voteMultiple agents vote (requires quorum)3

JSON Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://akashikprotocol.com/schema/0.1.0/conflict.json",
  "type": "object",
  "required": ["unit_a", "unit_b", "detected_by"],
  "properties": {
    "id": { "type": ["string", "null"], "minLength": 1 },
    "type": { "type": ["string", "null"], "enum": ["factual", "interpretive", "strategic", "priority", null] },
    "status": { "type": ["string", "null"], "enum": ["detected", "resolving", "resolved", "escalated", null] },
    "unit_a": { "type": "string" },
    "unit_b": { "type": "string" },
    "conflicting_fields": { "type": "array", "items": { "type": "string" } },
    "description": { "type": "string" },
    "detected_by": { "type": "string", "enum": ["explicit", "mechanical", "semantic", "logical", "temporal"] },
    "resolution": {
      "type": "object",
      "properties": {
        "strategy": {
          "type": "string",
          "enum": ["last_write_wins", "confidence_weighted", "authority", "evidence_count", "synthesis", "human_escalation", "vote"]
        },
        "winner_id": { "type": ["string", "null"] },
        "rationale": { "type": "string" },
        "resolved_by": { "type": "string" },
        "epoch_resolved": { "type": "integer" }
      }
    }
  }
}