Skip to main content
The canonicalisation substrate is verify-it-yourself. Nothing on this site asks you to take a hash on trust: every published value recomputes from its own preimage with RFC 8785 (JCS) plus SHA-256, and the corpus ships the runners that prove it. Clone it, run two commands, and watch all 29 conformance vector sets (230 vectors) reproduce byte-for-byte on your machine, offline.

One clone, two commands (Python)

git clone https://github.com/chopmob-cloud/algovoi-jcs-conformance-vectors
cd algovoi-jcs-conformance-vectors
pip install algovoi-substrate
python composition/verify_corpus.py
python composition/first_principles_check.py
verify_corpus.py runs every set’s reference runner and reports each one reproducing byte-for-byte, plus the composition keystones. first_principles_check.py is the stronger check: it rebuilds the JCS bytes by hand and hashes them with stdlib SHA-256 only, so the published values are proven without our canonicalizer being invoked at all.
You should see ALL RUN SETS + COMPOSITION KEYSTONE REPRODUCE BYTE-FOR-BYTE from the first command and FIRST-PRINCIPLES RESULT: 11/11 checks PASS ... No AlgoVoi canonicalizer was invoked from the second.

Node / TypeScript

npm install @algovoi/substrate
node vectors/spend_decision_v1/runner_node.js vectors/spend_decision_v1/spend_decision_v1.json
Each set ships a runner_node.js alongside its runner_python.py. Both check the same published expected hashes, so a pass in each language is byte-for-byte Python and TypeScript parity, not two separate claims.

What a clone proves

ClaimHow you check itResult
Every published vector reproducesverify_corpus.pyAll sets byte-for-byte
Values are not an artifact of our canonicalizerfirst_principles_check.py11/11, hand-written JCS + stdlib SHA-256
Python and TypeScript agreerun a set’s runner_python.py and runner_node.jsidentical expected hashes
The construction holds across the fieldthe 8-implementation matrix880/880 directly executed

Independence

Fourteen sets were directly executed across eight independent reference implementations (Python, TypeScript, Go, Rust, Java, PHP, .NET, Ruby), including the RFC 8785 author’s own Java implementation, at 880/880 agreements (cumulative). When eight implementations that share no code all produce the same bytes, the construction is a property of the standard, not of any one library.

What you are verifying

The corpus spans the receipt lifecycle, settlement and action binding, the .epi evidence format, RFC 9421 receipt evidence, adversarial fixtures, and the open pre-payment decision chain (spend_decision_v1: the decision_ref construction for ALLOW, DENY, and REFER, with its hash-linked chain). Authoritative per-set counts live in the corpus manifest.json.

The conformance sets

The full catalogue of vector sets and what each one anchors.

How it compares

Bytes decide: how the substrate holds up where coarser approaches drop data at scale.

The corpus repo

Clone it, read the runners, reproduce everything offline.

The substrate package

algovoi-substrate (Python) and @algovoi/substrate (npm): the canonicalizer the runners use.