Tamper
Signal
✓ signed · ed25519
A verification layer for AI-built data pipelines. Each stage leaves a signed receipt, and one command tells you whether the chain held.
I built all of it: concept, code, docs, demo.
The numbers in front of the boss are wrong, and nothing says so.
A social team exports a month of TikTok performance data. Someone builds a dashboard on it in an afternoon with an AI assistant, and it looks great. Then a transform quietly drops 22 rows and the numbers are wrong. Nothing in that workflow catches it. Nobody is going to re-check 48,000 rows by hand.
Seal every stage, and a break has an address.
Each stage gets a receipt for what went in and what came out: an evidence hash, a semantic hash, and control totals a person can actually read. Ed25519 signatures link the receipts into a chain. Run one command. You get back intact, or the exact stage where the chain stopped and by how much. The receipts are files on disk, so there is nothing to stand up first.
- 1Every stage signs for what came in and what went out.
- 2The receipts chain to each other. Break one link and the chain names it.
- 3A person is handed a verdict, not a spreadsheet.
The verdict lives where the numbers live.
The pill sits in the dashboard header, beside the date range, where a person is already looking. It cycles green, yellow, red. When the chain breaks it outlines the one metric that stopped descending from the source: total views, 1.26M, the number somebody was about to read out loud.

Green earns silence.
The break lands on a link, not a file.
12301
The console draws the run as a row of signed stages and puts the break between the two it belongs to.
02
The log underneath gives the hash it expected, the hash it found, and the damage: 22 rows gone, 24,889 views gone.
03
Everything downstream is marked unverifiable rather than wrong. That is enough to know which script to open.

Click the pill and the table opens underneath.
The dashboard has a Data tab, beside the charts. It shows the attested rows, re-hashed in your own browser against the final receipt, with the stages across the top, so you can see what the number came through. The break shows up in one column. This is a drawer in the dashboard you already have, and it comes with the badge, with nothing extra to install.
It is open source, on PyPI and npm.
The Python and the JavaScript canonicalize byte for byte the same, and there are attach helpers for Flask, FastAPI, Express and Streamlit. No team has it in a pipeline yet. The demo at tampersignal.com re-verifies a real committed receipt chain in your own browser and catches the tampered run at the exact link: 48,212 rows down to 48,190.
