PD-240 — Rétrospective¶
1. Contexte¶
| Champ | Valeur |
|---|---|
| Story ID | PD-240 |
| Titre | Suppression de compte utilisateur |
| Domaine | auth-identity |
| Projet | backend |
| Date complétion | 2026-02-07 |
| Verdict | GO avec réserves |
2. Métriques¶
| Métrique | Valeur |
|---|---|
| Durée totale | 1 jour |
| Itérations Gate 3 | 3 |
| Itérations Gate 5 | 2 |
| Itérations Gate 8 | 2 |
| Écarts corrigés | 4 |
| Écarts acceptés (dette) | 5 |
3. Learnings clés¶
-
Fail-open Redis documenté : Les protections Redis (blacklist, rate limit) dégradent gracieusement si Redis est indisponible. Compromis de disponibilité accepté.
-
Purge RGPD transactionnelle : La purge doit couvrir toutes les tables liées à l'utilisateur (user, device_trust, key_envelopes), pas seulement la table principale.
-
One-time token via Redis blacklist : SHA-256 du token comme clé Redis, TTL = durée de vie du token.
-
Buffer.alloc(0) pour bytea NOT NULL : Permet d'anonymiser des champs bytea sans violer la contrainte NOT NULL.
4. Patterns applicables¶
Pattern existant : Fail-closed par défaut¶
Malgré le fail-open documenté, la règle générale reste fail-closed.
Nouveau pattern : Purge RGPD multi-tables¶
await this.dataSource.transaction(async (manager) => {
await manager.delete(KeyEnvelope, { userId });
await manager.delete(DeviceTrust, { userId });
await manager.update(User, { id: userId }, {
email: anonymizedEmail,
srpVerifier: Buffer.alloc(0), // Empêche toute authentification
deletedAt: new Date(),
});
});
Nouveau pattern : Registre RGPD centralisé¶
Maintenir une liste des tables à purger :
# rgpd-registry.yaml
user_tables:
- table: user
action: anonymize
- table: device_trust
action: delete
- table: key_envelopes
action: delete
5. Signal CLAUDE.md¶
Priorité haute : Documenter le pattern de purge RGPD.
### Purge RGPD — Multi-tables obligatoire (2026-02-XX)
Avant d'implémenter une purge RGPD Article 17 :
1. Lister exhaustivement les tables avec FK vers userId
2. Définir l'action par table (delete vs anonymize)
3. Exécuter dans une transaction atomique
4. Vérifier que l'anonymisation empêche toute réidentification
**Registre** : `docs/rgpd/tables-registry.yaml`
6. Conclusion¶
PD-240 a livré la suppression de compte avec purge RGPD multi-tables. Les zones d'ombre Gate 8 v2 ont exigé une analyse code source pour clarifier les comportements fail-open. Le pattern de purge RGPD transactionnelle est critique et doit être appliqué à toutes les données utilisateur.
Rétrospective générée 2026-02-19 (Étape 10 batch auth-identity)