feat(core-shared): extend audit action enum with consent and restriction types
Adds CONSENT_GRANT, CONSENT_WITHDRAW, RESTRICT, UNRESTRICT to the AuditAction closed enum per GDPR Art. 7 and Art. 18 requirements. core-consent and core-dsr optional cores (Epic B Stories 03/06) emit these action types via core-audit's IAuditLog channel; the values must exist in core-shared's enum before either optional core can be built. No change to IAuditLog's interface surface — new values flow through AuditEntry.action automatically. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -18,8 +18,9 @@ audit data is lossless and long-retention with privileged erasure.
|
||||
1. **`AuditLogProtocol` in `core-shared`** — must-have universal surface.
|
||||
Features call `ctx.auditLog?.record(entry)` without importing the optional package.
|
||||
2. **`AuditEntry` type with closed action enum** — VIEW/CREATE/UPDATE/DELETE/
|
||||
EXPORT/PERMISSION_CHANGE; new actions require explicit type bump. No
|
||||
payload/body/oldValue/newValue fields — type enforces "what NOT to log".
|
||||
EXPORT/PERMISSION_CHANGE/CONSENT_GRANT/CONSENT_WITHDRAW/RESTRICT/UNRESTRICT;
|
||||
new actions require explicit type bump. No payload/body/oldValue/newValue
|
||||
fields — type enforces "what NOT to log".
|
||||
3. **`@repo/core-audit` as 5th optional package** — joins realtime, events,
|
||||
trpc, ui. Scaffolded via `pnpm turbo gen core-package audit`.
|
||||
4. **Four impls + Recording test double**: NoopAuditLog, PayloadAuditLog
|
||||
@@ -80,3 +81,22 @@ audit data is lossless and long-retention with privileged erasure.
|
||||
signal flowing through OTel. The correlationId field is the bridge.
|
||||
- ADR-015 (events/jobs): no overlap; audit is observational, events are reactive.
|
||||
- ADR-017 (OTel migration): provides currentTraceId() helper.
|
||||
|
||||
## Amendments
|
||||
|
||||
### 2026-05-19 — Consent and restriction action types (Epic B, ADR-025)
|
||||
|
||||
Added four new `AuditAction` values to `core-shared/audit/audit-entry.ts`:
|
||||
|
||||
| Action | Article | Description |
|
||||
| ------------------ | ------------ | ------------------------------------------------- |
|
||||
| `CONSENT_GRANT` | GDPR Art. 7 | Subject granted consent for a processing purpose |
|
||||
| `CONSENT_WITHDRAW` | GDPR Art. 7 | Subject withdrew consent for a processing purpose |
|
||||
| `RESTRICT` | GDPR Art. 18 | Subject requested restriction of processing |
|
||||
| `UNRESTRICT` | GDPR Art. 18 | Restriction lifted (controller or subject action) |
|
||||
|
||||
**Reason:** `core-consent` and `core-dsr` optional packages (Story 03 and 06
|
||||
of Epic B) emit these action types via `core-audit`'s existing `IAuditLog`
|
||||
channel. The values must exist in `core-shared`'s closed enum before either
|
||||
optional core can be implemented. No change to `IAuditLog`'s interface surface —
|
||||
the new values flow through `AuditEntry.action` automatically.
|
||||
|
||||
Reference in New Issue
Block a user