Aller au contenu

PD-250 — Dossier de conformité — Gate 3 CONFORMITY_CHECK (v4)

Date : 2026-02-25 Story : PD-250 — Job destruction définitive et bordereau Iteration : v4 (post-ESCALADE, correction directe Claude, décision PO) Documents audités : PD-250-specification.md (v4), PD-250-tests.md (v4)

Sources

  • Review (P1) : PD-250-specification-review.md (Claude, v4) — 0 BLOQUANT, 7 MAJEURS, 5 MINEURS
  • Confrontation (P2) : PD-250-confrontation-step3.md (ChatGPT, v4) — 2 divergences, 5 zones d'ombre

Bilan des corrections v3 → v4

Écart v3 Statut v4 Détail
ECT-06 (RECONCILIATION_FAILED absent modèle formel) CORRIGÉ §10.5 : état de document, transitions, complétude audit documentés
MAJ-18 (borne temporelle bordereau→destruction) CORRIGÉ §5.5 : délai borné par destructionExecutionSla
MAJ-19 (PARTIAL_FAILED terminologie) CORRIGÉ §5.9 : « finaux pour le batch courant », reprise = nouveau batch
MAJ-20 (reconciliationSla non testé) CORRIGÉ TC-250-28 ajouté
MAJ-21 (confirmation S3 non contractualisée) CORRIGÉ §5.5 : HTTP 204 = confirmation, eventual consistency acceptée
MAJ-22 (monotonie timestamps) CORRIGÉ INV-250-05 : séquence PostgreSQL audit_seq
MAJ-23 (TC-250-25 non déterministe) CORRIGÉ ERR-250-03 + TC-250-25 → batch PARTIAL_FAILED (déterministe)
MAJ-24 (parentBatchId optionnel) CORRIGÉ §5.9 : parentBatchId obligatoire pour batches de reprise
MIN-04 (SLA sans INV/CA) CORRIGÉ INV-250-16 + CA-250-16 ajoutés, TC-250-26/27/28 rattachés
MIN-05 (préavis N=0) CORRIGÉ §5.8 : job dédié + cas N=0 documenté
MIN-06 (protection WORM bordereau) CORRIGÉ §5.7 : WORM DB + SEALED sans expiration + Object Lock
MIN-07 (séquence zeroization) CORRIGÉ §5.5 : zeroization → S3 → DB, séquence stricte
MIN-08 (déclencheur préavis) CORRIGÉ §5.8 : job BullMQ dédié quotidien
MIN-09 (clockSkewTolerance TSA) CORRIGÉ §5.1 : non applicable à TSA, RFC 3161 accuracy
MIN-10 (métriques accès) CORRIGÉ §5.10 : restriction ADMIN/SYSTEM, compteurs agrégés

Résultat : 15/15 écarts v3 corrigés. Progression majeure.

Synthèse des écarts consolidés (v4)

Écarts BLOQUANTS (0)

Aucun.

Écarts MAJEURS (4)

# Écart Type Source
MAJ-25 §10.4 « Async post-validation » vs §5.5 await séquentiel — terminologie trompeuse. Le terme « Async » dans le tableau §10.4 contredit la description séquentielle de §5.5. AMB Review P1 (#2)
MAJ-26 destructionExecutionSlaFAILED (§5.5, avant 1er doc) vs PARTIAL_FAILED (§10.3/TC-250-27, en cours de traitement). Contradiction sur le comportement selon le moment du dépassement. ECT Review P1 (#4) + Confrontation P2 (DIV-02)
MAJ-27 Fail-closed sur échec zeroization (§5.5 flux legal_lock) non couvert par test explicite. DIV Review P1 (#5)
MAJ-28 RECONCILIATION_FAILED : transitions depuis cet état non couvertes par INV-250-11 ni TC-250-15. Le modèle §10.5 dit RECONCILIATION_FAILED → * : INTERDITE mais INV-250-11 ne le liste pas. DIV Review P1 (#12)

Écarts MINEURS (5)

# Écart Type Source
MIN-11 parentBatchId obligatoire (§5.9) sans test explicite dédié. DIV Review P1 (#3) + Confrontation P2 (zone d'ombre)
MIN-12 Restriction consommation batch_result aux rôles ADMIN/SYSTEM (§5.10) non couverte par test. DIV Review P1 (#8) + Confrontation P2 (zone d'ombre)
MIN-13 Mécanisme d'exclusion du bordereau de la sélection d'éligibilité non formalisé explicitement (INV-250-06 dit « pas de retentionExpiry » mais le filtre de sélection n'exclut pas explicitement les types bordereau). SEC Review P1 (#11)
MIN-14 eIDAS qualification : test automatisé (TC-250-08) vs contrôle opérationnel (§3 non testable) — ambiguïté sur la preuve en gate. AMB Confrontation P2 (DIV-01)
MIN-15 Couvertures « Complète » dans matrice malgré échantillonnage pour bornes de configuration. AMB Confrontation P2 (zone d'ombre)

Scoring par critère (Gate CONFORMITY_CHECK)

completeness (Exhaustivité de la couverture spec↔tests)

  • Base 10
  • MAJ-27 : -1 (fail-closed zeroization non testé)
  • MAJ-28 : -1 (RECONCILIATION_FAILED transitions non couvertes INV-250-11/TC-250-15)
  • MIN-11 : -0.25 (parentBatchId non testé)
  • MIN-12 : -0.25 (restriction batch_result non testée)
  • Score : 7.5

testability (Testabilité des exigences)

  • Base 10
  • MIN-14 : -0.25 (eIDAS preuve ambiguë)
  • MIN-15 : -0.25 (couverture par échantillonnage)
  • Score : 9.5

clarity (Clarté et non-ambiguïté de la spécification)

  • Base 10
  • MAJ-25 : -1 (terminologie Async trompeuse)
  • MAJ-26 : -1 (FAILED vs PARTIAL_FAILED sur destructionExecutionSla)
  • MIN-13 : -0.25 (exclusion bordereau de sélection non formalisée)
  • Score : 7.75

traceability (Traçabilité spec→tests→invariants)

  • Base 10
  • MIN-11 : -0.25 (parentBatchId non tracé en test)
  • Score : 9.75

Scores finaux

Critère Score
completeness 7.5
testability 9.5
clarity 7.75
traceability 9.75
Moyenne 8.625

Analyse de convergence

Metric v1 v2 v3 v4
Score moyen 5.75 7.31 7.31 8.625
Bloquants 4 1 1 0
Majeurs 9 8 7 4
Mineurs 0 3 7 5

Delta : 8.625 - 7.31 = 1.315 (amélioration significative) Clarity : 3.0 → 7.75 (+4.75, le critère bloquant est résolu) Tous scores >= 7 : OUI Au moins un score < 8 : OUI (completeness=7.5, clarity=7.75) Verdict préliminaire : RESERVE (mean >= 7, tous >= 6, mais completeness et clarity < 8)