Opt-out processed within regulatory window
Why it matters
CAN-SPAM §7704(a)(4) gives you 10 business days to honor an opt-out request — but without a processed_at timestamp, you cannot prove you met that window for any specific request. GDPR Article 7(3) requires withdrawal to be honored without delay. CCPA §1798.120 imposes similar obligations. CWE-778 (Insufficient Logging) applies: if opt-out processing timing is not measured and recorded, you have no way to detect when a queue backlog is pushing processing into violation territory, and no evidence of compliance when a regulator asks. The absence of timestamps turns a solvable reliability problem into an undetectable and undefendable one.
Severity rationale
Critical because without `processed_at` timestamps and queue depth alerting, the system cannot demonstrate CAN-SPAM §7704(a)(4) compliance for any specific opt-out request, and queue failures accumulate silently until a regulator asks for evidence.
Remediation
Add processed_at and processing_ms fields to opt-out records and write them at worker completion. Set a queue monitoring alert at 2 hours — well inside the 10-business-day CAN-SPAM ceiling:
// In your opt-out worker (src/workers/optout.ts)
queue.process('process-optout', async (job) => {
const { contactId, scope, requestedAt, recordId } = job.data
// ... suppression cascade ...
await db.optOutRecord.update({
where: { id: recordId },
data: {
processedAt: new Date(),
processingMs: Date.now() - new Date(requestedAt).getTime()
}
})
})
Add a queue depth alert in your monitoring stack (Datadog, Grafana, BullMQ's getWaiting()) that fires if any opt-out job is older than 2 hours without processing. Document the alert threshold alongside the retention constants in src/lib/compliance/constants.ts.
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the Compliance & Consent Engine Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
External references
- ccpa · §1798.120 — Opt-out must be honoured within required timeframe
- gdpr · Art. 7(3) — Withdrawal shall not affect lawfulness of prior processing
- external · CAN-SPAM-§7704(a)(4) — CAN-SPAM Act — unsubscribe must be honoured within 10 business days
- cwe · CWE-778 — Insufficient logging — no processed_at timestamp means SLA cannot be measured
Taxons
History
- 2026-04-18·v1.0.0·Initial import from compliance-consent-engine·automated