Documents de référence
- PD-278-specification.md (v3)
- PD-278-tests.md (v3)
- PD-278-plan.md (v2)
- PD-278-code-contracts.yaml (v2)
- PD-278-review-step5-v2.md (ChatGPT)
- PD-278-confrontation-step5-v2.md (Claude)
Évolution v1 → v2
| Écart v1 | Statut v2 | Commentaire |
| BLQ-01 (table attestation absente) | RÉSOLU | Table vault_secure.dissemination_attestations ajoutée en C1 (step 13-18). Entity TypeORM + module dip-attestation créés. |
| BLQ-02 (audit async vs sync) | RÉSOLU | Plan corrigé : audit refus synchrone via QueryRunner dédié (transaction légère). Code contracts alignés. |
| BLQ-03 (enum exactement 4) | PARTIELLEMENT RÉSOLU | Plan documente l'adaptation (DIP ∈ enum, pas cardinalité=4). Mais spec et tests non mis à jour (hors périmètre plan). Écart résiduel reclassé MAJEUR. |
| MAJ-01 (503) | RÉSOLU | Ajouté dans matrice erreurs §6. |
| MAJ-02 (404) | RÉSOLU | Ajouté dans matrice erreurs §6. |
| MAJ-03 (401 pre-controller) | RÉSOLU | APP_INTERCEPTOR DisseminationAuditInterceptor documenté. |
| MAJ-04 (rétention 10 ans) | RÉSOLU | Section dédiée ajoutée : partitioning RANGE(issued_at), politique de rétention. |
| MAJ-05 (cross-module verrouillage) | RÉSOLU | DocumentLockService abstraction partagée ajoutée (module + conventions). |
| MAJ-06 (copies = geo_copy_count) | RÉSOLU | Tâche validation ajoutée en phase 0 étape 6. |
| MAJ-07 (BYPASSRLS) | RÉSOLU | Contractualisé dans section sécurité + code contracts. |
| MAJ-08 (ESM/CJS) | RÉSOLU | Section compatibilité ajoutée. |
| MAJ-09 (code contracts vs spec) | RÉSOLU | Formulations alignées. |
| MIN-01 à MIN-07 | TOUS RÉSOLUS | TC-ERR-12 audit, TC-FML, TC-NOM-07, contraintes techniques, Jest, CI vars, forbidden justifications. |
Écarts résiduels v2 (consolidation review + confrontation)
MAJEURS (6)
| ID | Type | Référence | Description | Impact |
| MAJ-v2-01 | INC | EC-01/DIV-01 | Enum DB 5 valeurs vs spec "exactement" 4. Le plan justifie l'adaptation mais la spec INV-278-01 et tests TC-INV-01 n'ont pas été mis à jour (hors périmètre plan). Le plan ne peut corriger la spec. | Test échouerait en intégration si non adapté. |
| MAJ-v2-02 | INC | EC-02/DIV-04 | Fuzz 5×5 vs 4×4. Plan étend TC-INV-09 aux 5 états incluant RESTITUTED. Tests ne reflètent pas cette extension. | Scope test incohérent plan↔tests. |
| MAJ-v2-03 | AMB | EC-03/ZO-05 | RLS → 404 vs 403 indistinguable. SELECT FOR UPDATE filtré par RLS retourne 0 lignes (= document inexistant). Mécanisme de distinction non décrit. | Testabilité TC-ERR-05/TC-INV-07 potentiellement non déterministe. |
| MAJ-v2-04 | INC | EC-04/DIV-02 | Codes 404/503 dans plan mais PAS dans spec. Le plan les a ajoutés mais ne peut modifier la spec. Divergence formelle plan↔spec. | Traçabilité incomplète. |
| MAJ-v2-05 | AMB | EC-05 | Stub HSM conditionné (PD-37). Invariant crypto INV-278-10 dépend de PD-37. Stub documenté avec story destination (pattern PD-251 accepté). | Invariant non satisfait en conditions réelles si PD-37 non livré. |
| MAJ-v2-06 | ECT | EC-08 | WORM attestation sans enforcement DB. Intention append-only décrite mais pas de trigger/policy DB spécifique empêchant UPDATE/DELETE. | Intégrité probatoire affaiblie. |
MINEURS (5)
| ID | Type | Référence | Description |
| MIN-v2-01 | AMB | EC-06 | Audit refus : exception catch absorbée si INSERT échoue → trou de traçabilité théorique. Le plan documente la transaction dédiée mais pas le fallback en cas d'échec. |
| MIN-v2-02 | AMB | EC-07/ZO-01 | Hard timeout SLA 5000ms : mécanisme d'enforcement (AbortController/statement_timeout) non détaillé. |
| MIN-v2-03 | AMB | DIV-03 | Path parameter {id} vs {document_id} (cosmétique). |
| MIN-v2-04 | ECT | DIV-05 | INV-278-14 couvert par TC-INV-13 cas B + TC-ERR-14 mais pas de TC-INV-14 dédié. |
| MIN-v2-05 | AMB | ZO-02 | Algorithme hash_evidence et signature_ref non spécifié (hérité de GAP-03 Gate 3). |
Scoring
| Critère | Score | Justification |
| feasibility | 7.75 | MAJ-v2-04 (codes hors spec), MAJ-v2-05 (stub HSM), MIN-v2-02 (hard timeout) |
| coverage | 7.50 | MAJ-v2-01 (enum), MAJ-v2-02 (fuzz scope), MIN-v2-04/05 |
| risk_mitigation | 8.75 | MIN-v2-01 (audit fail edge case) |
| coherence | 8.75 | MAJ-v2-03 (RLS 404/403), MIN-v2-03 (path param) |
Synthèse
| Gravité | Nombre | IDs |
| BLOQUANT | 0 | — |
| MAJEUR | 6 | MAJ-v2-01 à MAJ-v2-06 |
| MINEUR | 5 | MIN-v2-01 à MIN-v2-05 |
Corrections v1 résolues : 19/19 (3B + 9M + 7m tous adressés). Écarts résiduels principalement dus aux limites de périmètre du plan (ne peut modifier spec/tests) et à des précisions crypto/infrastructure.