Satsignal conformance — overview

This is the public-facing entry point for the Satsignal conformance suite. It is the canonical "is X conformant?" reference for third-party verifiers, adapters, and standards-adjacency reviewers.

The vector set, offline-verifier asserted test, legacy-bundle backward-compat suite, and no-payload-upload invariant landed in Phase 5 of the 2026-05-20 hardening sprint and gate every PR via .github/workflows/conformance.yml. The per-adapter golden conformance job is seeded as of 2026-05-20 with the first adapter manifest — tests/vectors/adapters/satsignal-action/v01.json, the typed-authority shape emitted by Steleet/satsignal-action@v0.3.0's provenance: 'true' mode and first anchored on-chain at txid 915c86cbfcf9e0b9…. scripts/run_vectors.py walks the tests/vectors/adapters/ subtree and pins each golden's manifest_sha256; drift here means the adapter has changed its emit shape (or the schema has shifted in a way that breaks a previously- anchored manifest) — a deliberate-decision boundary, not a casual edit. Other adapters land here as they ship a typed-authority emit shape.

What conformance covers

A claim of conformance to satsignal.provenance.v1 means:

  1. The canonical manifest validates against the published JSON Schema at docs/notary_spec/provenance-v1.schema.json.
  2. The canonical bytes are produced by SCJ-v1 (Satsignal Canonical JSON v1 — NFC + code-point key sort; not RFC 8785, see /spec-mbnt) of the manifest.
  3. Unknown top-level fields are rejected. Vendor or custom payloads go inside an explicit top-level extensions object, which the verifier MAY hash and preserve but MUST label "not interpreted by Satsignal."
  4. The bundle (.mbnt) carries the canonical manifest verbatim alongside the chain reference.
  5. Backward-compatible: every .mbnt produced under v1.0 continues to validate under every v1.x release.

Versioning policy

Change kindAllowed underNew schema: literal?
Add an optional fieldv1.x minorNo
Rename / re-type / remove a fieldv2.0 majorYes (satsignal.provenance.v2)
Tighten an existing validatorv1.x minorNo
Loosen an existing validatorv2.0 majorYes
Add a vendor / custom extensionv1.x minor (inside extensions)No

The full policy doc lives at docs/notary_spec/versioning.md. The rule above is the stable v1 contract.

Test vector layout

See tests/vectors/README.md for the directory tree and how to add a vector. Each canonical-manifest vector ships a sibling .expected.json recording the expected manifest_sha256 so vectors are byte-exact reproducible.

CI gating

.github/workflows/conformance.yml runs the stdlib schema, invariant, and vector tests on every PR + push to main.

Stdlib schema / validator / invariant tests:

Vector-driven provenance-v1 conformance:

Remaining (Phase-5 deferred):

What conformance does not cover

A conformant proof shows what satsignal.provenance.v1 actually proves: integrity, timing, inclusion, and commitment. It does not prove truth, authorship by itself, legal compliance, or completeness — unless the relevant claim was precommitted in the manifest. See /what-it-proves.html (the public claims-and-limits page).

Cross-references

Questions about this specification? Email hello@satsignal.cloud.