Before you start
Prepare these independently:
- the reviewed rule as
refund-window.lspx.pngorrefund-window.lspx; - the exact checked input file
INPUT; - an Ed25519 public key
issuer.spki.derand an absolute local PKCS#8 key URI; - the reviewed digest of the exact Native executable; and
- new paths for
POLICY,OUTPUT, and each report.
The trust policy belongs to the consumer. Do not derive trust from the bundle you are about to verify.
The six-stage path
| Stage | Main command | What a success establishes | Surface |
|---|---|---|---|
| 1. Describe trust | vouch policy create, then policy check | exact canonical configuration for reviewed key, engine, and source identities | Native or npm |
| 2. Issue | vouch issue --emit-bundle | a Native-signed exact source/input/profile context and bounded transport bundle | Native only |
| 3. Authenticate | vouch verify --bundle ... | the bundle-owned signed context satisfies the supplied policy | Native or npm |
| 4. Bind the request | add --source-image (or --source) and --input | the authenticated context equals this invocation’s separately supplied request | Native or npm |
| 5. Observe current execution | add --reexecute | the current Native verifier agrees with the signed complete transcripts | Native only |
| 6. Require one decision | vouch gate --require-decision ... | this live authenticated Native agreement matches the caller’s required decision | Native only |
Read the results in order
- A valid policy is configuration, not authentication.
- Unpinned bundle verification authenticates bundle-owned context only.
- Pinned verification adds exact equality with the caller’s external source and input; both files are mandatory for authority-bearing Native steps.
- Re-execution is a new current Native observation, not a claim about a past run or an independent implementation.
- A gate exit of
0is one local decision match. Exit10means no grant. The report itself cannot be replayed as a grant. - Any payment, deployment, refund, or other action remains a separate application decision with its own freshness and replay controls.
Assurance levels
| Operation | Establishes | Still requires |
|---|---|---|
| Identity commands | key-id, engine-id, source-id, and input-id print exact existing values from named bounded files through shared Rust | no stdin, artifact inference, provenance, trust, input validation, authentication, evidence, or authority |
| Policy create/check | lispex vouch policy create writes one canonical v1 policy from reviewed public inputs; policy check validates exact canonical bytes | no private key, inferred engine, artifact trust, overwrite/merge, authentication, evidence, decision grant, or browser export |
| Source ID | lispex vouch source-id --source RULE prints the exact policy v1 value from bounded bytes | no stdin, artifact extraction, normalization, approval, policy writing, authentication, or evidence |
| Trust policy v1 | key-local exact allowed_source_sha256 after signature/profile/engine checks | native-source-disallowed before raw source mismatch; no input/request or freshness policy |
| Bundle | one bounded transport input for exact envelope/source/input bytes | external trust/profile plus authentication; transport alone establishes no authority |
| Inspect | schema, hashes, and structural consistency | origin authentication |
| Authenticate | an authorized key signed the exact bound envelope context | a current execution observation |
| Re-execute | the current Native verifier agrees with both signed complete transcripts | application authorization and policy review |
| Compiled artifact build/validate | canonical Core IR and verified bytecode are exactly re-derived from the separately supplied source | authentication, execution, compiler correctness outside this derivation, or authority |
| Compiled re-execute | authenticated current tree/Meaning and the verified Rust VM all agree with the signed complete transcript | independent implementation equivalence, freshness, policy correctness, or external authorization |
| Gate | live authenticated current-Native agreement exactly matches the explicitly required decision | freshness, replay handling, identity, policy review, and deployment controls |
| Act | a separate application action outside Vouch | application-owned authorization and side-effect controls |
Commands you can copy
1. Derive the exact key identity
lispex vouch key-id --public-key issuer.spki.der2. Derive the exact engine identity
lispex vouch engine-id --executable /exact/path/to/lispex3. Derive the exact source identity
lispex vouch source-id --source-image refund-window.lspx.png4. Derive the exact input identity
lispex vouch input-id --input INPUT5. Native issue and emit the bundle
lispex vouch issue \
--source-image refund-window.lspx.png --input INPUT \
--profile csk.checked-profile/v1 \
--key-handle pkcs8-file:///ABSOLUTE/issuer.pk8 \
--out-dir OUTPUT --emit-bundle6. Create policy from independently reviewed public inputs
lispex vouch policy create \
--public-key issuer.spki.der \
--engine-sha256 sha256:<reviewed-engine-digest> \
--source-image refund-window.lspx.png --out POLICY7. Check the exact canonical policy bytes
lispex vouch policy check --trust-policy POLICY8. Native or npm authenticate the bundle-owned context
lispex vouch verify \
--bundle OUTPUT/vouch-input-bundle.json \
--trust-policy POLICY --profile csk.checked-profile/v1 \
--report-out AUTH-REPORT9. Native or npm pin the bundle to the intended request
lispex vouch verify \
--bundle OUTPUT/vouch-input-bundle.json \
--trust-policy POLICY --source-image refund-window.lspx.png --input INPUT \
--profile csk.checked-profile/v1 --report-out PINNED-REPORT10. Native bind the exact request and re-execute
lispex vouch verify \
--bundle OUTPUT/vouch-input-bundle.json \
--trust-policy POLICY --source-image refund-window.lspx.png --input INPUT \
--profile csk.checked-profile/v1 --reexecute \
--report-out REEXECUTION-REPORT11. Native local decision gate
lispex vouch gate \
--bundle OUTPUT/vouch-input-bundle.json \
--trust-policy POLICY --source-image refund-window.lspx.png --input INPUT \
--profile csk.checked-profile/v1 --require-decision approve \
--report-out GATE-REPORT12. Optionally require verified VM agreement
Build the Vouch-specific compiled container from the same exact source. This does not authenticate, execute, or grant anything:
lispex vouch compiled build \
--source-image refund-window.lspx.png \
--out refund-window.lpxvca
lispex vouch compiled inspect \
--artifact refund-window.lpxvca
lispex vouch compiled validate \
--artifact refund-window.lpxvca \
--source-image refund-window.lspx.pngThen opt into the compiled path without removing any earlier pin or check:
lispex vouch verify \
--bundle OUTPUT/vouch-input-bundle.json \
--trust-policy POLICY --source-image refund-window.lspx.png --input INPUT \
--profile csk.checked-profile/v1 --reexecute \
--compiled-artifact refund-window.lpxvca \
--report-out COMPILED-REEXECUTION-REPORT
lispex vouch gate \
--bundle OUTPUT/vouch-input-bundle.json \
--trust-policy POLICY --source-image refund-window.lspx.png --input INPUT \
--profile csk.checked-profile/v1 --require-decision approve \
--compiled-artifact refund-window.lpxvca \
--report-out COMPILED-GATE-REPORTThe container must be canonical, pass the strict bytecode verifier, and match an exact source-to-Core-IR-to-bytecode derivation before VM state exists. The current tree/Meaning execution must still agree first. A producer mutation, different source byte, VM disagreement, or required-decision mismatch fails closed; the command never retries through the source-only gate.
13. Raw compatibility with the same policy
lispex vouch verify \
--envelope OUTPUT/envelope.dsse.json \
--trust-policy POLICY --source-image refund-window.lspx.png --input INPUT \
--profile csk.checked-profile/v1 --report-out AUTH-REPORTA common mistake
The gate does not execute an external action and its report is not a transferable authorization. The calling application still owns freshness, replay handling, identity, deployment controls, and whether requiring that decision is safe and correct.
Current boundaries
- Policy creation never accepts a private key, stdin, envelope, bundle, receipt, report, inferred running engine, network resource, or existing policy to merge. Public-key provenance, engine/source review, policy distribution, replacement, and lifecycle remain consumer-owned; browser WASM and Playground expose no policy API.
- Identity commands accept named files only and infer nothing from artifacts.
source-idandinput-idare domain-separated rather than ordinary SHA-256; neither decodes or normalizes text, andinput-iddoes not parse checked-input JSON. No identity establishes provenance, approval, policy, trust, authentication, evidence, freshness, replay control, or authority. - A bundle is untrusted transport, not a receipt, signature, report, capability, source approval, or transferable authorization. It adds no encryption or confidentiality; freshness, nonce enforcement, expiry, revocation, replay prevention, identity, independent witnessing, policy correctness, provenance before the supplied bytes, deployment safety, or permission for an external action.
- Request pinning is exact equality, not freshness, nonce uniqueness, expiry, revocation, replay prevention, human intent, or permission for an external action. An invalid signature or policy is rejected before a request mismatch is reported.
--sourceand--inputmust be supplied together with a bundle; a partial pair is usage exit 2 before artifact I/O. - A compiled artifact is deterministic integrity material derived from exact source, not a trust root, signed request, independent witness, or portable capability. Its report cannot be used as evidence input. The compiled path does not establish organizational identity, policy or rule correctness, freshness, replay prevention, compiler correctness beyond the checked derivation, or permission for an external action.
Keep going
Keep the Vouch overview nearby: it separates authentication, request binding, current execution agreement, and a local grant.