risk-nexus/docs/regulatory/policies/RISK-POL-0002-retention-and-erasure.md
tegwick 5a7e4ac2d4 Review the overdue regulatory records
RISK-REG-0001: eight-year voucher period (BEG IV) confirmed against
secondary sources and §147 AO. RISK-POL-0009/0002: positions unchanged; new
restore evidence noted as partial. RISK-POL-0012: receiving duty still
unowned; issuing phase-in dates added, flagged for confirmation.
RISK-POL-0011: stays dormant.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 6903@bnt-lap001
Assistant-Session: 8319e8a8-ffa6-4eb3-b8bf-b29945628f89
2026-09-22 08:26:43 +02:00

80 lines
3.7 KiB
Markdown

---
id: RISK-POL-0002
type: legal-policy
title: "Retention and erasure"
regime: "GDPR Arts 5(1)(e), 17; HGB §257; AO §147"
status: part-active
activates_when: "any personal data is held — the commercial half (RISK-POL-0009) is already live"
owner: risk-nexus
written: "2026-08-20"
related: [RISK-POL-0009, RISK-REG-0001, RISK-F-0008]
cadence: 1h
clean_streak: 1
last_checked: "2026-09-22T06:26:12Z"
next_check: "2026-09-22T07:26:12Z"
checked_by: "worsch"
---
# RISK-POL-0002 — retention and erasure
Two duties pulling opposite ways, which is why they are one policy. Storage
limitation says keep it no longer than necessary; retention duties say keep it
for a fixed term; erasure says delete on request. A system that satisfies one
in isolation usually breaks another.
## The order of operations
1. **Is there a statutory retention duty?** (`RISK-POL-0009`.) If yes, the
record is kept for the term, and an erasure request does not defeat it —
Art 17(3)(b). The exemption is **per record**, not per system.
2. **Is there a live purpose?** If not, storage limitation (Art 5(1)(e))
requires deletion regardless of whether anyone asked.
3. **Has someone asked?** Then Art 17, minus whatever survives step 1 or an
Art 17(3) exemption, each of which must be identified per category rather
than claimed wholesale.
The periods per category are in `RISK-REG-0001`, with the reasoning and the
weak points named.
## What it requires of systems
- **Deletion must be possible.** Not scheduled, not intended — possible, and
demonstrated once. `RISK-F-0008` exists because `audit-core` established that
in their store it currently is not.
- **The real horizon is the maximum across co-residents.** A service declaring
twelve months on shared infrastructure achieves the longest retention of
anything sharing that infrastructure, including backups. Declared periods are
claims until that is established.
- **A commitment over cleartext defeats erasure.** A retained hash of a
low-entropy record is a confirmation oracle: destroying the key does not
erase content that can still be tested against a surviving commitment. Keyed
commitments (HMAC, per-subject salt) restore erasability — open with
`audit-core`.
- **Minimisation beats exemption.** Operator ruling, 2026-08-20: opaque subject
ids, agent identifiers where possible, operator credentials only where
necessary, policy decisions tracked to the responsible party. Data that never
arrives needs no ground, no exemption and no argument.
## Evidence that would show this is met
A retention schedule per category; a demonstrated deletion at expiry; a stated
and verified co-residency horizon; a demonstrated restore proving the retained
side works too.
None of those exist yet, and `RISK-F-0008` carries the gap.
**2026-09-22 review.** The position is unchanged and `RISK-F-0008` still
carries the gap. Two partial inputs have arrived since 2026-08-20:
- `audit-core` (AUDIT-WP-0008) states it declares nothing above the 30-day
`platform-pg` default and will not extend any co-resident's horizon. That is
a *stated* contribution to the co-residency horizon. It does not verify the
instance maximum, which also depends on the other co-residents and on backup
retention.
- Restores from the retained side are demonstrated for `apps-pg` and Forgejo
(RPF-WP-0029, RPF-WP-0038). That shows the retained side works, but it
proves no deletion at expiry.
## Reviews
- **2026-09-22** — clean check: Position unchanged; audit-core states a 30-day contribution (unverified instance maximum); restore evidence exists, no deletion evidence; F-0008 carries the gap. Cadence instant → 1h (1 clean in a row); next check 2026-09-22 07:26Z.