Two files · one transformation · one verified claim

Keep the claim.
Keep its trail.

Proofline checks a small source-to-claim manifest on your machine. It hashes the named files, follows each transformation edge, and refuses a verified claim that cannot point to an inspectable file and locator.

source filerecorded transformationderived artifactlocated evidence

Project-owned example

Small enough to inspect.

The checked example starts with a two-line passage, derives one study-card JSON file, records the relationship, and keeps the source identifier and locator inside the card.

Run from a clean checkout

One command

python proofline.py \
  examples/proofline/manifest.json
Proofline PASS Checked: 2 files, 2 claims, 1 transformation
Inspect the pinned manifest →

Fail closed

What breaks the check

  • A named file is missing or its SHA-256 no longer matches.
  • A path is absolute or escapes the manifest directory.
  • A transformation points to an unknown input or output.
  • A verified claim has no known file and human-readable locator.
  • Two records reuse the same identity.
Read the pinned tests →

An integrity check, not an oracle

A passing chain is a bounded claim.

Proofline can establish that the recorded local files still match their hashes and that a claim points to the evidence the manifest names.

It cannot establish that a source is true, that its author is trustworthy, that the operator owns redistribution rights, that the transformation was fair, or that a learner or customer achieved an outcome. Those questions still need human review and separate evidence.

Use the source, not the screenshot

Inspect it or break it.

The implementation, manifest, fixture, and tests are pinned to one public commit. Change a byte in either checked file and the same command must fail.