# 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. ```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.