Skip to content

PiProof v0.16.0 — Third Implementation & Normative Conformance

Choose a tag to compare

@EslaM-X EslaM-X released this 24 Aug 06:05
· 15 commits to main since this release
50175c3

PiProof v0.16.0 — Third Implementation & Normative Conformance

The protocol core now exists as three independent codebases — Node.js,
pure-Python, and from-scratch Go — agreeing byte-for-byte on every interop
vector, and anyone claiming "PiProof compatible" has one command to prove it.

Highlights

Go protocol core (sdk/go/)

  • From scratch: Canonical Profile v1.1 (NFC-form sort, UTF-16 ordering),
    closed event schema, G1–G9 pipeline with exact error-code parity, RFC 8032
    via stdlib crypto/ed25519.
  • One pinned auxiliary dependency (golang.org/x/text) — Go ships no Unicode
    normalization tables; it plays the role unicodedata plays in Python.
  • Ordered JSON parsing preserves key order (Go maps randomize it).
  • CANC/PARSE fuzz driver speaking the same line protocol as Python's.
  • Tests: 16 interop vectors byte-exact · fixed-point INV-01 pin · valid
    vector ACCEPTS · all 20 attacks reject with exact codes · INV-05/INV-08 pins.

Normative conformance suite (npm run conformance + docs/CONFORMANCE.md)

  • Four-row matrix: Node vectors / Python canonicalizer / Go protocol core /
    Python Ed25519.
  • Claim rules: publish raw matrix output + vector commit SHA; say "passes
    the PiProof conformance matrix at commit <sha>" — never "certified".
  • Graceful SKIP for absent toolchains; --strict turns skips into failures.

TLA+ model of the stateful gate core (formal/)

  • Two verifiers racing one shared nonce authority; G8 snapshot eligibility
    and atomic G9 test-and-set modeled explicitly.
  • INV-04 (at-most-one-accept), INV-05 (burn-on-pass-only), TypeOK,
    AcceptImpliesBurn as TLC invariants. Hand-checked pending CI tooling —
    stated honestly in formal/README.md.

Fuzzing: seventh campaign go-diff

  • Node vs Go differential through the driver protocol: canonical bytes AND
    parse shapes. Clean SKIP without a Go toolchain.

Corrections to v0.15's Unicode story

v0.15 claimed canon-012 pinned the amended NFC-form sort order. Wrong on
Unicode facts: ligatures have no canonical decomposition, so canon-012's
emission order is identical under both sort rules. The true discriminator is
new vector canon-016 (Ç U+00C7 vs Å-sign U+212B): raw-sort emits Ç
first; v1.1 NFC-form emits Å first. Suite is now 16 vectors, and
cross-canonical.py was moved from raw-sort to NFC-form sort (it silently
disagreed with v1.1 on flip-class pairs while passing the old set).

Verification

132/132 tests · layers clean (23 modules / 64 edges / 0 violations) ·
20/20 attacks · 16/16 canonical vectors ×3 languages · FUZZ OK incl.
go-diff · conformance matrix 4/4 · go vet clean · CI green on
Node 18/20/22 + Python 3.10/3.12 × ubuntu/windows + Go on both OSes.

Maturity movement

  • Row #13 (independent implementation): partially held — spec proven
    reimplementable in a third language; author-independence remains open.
  • Row #14 (mechanized verification): drafted — TLC-runnable model shipped.

v1.0 remains gated on external review. Full details:
CHANGELOG ·
docs/CONFORMANCE.md ·
docs/MATURITY.md