Skip to content

Releases: gravit-open-network-foundation/verifier

v0.7.0

Choose a tag to compare

@GravitOpenNetwork GravitOpenNetwork released this 25 Oct 13:27
6b2ecba

Fixes from an external review of v0.6.0: one integrity_hash per Verified Fact; excluded Records never count; decision_id over RFC 8785 (JCS); theta never coerced. 54 golden vectors, Python and Rust agree. Details in README (v0.7 changes).

v0.6.0 — The signed result is applied (CANON-RES-012)

Choose a tag to compare

@GravitOpenNetwork GravitOpenNetwork released this 13 Oct 08:08
7887252

Fix. Up to v0.5.0 the kernel ignored the signed result field of an Evidence Record. Records signed with result=false or null counted towards a Verified Fact like result=true. Reported and reproduced on 12 Oct 2026 by Iman Schrock (EMILIA Protocol) against the SAFR v1.1 reference adapter; he confirmed the fix on 13 Oct 2026.

  • result: true = supports, false = contradicts (blocks Verified Fact, even when outvoted), null = no verdict (not support).
  • Only admissible records count when a registry is loaded, so an unsigned false cannot block.
  • The decision keeps contradicting_records, no_verdict_records, supporting_sources.
  • 47 golden vectors (7 new), reproduced by Python and Rust including decision_id. The 40 earlier vectors keep their outcomes and reasons; their decision_ids change because every decision lists one more rule.
  • CONFORMANCE.md item 3 corrected; details in docs/signed-result.md.

v0.5.0 is unchanged and remains available.

v0.5.0 — Registry signed by a 3-of-5 trust root

Choose a tag to compare

@GravitOpenNetwork GravitOpenNetwork released this 09 Oct 13:18

What changed

  • Registry root signatures. The verifier registry loads only if at least threshold distinct root keys of a pinned trust root have signed its exact bytes. Signatures are read from <registry>.sig; the CLI takes --trust-root.
    • A trust root whose threshold is half of its keys or fewer is rejected.
    • Procedure: docs/root-key-custody.md. Holders: registry/ROOT_KEYS.md.
  • Freshness Bound (CANON-FRS-005). When the request context contains evaluation_time and freshness_max_age_seconds, the age of every Record is checked. The kernel never reads the clock.
  • Reproducible decision_id. It is now a SHA3-256 content hash, identical in Python and Rust. DecisionRecord gains artifact_id and trust_root_digest.
  • CLI exit codes: 0 SUCCESS, 3 DEGRADED (previously 0), 1 REJECTED, 2 usage error.
  • Stricter registry parsing. Python and Rust now reject registry_version: 1.0 / true and revoked: null in the same way.

Evidence

  • 40 golden vectors, reproduced by both Python and Rust, decision_id included.
  • pytest 34/34, Rust 5/5.
  • The date parser was cross-checked against Python datetime on 200,000 timestamps.

Breaking

  • A registry without .sig and --trust-root no longer loads.
  • Scripts that treated exit code 0 on DEGRADED as success now receive 3.

Limits

  • The trust root contains test keys only. Real root keys follow the ceremony; see docs/ceremony-dry-run.md, available on main after this release.
  • No claim of Sybil resistance is made until real operators are admitted under registry/POLICY.md.

v0.4.0 — Signed evidence and verifier registry

Choose a tag to compare

@GravitOpenNetwork GravitOpenNetwork released this 09 Oct 13:18

What changed

  • New Binding CANON-SIG-011. A Verified Fact now requires convergence on Records signed (Ed25519) by keys in a verifier registry that are not revoked. Keys of one operator count as one source.
  • Without a registry, the result is capped at Probabilistic Assessment.
  • Excluded Records are listed in the DecisionRecord with a reason: unsigned, unknown_key, revoked_key, malformed or bad_signature. Excluding a Record never rejects the whole artifact.
  • DecisionRecord gains excluded_evidence and registry_digest.
  • CLI gains --registry.
  • Rust port mirrors all of it.

Evidence

  • 33 golden vectors, reproduced by both Python and Rust.
  • pytest 27/27.
  • A mutation check confirms that the Rust port really verifies signatures.

Breaking

Unsigned artifacts can no longer reach Verified Fact. See examples/artifact_signed.json for the signed form.

Limits

  • The registry is trusted input and contains test keys only.
  • This release does not claim Sybil resistance. See docs/sybil-design.md §7.

Design document: docs/sybil-design.md.