PD-277 — Dossier de conformité Gate 5 (AMBIGUITY) — v1¶
1. Références¶
- Story : PD-277 — PV PRE — Anti-rejeu nonce et PKI certificate binding (v1.1)
- Gate : 5 (AMBIGUITY)
- Itération : v1
- Date : 2026-02-28
- Documents évalués : specification (v2), tests (v2), plan, code-contracts
2. Sources¶
| Phase | Document | Auteur |
|---|---|---|
| Phase 1 — Review | PD-277-review-step5.md | ChatGPT (OpenCode) |
| Phase 2 — Confrontation | PD-277-confrontation-step5-v1.md | Claude -p |
| Plan d'implémentation | PD-277-plan.md | Claude -p |
| Code contracts | PD-277-code-contracts.yaml | Claude -p |
3. Synthèse des écarts¶
3.1. Écarts convergents (Review + Confrontation)¶
| ID | Type | Description | Gravité |
|---|---|---|---|
| ECT-01 | Non-conformité DDL | DEFAULT '' sur owner_certificate_id et recipient_certificate_id non contractualisé dans le DDL canonique de la spec §6 | MAJEUR |
| ECT-02 | Couverture PKI | Le plan ne décrit que la validation non-nullité/non-vacuité des certificats, sans contrôle "invalide/révoqué/incompatible mandat" exigé par INV-277-04 et testé par TC-ERR-06, TC-NEG-05 | MAJEUR |
| ECT-03 | Fail-closed legacy | Le flux reEncrypt ne contient pas de contrôle explicite de validité du binding certificat pour les ReKeys hérités avec certificats vides — fail-closed non démontré (INV-277-01) | MAJEUR |
| ECT-04 | Comportement non spécifié | Condition status=ACTIVE ajoutée dans reEncrypt (Plan §2 F2 étape 3), non explicitée dans la spécification canonique PD-277 | MAJEUR |
| ECT-05 | Frontière code contracts | Fichier legal-rekey-manager.service.ts alloué à deux modules propriétaires distincts (pd277-nonce-anti-replay et pd277-pki-binding) — violation de frontière | MAJEUR |
| ECT-06 | Complétude code contracts | Composant C5 (LegalReKeyRepository) cité comme mécanisme principal sans contrat de module/fichier dédié | MAJEUR |
| ECT-07 | Hypothèse implicite | Responsabilité de génération du nonce (appelant vs module legal-pre) non verrouillée au niveau contrat d'interface | MINEUR |
| ECT-08 | Traçabilité dépendances | Dépendances inter-PD sans statut structuré DONE/TODO/STUB | MINEUR |
3.2. Zones d'ombre (Confrontation seule)¶
- Mécanisme d'extraction
certificateIddepuis le résultat TSP non détaillé - Performance JSONB
@>surused_noncesnon évaluée - Journalisation des opérations
reEncryptnon spécifiée - Coexistence
reEncrypt/reEncryptWithNoncenon clarifiée
4. 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
Répartition par critère¶
| Critère | Écarts affectants | Calcul | Score |
|---|---|---|---|
| feasibility | ECT-01 (DDL), ECT-04 (status=ACTIVE) | 10 - 2×1 + 0.5 (zones d'ombre mineures) | 8.0 |
| coverage | ECT-02 (PKI), ECT-03 (fail-closed), ECT-06 (repository) | 10 - 3×1 | 7.0 |
| risk_mitigation | ECT-03 (fail-closed legacy), ECT-02 (PKI invalide) | 10 - 2×1 - 0.25 (ECT-07 nonce) | 7.75 |
| coherence | ECT-05 (frontière), ECT-04 (non spécifié), ECT-08 (dépendances) | 10 - 2×1 - 0.25 (ECT-08) | 7.75 |
Justification feasibility : Le plan est globalement faisable. Le DEFAULT '' (ECT-01) est un choix de migration raisonnable mais non contractualisé. La condition status=ACTIVE (ECT-04) est un ajout logique mais non spécifié. Les 2 zones d'ombre techniques (performance JSONB, extraction certificat) sont mineures. Score = 8.0.
Justification coverage : 3 écarts majeurs de couverture : la validation PKI reste superficielle (ECT-02), le fail-closed sur ReKeys hérités n'est pas démontré (ECT-03), et le repository n'a pas de code contract (ECT-06). Score = 7.0.
Justification risk_mitigation : Le fail-closed crypto est partiellement adressé mais pas démontré sur le chemin legacy (ECT-03). La validation PKI incomplète (ECT-02) laisse des cas d'erreur non couverts. Le nonce serveur-only implicite (ECT-07) est mineur. Score = 7.75.
Justification coherence : La violation de frontière code contracts (ECT-05) et le comportement non spécifié (ECT-04) réduisent la cohérence. Les dépendances non structurées (ECT-08) sont mineures. Score = 7.75.
5. Verdict attendu¶
- Moyenne : (8.0 + 7.0 + 7.75 + 7.75) / 4 = 7.625
- Critères >= 8 : ¼ (feasibility)
- Critères < 8 : ¾ (coverage, risk_mitigation, coherence)
- Verdict attendu : RESERVE (moyenne >= 7, au moins un score < 8)