PD-278 — Dossier de conformité Gate 5 v1¶
Documents de référence¶
- PD-278-specification.md (v3)
- PD-278-tests.md (v3)
- PD-278-plan.md (v1)
- PD-278-code-contracts.yaml (v1)
- PD-278-review-step5-v1.md (ChatGPT)
- PD-278-confrontation-step5-v1.md (Claude)
Écarts consolidés (review + confrontation, dédupliqués)¶
BLOQUANTS (3)¶
| ID | Type | Référence | Description | Impact |
|---|---|---|---|---|
| BLQ-01 | DIV | DIV-02, ZO-01 | Table attestation absente de la migration C1. Le plan décrit INSERT attestation dans vault_secure.dissemination_attestations (C9 step 10) mais la migration C1 ne crée PAS cette table. Aucune entity TypeORM n'est définie. L'INSERT échouerait en runtime. | Faisabilité : le service core ne peut pas fonctionner. |
| BLQ-02 | DIV | DIV-03, EC-05 | Audit refus sécurité : spec synchrone vs plan async. Spec §5.8 exige "Persistance synchrone (transaction légère dédiée)". Le plan utilise logAsync (non-bloquant) et les contracts l'INTERDISENT synchrone. Si logAsync échoue post-réponse, un refus sécurité peut ne laisser aucune trace → violation INV-278-04. | Conformité NF Z42-013 : traçabilité non garantie. |
| BLQ-03 | INC | DIV-01, EC-01, EC-02 | Enum "exactement" 4 états vs DB 5 valeurs. Spec INV-278-01 dit "exactement {PENDING, SEALED, DIP, EXPIRED}". Tests TC-INV-01 vérifient "aucune valeur additionnelle". Plan reconnaît que RESTITUTED (PD-279) existe dans l'enum DB → contradition frontale spec↔plan, test qui échouerait en intégration. | Cohérence : spec, tests et plan incompatibles sur un invariant fondamental. |
MAJEURS (9)¶
| ID | Type | Référence | Description | Impact |
|---|---|---|---|---|
| MAJ-01 | AMB | EC-03 | Code 503 (fail-closed Redis) hors contrat erreurs. Spec §6 ne liste pas 503. Le plan introduit un comportement API non spécifié. | Contrat API incomplet. |
| MAJ-02 | AMB | EC-04 | Code 404 non contractualisé. Le plan prévoit 404 pour document non trouvé, absent de la matrice d'erreurs spec §6. | Contrat API incomplet. |
| MAJ-03 | ECT | EC-06, ZO-08 | Couverture 401 pre-controller incertaine. Le plan reconnaît que les 401 de JwtAuthGuard peuvent échapper au filtre d'audit refus. V-05 mentionne le risque sans mécanisme garanti. | Audit sécurité potentiellement incomplet. |
| MAJ-04 | AMB | EC-07, ZO-07 | Conservation 10 ans attestations non décrite. Spec §5.13 exige 10 ans, append-only, réplication. Plan ne spécifie aucune politique de rétention technique. | Preuve probatoire non démontrée. |
| MAJ-05 | AMB | EC-08, ZO-08 | Verrouillage cross-module non formalisé. Spec §5.9 exige ordre global. Plan diffère à "revue pré-Gate 8" sans mécanisme contraignant. | Risque deadlock résiduel. |
| MAJ-06 | AMB | EC-09 | copies = geo_copy_count hypothèse non validée. Garde INV-278-02 repose sur cette équivalence non confirmée. | Garde potentiellement invalide. |
| MAJ-07 | AMB | EC-10 | BYPASSRLS pour retention_service non contractualisé. Nécessaire pour clôture DIP→SEALED cross-owner mais absent de la spec. | Changement de posture d'accès non encadré. |
| MAJ-08 | ECT | EC-14 | Compatibilité ESM/CJS non couverte. Aucune section sur adaptation runner tests. | Risque échec CI. |
| MAJ-09 | INC | EC-16 | Code contracts divergent de la spec. Formulations "inclut exactement DIP via ADD VALUE", "couverture ≥80%" non issues directement des invariants spec. | Source d'ambiguïté audit. |
MINEURS (7)¶
| ID | Type | Référence | Description |
|---|---|---|---|
| MIN-01 | ECT | DIV-04 | TC-ERR-12 ne vérifie pas l'audit DENIED sur DIP→SEALED refus 403. |
| MIN-02 | ECT | DIV-05 | TC-FML-01 et TC-FML-02 sans scénario Given/When/Then. |
| MIN-03 | ECT | DIV-06 | TC-NOM-07 absent de la matrice de couverture tests. |
| MIN-04 | AMB | EC-12 | Section "Contraintes techniques" formelle absente du plan. |
| MIN-05 | AMB | EC-13 | Framework de test non explicitement verrouillé (Jest vs Vitest). |
| MIN-06 | AMB | EC-15 | Variables CI (DATABASE_URL, CI=true) non documentées. |
| MIN-07 | AMB | EC-17 | Certains forbidden de code contracts sans justification spec. |
Synthèse¶
| Gravité | Nombre | IDs |
|---|---|---|
| BLOQUANT | 3 | BLQ-01, BLQ-02, BLQ-03 |
| MAJEUR | 9 | MAJ-01 à MAJ-09 |
| MINEUR | 7 | MIN-01 à MIN-07 |
Scoring¶
| Critère | Score | Justification |
|---|---|---|
| feasibility | 5.75 | BLQ-01 (table attestation absente), MAJ-01/MAJ-08, MIN-06 |
| coverage | 4.25 | BLQ-03 (enum incohérence), MAJ-03/MAJ-09, MIN-01/02/03 |
| risk_mitigation | 4.75 | BLQ-02 (audit sync/async), MAJ-04/MAJ-05/MAJ-07, MIN-07 |
| coherence | 6.50 | MAJ-02/MAJ-06/MAJ-04, MIN-04/05 |