PEP 740 · SLSA · read-only · census

What the supply chain actually signs

Two questions get collapsed into one. Does a package carry an attestation that verifies, and does that attestation describe how the package was built? This is the full dependency set of one working engine, checked against both, with the expectations published before the run and every refusal named by the limb that failed.

A census of one install set, not a sample of PyPI · no badge, no score, no ranking · an unattested package is not an unsafe package

Subject requirements.txt at engine commit c9e1ab67d08c
Requirements SHA-256 7e1faf942c6cddc14cc4a137a2a83c98635bae2cb66528f14bf42fcd672319eb
Resolved for Darwin arm64 · Python 3.11.15 · 94 distributions · 35,769,965 bytes downloaded and hashed
Expectations digest d089f5dc2f47169f77d83f4b4374334c580f85102640ffea3b46e8c4697a71aa published 2026-08-02 03:41 UTC
Ledger digest 0c23b0305508b27607895a32440e1d4949cebe5e43e20cf568f4dfbf11e61a00 run 2026-08-02 05:44 UTC
How to cite / re-check
Cite expectations.json (published first) and summary.json. One package at a time: https://geniusflow-federation.vercel.app/slsa/receipts/<normalized-name>.json
This is a census of one install set, not a sample. A later run resolves a later set; the expectations file pins which artifact filenames and digests a given run covered.
53.2%
50 of 94
serve no attestation at all
PyPI returns 404 from the integrity endpoint. There is nothing to verify, so nothing was verified.
46.8%
44 of 94
pass every MUST limb
An attestation exists, the downloaded bytes hash to the digest the index recorded, and the signature verifies against that computed digest.
0
of 94
carry SLSA build provenance
Every attestation in this set is a PyPI publish attestation. It binds an upload to a workflow and says nothing about how the artifact was built.
100.0%
94 of 94
refuse at the full level
The full level adds the signer to source cross check and the two observed limbs. Nothing in this dependency set clears it.

The distinction this ledger exists for

A publish attestation says a named workflow in a named repository uploaded this exact file. That is worth having. It is not build provenance.

SLSA build provenance says how the artifact was produced: the builder, the source it was built from, the parameters. It is what lets you check that a wheel came from the commit it claims.

Every attestation in this dependency set is the first kind. A project that treats a verified PyPI attestation as SLSA build provenance is claiming more than it holds.

Verified predicate typePackages
https://docs.pypi.org/attestations/publish/v1 44
https://slsa.dev/provenance/v1 0

Predictions, written down first

The expectations file was committed and published at digest d089f5dc2f47169f before a single package was checked, and the run refuses to start if that file's digest stops matching its contents. These four predictions were in it.

Stated before the runObservedVerdict
Fewer than half of these distributions will serve any PEP 740 attestation. 44 of 94 served an attestation met
No distribution in this set will carry a SLSA build provenance predicate. 0 of 94 carried one met
Both host published roots will refuse at the first limb. 2 roots failed index_resolves met
Every attestation that verifies will also be in the transparency log. 44 of 44 verified attestations carried a log entry met

Where they fail first

Limbs run in a frozen order and a refusal names the first one that failed, so these counts partition the census rather than double-counting it.

First failing limbPackages
provenance_published 48
predicate_is_slsa_build_provenance 42
index_resolves 2
signer_matches_declared_source 2

Named reasons

Limb and reasonPackages
provenance_published:no_provenance_published 48
predicate_is_slsa_build_provenance:publish_attestation_not_build_provenance 42
index_resolves:declared_range_unsatisfiable_on_pypi 1
signer_matches_declared_source:signer_repo_mismatch:numpy/numpy!=numpy/numpy-release 1
index_resolves:project_not_on_pypi 1
signer_matches_declared_source:signer_repo_mismatch:tox-dev/py-filelock!=tox-dev/filelock 1

Every limb, reported separately

not reached means an earlier limb failed first, so this one was never observed: it is neither a pass nor an exemption. The digest compared against each signature is one this probe computed over bytes it downloaded, never a digest quoted back from an API.

Limb Level ok fail n/a absent not reached
index_resolves MUST 92 2 0 0 0
provenance_published MUST 44 48 0 0 2
bundle_wellformed MUST 44 0 0 0 50
artifact_bytes_match_index MUST 44 0 0 0 50
signature_verifies MUST 44 0 0 0 50
signer_matches_declared_source SHOULD 42 2 0 0 50
predicate_is_slsa_build_provenance OBSERVED 0 44 0 0 50
attestation_in_transparency_log OBSERVED 44 0 0 0 50

The part that did work

Every attestation that exists in this set verified. All 44 passed Sigstore verification against the Fulcio certificate chain and the Rekor transparency log, the digest computed over the downloaded bytes matched the index in every case, and every one was discoverable in the log. The gap here is adoption, not broken cryptography, and a refusal ledger that only ever prints bad news is not measuring anything.

Anomalies, and why they are not accusations

The signer to source limb compares two facts a maintainer sets in two different places: the repository PyPI reports as the signer, and the source repository the project declares in its own PyPI metadata. They disagreed twice.

Package Declared source Signed from
numpy numpy/numpy numpy/numpy-release
filelock tox-dev/py-filelock tox-dev/filelock

A project may build and upload from a repository other than the one it lists as its source, and a repository that has been renamed keeps answering on its old name. Both are ordinary and neither is evidence of wrongdoing. What the receipt records is that an automated consumer pinning the declared source repository would not match the signer, which is a real cost of the naming gap even when nobody did anything wrong.

What the probe found about its own author

The first limb failed on this engine's own declared roots before it failed on anyone else's package.

Declared Reason Latest on PyPI
helixhash>=1.0 declared_range_unsatisfiable_on_pypi 0.1.1
witnessfield>=1.0 project_not_on_pypi not published

Both are packages this host publishes. The engine declares a version range the public index cannot satisfy, which means a third party following this requirements.txt cannot reproduce the environment. That is a refusal against the author of the probe, found by the probe, published here rather than fixed quietly first.

Read it yourself

One package's receipt, by normalized name, from the federation origin:

curl -sS https://geniusflow-federation.vercel.app/slsa/receipts/cryptography.json | jq '{package, version, must_admit, first_refuse_reason, limbs}'

Re-run it

The probe is stdlib only apart from the verifier, which is not an engine runtime dependency. When it is missing the signature limb refuses by name rather than passing, so an unverified run can never read as a verified one.

python3 -m venv .slsa && .slsa/bin/pip install pypi-attestations
.slsa/bin/python engine/tools/slsa_provenance_run.py expect
.slsa/bin/python engine/tools/slsa_provenance_run.py run

Version ranges float, so a later run resolves a later set and the counts move. The expectations file pins exactly which artifact filenames and digests a given run covered, so a disagreement is about what the index served rather than about which packages were picked.

What this cannot tell you