Activity Ledger records what changed, who changed it and when — without a schema migration per model. Attach the trait, declare the attributes worth watching, and the package writes a normalised ledger row on create, update and delete.
The ledger is append-only by design. Rows are never updated in place, which is what makes the history trustworthy in an audit: the only way to correct an entry is to write a compensating one.
- Per-model attribute allow-lists
- Actor resolution from the authenticated request
- Request ID correlation across queued work
- Query scopes for "everything that happened to this record"