Skip to content
docs
Arxo ↗

Arxo Fact Protocol

For LLMs5 sections

The Arxo Fact Protocol is what a host submits: the case with its facts and their origin, the question, and the pinned program the question is asked under. The same three parts stand behind the conversational tools, behind the client library in From code and behind the law ask command on the command line.

The case is a list of assertions plus the context they are read in. Each assertion carries an identifier, a literal (a predicate with its arguments), and an origin: case_input for facts that arrived with the case, external_snapshot for facts taken from a pinned source, derived for conclusions of an earlier answer re-submitted as facts, and adjudicated for facts decided by an authority. The context holds the three dates of the question: the legal date, the decision date and the date of knowledge.

A host that has only a list of facts does not need to assemble a full case. It sends each fact in a short form; the origin and the place in a document are optional. The short form names the predicate and the arguments, and may carry a provenance with the origin, a span in a document (page and quote) and the extractor with its confidence:

predicate, args, provenance.origin, provenance.span, provenance.extractor.name, provenance.extractor.version, provenance.extractor.confidence.

confidence is carried, not evaluated: it travels as a decimal string, and whether a fact with that confidence counts is decided by the package’s evidence policy, not by the host.

The question is one of the closed kinds defined by the query schema: truth, focused_truth, why_not, argumentation, precedent, formula, collect, term, positions, weak_permission, interpretation_analysis, calendar_op. Every question carries a queryId that ties the answers back to it. A truth question over one literal looks like this:

JSON
{
"queryId": "insured",
"kind": "truth",
"literal": {
"args": [
{
"id": "urn:entity:acme",
"kind": "entity_ref"
}
],
"kind": "literal",
"polarity": "positive",
"predicate": "urn:law:vectors:cp:norms#insured"
}
}

The request names the program instead of sending it: the compiled package, its semanticVersion, and the pinned dependencies it was built against. The host names the program; it never sends a program of its own under someone else’s answer. The engine checks the pin before any computation: a pin it does not know is refused by name.

A complete evaluation-request document carries all three parts at once. The example below is a recorded request: two case assertions about one person, the three dates in the context, a question about the positions held, and the pinned program it was asked under.

View full JSON document
JSON
{
"case": {
"assertions": [
{
"contentHash": "sha256:a9cd219133b0c1ef8f814cdc4478809d4f8d75288c70adc9c525289d7b1fe6d3",
"evidence": [],
"id": "urn:law:vectors:err-e0218-judgment#assert-trigger-positive",
"kind": "assertion",
"literal": {
"args": [
{
"id": "urn:entity:p1",
"kind": "entity_ref"
}
],
"kind": "literal",
"polarity": "positive",
"predicate": "urn:law:vectors:err-e0218-judgment#trigger"
},
"origin": "case_input",
"package": "urn:law:vectors:err-e0218-judgment"
},
{
"contentHash": "sha256:61a3bb8c8dc2b9a85043cd577279044496e2d2c08b2e9661f85823fd3f2ee176",
"evidence": [],
"id": "urn:law:vectors:err-e0218-judgment#assert-done_a-negative",
"kind": "assertion",
"literal": {
"args": [
{
"id": "urn:entity:p1",
"kind": "entity_ref"
}
],
"kind": "literal",
"polarity": "negative",
"predicate": "urn:law:vectors:err-e0218-judgment#done_a"
},
"origin": "case_input",
"package": "urn:law:vectors:err-e0218-judgment"
}
],
"context": {
"decisionTime": "2026-08-26T12:00:00+05:00",
"knowledgeTime": "2026-08-26T12:00:00+05:00",
"legalTime": "2026-08-26",
"timezone": "Asia/Qyzylorda"
},
"options": {}
},
"ir": {
"artifactHash": "sha256:6cad5bcbbd19de9b0fc84f45d0bd39c68b48f369da8a5a7c50541a638370c189",
"features": [
"core-executable"
],
"imports": [],
"metadata": {},
"nodes": [
{
"contentHash": "sha256:c6b4c892888ba08d8fad2b249d1fd604905d3177b45dfb0fd46e48c9ba5ac5c6",
"id": "urn:law:vectors:err-e0218-judgment#Keep",
"kind": "norm_template",
"labels": [
{
"language": "ru-KZ",
"status": "unofficial",
"text": "обязанность с составным условием цели"
}
],
"modality": "duty",
"package": "urn:law:vectors:err-e0218-judgment",
"payload": {
"bearer": {
"kind": "var",
"var": "v0"
},
"goal": {
"condition": {
"items": [
{
"formula": {
"args": [
{
"kind": "var",
"var": "v0"
}
],
"kind": "literal",
"polarity": "positive",
"predicate": "urn:law:vectors:err-e0218-judgment#respectful"
},
"kind": "status",
"status": "established"
},
{
"formula": {
"args": [
{
"kind": "var",
"var": "v0"
}
],
"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"
}
},
{
"body": {
"formula": {
"args": [
{
"kind": "var",
"var": "v0"
}
],
"kind": "literal",
"polarity": "positive",
"predicate": "urn:law:vectors:err-e0218-judgment#trigger"
},
"kind": "status",
"status": "established"
},
"contentHash": "sha256:2e5e496e5e366eec880c100267efc5867999bc65ca102a2b74e5e091009def9f",
"head": {
"id": "urn:law:vectors:err-e0218-judgment#Keep",
"kind": "norm_template_ref"
},
"id": "urn:law:vectors:err-e0218-judgment#KeepRule",
"interpretations": [],
"kind": "rule",
"labels": [
{
"language": "ru-KZ",
"status": "unofficial",
"text": "обязанность с составным условием цели"
}
],
"package": "urn:law:vectors:err-e0218-judgment",
"scope": {
"kind": "boolean",
"value": true
},
"strength": "strict",
"variables": [
{
"id": "v0",
"type": {
"name": "urn:law:vectors:err-e0218-judgment#Party"
}
}
]
},
{
"contentHash": "sha256:0e1a1590a1a94b68d9d9146461d6352340c6dc6c4d5e40c1a895bda4f1aff48c",
"id": "urn:law:vectors:err-e0218-judgment#Party",
"kind": "type_decl",
"labels": [
{
"language": "ru-KZ",
"status": "unofficial",
"text": "сторона"
}
],
"name": "Party",
"package": "urn:law:vectors:err-e0218-judgment",
"typeKind": "entity"
},
{
"contentHash": "sha256:c2f65ae9e80542f05ab91714ba6da2a0521dcf86f4229a3c29dfaf0e7302917b",
"id": "urn:law:vectors:err-e0218-judgment#bad_a",
"kind": "symbol_decl",
"labels": [
{
"language": "ru-KZ",
"status": "unofficial",
"text": "вещь не сохранена"
}
],
"name": "bad_a",
"package": "urn:law:vectors:err-e0218-judgment",
"parameters": [
{
"id": "urn:law:vectors:err-e0218-judgment#bad_a/arg/p",
"name": "p",
"type": {
"name": "urn:law:vectors:err-e0218-judgment#Party"
}
}
],
"relationKind": "empirical",
"symbolKind": "relation"
},
{
"contentHash": "sha256:8327070ff7856f427264a86a939aa7ac4fa41b93ba99a5a85f69d28f9eb9cc66",
"id": "urn:law:vectors:err-e0218-judgment#bad_b",
"kind": "symbol_decl",
"labels": [
{
"language": "ru-KZ",
"status": "unofficial",
"text": "отчёт о плодах не дан"
}
],
"name": "bad_b",
"package": "urn:law:vectors:err-e0218-judgment",
"parameters": [
{
"id": "urn:law:vectors:err-e0218-judgment#bad_b/arg/p",
"name": "p",
"type": {
"name": "urn:law:vectors:err-e0218-judgment#Party"
}
}
],
"relationKind": "empirical",
"symbolKind": "relation"
},
{
"contentHash": "sha256:38eda3f727f9112e501c7ddbfbcf0353ddc9f345c08ca1fff13f7ebfdb296599",
"id": "urn:law:vectors:err-e0218-judgment#done_a",
"kind": "symbol_decl",
"labels": [
{
"language": "ru-KZ",
"status": "unofficial",
"text": "первое действие совершено"
}
],
"name": "done_a",
"package": "urn:law:vectors:err-e0218-judgment",
"parameters": [
{
"id": "urn:law:vectors:err-e0218-judgment#done_a/arg/p",
"name": "p",
"type": {
"name": "urn:law:vectors:err-e0218-judgment#Party"
}
}
],
"relationKind": "empirical",
"symbolKind": "relation"
},
{
"contentHash": "sha256:5bec7831a13826ecea5c199e2708cd44c3a3e0a3851e35a87fb07c68f574c15c",
"id": "urn:law:vectors:err-e0218-judgment#done_b",
"kind": "symbol_decl",
"labels": [
{
"language": "ru-KZ",
"status": "unofficial",
"text": "второе действие совершено"
}
],
"name": "done_b",
"package": "urn:law:vectors:err-e0218-judgment",
"parameters": [
{
"id": "urn:law:vectors:err-e0218-judgment#done_b/arg/p",
"name": "p",
"type": {
"name": "urn:law:vectors:err-e0218-judgment#Party"
}
}
],
"relationKind": "empirical",
"symbolKind": "relation"
},
{
"contentHash": "sha256:55ef3403909eedbd1fa6e99857383d56a8c1e594f6ca1ca82f049acc1ce43881",
"effect": "judgment",
"id": "urn:law:vectors:err-e0218-judgment#respectful",
"judgment": {
"authority": "urn:law:vectors:err-e0218-judgment#Court"
},
"kind": "symbol_decl",
"labels": [
{
"language": "ru-KZ",
"status": "unofficial",
"text": "суд признал причину уважительной"
}
],
"name": "respectful",
"package": "urn:law:vectors:err-e0218-judgment",
"parameters": [
{
"id": "urn:law:vectors:err-e0218-judgment#respectful/arg/p",
"name": "p",
"type": {
"name": "urn:law:vectors:err-e0218-judgment#Party"
}
}
],
"relationKind": "judgment",
"symbolKind": "relation"
},
{
"authority": {
"id": "urn:law:vectors:err-e0218-judgment#Court",
"kind": "const_ref"
},
"capability": "judgment:Court",
"contentHash": "sha256:ad1f09de49133fc475faad42f1b7e9f11ff05a44759267888f21795d1072cfa4",
"effect": "judgment",
"id": "urn:law:vectors:err-e0218-judgment#respectful/external",
"kind": "external_decl",
"labels": [
{
"language": "ru-KZ",
"status": "unofficial",
"text": "суд признал причину уважительной"
}
],
"package": "urn:law:vectors:err-e0218-judgment",
"symbol": "urn:law:vectors:err-e0218-judgment#respectful"
},
{
"contentHash": "sha256:ad2a7c7b46978fa3cdc3aa79fee65e1f02abcbb8161b4c5913aeba7a2d3319bf",
"id": "urn:law:vectors:err-e0218-judgment#trigger",
"kind": "symbol_decl",
"labels": [
{
"language": "ru-KZ",
"status": "unofficial",
"text": "посылка обязанности"
}
],
"name": "trigger",
"package": "urn:law:vectors:err-e0218-judgment",
"parameters": [
{
"id": "urn:law:vectors:err-e0218-judgment#trigger/arg/p",
"name": "p",
"type": {
"name": "urn:law:vectors:err-e0218-judgment#Party"
}
}
],
"relationKind": "empirical",
"symbolKind": "relation"
}
],
"package": {
"name": "vectors.err_e0218_judgment",
"namespace": "urn:law:vectors:err-e0218-judgment",
"semanticHash": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
"version": "0.1.0"
},
"schemaVersion": "law.core.ir/0.2",
"semanticHash": "sha256:a47956edfca7cf7af1f9c1b5d93ddd3ae22f06aacbc87c22f0da85c76aac65cf",
"semanticVersion": "0.2.4",
"strata": [],
"theoryHash": "sha256:a47956edfca7cf7af1f9c1b5d93ddd3ae22f06aacbc87c22f0da85c76aac65cf"
},
"query": {
"kind": "positions",
"queryId": "urn:query:lq6-e0218-judgment-leaf-dead-v02"
},
"schemaVersion": "law.core.evaluation-request/0.2",
"semanticVersion": "0.2"
}

A request that steps outside the shape is refused before anything is computed:

  • an unknown field anywhere in the document is rejected, not silently skipped;
  • a schemaVersion the reader does not know is refused by name — the host reads the version it knows;
  • a pin the engine cannot resolve is refused before any inference;
  • a question outside the query schema is rejected with the code QUERY_INVALID instead of being answered.

A refusal names the document and the place: every refusal body carries a stable code, a location with the document and the pointer into it, and a human-readable message.

Documentation for Arxo. Writings — blog.arxo.io.

Anonymous visit counts on stats.arxo.io, no cookies.