Quiet accidents
A script rewrites a column, a sync conflict keeps the wrong copy, a backup lands over newer results. Nobody meant to change anything.
Tamper-evident records for automated labs
Seal every file as your instruments write it. Anyone can audit the folder in one click, and your data never leaves your lab.
The demo seals sample data in your browser. Nothing to install.
1, Written: a plate reader writes plate-07.csv into the folder bio-line-2, where the agent is watching. 2, Sealed: the agent fingerprints the file with SHA-256 and signs the seal into the ledger. 3, Copy edited: weeks later, a sync conflict rewrites well A01 from 0.482 to 0.428 in a shared copy of the folder; same name, same size. 4, Caught: one click audits the copy. The fingerprint of plate-07.csv no longer matches its seal, so it is reported as changed; the other four files match.
The plate reader writes plate-07.csv into the watched folder.
The agent fingerprints it with SHA-256 and signs the seal into the ledger.
Weeks later, a sync conflict rewrites one value in a shared copy. The folder looks the same.
One click audits the copy: plate-07.csv changed since it was sealed.
How it works
One file, run with Node.js on the results folder. It reads only bytes: any instrument, any vendor, any format.
node iqc.mjs watch "D:\Results"
Each new or changed file gets a SHA-256 fingerprint and a signature, chained into a ledger inside that folder.
sealed plate-07.csv 477f09c4…
Anyone with the folder drops it on the app: every file matches its seal, or you see exactly which do not.
Pass All 5 files match.
Each file is byte-for-byte the one the agent sealed, and the ledger has not been edited or reordered since it was signed. Checked against a pinned head, it has not lost records since that head was pinned.
That a file was right when it was written, or a change in the few seconds before the agent reads a new file. Whoever holds the ledger’s key could rewrite it from the start, and anyone can remove its newest records without a key; a head pinned elsewhere exposes both.
A change on the instrument PC while the agent runs is sealed as a new version, with its time; the audit lists every version.
Why it matters
A script rewrites a column, a sync conflict keeps the wrong copy, a backup lands over newer results. Nobody meant to change anything.
Results now feed models that choose the next experiment, so one wrong value travels into every run after it.
The ledger holds fingerprints, not data. Audits run in your browser, and the app is blocked from connecting anywhere.
To pin the ledger somewhere else, you share only its head: a record number and a 64-character link that reveals none of your data.
In an intelligence explosion, human review can’t keep up with every result; records have to verify themselves.
Who it is for
First
Biotech, microbiology, chemistry and materials science, where instruments and robots write results faster than anyone can review them.
Later
Upcoming: Per-person signatures and the review controls regulated labs ask for.
Status
Install
One file, no dependencies. Needs Node.js 22 or later on Windows, macOS or Linux.
bf946887b5c62c83ec630dbd9a0641890b622572cbfc789d702a0ac04f41895a
Check your download:
certutil -hashfile iqc.mjs SHA256shasum -a 256 iqc.mjsnode iqc.mjs watch "D:\Results"
It seals the folder now, then each new or changed file until you press Ctrl+C.
ImmutableQC/ledger.jsonl, README.txt and agent.lock in that folder, and its private key in ~/.immutableqc/keys/, readable only by you.# seal once and exit
node iqc.mjs seal "D:\Results"
# print the head, to pin it somewhere else
node iqc.mjs head "D:\Results"
# exit 0 pass, 3 review, 1 fail, 2 usage or read error
node iqc.mjs audit "D:\Results" --expect-head <n>:<h> --json audit.json