Skip to content
docs
Arxo ↗

Evidence and admission

For LLMs11 sections

Until now a stated fact was believed on sight. In a dispute that no longer holds: the question becomes what counts as established at all. This stage sits at the scenarios and case steps, after the rules are fixed. It separates three layers — admission of support, burden of proof, and truth of the matter — so that a lost document is never mistaken for a refuted fact.

  • The case material: documents with publisher, dates, content hash, and content fields; verifications pinning someone else’s hash check; supports linking documents to statements.
  • The admission policy: package rules saying which supports count, written before the case arrives.
  • The running example suite as the no-policy baseline: plain claims, no documents, all seven passing.
  • The filled EAI scope card, which states the case shape the suite covers.
  • Keep four words apart: a claim is a stated literal with its supply note; a document is a published item with a hash; a support links one document to one statement, for or against; admission is the policy decision that a support counts. For a protected predicate under a selected policy, only an admitted support gives the literal any support; unprotected predicates still establish by plain claim, policy or no policy.
  • Judge each support on its own. One document may be admitted for one statement and rejected for another. A rejected support gives support to neither side — and a rejection is never proof of the denial.
  • Run the pass-or-fail pairs below through the policy. The starred rows are proven by the admission drill quoted on this page; the rest restate the evidence drill’s taxonomy.
Presented material, policy selectedSupport verdictStatement
bank confirmation plus matching hash check plus support ★admittedpayment established
self-issued confirmation, everything else in orderrejectedpayment undecided
confirmation with no hash checkrejectedpayment undecided
check whose hash mismatches the document ★rejectedpayment undecided
confirmation about another purchase ★rejectedpayment undecided
bare claim of the protected payment fact, no document ★blockedpayment undecided
admitted reversal, refuting side ★admittedpayment denied
admitted confirmation and admitted reversal together ★both admittedpayment conflicted
  • Read the typed report, not the graph, for why a support failed: each support gets a decision with causes, each document gets availability, currency, and authenticity checks with a hash-binding flag.
  • Place the burden separately as a duty over an epistemic aim: who must present what by when. An unmet burden leaves the duty unfulfilled — still no denial of the fact. Unproven and absent are different layers, and nothing in the core bridges them for free.
  • Which predicates are protected — established only through admitted support — and which stay open to plain claims.
  • The acceptance rules: what counts as a sound document and a well-formed support.
  • Where the burden duties sit, with bearers, aims, and windows.

The artifact is the admission policy with its acceptance rules plus a reading of one report per support: admitted or rejected, with causes. The running example contributes the degenerate artifact: no policy at all, so every fact enters by plain claim and there is nothing to admit or reject.

The employee accident insurance package, version 0.1.0, language 0.2, zero dependencies, explicit local imports, pinned to edition EAI_EDITION with materialization PINNED_UNOFFICIAL_COPY — an Adilet API copy retrieved 2026-09-13, sha256 pinned, local copy kept in the package — selects no evidence policy: a search over the package sources finds no policy declaration. Every claim in both suites carries the plain supply note, checked across all seven claims:

Arxo Law
test "EAI-LOSS-THIRTY-QUALIFIES" {
given { context { decision_time @2026-09-13T12:00:00+05:00; knowledge_time @2026-09-13T12:00:00+05:00; legal_time @2026-09-13; timezone "Asia/Almaty"; }
assert "loss": capacity_loss_percent(entity_ref("urn:kz:eai:worker:30"), 30) { origin case_input; }
}
evaluate truth(insurance_payout_due(entity_ref("urn:kz:eai:worker:30")));
expect truth_status == TRUE_ONLY;
}

With no policy selected, stated facts establish directly: loss thirty has payout while loss twenty-nine stays undecided, the class twenty-two premium derives 29600 KZT on an insured sum of one million, the late penalty derives exactly 3000 KZT.

Say plainly what that proves and what it does not. It proves the rules behave as written under the stated facts. It does not prove any document authentic, any loss figure true, any payroll figure real, or any burden met — the suite presents no documents, runs no checks, and assigns no burden. Those would need a policy, material, and duties the package does not contain.

Four confusions, one root: treating a weak record as a strong one. A rejected support read as a refutation. A document certifying itself through its own status field — self-description grants no privilege. A bare claim of a protected predicate expected to work while a policy is selected — it is blocked, with an informational flag. An unmet burden read as a denial of the fact.

The run below was executed for this page with tool version law 0.1.0, semantics law.core/0.2:

Output
$ law test corpus/laws/kz/laws/employee-accident-insurance
law test kz.corpus.employee_accident_insurance: world kz.corpus.employee_accident_insurance
ok [kz.corpus.employee_accident_insurance#authored] tests/core.lawtest / EAI-EMPLOYER-MUST-INSURE
ok [kz.corpus.employee_accident_insurance#authored] tests/core.lawtest / EAI-MINING-CLASS-22-PREMIUM
ok [kz.corpus.employee_accident_insurance#authored] tests/core.lawtest / EAI-LOSS-THIRTY-QUALIFIES
ok [kz.corpus.employee_accident_insurance#authored] tests/core.lawtest / EAI-LOSS-TWENTY-NINE-IS-NOT-INSURER-PAYOUT
ok [kz.corpus.employee_accident_insurance#authored] tests/core.lawtest / EAI-SPECIAL-LATE-PAYMENT-PENALTY
ok [kz.corpus.employee_accident_insurance#authored] tests/goals.lawtest / GoalEstablishedCapacityLossHasPayout-world
ok [kz.corpus.employee_accident_insurance#authored] tests/goals.lawtest / urn:kz:corpus:clir:employee-accident-insurance#GoalEstablishedCapacityLossHasPayout
total: 7 checked, 7 passed, 0 failed, 0 not run; code 0

The baseline proves the degenerate half: with no policy selected, every stated fact establishes directly and all seven pass. The policy half is proven by the admission drill — one protected predicate, one policy, six scenes. Observed with the same tool version:

Output
$ law test docs/handbook/files/fixtures/evidence-admission
law test demo.handbook.evidence_admission: world demo.handbook.evidence_admission
ok [demo.handbook.evidence_admission#authored] tests/admission.lawtest / admitted support establishes
ok [demo.handbook.evidence_admission#authored] tests/admission.lawtest / rejected support leaves undecided
ok [demo.handbook.evidence_admission#authored] tests/admission.lawtest / hash mismatch leaves undecided
ok [demo.handbook.evidence_admission#authored] tests/admission.lawtest / bare claim of protected fact is blocked
ok [demo.handbook.evidence_admission#authored] tests/admission.lawtest / admitted refuting support denies
ok [demo.handbook.evidence_admission#authored] tests/admission.lawtest / admitted for and against conflict
total: 6 checked, 6 passed, 0 failed, 0 not run; code 0

Each scene was inspected in the suite file; the material, the verdict, and the policy rule that decides it read:

ScenePresented materialStatementDeciding rule
admitted support establishesconfirmation of purchase 42, matching hash checkTRUE_ONLYAcceptPayment fires
rejected support leaves undecidedgenuine confirmation about purchase 99NEITHERidentity conjunct fails, support not accepted
hash mismatch leaves undecidedcheck pins a hash the document lacksNEITHERev_authentic never projects, SoundDocument fails
bare claim of protected fact is blockedassert paid(42), no documentNEITHERpredicate protected, claim contributes nothing
admitted refuting support deniesaccepted reversal aloneFALSE_ONLYAcceptReversal fires
admitted for and against conflictaccepted confirmation plus accepted reversalBOTHboth fire; conflict reported, not resolved

Read the report behind the table: the two NEITHER rejections fail at different rules — identity versus soundness — and the suite distinguishes them by construction, since each scene varies exactly one defect. Denial arrives only through the fifth scene’s admitted reversal; no rejection in the file proves a denial.

Criterion: the baseline passes seven of seven with no policy, and the drill passes six of six with the policy selected — the admitted pair, two distinct rejections, the blocked bare claim, the denial, and the conflict. A package that adds a policy must show the same shape passing before it claims any admission behavior.

Admission answers whether a statement is established on what was presented. It never answers who had to present — that is the burden duty — and never answers whether the matter is really so. An acceptance rule reads only the policy’s own slots and heads: the phase that decides admissibility may not depend on the derivation it makes possible. And a bare NEITHER after a rejection says nothing about the other side; denial always needs its own admitted support.

Continue with Time and calendars, which pins every dated fact and every norm window to an explicit axis.

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

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