verification.v0.3 — issuer-side implementation.
Issuer-side implementation details for verification.v0.3, the first candidate profile entry in the ERC-8210 Receipt Profile Registry (entry merged 2026-06-23) introduced by Jacky Wang in the ERC-8210 v2 Progress Update on 2026-07-05.
Current status (6 November 2026). This page records dated demonstrations from June–August 2026. Today, Tanilo issues verification.v0.3+composed receipts from /evaluate and /v1/verify-facts, each with a single Tanilo signature from the key in the published key set. The service host’s /v1/compose and /v1/v_gate routes stopped issuing on 28 August 2026 (incident record), and the API gateway’s /v1/compose signing route was withdrawn on 24 September 2026; it has returned 410 since 28 September (trust). The three-signer examples below are historical; their keys stay published so they can still be verified.
Where verification.v0.3 is produced
The reference implementation of the profile lives at TKCollective/tanilo-receipt-spec, under examples/v0.3-composed/. It carries the full deterministic build (build_fixtures.py), three published JWKS (AgentOracle + AgentTrust + Presidio), and both accept and reject vectors as detached JWS files. Byte-identical rebuilds from a cold clone are part of the intended workflow — the spec assumes recompute discipline, not trust.
Multi-issuer composition
A single envelope carries up to three signer slots today:
v_gate— Tanilo’s independent verifierv_gate_skill— AgentTrust’s independent verifier (AgentTrust runs its own/v1/composeendpoint against the same canonical bytes; adapter merged into babyblueviper1/preaction-governance-conformance PR #2 on 2026-07-04)screen_ref— Presidio’s screen leg (three-signer JWS on live bytes demonstrated in x402-foundation/x402 #2332, 2026-06-28)
Composition rule is AND_PRESENT — every present slot must recompute, or the composed decision halts. Conformance for that halt is comp-006 in the composed fixture set.
Conformance vectors, independent registry
Both issuers’ conformance suites are landed in giskard09/argentum-core:
- AgentTrust conformance: PR #28, merged 2026-07-02.
- Presidio
decision_refvectors: PR #29, merged 2026-06-30. Seepresidio-x402-decision-ref-v1.fixture.jsonfor the three vectors (accept +signer-equals-runtimereject +verdict-not-recomputablereject).
Both were independently recompute-graded by @babyblueviper1 before merge — the two-implementers threshold is grounded in that cross-implementation verification, not in issuer self-attestation.
Verification tooling
Verifier implementations in three runtimes, with matching canonical hashes on the published fixtures:
- Node:
verify_node.mjsin the reference repo (jose) - Python:
pip install tanilo-receipt-verify— pypi.org/project/tanilo-receipt-verify/, live since 2026-07-03 (0.0.1); 0.1.0 released 2026-08-14; 0.2.0 (anchor check) released 2026-10-08 - Browser: WebCrypto-only bundle, same JCS + Ed25519 semantics
All three consume the same JWKS files and produce the same canonical hash byte-for-byte, so a receipt can be verified anywhere the client can compute SHA-256 + Ed25519. No Tanilo service required to verify a Tanilo receipt.
Normative spec
The profile as filed cites IETF draft-krausz-verification-state-01 for the on-wire semantics (act/halt verdict, canonicalization, signer binding) — that is what the entry's own text names, and it isn't rewritten here to track the -02 revision. The current revision is -03, filed 2026-10-01; feedback in the Datatracker or through the registry PR path is welcome.
Canonical URLs
Open questions from the ERC-8210 discussion
Q4 — multi-issuer envelope citation strategy
Direction B (protocol-neutral prose in Rationale, registry as the naming mechanism) reads cleanly from the issuer side. The registry is content-addressed on keccak256(profile_identifier), so the identifier itself is the citation — subsequent profile entries won’t require ERC revisions to be reachable. Registry-first stays honest as the profile set grows.
Q2 — behavioral similarity as a fifth independence category
No strong opinion. If it lands as a non-breaking extension in IIndependenceSignal, verification.v0.3 wouldn’t need any changes to accommodate it — the profile is independence-model agnostic. Update 2026-09-24: read this answer as dated, not as our current view. Tanilo no longer publishes a standing independence claim; what receipts do and don’t establish is on trust.