01 / SIGNED RECORDS
Signed records
Each signature can be checked on its own. The path between records is not yet visible.
OPEN SOURCE / SELF-HOSTED
Leave a trail your data can prove — the issuer, input, and output of every data handoff, recorded as a signed path recipients can verify themselves.
— A claim you can run beats a claim you can read.
TAMPER DEMO
Three organizations, one forged payload. It never reaches downstream — below is the real output of a run.
All you need locally is Docker:
git clone https://github.com/provin-line/e2e
cd e2e
make demo
The first run includes the image build (a few minutes); after that it completes in about 20 seconds. The assertion-grade version lives in scenarios/supplychain.
MANIFESTO
Not a technical immaturity — a limit in principle.
The rise of AI turned that limit from an exception into the default.
Unverifiable stages — model inference, human judgment — became standard pipeline components, and the cost of forging a plausible artifact collapsed toward zero. The old path of inferring trust from how convincing the artifact looks has closed.
If content cannot be guaranteed, one lever remains: raising the after-the-fact cost of a lie. That cost cannot arrive without attribution — a lie that cannot be pinned to anyone cannot be punished, sued, or priced into a reputation. And between organizations, without a single operator, attribution holds in exactly one form: a chain of signatures at every boundary the data crosses.
This deterrence has preconditions: it reaches only parties who hold an identity worth protecting, and on whom consequences can land. In the economy of firms, those preconditions are already met. A firm is accumulated credibility it cannot afford to lose, and inter-firm commerce has always run on promises staked on a name. Contracts, audits, bookkeeping — none of them prove content true. They make lies attributable.
Trust in the age of AI, then, is not proof that content is correct. It is the state in which every claim is non-repudiably attributable to an entity with something to lose. provin is the choice to establish that attribution — with data pipelines, across organizations, without an operator, cryptographically.
— Attribution becomes a decision-making tool — refuse at the gate, trace after the fact.
WHAT YOU CAN DO
provin creates signed, connected, re-verifiable evidence while data moves, keeping it ready for both admission decisions and later review.
— "Cannot be in there" is only sayable because someone warranted "this is everything."
CLAIM SEMANTICS
Every record carries a declaration of what the processing was — the transformationClaim. Pinning what that declaration warrants is the job of the provin wire profile.
What a verifier often needs is not “is it included” but “can it be excluded” — could this lot have reached that output? What licenses that inference is neither the signature nor the hash chain. It is the issuer’s warranty that the declared inputs are the output’s complete information source — the claim’s closed world.
| label | closure |
|---|---|
provin:filter | closed — declared inputs are the complete information source |
provin:convert | closed |
provin:filter-convert | closed |
provin:aggregate | closed fold over the declared input set |
provin:enrich | conformant-closed — exclusion holds for conformant flows only |
provin:generate | open — information beyond the declared inputs is acknowledged |
provin:sink-receipt | identity — a receipt, not a transformation |
provin:enrich and provin:aggregate share the same N:1 shape, but an enrich joins side-fetched data no chain covers, so exclusion inferences hold for conformant flows only. The shape cannot tell them apart; the claim is what does.provin:generate is the model’s weights, hence its training corpus. Declaring a synthesis as an aggregate would falsely license a closed-world reading of an output nothing closed over. Treating an unverifiable processing stage honestly in the provenance vocabulary is the manifesto’s problem answered at the level of vocabulary.supplychain additionally confirms, across three organizations, a strict profile requiring source-set binding (SOURCE_SET_BINDING) beside the linear one, with exact-view delivery bound to the verified evidence view. — The cost of a lie lands only in concrete settings.
USE CASES
provin is useful when data has crossed an organizational or system boundary and the recipient can no longer verify who handled it, what went in, and what came out.
At every handoff, provin records the claim “who says they produced which output from which input” in a signed credential. The recipient can take that evidence into its own environment and check it under its own policy. provin does not replace an existing lineage or industry system; it adds verifiable evidence at the point where that system’s management boundary ends.
Trace the impact of a faulty input
In a manufacturing recall or cross-service ETL/ELT flow, teams need to know which downstream outputs a faulty input reached.
provin connects signed provenance records so teams can follow a faulty input to its declared descendants.
Public E2E note:recall confirms traversal from a signed FirstDrop record to its declared linear descendants; branching confirms fan-out and filter delivery.
Check a handoff between organizations
In a supply chain, data space, or inter-company API, the recipient needs to check which organization declared the input and output at each handoff.
provin connects those handoff records with signatures so recipients can verify the provenance in their own environment.
Public E2E note:supplychain confirms verification across handoffs modeled on three organizations.
Verify evidence after the original system is gone
An audit or retention period may outlive the original service or resolver, making it important to preserve a verifiable record of the original processing path.
provin packages the required records as evidence that can be verified again outside the live system.
Public E2E note:archiveverify and aggregatebundle confirm offline verification from retained records; auditsurvival confirms restart durability.
Record a delivery failure as a failure
In IoT and event pipelines, processing can succeed even when downstream delivery fails. Teams need a record that preserves the difference.
provin records processing and emission separately so the “processed but not delivered” state remains traceable.
Public E2E note:losswindow confirms that a delivery loss remains visible in the emission record.
Check which inputs went into an aggregate
Sensor aggregation, feature, and analytics pipelines need to identify the input set from which an output was produced.
provin records a signed commitment to that input set and lets a verifier check whether a specific input was included.
Public E2E note:sensoraggregate and aggregatebundle confirm the signed input-set commitment and inclusion check.
— A chain of signatures can only be built the moment data moves.
HOW IT WORKS
Receive, verify, process, sign, and pass on — all as part of the running data pipeline.
01
Accept input and its preceding record
02
Check signature and continuity
03
Evaluate or transform the data
04
Bind input and output in a new record
05
Send data and provenance onward
At each producing boundary, the process signs a record of which input it received, what operation it declares, and what it emitted — the signature proves attribution of the claim, not the correctness of the declared operation. The next process verifies the record it received and issues its own record as the next segment.
Provenance is created when data moves, rather than inferred later. When downstream systems retain the evidence set — the records plus the key and controller material verification needs — verification does not depend on the issuer’s database remaining unchanged.
CURRENT INTERFACES
Interfaces and dependencies confirmed in the current 0.x implementation. Planned adapters are not included.
dPLaaX defines what is recorded at a boundary, how records connect, and how they are verified. provin is its reference implementation, providing the provin wire profile, runtime, services, and operator CLI. did:dplaax and dplaax.*.v1 are the protocol’s identity and API namespaces.
cmd/network (control plane) and cmd/pipeline (data plane) — running on the same host or separate hosts, interacting over the wire only. Evidence stores are file-backed; the current reference stores use YAML and files.The provin node can run without a database. Storage and PDP boundaries are replaceable interfaces, but a database-backed registry or a specific database integration is not shipped. The selected auth provider, PDP, or adapter may have its own database and external-service requirements.
— One proof alone cannot attribute a lie.
WHY THE COMBINATION
Point signatures, append-only logs, and authorization inside a trust boundary prove different things. provin combines evidence with different roles into one verification path.
Verification
provin keeps point proofs, connects them into a line, and makes that line portable evidence.
— Verification is replaying someone else's claim in your own environment.
VERIFICATION
A standalone signed record cannot show how final data relates to its source. provin links adjacent records into a path a verifier can follow.
EVIDENCE
Every number below was measured on snapshots pinned to public commits — independently auditable.
Tamper stop (public E2E)
0
downstream deliveries of a tampered payload
injected mid-chain in the three-organization E2E (single host, process-separated) — relay halts, downstream delivery records stay flat
Performance (bench)
~123 µs
acceptance-path cost per credential
linear in chain depth — measured to depth 512 with in-memory resolution
186 ms → 45 ms
depth-32 delivery with the resolution cache
measured with an imposed 1 ms/call resolution delay — opt-in, TTL- and byte-bounded
Measured with transport replaced by in-process stores — a lower bound on a networked deployment. Each benchmark documents what it does not model.
— Naming what is not guaranteed is part of attribution, too.
SCOPE
provin verifies the records left at data handoffs and turns them into an explainable path.
GET STARTED
Go 1.25. Build and run the tests, then inspect the concrete credential and verdict sample in the specifications.
git clone https://github.com/provin-line/oss
cd oss
make build
make test
The repository contains the authenticated end-to-end stack, CLI, and configuration walkthrough. The specifications also show a fixed input, credential, and verification-result sample.
STATUS
The first public release and its E2E evidence are available. This is not production certification; it is a reproducible snapshot of how the mechanism behaves under the published test conditions.
The current public snapshot is the line evaluated in the systems paper — provin OSS v0.3.0, provin e2e v0.2.0, provin auth v0.2.1, and the dPLaaX spec at v0.1 (draft). Eleven E2E scenarios complete under both the process and Docker Compose runtimes, covering three-organization transfer, branching, aggregation, recall, restart, transport loss, and offline verification.
Authentication (provin auth) defaults to LEGACY_DID_LOGIN@1 — it does not verify DID Document relationships (authentication / assertionMethod). The OWNER contracts (relationship check, three-way kid match, audience required) are wired on main and ship with the next release; the current v0.2.1 release is LEGACY-only.
provin is a 0.x proof of concept. See the public E2E, the technical specifications, and the systems paper (forthcoming) for detailed test conditions and scope.