PD-31 — Rétrospective¶
1. Contexte¶
| Champ | Valeur |
|---|---|
| Story ID | PD-31 |
| Titre | Audit log des authentifications |
| Domaine | auth-identity |
| Projet | backend |
| Date complétion | 2026-02-16 |
| Verdict | GO |
2. Métriques¶
| Métrique | Valeur |
|---|---|
| Durée totale | ~27 heures |
| Gates traversées | 3/3 (GO du premier coup) |
| Score moyen Gate 8 | 8.18/10 |
| Tests créés | ~100 |
| Coverage global | 80%+ branches |
| Invariants | 8/8 |
3. Learnings clés¶
-
Coverage marge 1-2% : Le coverage était à 79.93%, juste sous le seuil. Viser 82% pour avoir une marge de sécurité.
-
Sonar local avant push : 16 code smells + 3 security hotspots ont bloqué le pipeline. Lancer
npm run sonar:checklocalement. -
Batcher les commits : 3 pipelines lancés en parallèle ont saturé les runners (OOM). Toujours batcher les corrections avant push.
-
RFC 5737 TEST-NET-3 : Pour les exemples Swagger, utiliser
203.0.113.1(RFC 5737 TEST-NET-3) au lieu d'IPs privées comme192.168.1.100.
4. Patterns applicables¶
Pattern existant : Hash chain avec advisory locks¶
Pour éviter les race conditions sur le séquençage des logs :
await this.dataSource.query(`SELECT pg_advisory_xact_lock($1)`, [HASH_CHAIN_LOCK_ID]);
// Insérer le log avec hash du précédent
Nouveau pattern : Risk scoring fail-open¶
Le risk scoring ne doit pas bloquer l'authentification :
try {
const score = await this.riskScoreService.calculate(context);
return { score, anomalies };
} catch (error) {
return { score: DEFAULT_SCORE, anomalies: [], error: true };
}
5. Signal CLAUDE.md¶
Priorité haute : Documenter les seuils de coverage.
### Coverage — Marge de sécurité obligatoire (2026-02-XX)
Le seuil CI est 80%. En pratique :
- **Viser 82%** pour absorber les variations entre runs
- **Vérifier avant push** avec `npm run test:cov`
- **Ajouter des tests hors scope** si nécessaire (autres modules)
Le coverage global inclut tout le codebase, pas seulement la story en cours.
6. Conclusion¶
PD-31 a livré un système d'audit log robuste avec hash chain et détection d'anomalies. Les 3 gates ont été passées du premier coup grâce à une spécification complète et 43 code contracts bien définis. Les difficultés (coverage 79.93%, Sonar) sont documentées comme learnings pour les futures stories.
Rétrospective générée 2026-02-19 (Étape 10 batch auth-identity)