Aller au contenu

PD-22 — Rétrospective

1. Contexte

Champ Valeur
Story ID PD-22
Titre ConfigModule NestJS
Domaine backend-core
Projet backend
Date complétion 2025-12-29
Verdict ACCEPTÉ

2. Métriques

Métrique Valeur
Écarts identifiés 6 (E-01 à E-06)
Codes d'erreur 8 (ConfigErrorCode enum)
Schéma Joi ~350 lignes
Sources de config 4 (defaults → .env → process.env → Vault)

3. Learnings clés

  • Mocks masquent bugs d'intégration : L'écart E-02 (signature loadEnvFile) n'a été détecté qu'en revue d'acceptabilité car les tests unitaires mockaient la fonction.

  • Périmètre code vs infrastructure : Les exigences de rétention logs (E-06) relèvent de l'exploitation, pas du code applicatif. Cette distinction doit être explicite dans la spec.

  • Cohérence interne spec : Le namespace CLOUDHSM_ était autorisé (§10.1) mais aucune variable n'était listée (§10.2). Ce type d'incohérence génère des faux positifs.

  • Fail-fast explicite et testé : L'écart E-04 montrait que readSecrets retournait {} silencieusement. Le comportement fail-fast doit être vérifié par des tests dédiés.

4. Patterns applicables

Pattern existant : Fail-fast config

Cohérent avec PD-13, PD-14, PD-19 : la configuration critique doit échouer au démarrage si invalide.

Nouveau pattern : Masquage secrets configurable

const SECRET_KEYS = ['DATABASE_PASSWORD', 'VAULT_TOKEN', ...];
const SECRET_PLACEHOLDER = '***REDACTED***';

function maskSecrets(config: Record<string, any>): Record<string, any> {
  // Masquer récursivement les valeurs des clés sensibles
}

Nouveau pattern : Immutabilité config

Object.freeze() récursif sur la configuration pour éviter les mutations accidentelles.

5. Signal CLAUDE.md

Priorité haute : Documenter le pattern fail-fast Vault.

### Fail-fast Vault obligatoire (2026-02-XX)

Si `shouldUseVault=true` (ou absence de flag en prod) :
1. `readSecrets()` DOIT throw si Vault indisponible
2. Pas de fallback silencieux vers `{}`
3. Tests dédiés vérifiant le comportement fail-fast

L'écart E-04 de PD-22 montre que les fallbacks silencieux masquent les erreurs jusqu'en production.

6. Conclusion

PD-22 a livré un module de configuration robuste avec validation Joi stricte et masquage des secrets. Les 6 écarts identifiés soulignent l'importance des tests d'intégration (pas uniquement des mocks) et de la cohérence interne des specs. Le pattern fail-fast Vault est critique pour éviter les erreurs silencieuses en production.


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