Every significant change to piper data — creating a ChainOfCustody, editing a FieldMeasurement, approving a ReportVersion — generates an AuditLog entry. The action field (an AuditAction enum) records what happened, and entityType (an AuditEntityType enum) identifies what kind of record was affected. The before and after JSON fields capture the state of the record before and after the change, providing a complete diff. The reason field allows users to document why a change was made, which is especially important for retroactive edits to regulatory data.
piper
Audit Log
An AuditLog entry captures a single data change event: the `userId` who acted, the `action` performed, the `entityType` and `entityId` affected, the `before` and `after` state snapshots, and an optional `reason`.
Technical section
Data model, API, and internals — visible to developers.
