docs← Back to article

Markdown for LLMs

Arxo Decision Protocol

The source Markdown for this article. Copy it into your assistant or download it as a text file.

Download this articlePlain text ↗
# Arxo Decision Protocol

The Arxo Decision Protocol is what comes back: the answer document with
statuses, the proof, the issues and the hashes. The same inputs give the
same bytes, so the document can be stored, checked a year later and taken
apart in a dispute.

## The answer document

An [evaluation](/protocols/schemas/evaluation/) document has five load
bearing parts:

- the [`manifest`](/protocols/schemas/evaluation/): the hashes of the
  package, the case and the context — `programHash`, `caseHash`,
  `semanticHash` — together with the three dates the question was read
  under;
- one [`result`](/protocols/schemas/evaluation/) per question, each with
  its `evaluationStatus` (`COMPUTED` here), the truth value found
  (`TRUE_ONLY`, `FALSE_ONLY`, `BOTH` or `NEITHER`), and a pointer into the
  proof;
- the [`proofGraph`](/protocols/schemas/evaluation/): every conclusion
  names its rule and its supports, from the asserted facts up through the
  applied rule to the evaluated question; `proofHash` seals the graph;
- [`issues`](/protocols/schemas/evaluation/) and
  [`conflicts`](/protocols/schemas/evaluation/): what was missing and what
  contradicts — empty here, present when the case is incomplete or torn;
- [`positions`](/protocols/schemas/evaluation/): the duties and powers
  the run created, each with its holder, its status (`ACTIVE` here) and
  the proof that created it.

[`resultHash`](/protocols/schemas/evaluation/) seals the whole document:
it is computed over the results, so any change in what was established
changes the hash.

## An example answer

The document below is the recorded answer to the request on the
[Arxo Fact Protocol](https://github.com/arxohq/law/blob/master/docs/protocols/01-fact-protocol) page: one duty created for one
person, with the proof that leads from the two asserted facts through the
applied rule to the evaluated question.

<!-- schema: evaluation -->
```json
{
  "conflicts": [],
  "issues": [],
  "manifest": {
    "artifactHash": "sha256:6cad5bcbbd19de9b0fc84f45d0bd39c68b48f369da8a5a7c50541a638370c189",
    "calendarSnapshot": "",
    "caseHash": "sha256:908e19c49a0b0733533d42f80e219c0deb46600a014d059af6adfa15e4ccf471",
    "decisionTime": "2026-08-26T12:00:00+05:00",
    "evidenceSnapshotHash": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
    "externalSnapshots": {},
    "id": "urn:manifest:oracle-1",
    "interpretations": [],
    "knowledgeTime": "2026-08-26T12:00:00+05:00",
    "legalTime": "2026-08-26",
    "lockfileHash": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
    "mode": "audit",
    "policies": {},
    "programHash": "sha256:a47956edfca7cf7af1f9c1b5d93ddd3ae22f06aacbc87c22f0da85c76aac65cf",
    "resolvedEditions": {},
    "semanticHash": "sha256:39dbcd571269c597665e90e09f6a0ca1152cc3c2aeff38d2156b2db17d50ca89",
    "semantics": "law.core/0.2.4",
    "theoryHash": "sha256:a47956edfca7cf7af1f9c1b5d93ddd3ae22f06aacbc87c22f0da85c76aac65cf",
    "timezone": "Asia/Qyzylorda"
  },
  "positions": [
    {
      "createdBy": "urn:proof:norm:urn:law:vectors:err-e0218-judgment#KeepRule:80d5e26e6e071f80a6d65c9bff5d59f6c278e004eabfef9ac7d430d8ed04ff21",
      "holder": "urn:entity:p1",
      "id": "urn:position:urn:law:vectors:err-e0218-judgment#KeepRule:e5dab3aad77154fa49d198e164665b2b891a01f9229f23cdd815b058ae49e264",
      "manifest": "urn:manifest:oracle-1",
      "modality": "duty",
      "payload": {
        "bearer": {
          "id": "urn:entity:p1",
          "kind": "entity_ref"
        },
        "goal": {
          "condition": {
            "items": [
              {
                "formula": {
                  "args": [
                    {
                      "id": "urn:entity:p1",
                      "kind": "entity_ref"
                    }
                  ],
                  "kind": "literal",
                  "polarity": "positive",
                  "predicate": "urn:law:vectors:err-e0218-judgment#respectful"
                },
                "kind": "status",
                "status": "established"
              },
              {
                "formula": {
                  "args": [
                    {
                      "id": "urn:entity:p1",
                      "kind": "entity_ref"
                    }
                  ],
                  "kind": "literal",
                  "polarity": "positive",
                  "predicate": "urn:law:vectors:err-e0218-judgment#done_a"
                },
                "kind": "status",
                "status": "established"
              }
            ],
            "kind": "and"
          },
          "kind": "achievement",
          "window": {
            "end": {
              "kind": "value",
              "type": {
                "name": "urn:law:std#Date"
              },
              "value": "2026-12-31"
            },
            "endInclusive": true,
            "kind": "interval",
            "start": {
              "kind": "value",
              "type": {
                "name": "urn:law:std#Date"
              },
              "value": "2026-01-01"
            },
            "startInclusive": true
          }
        },
        "kind": "duty"
      },
      "proof": "urn:proof:norm:urn:law:vectors:err-e0218-judgment#KeepRule:80d5e26e6e071f80a6d65c9bff5d59f6c278e004eabfef9ac7d430d8ed04ff21",
      "status": "ACTIVE",
      "statusHistory": [],
      "template": "urn:law:vectors:err-e0218-judgment#Keep"
    }
  ],
  "proofGraph": {
    "nodes": [
      {
        "attributes": {
          "assertion": "urn:law:vectors:err-e0218-judgment#assert-done_a-negative"
        },
        "conclusion": {
          "args": [
            {
              "id": "urn:entity:p1",
              "kind": "entity_ref"
            }
          ],
          "kind": "literal",
          "polarity": "negative",
          "predicate": "urn:law:vectors:err-e0218-judgment#done_a"
        },
        "evidence": [],
        "id": "urn:proof:assert:urn:law:vectors:err-e0218-judgment#assert-done_a-negative",
        "kind": "assertion",
        "premises": [],
        "sourceAnchors": []
      },
      {
        "attributes": {
          "assertion": "urn:law:vectors:err-e0218-judgment#assert-trigger-positive"
        },
        "conclusion": {
          "args": [
            {
              "id": "urn:entity:p1",
              "kind": "entity_ref"
            }
          ],
          "kind": "literal",
          "polarity": "positive",
          "predicate": "urn:law:vectors:err-e0218-judgment#trigger"
        },
        "evidence": [],
        "id": "urn:proof:assert:urn:law:vectors:err-e0218-judgment#assert-trigger-positive",
        "kind": "assertion",
        "premises": [],
        "sourceAnchors": []
      },
      {
        "attributes": {
          "rule": "urn:law:vectors:err-e0218-judgment#KeepRule"
        },
        "conclusion": {
          "position": "urn:position:urn:law:vectors:err-e0218-judgment#KeepRule:e5dab3aad77154fa49d198e164665b2b891a01f9229f23cdd815b058ae49e264",
          "template": "urn:law:vectors:err-e0218-judgment#Keep"
        },
        "evidence": [],
        "id": "urn:proof:norm:urn:law:vectors:err-e0218-judgment#KeepRule:80d5e26e6e071f80a6d65c9bff5d59f6c278e004eabfef9ac7d430d8ed04ff21",
        "kind": "norm_creation",
        "premises": [
          "urn:proof:assert:urn:law:vectors:err-e0218-judgment#assert-trigger-positive"
        ],
        "sourceAnchors": []
      },
      {
        "attributes": {},
        "conclusion": {
          "positions": [
            {
              "id": "urn:position:urn:law:vectors:err-e0218-judgment#KeepRule:e5dab3aad77154fa49d198e164665b2b891a01f9229f23cdd815b058ae49e264",
              "status": "ACTIVE"
            }
          ]
        },
        "evidence": [],
        "id": "urn:proof:query:lq6-e0218-judgment-leaf-dead-v02",
        "kind": "query_evaluation",
        "premises": [
          "urn:proof:norm:urn:law:vectors:err-e0218-judgment#KeepRule:80d5e26e6e071f80a6d65c9bff5d59f6c278e004eabfef9ac7d430d8ed04ff21"
        ],
        "sourceAnchors": []
      }
    ],
    "proofHash": "sha256:9274623d12ec87419ef64f76f043881cab8864276fbe26e9d4c011546e772a3b",
    "roots": [
      "urn:proof:query:lq6-e0218-judgment-leaf-dead-v02"
    ]
  },
  "resultHash": "sha256:f6235e015c937ed293173ae1be8434bdda9d5e52deb4a42ead18c3b1222e47bb",
  "results": [
    {
      "applicabilityStatus": "APPLICABLE",
      "conflicts": [],
      "evaluationStatus": "COMPUTED",
      "evidence": [],
      "id": "urn:result:lq6-e0218-judgment-leaf-dead-v02",
      "judgmentRequests": [],
      "manifest": "urn:manifest:oracle-1",
      "missingInputs": [],
      "normativeStatus": "ACTIVE",
      "normativeStatusSupports": [
        {
          "proof": [
            "urn:proof:norm:urn:law:vectors:err-e0218-judgment#KeepRule:80d5e26e6e071f80a6d65c9bff5d59f6c278e004eabfef9ac7d430d8ed04ff21"
          ],
          "status": "CREATED",
          "truthStatus": "TRUE_ONLY",
          "valid": {
            "end": "2026-08-26",
            "endInclusive": true,
            "start": "2026-08-26",
            "startInclusive": true
          }
        },
        {
          "proof": [
            "urn:proof:assert:urn:law:vectors:err-e0218-judgment#assert-done_a-negative"
          ],
          "status": "ACTIVE",
          "truthStatus": "TRUE_ONLY",
          "valid": {
            "end": "2026-08-26",
            "endInclusive": true,
            "start": "2026-08-26",
            "startInclusive": true
          }
        }
      ],
      "proof": "urn:proof:query:lq6-e0218-judgment-leaf-dead-v02",
      "query": "urn:query:lq6-e0218-judgment-leaf-dead-v02",
      "resultKind": "NORM_POSITION",
      "sourceAnchors": []
    }
  ],
  "schemaVersion": "law.core.evaluation/0.2"
}
```

## Diagnostics by code

Not every question gets an answer. When the engine refuses, the refusal
carries a stable machine-readable code instead of prose:

- a question outside the [query](/protocols/schemas/query/) schema is
  rejected with the code `QUERY_INVALID` before anything is evaluated;
- every [diagnostic](/protocols/schemas/diagnostic/) carries its `code`,
  the place it belongs to, and a human-readable message, so a host can
  match on the code exhaustively and show the message to its user.

Because the codes are stable and the refusal names the document and the
pointer into it, a host can tell a malformed question from a missing pin
from an incomplete case without parsing sentences.