Deterministic ChangeSet digest
CSD-1 derives a change’s identity from Git object IDs, so the same change produces the same digest on any runner.
Attest binds what changed, what was declared about AI involvement and what review the forge recorded into one signed in-toto statement, then evaluates a merge policy against it in CI. It answers one deliberately narrow question: which claims and review evidence were present for this exact change, and which trusted workflow signed that record?
Attest is an open-source, CI-native provenance toolchain for code changes. It computes a deterministic digest of a pull request’s ChangeSet, collects declared AI-authorship claims and the forge’s review record, signs the result keylessly with the CI job’s Sigstore identity, verifies that identity, and returns an allow, warn or deny decision that can block the merge.
Git records commits, the forge records reviews and AI coding tools emit their own metadata, but nothing binds them into one durable record for a specific change. When a customer, an auditor or your own incident review asks whether AI-assisted code was independently reviewed before it merged, the answer is scattered across dashboards that can be edited after the fact.
Attest turns those signals into a versioned in-toto Statement bound to a deterministic CSD-1 ChangeSet digest, signs it with a keyless Sigstore signature tied to the CI workload identity, and stores the bundle with transparency-log evidence. Verification checks the cryptography and the expected signing identity first; only then does a policy decide whether the change may merge.
CSD-1 derives a change’s identity from Git object IDs, so the same change produces the same digest on any runner.
Collects self-reported AI involvement from supported repository signals. Raw prompts are never stored.
Reads the pull request’s review state from GitHub, including whether the approver is the change’s own author.
Signs with the GitHub Actions OIDC workload identity, so there is no long-lived signing key to manage or leak.
verify always requires an identity and an issuer constraint. A valid signature from the wrong workflow still fails.
allow, warn or deny with stable reason codes and semantic exit codes, ready to become a required status check.
Run from the repository root. It creates exactly three files, .attest/config.yaml, .attest/policy.yaml and .github/workflows/attest.yml, and refuses to overwrite an existing one. The default policy requires one independent human review, so the first run on an unreviewed change is expected to deny it.
uvx --from attest-cli==0.1.5 attest init \
--checkout-ref actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 \
--action-ref Parth2412/attest/action@c42e52d038f5ecdcc498679cb7648e5b0957d489- uses: Parth2412/attest/action@c42e52d038f5ecdcc498679cb7648e5b0957d489
env:
GITHUB_TOKEN: ${{ github.token }}
with:
mode: run
policy: .attest/policy.yaml
push-attestation: "true"
fail-on-violation: "true"Every command returns a semantic exit code; add --json for the closed machine-readable report.
| Exit | Meaning |
|---|---|
0 | Success |
1 | Unexpected internal failure |
2 | Usage or configuration failure |
3 | Policy denied the ChangeSet |
4 | Verification failed |
5 | Required attestation was not found |
6 | Transient network failure; safe to retry |
A 48-second terminal walkthrough of Attest: inspecting a signed bundle, verifying its Sigstore signature and workflow identity, and the policy denying then allowing the same ChangeSet after an independent review.
Attest’s behaviour is public and re-checkable, not a claim on this page.
Denied the unreviewed ChangeSet, passed after an independent review, and merged.
A fork pull request failed before receiving any signing or write authority.
Checksums, SBOM, SLSA provenance, vulnerability scans and the dogfood bundle for this release.
Hosted cold start for Action v1.0.7: p50 11 s and p95 14 s across 60 samples.
A durable record that AI-assisted changes were declared and independently reviewed before they merged.
A required check that fails closed on bad signatures, unexpected identities and missing reviews.
Review evidence a customer can re-verify without trusting your dashboard or the original runner.
Fork pull requests receive no signing or write authority, so outside contributions stay safe to gate.
Stated in the project’s own documentation, so you can decide where it fits.
Founder & Director, ZettaCore Labs. Attest is developed in the open: issues, pull requests and the full release history are on GitHub.
We build applied AI systems - retrieval, agents, forecasting and vision - that sit inside real workflows and are evaluated against your data, not a public leaderboard.
Cloud architecture, migration, DevOps and platform engineering - designed for predictable cost, fast recovery and deployments that are boring on purpose.
Web, mobile, SaaS and enterprise systems built on durable foundations - clear domain models, typed boundaries and tested paths.
Attest is an open-source GitHub Action and CLI that records chain of custody for code changes. It binds a deterministic ChangeSet digest, declared AI-authorship claims and the forge’s review record into a Sigstore-signed in-toto statement, verifies the signing workflow, and returns an allow, warn or deny merge decision.
No. GitHub artifact attestations record build provenance for the artifacts a workflow produces. Attest records the authoring and review evidence for a code change before the build, and is designed to complement build provenance rather than replace it.
No. Attest records what was declared. A signature proves a claim was present in the signed statement, not that the claim is true, and AI use nobody declared is invisible to it.
No. It signs keylessly through Sigstore with the GitHub Actions OIDC identity of the workflow run, and verification checks that identity and its issuer before any policy runs.
They receive no signing or write authority and fail before repository-controlled content is read. The generated workflow uses pull_request, and it should never be switched to pull_request_target.
It is public pre-alpha at 0.1.7, with an immutable Action v1.0.7 and a reviewed v1 tag. Predicate identifiers may still change during 0.x, so pin exact versions and commit SHAs.
We implement provenance gates, LLM regression testing and secrets hygiene for teams shipping AI and fintech systems. Tell us what you run today.