PD-285 — Dossier de conformité Gate 3 (v1)¶
Date : 2026-03-14 Gate : CONFORMITY_CHECK Itération : v1 Dérogation Art. II : Confrontation produite par claude-p (fallback) — OpenCode en mode agentic > 27KB
1. Documents de référence¶
- PD-285-besoin.md (étape 0)
- PD-285-specification.md (étape 1)
- PD-285-tests.md (étape 2)
- PD-285-review-step3-v1.md (Phase 1 — Claude)
- PD-285-confrontation-step3-v1.md (Phase 2 — Claude fallback)
2. Synthèse des écarts¶
ECT-01 — Ambiguïté nommage storage.category_max_bytes vs maxSizeBytes (C-01 + C-02)¶
Type : AMB Criticité : MINEUR (reclassé depuis MAJEUR) Source : Review C-01/C-02 Confrontation : Non contesté, mais les deux documents utilisent les deux termes de manière cohérente dans leur contexte respectif Analyse : storage.category_max_bytes est le nom du paramètre de configuration (couche config/env). maxSizeBytes est le champ de l'entité DB. Ce sont deux couches différentes, pas une ambiguïté. La spec aurait pu clarifier la relation, mais l'implémentation existante (category-config.service.ts) montre déjà ce mapping. Reclassé MINEUR.
ECT-02 — Comportement middleware sans Content-Length (C-03 + ZO-01)¶
Type : AMB Criticité : MINEUR (reclassé depuis MAJEUR) Source : Review C-03, Confrontation ZO-01 Confrontation : Confirmé par les deux documents. H-05 stipule que la validation métier est l'autorité finale. Analyse : Le middleware est un filtre d'optimisation (early reject), pas l'autorité de validation. L'hypothèse H-05 couvre le cas : "La vérification métier fait autorité finale". Le bypass du middleware sans Content-Length conduit à la validation service (INV-285-03/05) qui est l'autorité. Pas de faille de sécurité. Reclassé MINEUR car le comportement est déterministe même si non explicitement documenté.
ECT-03 — Tests TC-INV-08 à TC-INV-12 non définis dans le document tests (C-05)¶
Type : ECT Criticité : MINEUR (reclassé depuis MAJEUR) Source : Review C-05 Confrontation : Confrontation confirme la couverture (convergence "12 invariants couverts"), les tests sont mappés dans la matrice Analyse : INV-285-08 à 12 sont des invariants d'absence ("Aucune transition temporelle identifiée"). Ils sont volontairement traités comme "validation d'absence" dans la matrice et le document tests §9 les documente comme non testables automatiquement. Ce n'est pas un oubli, c'est un choix documenté. Reclassé MINEUR.
ECT-04 — Détermination catégorie au niveau middleware (C-09)¶
Type : AMB Criticité : MINEUR (reclassé depuis MAJEUR) Source : Review C-09 Analyse : Le code existant (category-size.middleware.ts) utilise la catégorie DEFAULT pour la pré-validation middleware — il ne détermine PAS la catégorie par requête, il applique la limite la plus permissive (DEFAULT). La spec le confirme implicitement dans le flux N2. Reclassé MINEUR car le comportement existant est correct et la story ne modifie pas cette logique.
ECT-05 — Format rapport inter-EB non contractualisé (C-11 + ZO-02)¶
Type : AMB Criticité : MINEUR (reclassé depuis MAJEUR) Source : Review C-11, Confrontation ZO-02 Confrontation : Confirmé — observable fonctionnel mais format non normalisé Analyse : CA-07 est un critère de validation manuelle (pipeline cohérence = outil interne). Le format du rapport est un détail d'implémentation de coherence-report.py, pas un contrat de la story PD-285. La vérification se fait par exécution du script et constat d'absence d'alerte. Reclassé MINEUR.
ECT-06 — TC-NOM-06 orphelin dans matrice (C-06 + DIV-01)¶
Type : ECT Criticité : MINEUR Source : Review C-06, Confrontation DIV-01 Analyse : TC-NOM-06 existe et couvre le cas (borne haute service). Le seul défaut est son absence dans la matrice de traçabilité. Défaut cosmétique.
ECT-07 — Code HTTP rejet middleware non spécifié (C-04)¶
Type : AMB Criticité : MINEUR Source : Review C-04 Analyse : Le code middleware existant retourne déjà 413. La story ne modifie pas ce comportement, elle change uniquement la valeur du seuil. Non bloquant.
ECT-08 — Borne max = défaut rend le paramètre non extensible (C-08)¶
Type : AMB Criticité : MINEUR Source : Review C-08 Analyse : La borne max = 500 MB est intentionnelle (décision PO D2, alignement PD-101). Si une future story nécessite > 500 MB, une nouvelle décision sera prise. Non bloquant.
3. Bilan¶
| Criticité | Nombre |
|---|---|
| BLOQUANT | 0 |
| MAJEUR | 0 |
| MINEUR | 8 |
Écarts BLOQUANTS restants : 0 Écarts MAJEURS restants : 0
4. Scoring¶
Scoring basé sur la formule : Base 10 − (2 × BLOQUANTS) − (1 × MAJEURS) − (0.25 × MINEURS)
| Critère | Score | Justification |
|---|---|---|
| completeness | 8.5 | Spec complète (12 invariants, 7 CA). TC-INV-08/12 traités comme non testables (choix documenté). -0.25×6 mineurs pertinents. |
| testability | 8.0 | 8 tests définis (TC-NOM-01 à 08, TC-NEG-01 à 05, TC-NR-01/02, TC-ERR). TC-NOM-06 orphelin matrice (-0.25). INV-08/12 non testables par design (-0.25×4). |
| clarity | 8.5 | Spec structurée, hypothèses documentées. Ambiguïtés nommage mineures (-0.25×2). |
| traceability | 8.0 | Matrice de couverture présente. TC-NOM-06 orphelin (-0.25). Placeholders épic non résolus (-0.25). Format rapport inter-EB non normalisé (-0.25). |