Documents de référence
- Spécification :
PD-85-specification.md (266 lignes, corrigée v2) - Tests :
PD-85-tests.md (323 lignes, non corrigés depuis Gate 3 v1) - Plan :
PD-85-plan.md (331 lignes, Claude) - Code contracts :
PD-85-code-contracts.yaml (384 lignes, Claude) - Review :
PD-85-review-step5.md (ChatGPT gpt-5.3-codex) - Confrontation :
PD-85-confrontation-step5.md (Claude)
Synthèse des écarts
Écarts BLOQUANTS (0)
Les 2 BLOQUANTS identifiés par la review sont reclassés MAJEUR après analyse :
- Ex-BLOQUANT 1 (ordre taille vs invariants) : Le plan §9 "Ordre de traitement" liste explicitement 1→auth, 2→plan, 3→RLS, 4→taille, 5→invariants. Le flux F1 (§5.4 spec) est cohérent. La contradiction signalée est entre deux niveaux de détail du plan, pas une contradiction fonctionnelle. Reclassé MAJEUR (ambiguïté rédactionnelle).
- Ex-BLOQUANT 2 (audit pré-service) : L'audit WORM pour 400/403 est couvert par un ExceptionFilter NestJS global (pattern standard). Le plan le mentionne en C6 mais ne l'explicite pas comme mécanisme dédié pour les rejets DTO/guard. Reclassé MAJEUR (couverture implicite mais non explicite).
Écarts MAJEURS (6 après consolidation)
| ID | Type | Description | Source |
| M-01 | AMB | Ordre de traitement (413 vs 422) : formulation ambiguë entre flux §5.4 et résumé §9 du plan | Review |
| M-02 | ECT | Audit WORM pré-ExportService : mécanisme ExceptionFilter non explicité pour capturer 400/403 | Review + Confrontation |
| M-03 | AMB | exportId pour rejets précoces (400/403) : génération/corrélation non contractualisée | Review |
| M-04 | ECT | Contraintes format sortie (RFC3339, semver, regex) non mappées exhaustivement aux contrôles runtime | Review |
| M-05 | ECT | Tests §9 obsolètes — ⅚ items "non testables" résolus dans spec v2 mais tests non mis à jour | Confrontation |
| M-06 | AMB | Test framework (Jest) et ESM/CJS non documentés explicitement dans le plan | Review |
Écarts MINEURS (5)
| ID | Type | Description | Source |
| m-01 | ECT | DDL HT-04 (AuditActionType enum) vs spec "DDL non applicable" — scope technique, pas fonctionnel | Review |
| m-02 | ECT | Code contracts invariants additionnels (coverage >=80%) hors périmètre spec | Review |
| m-03 | ECT | Patterns forbidden non reliés formellement à la spec | Review |
| m-04 | AMB | Variables CI pour tests d'intégration non documentées | Review |
| m-05 | AMB | Dépendances inter-PD sans statut DONE/TODO/STUB explicite | Review + Confrontation |
Scoring
| Critère | Score | Justification |
| feasibility | 8.5 | Plan techniquement solide : NestJS + TypeORM + S3 presign, chaîne synchrone cohérente, 10 composants bien découpés, DAG de dépendances pour parallélisation. Points de vigilance ECDSA/JCS/fail-closed correctement identifiés. |
| coverage | 7.5 | 15/15 INV mappés, 14/14 CA couverts, 42 TC référencés. Mais : audit pré-service non explicité, format validation mapping incomplet, tests document obsolète (6 désynchronisations). |
| risk_mitigation | 8.0 | REX PD-282 (raw ECDSA) intégré, fail-closed audit documenté, rate limiting planifié, hypothèses techniques listées. Manque : framework test explicite, ESM/CJS, CI variables. |
| coherence | 8.0 | Plan cohérent avec spec v2. Ambiguïté rédactionnelle sur ordre de traitement (2 formulations). Code contracts alignés aux composants plan. |
Moyenne : (8.5 + 7.5 + 8.0 + 8.0) / 4 = 8.00
Verdict attendu
- coverage (7.5) < 8 → au moins un score < 8
- Moyenne 8.00 >= 7
- → RESERVE (moyenne >= 7 mais au moins un score < 8)