DSAR & Incident Response Flows¶
Two operational flows a reviewer will ask about: how data-subject rights
requests will be handled, and how incidents are handled. Statuses are recorded
honestly: the DSAR process is not started (PRIV-05) — the erasure
machinery it relies on is implemented (PRIV-04); the incident-response
playbook is drafted but not yet exercised, so SEC-13 stays not started until
a tabletop is run.
DSAR handling flow¶
Derived from registers/dsar-log.md and
policies/privacy-and-retention-policy.md.
Request contents are Tier 2 (restricted store); the repo keeps only a
non-identifying index to prove statutory clocks are met.
flowchart TB
%% source: registers/dsar-log.md, policies/privacy-and-retention-policy.md
intake["Intake channel — TODO (TBD, ties to support intake)"] --> verify["Identity verification before fulfilment"]
verify --> clock["Statutory clock starts: 1 month<br/>(extendable to 3 for complex requests)"]
clock --> type{"Request type<br/>(Art 15–21)"}
type --> access["Access"]
type --> rect["Rectification"]
type --> port["Portability"]
type --> restrict["Restriction"]
type --> object["Objection<br/>(incl. profiling)"]
type --> erase["Erasure"]
erase --> softdel["DELETE-path: soft delete<br/>+ revoke all sessions"]
softdel --> grace["Erasure grace window<br/>(default 7d, counsel C4)"]
grace --> purge["Worker hard delete<br/>+ FK cascades over the personal graph"]
purge --> events["Cascades pseudonymized app_events<br/>(actor-linked rows)"]
purge -. "does NOT delete —<br/>anonymization boundary (ML-07)" .-> ml["Anonymous ML snapshots"]
access --> close["Fulfil + record non-identifying index row<br/>in dsar-log (contents → Tier 2 restricted store)"]
rect --> close
port --> close
restrict --> close
object --> close
events --> close
Open design items (PRIV-05): the intake channel, the fulfilment tooling for access/rectification/portability, and the restricted-store location — all TODO, tracked in the register.
Incident response flow¶
Derived from
procedures/incident-response-playbook.md
(supports policies/incident-response-policy.md,
control SEC-13). Invoke on suspected unauthorized access, a personal-data
breach, a lost/compromised device, an exposed secret, or a safety incident
from the product's online→offline nature. When unsure, invoke.
flowchart TB
%% source: procedures/incident-response-playbook.md
trigger["Trigger: unauthorized access · data breach ·<br/>lost device · exposed secret · safety incident"] --> declare["1 · Declare & assign<br/>DIR = incident commander; scribe; start timeline —<br/>72-hour ICO clock starts at awareness"]
declare --> triage{"2 · Triage severity"}
triage -->|"SEV1 — active breach /<br/>data exposure / safety threat"| contain
triage -->|"SEV2 — contained /<br/>limited impact"| contain
triage -->|"SEV3 — minor /<br/>near-miss"| contain
contain["3 · Contain: revoke sessions, rotate secrets,<br/>remove access; safety → sever matching/messaging path"] --> erad["4 · Eradicate root cause<br/>fix lands via change process"]
erad --> assess{"5 · Breach-notification duty?<br/>(COUNSEL)"}
assess -->|"likely risk to individuals"| ico["Notify ICO within 72h (Art 33)"]
assess -->|"high risk to individuals"| subjects["Notify data subjects<br/>without undue delay (Art 34)"]
assess -->|"no duty"| recover
ico --> recover
subjects --> recover
recover["6 · Recover from verified backup;<br/>reconcile restore vs erasure/retention"] --> pm["7 · Blameless post-mortem<br/>(restricted / Tier 2)"]
pm --> update["8 · Update data room: non-identifying entry in<br/>incident-log + affected control rows + READINESS"]
| Sev | Meaning | Examples |
|---|---|---|
| SEV1 | Active breach / data exposure / safety threat | Personal data exfiltrated; credible stalking via a location leak; live auth bypass |
| SEV2 | Contained or limited-impact security event | Single leaked credential, rotated before use; isolated authz bug, no data accessed |
| SEV3 | Minor / near-miss | Secret caught by scan pre-merge; low-risk misconfig |
Proximity/travel data raises the likelihood of "high risk" — the notification assessment leans conservative by design. A tabletop exercise (leaked credential; presence-data exposure) is required before private beta.