Check whether an AI coding agent's delivered commit supports what it claims it completed.
Project description
Proofrail
Check whether an AI coding agent's delivered commit supports what it claims it completed.
Public alpha: available on PyPI, local and read-only, and not a hosted service.
Install and try the reconstructed incident
Requires Python 3.9 or newer:
pip install proofrail
proofrail verify --demo
The demo should finish with partially_verified: the deletion is supported,
the workflow update is contradicted, the green-CI claim is unsupported, and
merge status requires human review.
The reconstructed failure
An agent was asked to delete an obsolete bun.lockb file and update two workflow triggers to watch bun.lock.
The delivered commit deleted the obsolete file but omitted both workflow changes. CI still turned green because the old workflow was triggered by the deleted bun.lockb. The green check appeared to confirm the fix while actually exercising the configuration that should have been replaced.
| Claim | Proofrail result |
|---|---|
| Obsolete lockfile deletion | verified |
| Workflow trigger update | contradicted |
| Green run proves the new trigger | unsupported |
| Merge status | human_review_required |
| Overall result | partially_verified |
This fixture is a deterministic reconstruction of the real incident. It does not represent a failure caught from a live external user. Read the complete reconstructed example.
For a no-install source-checkout run and a real committed-range walkthrough, continue to the quick-start guide.
What Proofrail is
In short: Acceptance verification for AI-generated code changes.
AI agents can pass tests and report "done" even when part of the requested change never reached the final commit. Proofrail compares the agent's claims with an exact Git commit range and the available evidence, then reports each claim as verified, contradicted, unsupported, or requiring human review (human_review_required).
Why not just read the diff or ask another AI?
A diff shows what changed, but it does not tell you whether every completion claim is present or whether a passing check actually tested the claimed behavior.
A second AI can offer another interpretation. Proofrail instead applies deterministic checks to fixed artifacts: the claims, committed range, and submitted evidence. Its report shows which artifact supports each result and what remains unproven.
Proofrail complements code review and tests; it does not replace them.
For AI coding agents
Run Proofrail after implementation and before the agent reports "done." A diff shows what changed. Proofrail checks whether the agent's stated claims are supported by what changed.
Use the Proofrail acceptance skill to inspect an exact committed range, handle each claim status, and produce an evidence-bounded final report.
Claude Code users can copy the repository instructions in the Claude Code integration guide.
Example output
Overall verdict: partially_verified - some claims are supported, while others
are not or still need human review.
Use --format json for per-claim findings, evidence references, source hashes,
and provenance limitations.
GitHub Actions usage
The composite action under .github/actions/proofrail-verify is currently
repository-local dogfood infrastructure. It works within this repository's
checkout; it is not installed by pip install proofrail and is not yet a
reusable action for external repositories.
- uses: ./.github/actions/proofrail-verify
id: proofrail
with:
case-directory: tests/fixtures/001-partial-workflow-fix
format: json
Within this repository, the action writes JSON under .proofrail/results/,
appends a Markdown report to the job summary, and exposes the verdict and JSON
path as outputs. The included workflow uses read-only contents: read
permissions. External CI should install proofrail from PyPI and invoke its
CLI directly.
Core concepts
Proofrail separates five statements that are often conflated:
- Attempted — an agent tried an action.
- Executed — a command completed.
- Artifact changed — a final artifact has a measurable change.
- Claim supported — the artifact directly supports a completion claim.
- Outcome verified — relevant evidence demonstrates the requested behavior.
See the acceptance model for the full model.
What Proofrail proves
For supported inputs, Proofrail can deterministically inspect an exact local Git range, draft path-level claims, check claim freshness, prepare a case, evaluate artifact-level evidence, and apply a bounded acceptance policy. It can show that a final committed artifact matches or conflicts with a path-level claim.
What Proofrail does not prove
Proofrail does not authenticate authorship or timestamps, prove deployment state, browser rendering, external-system behavior, human intent, or that an execution command tested the claimed outcome. It does not run recorded commands, contact external services, or turn a green check into evidence by itself.
Project status
Proofrail is a Public alpha distributed on PyPI for local, read-only evaluation. It is not a hosted platform, a universal behavioral verifier, or a supported general-availability product. See project status for the current capabilities and limitations.
Pilot guidance
Use a controlled pilot to test whether Proofrail improves review quality in your environment. The pilot guide defines a three-repository evaluation and measurable future targets.
Development and contributing
Read the product doctrine, acceptance model, and agent instructions. The autonomous engineering process uses explicit step contracts and deterministic preflight before a bounded change is committed.
Repository orientation
src/proofrail_verifier/— deterministic verifier, claim, policy, and Git-range code.tests/fixtures/— preserved regression fixtures.tests/— deterministic regression and integration coverage..github/actions/proofrail-verify/— local GitHub Actions integration.contracts/— exact step contracts for deterministic preflight.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file proofrail-0.1.0a2.tar.gz.
File metadata
- Download URL: proofrail-0.1.0a2.tar.gz
- Upload date:
- Size: 40.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee4761762971fe8da9ca945b6246fa0be6ef49272859b2076b605e20f1ce4e2d
|
|
| MD5 |
b2a9b673907af0116f3a2ddb59ff8561
|
|
| BLAKE2b-256 |
ff2475dfe9c847a037573a484ce9ed8e321c6ab5e24cdc3d9c396f88756d398b
|
Provenance
The following attestation bundles were made for proofrail-0.1.0a2.tar.gz:
Publisher:
publish-pypi.yml on DrDeese/Proofrail
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
proofrail-0.1.0a2.tar.gz -
Subject digest:
ee4761762971fe8da9ca945b6246fa0be6ef49272859b2076b605e20f1ce4e2d - Sigstore transparency entry: 2234320528
- Sigstore integration time:
-
Permalink:
DrDeese/Proofrail@2efafe8a8c5e410d075080f44509575e8c3a44b9 -
Branch / Tag:
refs/tags/v0.1.0a2 - Owner: https://github.com/DrDeese
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@2efafe8a8c5e410d075080f44509575e8c3a44b9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file proofrail-0.1.0a2-py3-none-any.whl.
File metadata
- Download URL: proofrail-0.1.0a2-py3-none-any.whl
- Upload date:
- Size: 53.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17fd85568b4db2c7e1f8b3dee484394116aaa5c811583aa44b8ad49ea9d84a2b
|
|
| MD5 |
41e3a767e04e9cbf9dd7fc34b5073d03
|
|
| BLAKE2b-256 |
861c46b2d0a6fb9cd15dd9695a536c1afe23ae27674189d02d411e7365ce2e69
|
Provenance
The following attestation bundles were made for proofrail-0.1.0a2-py3-none-any.whl:
Publisher:
publish-pypi.yml on DrDeese/Proofrail
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
proofrail-0.1.0a2-py3-none-any.whl -
Subject digest:
17fd85568b4db2c7e1f8b3dee484394116aaa5c811583aa44b8ad49ea9d84a2b - Sigstore transparency entry: 2234320560
- Sigstore integration time:
-
Permalink:
DrDeese/Proofrail@2efafe8a8c5e410d075080f44509575e8c3a44b9 -
Branch / Tag:
refs/tags/v0.1.0a2 - Owner: https://github.com/DrDeese
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@2efafe8a8c5e410d075080f44509575e8c3a44b9 -
Trigger Event:
push
-
Statement type: