PD-19 — Plan Review (Gate 5 — AMBIGUITY)¶
Point 1¶
Type : Couverture insuffisante Référence : PD-19-plan.md → Résumé / Composants ; PD-19-specification.md INV-03 ; PD-19-code-contracts.yaml cors_config Description : Le plan ne précise pas explicitement l'implémentation de Access-Control-Allow-Credentials: true ni des en-têtes exposés X-Correlation-Id, Retry-After; le contrat CORS résumé mentionne origines/methods/headers/maxAge seulement. Impact : Non-conformité CORS contractuelle, risque d'échec sur preflight/réponses simples malgré origine autorisée. Gravité : Bloquant
Point 2¶
Type : Ambiguïté Référence : PD-19-plan.md → Composants (cors.middleware.ts) ; PD-19-specification.md INV-05 ; PD-19-tests.md TC-NOM-04, TC-ERR-01 Description : Le plan ne décrit pas le comportement déterministe de refus explicite des preflight (OPTIONS) pour origine non autorisée, seulement la création d'un middleware CORS. Impact : Implémentation potentiellement non déterministe selon défaut framework/proxy, avec refus implicites non traçables. Gravité : Majeur
Point 3¶
Type : Couverture insuffisante Référence : PD-19-plan.md → Composants (security-headers.middleware.ts) ; PD-19-specification.md INV-01, INV-11 ; PD-19-tests.md TC-NOM-02, TC-ERR-02 Description : La logique conditionnelle HSTS (prod/test obligatoire, dev uniquement en HTTPS) et Cache-Control: no-store ciblé (auth/PII/401/403) n'est pas détaillée dans le plan. Impact : Risque de headers trop larges ou incomplets, et non-respect des conditions contextuelles attendues en tests. Gravité : Majeur
Point 4¶
Type : Risque non mitigé Référence : PD-19-plan.md → Points d'attention identifiés ; PD-19-specification.md INV-09 ; PD-19-tests.md TC-NOM-06 Description : Le plan prévoit des événements d'audit mais ne spécifie pas le schéma de log JSON requis (UTC ISO-8601, correlation id, env, décision CORS/limitation, IP, endpoint, statut) ni la stratégie de rétention 90 jours. Impact : Non-vérifiabilité de conformité opérationnelle et risque d'échec d'audit post-déploiement. Gravité : Bloquant
Point 5¶
Type : Incohérence Plan↔Tests Référence : PD-19-plan.md → Points d'attention identifiés (DIV-01-v2) ; PD-19-tests.md TC-ERR-02 ; Verdict Gate 3 DIV-01-v2 Description : La réserve DIV-01-v2 est citée mais aucune action test explicite n'est planifiée pour étendre TC-ERR-02 aux refus CORS et réponses 429 avec security headers. Impact : Réserve Gate 3 probablement non levée, risque de rejet en Gate ⅝ faute de preuve. Gravité : Majeur
Point 6¶
Type : Incohérence Plan↔Tests Référence : PD-19-plan.md → Points d'attention identifiés (DIV-02-v2) ; PD-19-tests.md TC-ERR-03 ; Verdict Gate 3 DIV-02-v2 Description : La qualification "résolution IP proxy" en test d'intégration n'est pas traduite en tâches concrètes (scénarios multi-proxy/trusted proxies). Impact : Couverture incomplète de la clé de comptage IP, risque de faux positifs/faux négatifs de limitation. Gravité : Majeur
Point 7¶
Type : Risque non mitigé Référence : PD-19-plan.md → Ordre middlewares + Points d'attention identifiés ; PD-19-specification.md INV-07, INV-08 Description : Le plan conserve GlobalRateLimitMiddleware et des Specific Rate Limit Guards sans stratégie d'arbitrage (priorité, exclusion, format 429 unique). Impact : Double limitation possible, réponses 429 hétérogènes, rupture d'uniformité contractuelle. Gravité : Majeur
Point 8¶
Type : Faisabilité Référence : PD-19-plan.md → Ordre middlewares ; architecture NestJS (pipeline middleware/guards) ; PD-19-specification.md INV-12 Description : La section "Ordre middlewares" mélange middlewares et guards dans une chaîne unique, ce qui introduit une ambiguïté d'exécution réelle dans NestJS. Impact : Risque d'implémentation incorrecte de l'ordre effectif (ex. attentes erronées sur headers/CORS avant guard). Gravité : Mineur
Point 9¶
Type : Ambiguïté Référence : PD-19-plan.md → Composants (config.schema.ts modifié) ; PD-19-specification.md ERR-05 ; PD-19-tests.md TC-ERR-05 Description : Le plan n'explicite pas les règles de validation "fail-fast uniquement" (quels champs invalides, quelles erreurs de démarrage) au-delà d'une modification de schéma. Impact : Comportement de démarrage non prévisible, possible dérive vers fallback silencieux interdit. Gravité : Majeur
Point 10¶
Type : Couverture insuffisante Référence : PD-19-plan.md → Composants / Ordre middlewares ; PD-19-tests.md TC-NOM-05, TC-ERR-02 ; PD-19-specification.md INV-11 Description : Le plan ne décrit pas de stratégie explicite pour garantir les security headers sur toutes erreurs 404/405/500 et erreurs produites hors middlewares applicatifs. Impact : Couverture partielle des chemins d'erreur, risque de non-conformité INV-11 en production réelle. Gravité : Majeur
Synthèse¶
- Bloquant : 2
- Majeur : 7
- Mineur : 1
- Risque principal : la couverture contractuelle est annoncée "complète" dans les code contracts, mais plusieurs exigences restent non opérationnalisées dans le plan (CORS contractuel complet, preuve tests réserves Gate 3, observabilité/rétention INV-09).
Document produit par le workflow de gouvernance IA — Gate 5 Phase 1 (ChatGPT gov-factual) Date : 2026-02-09