Arxo Fact Protocol
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
Section titled “The case”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
Section titled “The question”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:
{ "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 pinned program
Section titled “The pinned program”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 full request
Section titled “A full request”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
{ "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"}Typical rejections
Section titled “Typical rejections”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
schemaVersionthe 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_INVALIDinstead 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.