WATCHTOWER 2.0 — BASELINE LEARNING
Chain of custody

Attestation.

Every scan the ML system runs is hashed and linked. This page publishes the latest Merkle root and the most recent scan artifacts, so any third party can reproduce the chain and verify no record has been altered.

Latest Merkle root
No scan artifacts ingested yet. The ML box publishes to /api/public/scans/ingest — once the first scan arrives, its Merkle root appears here.
Recent scans

Last 24 scan artifacts

JSON endpoint →
WhenMethodDetectionsCandidatesFlaggedMerkle root
No scans ingested yet.
How to verify

Reproduce the chain

  1. Fetch the JSON list of scans: GET /api/public/scans/latest.
  2. For each scan, SHA-256 its canonical payload.
  3. Fold the hashes into a Merkle tree in scan_id order.
  4. Compare the resulting root against the value published above. Any mismatch means a record has been altered or dropped.

The ingest endpoint requires an HMAC signature. Only the ML system holds the shared secret, so no third party can inject synthetic scans — but anyone can read and reproduce every scan that has been ingested.