PD-23 — Rétrospective¶
1. Contexte¶
| Champ | Valeur |
|---|---|
| Story ID | PD-23 |
| Titre | Inscription utilisateur Zero-Knowledge (SRP-6a) |
| Domaine | auth-identity |
| Projet | backend |
| Date complétion | 2025-12-27 |
| Verdict | ACCEPTÉ |
2. Métriques¶
| Métrique | Valeur |
|---|---|
| Passes de revue | 3 |
| Écarts BLOQUANTS | 2 (E-01, E-02) |
| Écarts MAJEURS | 3 (E-03, E-04, E-05) |
| Écarts MINEURS | 2 (E-06, E-07) |
| Couverture branches | 80.06% |
3. Learnings clés¶
-
Pattern Outbox atomique : L'insertion dans
email_outboxtransactionnelle avec la création de l'utilisateur garantit l'atomicité sans perdre de données en cas d'échec SMTP. -
TODO = dette = ticket : Les commentaires
// TODOsans ticket associé ont causé les écarts E-01 et E-05. Tout TODO doit référencer un ticket Jira. -
Stockage distribué par défaut : Le rate limiting en mémoire a fonctionné en développement mais était incompatible avec la production multi-instances.
-
Race condition UNIQUE : Le cas de course (deux inscriptions simultanées même email) doit être géré via rattrapage du code PostgreSQL 23505.
4. Patterns applicables¶
Pattern existant : Anti-énumération multi-couches¶
- Réponse HTTP 200 identique quel que soit l'état de l'email
- Timing mitigation (délai aléatoire 50-150ms)
- Gestion des violations UNIQUE PostgreSQL
Nouveau pattern : Pattern Outbox pour atomicité¶
Pour tout flux asynchrone critique (email, notification) :
await this.dataSource.transaction(async (manager) => {
await manager.save(User, user);
await manager.save(EmailOutbox, { to: email, template: 'validation', token });
});
// Worker séparé pour l'envoi réel
5. Signal CLAUDE.md¶
Priorité haute : Documenter le pattern Outbox.
### Pattern Outbox — Flux asynchrones atomiques (2026-02-XX)
Pour tout effet de bord asynchrone (email, webhook, notification) :
1. Insérer dans une table `*_outbox` dans la même transaction que les données métier
2. Worker séparé pour consommer et envoyer
3. Retry automatique en cas d'échec envoi
Évite la perte de données si le service externe est indisponible.
6. Conclusion¶
PD-23 a nécessité 3 itérations de revue mais a établi des patterns critiques pour l'inscription ZK-SRP. Les principaux learnings (Outbox, TODO=ticket, stockage Redis) sont applicables à toutes les stories auth-identity. L'architecture SRP-6a garantit que le mot de passe n'est jamais transmis au serveur.
Rétrospective générée 2026-02-19 (Étape 10 batch auth-identity)