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 | Claude | 4 |
| PD-279-code-contracts.yaml | Claude | 4 |
| PD-279-review-step5.md | ChatGPT | 5-P1 |
| PD-279-confrontation-step5-v1.md | Claude | 5-P2 |
2. Écarts consolidés
BLOQUANTS (3)
| ID | Description |
| ECT-01 | legal_lock=true → spec dit 409 Conflict, plan utilise 423 Locked. Rupture de contrat API. |
| ECT-02 | Garde destruction à l'inclusion batch : le plan fait un filtre d'éligibilité SQL implicite (status=EXPIRED) au lieu du rejet explicite HTTP 409 exigé par la spec (INV-279-10). |
| ECT-03 | Artefact tests (PD-279-tests.md) non auditable — contient des traces d'outillage mais pas de scénarios TC-* exécutables détaillés. Impact : la gate ne peut valider la couverture sans tests rejouables. Note : ce n'est pas un problème du plan mais des tests (étape 2). |
MAJEURS (7)
| ID | Description |
| DIV-01 | Le plan renumérote INV-279-11 (idempotence dans la spec) vers INV-279-12, et crée un nouveau INV-279-11 (destruction checkpoint). Dérive normative. |
| DIV-02 | lifecycle_log (terme spec) vs integrity_journal_entries (terme plan) — équivalence non formalisée explicitement. |
| DIV-03 | Le plan ajoute geo_copy_count comme colonne en migration, alors que la spec ne le liste pas dans les colonnes ajoutées (§5.7). Extension de périmètre non contractualisée. |
| DIV-04 | INV-279-11 (idempotence) absent de la matrice de couverture invariants→tests dans le plan. |
| DIV-05 | Code contracts incluent des invariants non issus du set canonique spec (INV-279-12, seuils couverture). |
| DIV-06 | DELETE /documents/:id présent dans spec §5.5 mais absent des code contracts destruction. |
| DIV-07 | Compatibilité ESM/CJS non documentée dans le plan. |
MINEURS (3)
| ID | Description |
| MIN-01 | Inventaire dépendances inter-PD non formalisé (DONE/TODO/STUB). |
| MIN-02 | Framework test (Jest vs Vitest) non déclaré normatif. |
| MIN-03 | Variables CI requises non documentées. |
3. Analyse pour scoring
ECT-03 — Atténuation
ECT-03 concerne l'artefact tests (étape 2), pas le plan (étape 4). Pour Gate 5 AMBIGUITY qui évalue le plan, cet écart est noté mais n'impacte pas directement feasibility/coherence du plan. Son impact principal est sur coverage (la couverture tests ne peut être vérifiée).
Scoring
| Critère | Score | Justification |
| feasibility | 8.0 | Le plan est techniquement réalisable. Les tâches sont bien décomposées, les dépendances identifiées. ECT-01 (423 vs 409) est un bug de plan facile à corriger, pas un problème de faisabilité. |
| coverage | 6.0 | 3 BLOQUANTS : ECT-01 (contrat API incorrect), ECT-02 (garde destruction implicite vs explicite), ECT-03 (tests non vérifiables). 4 MAJEURS liés à la couverture : DIV-01/04/05/06 (invariants non alignés, code contracts incomplets). |
| risk_mitigation | 7.5 | Le plan identifie des risques et hypothèses. DIV-03 (geo_copy_count hors périmètre) est un risque de périmètre. DIV-07 (ESM/CJS) est un risque technique non documenté. Mitigations partielles. |
| coherence | 6.5 | ECT-01 (423 vs 409) et DIV-01 (renumérotation invariants) sont des incohérences directes avec la spec. DIV-02 (lifecycle_log vs integrity_journal_entries) est une incohérence terminologique. |
Moyenne : (8.0 + 6.0 + 7.5 + 6.5) / 4 = 7.0
Coverage = 6.0 ≥ 6 OK. Coherence = 6.5 ≥ 6 OK. Moyenne = 7.0 ≥ 7 OK. Au moins un score < 8 → RESERVE.