Markdown for LLMs
Arxo Decision Protocol
The source Markdown for this article. Copy it into your assistant or download it as a text file.
# 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.