A block of stone split by a green beam, a machined channel revealed inside it
The method — from statute to predicate

A law is prose. A test has to be a boolean.

Between a published provision and a score there is a step most assurance skips: turning legal text into something a stranger can run and get the same answer. This page shows that step in full — the frozen corpus it starts from, the structure it is cut into, the boolean it ends as, and the signed record it produces.

Measurement, not certification. 23 axis · 23 measured — live from /api/gspc

Design law 1

The verdict comes from a deterministic predicate. Never a vote. Never a model.

This is the rule the rest of the pipeline exists to serve. A human-in-the-loop audit varies by assessor and by mood; a language model asked to grade another language model varies by temperature and cannot show its working. Neither can be recomputed by someone who does not trust us — which makes both useless as evidence. A predicate can be handed to a stranger, run, and checked against our answer.

  • PainAn assessor's opinion cannot be re-run by the person relying on it
  • PainA model grading a model inherits the grader's failure modes silently
  • You getA frozen predicate returns the same verdict for anyone who runs it
  • Only hereNo model judges another model — anywhere in the scoring path
The raw material

We do not invent rules. We parse frozen ones.

The corpus is a frozen manifest of 417 published provisions from 6 EU instruments: EU AI Act, GDPR, Cyber Resilience Act, DORA, NIS2, CSRD. Each provision is pinned by the SHA-256 of its frozen text, under one root anyone can recompute. The source text bytes behind those hashes were not recovered, so the manifest is a set of pinned hashes, not yet an inspectable legal text; frameworks such as NIST AI RMF and ISO/IEC 42001 are mapped in crosswalks, not held in it. The board those predicates feed publishes both a slot count and a measured count, read live from /api/gspc and never typed into this page.

  • You get417 frozen provision hashes, frozen 2026-08-12, coverage counted at /mechanism/
  • PainNo watcher is built yet: a change to a provision is not detected automatically, so nothing expires on its own
  • Only hereEach provision is pinned by the hash of its frozen text, not by our summary of it
  • PainWhere a date or a reading is genuinely disputed, we record the dispute rather than resolving it quietly
Step one — structure

A provision is cut into a tree until every leaf is a boolean

The text is parsed into its conditions: a root that is the statutory requirement, branches for each condition it imposes, and leaves that are true-or-false tests. Compilation removes ambiguity from the predicate — it does not remove ambiguity from the law, and it is not allowed to pretend otherwise. Where a provision admits more than one reasonable reading, that is recorded as a dispute rather than silently collapsed into one branch.

  • You getRoot: the statutory requirement, cited
  • You getLeaves: conditions that evaluate TRUE or FALSE, nothing in between
  • Only hereAn UNMEASURED slot stays empty — it is never rendered as a zero
A carved stone dissolving into particles and reforming as a branching tree whose leaves are labelled as boolean executable conditions
Step two — the worked example

Article 14, compiled

Take the human-oversight obligation: a deployer must log the initiating person, the timestamp and the reason for every halt. Structural extraction names the variables — initiating person, timestamp, reason code. The assertion then reads: the log has a non-null initiator AND a valid timestamp AND a reason drawn from the approved set. True is a pass, false is a fail, and there is no third path in which someone's judgement decides. The predicate is frozen: it cannot be lobbied, it cannot hallucinate, and it does not sample from a language model.

  • PainThe prose version is arguable; the assertion is not
  • You getThe same predicate, run by you, returns our answer or contradicts it in public
  • Only hereFrozen means a later disagreement is about the reading, and the reading is published
See how gold labels are set
Step three — the record

About 3KB of signed JSON that you hold, not us

The output is a small signed record: the scores, the sample size behind each one, the confidence interval where one is honest, the hashes, and the signature. It is Ed25519 over RFC-8785 canonical JSON, against the trust root at did:web:csoai.org, and it is deliberately small enough to email or attach to a tender. Re-attestation issues a new record; the old one is never edited. Verification is free, needs no account, and runs in your browser.

  • You getEd25519 over RFC-8785 canonical JSON — recomputable without our code
  • You getAppend-only: a correction is a new record, never an edit
  • Only hereYou keep the card. It does not live on our server for us to amend later.
Verify a card now — free
A white slab bearing a green tag reading Ed25519 Verified, a signature seam running through it
Read this before you quote us

What this page does not claim

We publish the limits with the results. Everything below is something a reader could reasonably assume from a page like this one — and each is something we cannot presently evidence, so we say so rather than let the assumption stand.

  • We do not claim this produces absolute or mathematical proof of anything. A predicate is exactly as good as the reading of the provision behind it, and that reading is a human judgement we publish so it can be argued with.
  • We do not determine compliance. We measure behaviour against frozen, published instruments and sign the result. Whether an organisation complies is a determination for a regulator, and we are not one.
  • We do not sign with ML-DSA-65 today. Signing is Ed25519. The post-quantum path is planned and scaffolded only; no PQC runtime is built or published.
  • We do not publish an execution-latency figure. Nothing here runs in a stated number of milliseconds, because we do not measure that for publication.
  • We do not implement TrueSkill or OpenSkill rating in the shipped board, and no rating claim on this page depends on either.
  • We do not claim environment parity, matched interfaces or action-rate caps as running features. They are design, and the arena's isolation apparatus is doctrine — see /metrology, where it is marked as such.
  • We do not claim humans are absent from the method. Humans author the gold labels and the readings. What is excluded is a model, or a vote, deciding a verdict.

Coverage on this page is never typed by hand. 23 axis · 23 measured — live from /api/gspc Corrections to anything we have published live in the refutation ledger — append-only, never a silent edit.