Aller au contenu

PD-277 — Dossier de conformité Gate 5 (AMBIGUITY) — v2

1. Références

  • Story : PD-277 — PV PRE — Anti-rejeu nonce et PKI certificate binding (v1.1)
  • Gate : 5 (AMBIGUITY)
  • Itération : v2
  • Date : 2026-02-28
  • Documents évalués : specification (v2), tests (v2), plan (v2), code-contracts (v2)
  • Score précédent (v1) : 7.625/10 (RESERVE)

2. Sources

Phase Document Auteur
Phase 1 — Review v2 PD-277-review-step5-v2.md ChatGPT (OpenCode)
Phase 2 — Confrontation v2 PD-277-confrontation-step5-v2.md Claude -p

3. Bilan des corrections v1 → v2

Écart v1 Statut v2 Détail
ECT-01 (DDL DEFAULT '') Partiellement résolu Plan justifie la divergence (H-277-T01, §6.1). La spec ne contractualise toujours pas le DEFAULT '' — c'est une limitation de la spec v2 (document ChatGPT), pas du plan
ECT-02 (PKI incomplète) Résolu C4 enrichi avec contrôle invalide/révoqué/incompatible
ECT-03 (Fail-closed legacy) Résolu F2 étape 3b ajoutée — contrôle explicite fail-closed
ECT-04 (status=ACTIVE) Résolu Documenté comme hérité PD-81
ECT-05 (Frontière code contracts) Résolu Modules fusionnés en pd277-rekey-manager-controls
ECT-06 (Repository sans contrat) Résolu Module pd277-rekey-repository ajouté
ECT-07 (Nonce serveur) Accepté (MINEUR) H-277-T03 documentée
ECT-08 (Dépendances) Résolu Section 11 ajoutée

4. Écarts résiduels v2

ID Type Description Gravité orchestrateur
ECT-v2-01 Non-conformité DDL La spec §6 ne contractualise pas DEFAULT '' sur les colonnes certificats. Le plan le justifie via H-277-T01 mais la source normative (spec) n'est pas alignée. Il s'agit d'une limitation inhérente au processus (spec = document ChatGPT, non modifiable à l'étape 5). Le plan documente explicitement la divergence et la justification, ce qui réduit l'impact. MAJEUR (pas BLOQUANT : justification documentée + divergence inhérente au processus)
ECT-v2-02 Contradiction spec interne La spec §4 dit "nonce généré côté serveur uniquement" tandis que §9 F2 montre "demande contenant un nonce". C'est une contradiction INTERNE à la spec, pas un écart du plan. Le plan adopte le modèle cohérent "nonce fourni par l'appelant à reEncrypt, généré par le serveur côté generateReKey". MINEUR (écart de la spec, pas du plan)
ECT-v2-03 Frontière API Le plan décrit un endpoint controller (F2) tout en excluant les modifications de controller du périmètre §10. Pas de module controller dans les code contracts. MAJEUR
ECT-v2-04 Immutabilité partielle Protection des certificats via service + repository uniquement, pas de trigger DB. Chemins QueryBuilder non protégés. MINEUR (protection applicative documentée, cohérente avec l'architecture NestJS existante)
ECT-v2-05 Version header Code contracts référence "plan.md v1" au lieu de v2. MINEUR

5. Scoring

Méthodologie

Base 10, pénalités par écart non résolu : - BLOQUANT : -2 par écart - MAJEUR : -1 par écart - MINEUR : -0.25 par écart

Améliorations v1→v2 : 6 MAJEURs v1 → 2 MAJEURs + 3 MINEURs v2 (amélioration significative).

Répartition par critère

Critère Écarts affectants Calcul Score
feasibility ECT-v2-03 (frontière API) 10 - 1 9.0
coverage ECT-v2-01 (DDL), ECT-v2-02 (nonce spec interne) 10 - 1 - 0.25 8.75
risk_mitigation ECT-v2-04 (immutabilité), ECT-v2-02 (nonce) 10 - 0.25 - 0.25 9.5
coherence ECT-v2-01 (DDL), ECT-v2-03 (frontière API), ECT-v2-05 (version) 10 - 1 - 1 - 0.25 7.75

Justification feasibility : Le plan est faisable. Le seul écart majeur est la frontière API non tranchée (endpoint vs méthode), qui est un détail d'implémentation résolvable. Score 9.0.

Justification coverage : La couverture est bonne après v2. L'écart DDL est une limitation du processus (spec non modifiable), et la contradiction nonce est interne à la spec. Score 8.75.

Justification risk_mitigation : Les risques sont bien adressés après v2 : fail-closed démontré sur legacy, PKI enrichie, nonce format validé. Seule l'immutabilité est partielle (applicative, pas trigger DB). Score 9.5.

Justification coherence : 2 MAJEURs résiduels (DDL + frontière API) + 1 MINEUR (version header) réduisent la cohérence inter-documents. Score 7.75.

6. Verdict attendu

  • Moyenne : (9.0 + 8.75 + 9.5 + 7.75) / 4 = 8.75
  • Critères >= 8 : ¾ (feasibility, coverage, risk_mitigation)
  • Critère < 8 : ¼ (coherence = 7.75)
  • Verdict attendu : RESERVE (moyenne >= 7, au moins un score < 8)