lispex run program.lspxRun a program on the same WebAssembly reference core the playground uses. Receipt generation lives in the native Rust reference path, not in this CLI.
Reference implementation
Lispex Vouch — portable decision receipts, offline verify, and rule-change replay. The reference implementation of CSK.
Lispex Vouch is the first and reference implementation of CSK. It runs on the checked subset of the Lispex language, the CSK Profile, with a Rust core and a JavaScript verifier. The spec is written so that more than one implementation can exist.
lispex run program.lspxRun a program on the same WebAssembly reference core the playground uses. Receipt generation lives in the native Rust reference path, not in this CLI.
lispex verify receipt.jsonCheck an existing receipt offline with the published verifier. It inspects bytes and hashes without executing source. Exit 0 means the artifact holds.
lispex replay <corpus> --against <pin>Compare a decision corpus against a version pin or receipt set, offline, and report every flip.
Verify a real receipt in your own terminal. The commands below run the published verifier, not a demo.
{
"boundary": {
"attests": [
"source-bytes",
"profile-input-hash-binding",
"canonical-core-v0-bytes",
"meaning-graph-v0-hash-binding",
"reference-transcript-bytes",
"meaning-env-transcript-bytes",
"lowered-subset-transcript-agreement"
],
"excludes": [
"semantic-equivalence",
"independent-witness",
"substrate-independence",
"error-agreement",
"input-provenance",
"topaz-reporting",
"full-cskernel-coverage",
"target-code-generation",
"private-implementation-detail"
]
},
"canonical": {
"byte_len": 117,
"hash": {
"algo": "sha-256",
"domain": "lispex/core-hash/v0",
"hex": "0166138fc6f17a1ce016adcc8470a29a0e2d368dccab41ed1340211ecfd36c7b"
},
"status": "ok"
},
"comparison": {
"blockers": [],
"fault_class": null,
"first_divergence": null,
"reason": "transcript-bytes-equal",
"status": "agree",
"substrate": "shared-rust-reference"
},
"diagnostics": [],
"differential_receipt": "csk.differential-receipt/v0",
"engine": {
"canonical_format": "lispex.core.canonical/v0",
"commit": {
"dirty": false,
"hex": "1b19dcfe7b97db842a6850dd8d4bea1d8030c136",
"vcs": "git"
},
"name": "lispex-rust-reference",
"version": "1.3.1"
},
"graph": {
"byte_len": 1514,
"hash": {
"algo": "sha-256",
"domain": "csk/meaning-graph-hash/v0",
"hex": "94a5e0e686d28601c20a4825ab97c3699cc19b226031ff701ee105f4c4f844c9"
},
"status": "ok"
},
"input": {
"byte_len": 4,
"datum": "(20)",
"hash": {
"algo": "sha-256",
"domain": "csk/profile-input-hash/v0",
"hex": "110af5fa552beb95424869a04b48937f7ebe323198aeb2dbb68c8e27f8966c28"
},
"name": "input",
"path": "profile-gallery/decision-gallery/inputs/age-threshold.datum",
"status": "bound"
},
"meaning_env": {
"fault": null,
"hash": {
"algo": "sha-256",
"domain": "csk/meaning-env-transcript-hash/v0",
"hex": "f0dfd43e2b272c0ec36731090325f53e11b41d5b8a80ecc682355b83e158ac51"
},
"status": "ok",
"steps": {
"limit": 65536,
"used": 9
},
"transcript": [
"(decision allow)"
],
"transcript_byte_len": 17
},
"reference": {
"hash": {
"algo": "sha-256",
"domain": "lispex/runtime-hash/v0",
"hex": "dafb01565d181ad602e7a31d83aede59aa10462cf4723daab00edfb49b007abb"
},
"status": "ok",
"transcript": [
"(decision allow)"
],
"transcript_byte_len": 17
},
"source": {
"byte_len": 78,
"hash": {
"algo": "sha-256",
"domain": "lispex/source-hash/v0",
"hex": "d5ca57e06197ed1dd0fbd2fdb3f82225492bca5c86a2f3858ff92670e4f79eac"
},
"path": "profile-gallery/decision-gallery/cases/age-threshold.lspx"
}
}npx lispex verify age-threshold.receipt.json
receipt is artifact-consistent
# verify-report: "status": "pass" · exit 0# flip one hex nibble in the receipt, then verify again
npx lispex verify tampered.receipt.json
receipt is not artifact-consistent
- meaning-env-hash-mismatch
# exit 1The verify button runs the exact verifier file published in the lispex package on npm, byte for byte, inside the browser.