This repository was archived by the owner on Aug 9, 2026. It is now read-only.
Adds decide() and calibrate_direction(): a detector fitted on healthy data alone cannot know whether anomalies score higher or lower, so it now answers REFUSED until labelled anchors settle the direction — and those anchors also locate the decision cut.
Hardens tools/verify_receipt.py against 23 attacks on the gap between the bytes that are signed and the fields a reader sees. Fixes a guard floor that let a feature which is constant by construction capture the score, and validates direction/decision_cut when a detector is loaded.
Ships study/ — the preregistration, the non-identifiability argument, per-domain signed receipts, and manifests with the sha256 of all 7623 recordings.
Full notes in CHANGELOG.md.