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)