docs(adr): add retention state machine for erasure and legal hold#2
docs(adr): add retention state machine for erasure and legal hold#2irelia0nerf wants to merge 2 commits into
Conversation
There was a problem hiding this comment.
Code Review
This pull request introduces ADR-0008, which defines a retention state machine for managing data erasure, legal holds, and regulatory retention. The architecture separates the immutable evidence store from a mutable key and retention plane to support privacy requirements like GDPR while maintaining audit integrity. Review feedback highlights the need for high-durability controls for the key store to prevent accidental data loss, the addition of transition paths for when legal holds are lifted, and the use of deterministic schema-level validation for the airlock rule. There is also a suggestion to clarify terminology regarding operator inspection controls.
|
|
||
| ```text | ||
| immutable evidence store | ||
| mutable key and retention plane |
There was a problem hiding this comment.
The decision to move content keys to a separate mutable plane makes this component a critical dependency for data accessibility. If the key store is lost or corrupted, all associated evidence becomes permanently unrecoverable (unintended cryptographic erasure). Given the high-assurance requirements of the evidence store, the ADR should explicitly require the key plane to have equivalent durability and recovery controls (RPO/RTO) to prevent accidental data loss.
| SEALED_IMMUTABLE | ||
| RETENTION_ACTIVE | ||
| ERASURE_REQUESTED | RETENTION_EXPIRED | LEGAL_HOLD_ACTIVE | REGULATORY_REVIEW | ||
| SHRED_APPROVED | SHRED_BLOCKED_BY_LEGAL_HOLD | SHRED_BLOCKED_BY_REGULATORY_RETENTION | MANUAL_DPO_LEGAL_REVIEW |
There was a problem hiding this comment.
The state machine defines states for when shredding is blocked by legal hold or regulatory retention, but it lacks a transition path for when these blocks are lifted. Without an explicit 'Hold Released' or 'Re-evaluation' state, records may remain stuck in a blocked state indefinitely after the legal necessity has passed. Consider clarifying the return path to an active or shred-ready state once a hold is removed.
|
|
||
| No artifact may be committed to immutable evidence before quarantine validation succeeds. | ||
|
|
||
| The airlock must verify absence of raw sensitive payloads, plaintext PII, content keys, wrapped content keys and reversible lookup tables. |
There was a problem hiding this comment.
'Verify absence' can be interpreted as non-deterministic scanning (DLP). Given the requirements in ADR-0001 for schema-level restrictions, it would be clearer to specify that the airlock enforces these constraints via schema validation to ensure deterministic rejection of non-compliant artifacts.
| The airlock must verify absence of raw sensitive payloads, plaintext PII, content keys, wrapped content keys and reversible lookup tables. | |
| The airlock must enforce schema-level rejection of raw sensitive payloads, plaintext PII, content keys, wrapped content keys and reversible lookup tables. |
| - Every retention transition is signed and recoverable. | ||
| - Every erasure request produces a retention decision record. | ||
| - Analytical indexes are rebuildable from state, receipts and sealed evidence. | ||
| - Operator explanation must return current state, reason code, policy hash, authority reference and pending action. |
There was a problem hiding this comment.
'Operator explanation' appears to be a typo or an ambiguous term in this context. Based on the requirement to return state and reason codes, 'Operator inspection' or 'Status query' would be more descriptive of the intended administrative control.
| - Operator explanation must return current state, reason code, policy hash, authority reference and pending action. | |
| - Operator inspection must return current state, reason code, policy hash, authority reference and pending action. |
Summary
Adds ADR-0008 defining the retention state machine for erasure, legal hold and regulatory-retention conflicts.
Decision Scope
adr/README.mdto list ADR-0008.Validation
This ADR requires implementations to prove that: