Skip to main content

providence

ci

One versioned shape for "content + sha256(content)" evidence, and a checker that catches tampering.

receipt and invariant (two other tools in this portfolio) both already write proof-of-work to disk this way — a result, a hash of it, a timestamp. They arrived at two different envelope shapes for the same idea. providence names the shape underneath both, as one small, checkable spec, so a third or fourth tool doesn't reinvent it a third or fourth time.

This is a spec-and-checker, not a platform. It doesn't run checks, collect evidence, or replace receipt/invariant — it only answers "is this bundle what it claims to be."

$ providence check proof/
PASS  proof/ is a conformant Providence bundle

$ providence check proof/   # after someone hand-edits a file in it
FAIL  proof/manifest.json: items[0] (id=no_negative_payments): sha256 mismatch -- manifest says 6bc0..., no_negative_payments.json actually hashes to 9fab... (tampered or corrupted)

Full shape, and why it looks the way it does: SPEC.md.

Install

pip install providence-evidence

(providence and receipt were both already taken on PyPI — same story as invariant-verify/receipt-evidence in this portfolio. The installed command is still the short name, providence.)

Convert existing output

receipt and invariant don't need to change what they write — a converter reads each tool's real output and emits a Providence-conformant bundle from it:

providence convert-invariant proof/ providence-proof/   # invariant's --evidence dir
providence convert-receipt out/20260909T...-abcd.json providence-proof/   # a single receipt
providence check providence-proof/

What it checks

  1. The envelope has providence_version (currently 1), generated_at, tool.
  2. Every hash in the manifest matches the actual bytes of the file it claims to cover. A mismatch means the content changed after the manifest was written — that's the entire point.
  3. (Directory form) every file on disk is referenced by the manifest, and vice versa — no silently-orphaned or silently-missing evidence.

What this is not

Not a signature scheme — a sha256 proves content wasn't edited after the manifest was written, not who wrote it or that the manifest itself wasn't regenerated from scratch. Not a general JSON-schema validator — it checks Providence's specific envelope, nothing about your payload's own shape. Not a replacement for receipt or invariant — see SPEC.md's "Status" section for exactly what is and isn't unified today. Not a secret scanner — a bundle's payload validates identically whether it's been redacted or not; see SPEC.md's "Redaction and secrets" for whose job that actually is.

Tests

python3 tests/test_providence.py

Assert-based, no framework, no fixtures beyond what each test builds inline — including two tests that construct fixtures matching receipt's and invariant's real, current output byte-for-shape (not imported cross-repo, so this repo has zero dependency on either being installed) and round-trip them through convert_* → check_bundle to prove the converters work against real shapes, not just the canonical one.

Release files for providence-evidence 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for providence-evidence 0.1.1
File Size Uploaded
providence_evidence-0.1.1.tar.gz 10.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for providence-evidence 0.1.1
File Interpreter ABI Platform
providence_evidence-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 19.7 kB

Release files / providence_evidence-0.1.1.tar.gz

Download URL providence_evidence-0.1.1.tar.gz
Size 10.2 kB
Tags Source
SHA-256 checksum
How to use checksums
acf637df40c7d1210109f3c46075db6bc145b21713cb4cec7dac9086f21f774d
BLAKE2b-256 checksum
How to use checksums
862c3cc136e77789207e187f75b70929bc409a5270c99789cb4109c35bc92f9e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release files / providence_evidence-0.1.1-py3-none-any.whl

Download URL providence_evidence-0.1.1-py3-none-any.whl
Size 9.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9ccbd804f09431c37b73827147a542a6cc2c0b8096e8ef1bbc9521c109b20dfa
BLAKE2b-256 checksum
How to use checksums
7681f0276d486464d59ce999bb440319a156017e06b42e314fcf1577bf64099d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release history Release notifications | RSS feed

0.2.0

2 release files

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page