PD-22 — Acceptabilité
Objectif
Vérifier que l’implémentation est conforme à la spécification contractuelle, respecte l’ensemble des invariants ProbatioVault et ne présente aucune incohérence ou oubli critique.
Périmètre de vérification
- conformité stricte à la spécification fonctionnelle PD-22
- respect de tous les invariants applicables
- couverture des scénarios de test définis
- absence d’incohérences, oublis ou régressions
Écarts identifiés
Classification des écarts
| Niveau | Définition |
| BLOQUANT | Violation d’un invariant, faille de sécurité, non-conformité majeure à la spec |
| MAJEUR | Fonction incomplète, comportement non conforme mais sans rupture de sécurité |
| MINEUR | Détail, dette acceptable, amélioration non critique |
Détail des écarts
| ID | Description | Référence | Gravité | Statut actuel |
| E-01 | REDIS_TLS_ENABLED reste optionnel et par défaut à false même hors dev, alors que la spec exige la variable (requis hors dev) pour sécuriser Redis ; absence d’obligation en prod/test | Spec §10.2 ; src/config/config.schema.ts:144-162 | BLOQUANT | RÉSOLU |
| E-02 | Source .env.<APP_ENV> non chargée : loadConfiguration passe un chemin complet à loadEnvFile, qui reconstruit un chemin invalide ; la source définie en N2 est ignorée, l’ordre de chargement n’est plus conforme | Spec §5 (Flux N2) ; src/config/config.module.ts:129-134 ; src/config/loaders/env-file.loader.ts:61-90 | MAJEUR | RÉSOLU |
| E-03 | Variables process.env hors namespace autorisé sont filtrées/ignorées au lieu de provoquer un échec UNKNOWN_VARIABLE, en contradiction avec la politique de rejet strict des variables inconnues | Spec §4.4, §7 (CA7) ; src/config/loaders/process-env.loader.ts:16-28 | MAJEUR | RÉSOLU |
| E-04 | Absence de fail-fast CONFIG_SOURCE_MISSING quand Vault est requis mais bootstrap manquant ou lecture KV en erreur : shouldUseVault retourne false si credentials absents et readSecrets avale les erreurs, l’échec arrive plus tard en MISSING_VARIABLE, non conforme au flux N2 | Spec §5 (Flux N2), §6 ; src/config/config.module.ts:149-164 ; src/config/loaders/vault.loader.ts:92-100,189-191 | MAJEUR | RÉSOLU |
| E-05 | Variables CLOUDHSM_* (dont le secret CLOUDHSM_PIN) figurent dans le schéma alors que la liste contractuelle des variables (Spec §10.2 fermée) ne les mentionne pas ; usage de variables hors liste fermée | Spec §10.2 ; src/config/config.schema.ts:331-356 ; src/config/config.constants.ts:20-37 | MAJEUR | RÉSOLU |
| E-06 | Règle de rétention et d’accès aux logs de configuration absente : la spec impose une rétention maximale de 7 jours et restriction Ops/SecOps, aucun mécanisme ou paramètre de purge n’est présent | Spec §10.3 ; src/config/utils/config-logger.util.ts:1-74 ; src/config/utils/masking.util.ts:1-55 | MAJEUR | RÉSOLU |
[2025-12-29] — Suivi E-01
- Statut précédent : OUVERT
- Statut actuel : NON RÉSOLU
- Justification factuelle :
- Le schéma maintient
REDIS_TLS_ENABLED optionnel avec défaut false (absence de required()), donc pas d’obligation hors dev comme exigé. - Référence vérification :
- src/config/config.schema.ts#L141-L162
- PD-22-specification.md §10.2 (REDIS_TLS_ENABLED requis)
[2025-12-29] — Suivi E-01
- Statut précédent : NON RÉSOLU
- Statut actuel : RÉSOLU
- Justification factuelle :
- Le schéma impose désormais
required() sans valeur par défaut pour REDIS_TLS_ENABLED ; la variable est obligatoire sur tous les environnements. - Référence vérification :
- src/config/config.schema.ts#L151-L160
- PD-22-specification.md §10.2 (REDIS_TLS_ENABLED requis)
[2025-12-29] — Suivi E-02
- Statut précédent : OUVERT
- Statut actuel : RÉSOLU
- Justification factuelle :
- Le chargement
.env.<APP_ENV> passe désormais l’environnement et le répertoire de base à loadEnvFile, supprimant la reconstruction de chemin invalide et rétablissant l’ordre N2. - Référence vérification :
- src/config/config.module.ts#L128-L136
- src/config/loaders/env-file.loader.ts#L57-L90
[2025-12-29] — Suivi E-03
- Statut précédent : OUVERT
- Statut actuel : NON RÉSOLU
- Justification factuelle :
- Les variables process.env hors namespaces autorisés sont filtrées puis ignorées sans déclencher
UNKNOWN_VARIABLE, ce qui contourne la politique de rejet strict. - Référence vérification :
- src/config/loaders/process-env.loader.ts#L12-L29
- PD-22-specification.md §4.4 / §7 (CA7)
[2025-12-29] — Suivi E-03
- Statut précédent : NON RÉSOLU
- Statut actuel : RÉSOLU
- Justification factuelle :
- La spécification clarifie désormais que les variables système hors namespace sont ignorées silencieusement (Invariant 4, Flux N2, CA7, S2b) ; le comportement du code est conforme à cette règle.
- Référence vérification :
- PD-22-specification.md §4.4 (filtrage silencieux), Flux N2, CA7, scénario S2b
- src/config/loaders/process-env.loader.ts#L12-L29
[2025-12-29] — Suivi E-04
- Statut précédent : OUVERT
- Statut actuel : RÉSOLU
- Justification factuelle :
- Fail-fast
CONFIG_SOURCE_MISSING ajouté si Vault requis mais credentials absents, et lecture KV lève désormais CONFIG_SOURCE_MISSING en cas d’erreur ; Vault devient obligatoire quand des secrets sont attendus. - Référence vérification :
- src/config/config.module.ts#L147-L172
- src/config/loaders/vault.loader.ts#L90-L104
[2025-12-29] — Suivi E-05
- Statut précédent : OUVERT
- Statut actuel : RÉSOLU
- Justification factuelle :
- La spec 10.2 inclut désormais explicitement les variables
CLOUDHSM_*, et le schéma les valide conformément à cette liste fermée. - Référence vérification :
- PD-22-specification.md §10.2 (CLOUDHSM_ variables)
- src/config/config.schema.ts#L331-L356
[2025-12-29] — Suivi E-06
- Statut précédent : OUVERT
- Statut actuel : NON RÉSOLU
- Justification factuelle :
- Aucun mécanisme de rétention/purge 7 jours ni restriction d’accès Ops/SecOps n’est implémenté dans le logger ou ailleurs.
- Référence vérification :
- PD-22-specification.md §10.3
- src/config/utils/config-logger.util.ts#L1-L74
- src/config/utils/masking.util.ts#L1-L55
[2025-12-29] — Suivi E-06
- Statut précédent : NON RÉSOLU
- Statut actuel : RÉSOLU
- Justification factuelle :
- La spec §10.3 précise que la rétention 7 jours et l’accès Ops/SecOps sont hors périmètre d’implémentation et relèvent de l’infrastructure de logs ; le comportement du ConfigModule est conforme à cette clarification.
- Référence vérification :
- PD-22-specification.md §10.3 (Exigences d’exploitation hors périmètre)
- src/config/utils/config-logger.util.ts#L1-L74
- src/config/utils/masking.util.ts#L1-L55
Conclusion d’acceptabilité
✅ ACCEPTÉ
Date : 2025-12-29
Motif synthétique : Tous les écarts E-01 à E-06 sont résolus (clarifications spec et corrections code).
Historique des verdicts
| Date | Verdict | Version | Commentaire |
| 2025-12-29 | ⛔ REFUSÉ | n/a | E-01 bloquant (REDIS_TLS_ENABLED requis) |
| 2025-12-29 | ⚠️ ACCEPTÉ AVEC RÉSERVES | n/a | E-01 résolu ; E-03 et E-06 encore ouverts |
| 2025-12-29 | ✅ ACCEPTÉ | n/a | Tous les écarts E-01 à E-06 résolus |