Aller au contenu

PD-19 — Rétrospective

1. Contexte

Champ Valeur
Story ID PD-19
Titre CORS et Security Headers
Domaine backend-core
Projet backend
Date complétion 2026-02-10
Verdict GO (Gate 8)

2. Métriques

Métrique Valeur
Temps total 18.5h (vs 14h estimé, +32%)
Itérations gates 5 (G3: 2, G5: 2, G8: 1)
Tests contractuels 61/61 PASS
Invariants couverts 12/12
Écarts totaux 21 (ECT: 9, DIV: 6, AMB: 4, SEC: 2)

Scores de convergence

Gate Score v1 Score final Delta
Gate 3 5.25/10 7.50/10 +2.25
Gate 5 7.75/10 8.50/10 +0.75
Gate 8 8.0/10 8.0/10 0

3. Learnings clés

  • Paramètres contractuels explicites : Les critères d'acceptation non mesurables (socle headers sans liste, CORS sans origines) sont les premières causes de rejet Gate 3.

  • Headers sur erreurs = res.on('finish') : Les security headers doivent être appliqués même sur les réponses d'erreur. Le pattern res.on('finish') garantit cette couverture.

  • Trust proxy = surface d'attaque : La résolution IP via X-Forwarded-For sans validation de la chaîne de confiance permet le bypass du rate limiting.

  • Faux positifs reviews LLM : Les faux positifs Gate 5 étaient causés par la lecture de résumés plutôt que des documents complets.

  • Rétention logs = config infra : La rétention de 90 jours n'est pas codée dans l'application mais dans ELK lifecycle.

4. Patterns applicables

Pattern existant : Fail-fast config sécurité

Cohérent avec PD-22, PD-240 : la configuration CORS/headers doit échouer au démarrage si invalide.

Nouveau pattern : res.on('finish') pour headers universels

Pour garantir les security headers même sur exceptions non catchées :

middleware(req, res, next) {
  res.on('finish', () => {
    // Vérifier/ajouter headers ici
  });
  next();
}

Nouveau pattern : Trust proxy + TRUSTED_PROXIES

Pour le rate limiting avec proxy : 1. Configurer app.set('trust proxy', trustProxyConfig) 2. Variable env TRUSTED_PROXIES avec liste explicite 3. Validation stricte de X-Forwarded-For

5. Signal CLAUDE.md

Priorité haute : Documenter le pattern Trust proxy.

### Trust proxy et rate limiting (2026-02-XX)

La résolution IP via X-Forwarded-For sans validation permet le bypass du rate limiting.

**Checklist obligatoire** :
1. Configurer `trust proxy` de manière restrictive (pas `true` global)
2. Variable `TRUSTED_PROXIES` avec liste explicite des IPs proxy
3. Validation que l'IP client vient bien de la chaîne de confiance

6. Conclusion

PD-19 est la story la plus documentée du batch avec des métriques complètes. Les 21 écarts identifiés ont permis d'améliorer significativement les prompts de spec et de review. Les patterns res.on('finish') et Trust proxy sont des contributions importantes pour les futures stories sécurité.


Rétrospective générée 2026-02-19 (Étape 10 batch backend-core)