v0.14.0 — Developer Layer
The developer layer — "Verify with PiProof" in five minutes.
Any Pi application — merchant, marketplace, game, agent, community — now calls one deterministic surface instead of building its own verification plumbing:
const pi = createVerifier({ registry, nonceStore });
const d = pi.decide(proof, { policy: 'merchant-verification-v1' });
if (d.decision === 'ALLOW') allowAction();What ships
- JS SDK (
src/sdk.js, zero deps) —verifyProof/verifyPassport/decidewith reasons, violations, binding class and resolved policy name; unknown presets deny cleanly asPOLICY_PRESET_UNKNOWN. - Named policy presets (
src/policy-presets.js) — frozen versioned defaults callable by name:merchant-verification-v1·marketplace-seller-v1·agent-payment-v1·community-member-v1·reward-eligibility-v1. Auditable data; a change means a new version. Deliberately not a "policy marketplace" — no signing, no discovery protocol. - Decision API —
POST /api/decideshares the Explorer's nonce state so replays are caught across every endpoint;GET /api/policies; preset references accepted by all verify endpoints;/api/sharereturns self-containedpiproof://v1?p=…proof links next to short links. - Python SDK (
sdk/python/piproof_sdk.py, stdlib only) — independent implementation of the same pipeline: from-scratch Ed25519, PiProof Canonical Profile v1 with raw-key sort parity, envelope + epoch binding, nonce state files, presets, narrowing policy subset. Library API + CLI. - CLI —
pep policiesandpep decide --proof p.json --policy agent-payment-v1 --nonces nonces.jsonl.
Verification
- 126/126 tests (+16)
- attack suite 20/20 rejected
- canonical vectors 15/15 byte-exact × 2 languages
- Node↔Python SDK agreement tested end-to-end in CI
Guide: docs/SDK.md · Full changelog: v0.13.0...v0.14.0