Integrity
Every mutation appends to a per-assay hash chain. Replaying it recomputes each digest from scratch and reports the first link that no longer holds.
Ledger integrity
0 / 0
genesis keyassay/genesis/1 · seal(n) = SHA-384(UTF-8(prevSeal) || canonicalJson(event(n))) · canonical JSON sorts object keys recursively and preserves array order, because array order is part of the data.
Every chain in this session
No assays yet, so there is nothing to replay. Run one and it appears here.
A score on its own is an assertion. What makes this one checkable is that every event is hashed together with the seal that preceded it, so altering any earlier event invalidates every later digest in the chain. Removing an event does not help either: the following event's recorded prevSeal no longer matches the computed head.
Deleting an assay does not erase this. A delete appends its own event and tombstones the row, so a verification of a record you can no longer see in the ledger still succeeds. That is deliberate: an auditor who asks about an assay six months later should not find that the evidence vanished with the row.