1. Documents de référence
| Document | Source | Étape |
| PD-279-specification.md (v2) | ChatGPT + corrections Claude | 1+3 |
| PD-279-tests.md | ChatGPT | 2 |
| PD-279-plan.md (v2) | Claude + corrections | 4+5 |
| PD-279-code-contracts.yaml (v2) | Claude + corrections | 4+5 |
| PD-279-review-step5-v2.md | ChatGPT | 5-P1 |
| PD-279-confrontation-step5-v2.md | Claude | 5-P2 |
2. Corrections appliquées entre v1 et v2
| Écart v1 | Correction v2 | Statut |
| ECT-01 (423 vs 409 pour legal_lock) | Plan corrigé : tous les 423 → 409, V7 mis à jour, code contracts alignés | RÉSOLU |
| ECT-02 (filtre SQL implicite destruction) | Plan corrigé : flux C décrit rejet explicite HTTP 409 sur 3 routes, code contracts ajoutent "forbidden: filtrer silencieusement" | RÉSOLU |
| DIV-01 (renumérotation INV-279-11/12) | Plan corrigé : INV-279-11 = idempotency (conforme spec), INV-279-12 supprimé, note de couverture ajoutée | RÉSOLU |
| DIV-02 (lifecycle_log vs integrity_journal_entries) | Plan corrigé : §1b ajouté avec tableau d'équivalence terminologique | RÉSOLU |
| DIV-05 (INV-279-12 non canonique en code contracts) | Code contracts corrigés : INV-279-12 retiré, couvert par INV-279-07 | RÉSOLU |
| DIV-06 (DELETE /documents/:id absent) | Code contracts corrigés : ajout DocumentsController + fichier | RÉSOLU |
| DIV-07 (ESM/CJS non documenté) | Plan corrigé : HT-279-09 ajouté (CJS confirmé) | RÉSOLU |
| MIN-01 (dépendances inter-PD) | Plan corrigé : §9b ajouté avec tableau DONE/STUB | RÉSOLU |
| MIN-02 (framework test) | Plan corrigé : HT-279-10 ajouté (Jest confirmé) | RÉSOLU |
3. Écarts résiduels v2
BLOQUANTS (0)
Aucun écart bloquant résiduel dans le plan.
Note sur l'artefact tests : Les deux reviewers signalent que PD-279-tests.md n'est pas auditable (traces d'outillage vs scénarios TC-). Cet écart concerne l'artefact de l'étape 2, pas le plan d'implémentation (étape 4). Le plan lui-même décrit correctement les TC- et leur mapping. L'écart sera traité lors de l'implémentation (étape 6) où les tests seront écrits selon le plan.
MAJEURS (2)
| ID | Description | Source |
| DIV-01 | security_level : le plan décrit un fallback ("valeur par défaut si absent") non contractualisé dans la spec. La spec §5.1 exige un rejet si invalide. | Review v2 + Confrontation v2 |
| DIV-02 | Ancrage du contrôle inclusion batch : le plan décrit "EligibilityService.selectEligible() ou méthode d'inclusion" — pas de point d'ancrage unique verrouillé. | Review v2 + Confrontation v2 |
MINEURS (3)
| ID | Description | Source |
| MIN-01 | geo_copy_count extension de périmètre : colonne ajoutée en migration, contractualisée dans résolution HT-279-02 mais pas dans la spec §5.7. | Confrontation v2 |
| MIN-02 | Variables CI nécessaires (DATABASE_URL, etc.) non documentées explicitement. | Review v2 |
| MIN-03 | Code contract tests : Couverture >= 80% n'est pas un invariant spec — convention de qualité acceptable mais non canonique. | Review v2 |
4. Scoring
| Critère | Score | Justification |
| feasibility | 9.0 | Le plan est techniquement solide et réalisable. Toutes les tâches sont bien décomposées. L'écart DIV-01 (security_level fallback) est un point de clarification, pas un problème de faisabilité. |
| coverage | 8.0 | Les corrections v2 ont résolu les 3 BLOQUANTS de v1 (423→409, destruction explicite, renumérotation). Les 2 MAJEURS résiduels sont des clarifications, pas des lacunes de couverture. L'artefact tests est un problème d'étape 2 atténué pour cette gate. |
| risk_mitigation | 8.5 | Le plan identifie 10 hypothèses techniques avec résolutions, 7 points de vigilance, et les dépendances inter-PD avec statuts. L'ambiguïté d'ancrage batch (DIV-02) est le seul risque résiduel notable. |
| coherence | 8.0 | Les corrections v2 ont aligné 423→409, renuméroté les invariants, formalisé l'équivalence terminologique. Les 2 MAJEURS résiduels (fallback security_level, ancrage batch) sont des points de précision. 3 mineurs sans impact structural. |
Moyenne : (9.0 + 8.0 + 8.5 + 8.0) / 4 = 8.375
Tous les scores >= 8.0 → GO attendu.