Retention Policies
Regulatory Relevance Classification
Every audit event is assigned a regulatory relevance level at creation time:
| Level | Description | Example Events |
|---|---|---|
critical |
SAR-level events, compliance decisions | Sanctions screening, case escalation |
high |
Compliance-adjacent decisions | KYC checks, credit approvals |
medium |
Standard business operations | BHI calculations, workflow runs |
low |
Informational events | Feature flag toggles, config changes |
none |
Internal debugging | Health checks, cache operations |
Retention Categories
Each relevance level maps to a retention category with a defined retention period:
| Category | Retention Period | Applies To |
|---|---|---|
permanent |
Never deleted | critical relevance events |
extended |
7+ years | high relevance events |
standard |
5 years | medium relevance events |
short |
2 years | low relevance events |
temporary |
30 days | none relevance events |
Retention Worker
The retention worker runs as a background cron job and purges expired events based on their retentionCategory and createdAt timestamp.
Safety rules:
- Events with
regulatoryRelevance: 'critical'are never purged, regardless of age - Events with
retentionCategory: 'permanent'are never purged - Purge operations are logged in the audit trail
Querying Retention Policy
The current retention configuration is available via the API:
GET /api/v1/audit/retention
Authorization: Bearer <token>
Response:
{
"policy": {
"permanent": "indefinite",
"extended": "7 years",
"standard": "5 years",
"short": "2 years",
"temporary": "30 days"
},
"purgePlan": {
"nextRun": "2026-02-20T00:00:00Z",
"estimatedPurgeCount": 1250
},
"note": "Events with critical regulatory relevance are never purged"
}
Implemented in packages/audit/src/retention.ts and packages/audit/src/retention-worker.ts at commit 4b572c2.