Dossier de conformité Gate 5 — PD-55¶
Métadonnées¶
| Champ | Valeur |
|---|---|
| Story | PD-55 |
| Gate | 5 (AMBIGUITY) |
| Itération | v1 |
| Date | 2026-02-21 |
| Reviewer P1 | ChatGPT (review plan) |
| Reviewer P2 | Claude (confrontation) |
Synthèse des écarts¶
Écarts après confrontation¶
| ECT | Type | Gravité initiale | Gravité révisée | Verdict |
|---|---|---|---|---|
| ECT-01 | Couverture | BLOQUANT | MAJEUR | CONFIRMÉ (reclassé) |
| ECT-02 | Hypothèse | BLOQUANT | MAJEUR | CONFIRMÉ |
| ECT-03 | Risque | MAJEUR | MAJEUR | INSUFFISANT |
| ECT-04 | Code Contract | MAJEUR | MINEUR | NUANCÉ |
| ECT-05 | Couverture | MAJEUR | MAJEUR | CONFIRMÉ |
| ECT-06 | Contrainte | MAJEUR | MINEUR | NUANCÉ |
| ECT-07 | Test | MAJEUR | MINEUR | CONFIRMÉ (reclassé) |
| ECT-08 | Couverture | BLOQUANT | - | INVALIDE |
Bilan : 0 bloquant, 4 majeurs, 3 mineurs
Analyse des majeurs¶
ECT-01 — Immutabilité explicite¶
Problème : Le plan définit un état FINALIZED mais ne documente pas la contrainte d'immutabilité au niveau persistence.
Correction proposée : Enrichir CC-55-01 avec :
"Contrainte d'immutabilité : une fois en status FINALIZED, toute tentative d'UPDATE sur les colonnes status, merkle_root, tx_id, finalized_at DOIT être rejetée (trigger DB ou contrainte CHECK)."
ECT-02 — Atomicité rollback¶
Problème : Le plan mentionne failBatch() mais ne précise pas l'atomicité de la dissociation événements.
Correction proposée : Enrichir CC-55-03 avec :
"failBatch() : transaction atomique qui (1) passe le batch en FAILED, (2) dissocie tous les événements (anchor_batch_id = NULL) dans la même transaction. Aucun événement ne peut rester orphelin."
ECT-03 — Détection trous¶
Problème : Le mécanisme de détection de fenêtres manquantes n'est pas formalisé.
Correction proposée : Enrichir Phase 4 (Alerting) avec :
"Le service anchor-alert.service.ts inclut une méthode detectWindowGaps() qui compare les fenêtres attendues (10 min) avec les fenêtres réellement couvertes. Toute fenêtre manquante > 15 min déclenche une alerte."
ECT-05 — Journalisation homogène¶
Problème : La journalisation est portée par le processor mais pas explicitement par les services.
Correction proposée : Enrichir CC-55-03 et CC-55-04 avec :
"Chaque méthode émettant une transition d'état (createBatch, finalizeBatch, failBatch, markEventsAnchored) DOIT journaliser via AuditService avec : timestamp ISO 8601, from_state, to_state, entity_id, correlation_id."
Grille de scoring¶
| Critère | Score | Justification |
|---|---|---|
| feasibility | 8.0 | Dépendances vérifiées, architecture claire, phases cohérentes |
| coverage | 7.5 | Mapping INV/CA complet mais manque explicitation contraintes |
| risk_mitigation | 7.5 | Risques identifiés, mitigations partielles (alerting à préciser) |
| coherence | 8.0 | Code contracts cohérents, pas de chevauchement |
Moyenne : 7.75/10
Règle de dérivation : - Moyenne >= 7 ✓ - Au moins un score < 8 (coverage = 7.5, risk_mitigation = 7.5)
Verdict mathématique : RESERVE
Recommandation¶
RESERVE avec corrections mineures du plan : 1. Expliciter contrainte immutabilité (ECT-01) 2. Documenter atomicité failBatch (ECT-02) 3. Préciser détection trous dans alerting (ECT-03) 4. Homogénéiser journalisation services (ECT-05)
Ces corrections sont des enrichissements documentaires, pas des modifications architecturales.