ErasureDocs
Core Concepts

Rights requests and deletion jobs

Cases, verification, worker jobs, and honest outcomes for erasure.

Rights requests and deletion jobs

What it is

A Rights request (engineering: Case) is the aggregate for one subject privacy obligation. In v1 the fulfillment type is DELETE. Starting a verified request enqueues a durable job (rights.delete) executed by a worker.

Why it exists

A deletion request is not an email. It needs verification, multi-system execution, retries, partial-failure honesty, and exportable proof.

Lifecycle

         ┌─ cancel ─────────────────────────────┐
         │                                      ▼
OPEN ────┼── start ──► IN_PROGRESS ──► COMPLETED
(verify) │                  │
         │                  └── fail ──► FAILED
FieldValues
StatusOPEN, IN_PROGRESS, COMPLETED, FAILED, CANCELLED
VerificationUNVERIFIED, VERIFIED, FAILED (orthogonal to status)

Start requires:

  1. Verification VERIFIED
  2. Start readiness: enabled Systems; map-backed systems need ≥1 DELETE entity with identifiers

How cases are created

PathBehaviour
Public intakeOTP challenge → case created only after verify (VERIFIED, verifiedVia: otp where recorded)
OperatorConsole create; operator may mark VERIFIED (trust-the-operator, not OTP proof)

OTP: hashed at rest, single-use, attempt limits, rate limited; production email via Resend (or log provider in non-prod). Never return OTP codes in API JSON in production.

Execution

Start
  → enqueue Job (rights.delete)
  → Worker claims (SKIP LOCKED)
  → Fulfill each enabled System (Data Map for SQL)
  → COMPLETED or FAILED (+ partial honesty in timeline/Evidence)
OutcomeMeaning
CompletedFulfilment path finished successfully for enabled systems
FailedPermanent or exhausted failure. See Activity
PartialSome systems OK, some failed. Recorded honestly where product supports it
RetryRetryable errors requeue with backoff

Worker is required: bun run worker (or your deploy’s worker process). Without it, jobs stay pending.

What jobs are not

  • Not direct "delete from the UI" SQL
  • Not ACCESS/CORRECT product types (not first-class yet)
  • Not fulfillment against systems you never connected