- the set
- 2 descriptors · 1 revision · 2 acceptances · 1 receipt
- claims
- revision 1 governs; both parties accepted its exact bytes
The bench
Everything is live: this page bundles the real verifier package. Step 1 mints a complete charter set in your browser — descriptors, a canonical revision, dual acceptance, a receipt — then judge it, decode it, and try to rewrite its past.
- input
- raw bytes only — no trust, no phone-home
- output
- structural facts + the omission floor
Mint and verify first — then rewrite history.
The family lifecycle
Three protocols, one chain of evidence: what the agent is, what was agreed, what this call may do.
Verify-only
No key parameter, no signer callback, no custody handle — the package refuses to sign by construction. Signing lives in the signer package.
The omission floor
Twelve not_verified items — authority, execution, billing, term satisfaction, legal validity — travel with every facts record. No API can shrink them.
Byte-exact by construction
Strict unpadded base64url, deterministic tagged decoding, RFC 8785 canonicalization, domain-separated SHA-256.
Two implementations, zero shared code
A certified 100-case corpus runs through the pure Elixir verifier and this builtins-only TypeScript one — reports must be byte-identical.
Install
npm i @charter-agreement-protocol/verifier # Node >= 22, zero runtime dependencies