1. Contexte
- Story : PD-277 — PV PRE — Implémenter anti-rejeu nonce et PKI certificate binding (v1.1)
- Gate : 3 (CONFORMITY_CHECK)
- Itération : v1
- Date : 2026-02-28
- P1 (review) : Claude (claude-p)
- P2 (confrontation) : ChatGPT (opencode gpt-5.3-codex)
2. Documents de référence
| Document | Source | Étape |
| PD-277-besoin.md | Claude (PO validé) | 0 |
| PD-277-specification.md | ChatGPT | 1 |
| PD-277-tests.md | ChatGPT | 2 |
3. Synthèse des écarts
Écarts BLOQUANTS (3)
| ID | Source | Écart | Impact |
| ECT-01 | Review P1 | Format nonce non contractualisé (longueur, encodage, normalisation) | Comportements ambigus en rejeu, impossibilité de valider |
| ECT-02 | Review P1 | Faits Prolog attendus pour CHECK 23/24 absents de la spécification | Pas de référentiel canonique pour la vérification formelle |
| ECT-03 | Review P1 | 4 tests référencés non définis (TC-INV-03, TC-INV-05, TC-INV-06, TC-INV-08) | Couverture de test incomplète |
Écarts MAJEURS (5)
| ID | Source | Écart | Impact |
| ECT-04 | Review P1 | Politique stockage used_nonces non bornée (TTL, cardinalité max) | Risque explosion stockage en production |
| ECT-05 | Review P1 | Types SQL non contractualisés pour les nouveaux champs | Ambiguïté d'implémentation |
| ECT-06 | Review P1 | Atomicité nonce/re-chiffrement non spécifiée | Risque TOCTOU (Time of Check / Time of Use) |
| ECT-07 | Confrontation P2 | Référence Epic incohérente entre documents (DIV-01) | Traçabilité documentaire non fiabilisée |
| ECT-08 | Confrontation P2 | INV-277-06/08 déclarés non négociables mais couverture test "Partielle" (DIV-02) | Risque verdict sous réserve faute de preuve |
Écarts MINEURS (5)
| ID | Source | Écart | Impact |
| ECT-09 | Review P1 | Immutabilité mécanisme non précisé (trigger/domaine/DB) | Faible — design choice |
| ECT-10 | Review P1 | Scénario certificat expiré/révoqué absent de la spec | Couvert partiellement par tests |
| ECT-11 | Review P1 | Origine nonce (client/serveur) ambiguë | Clarification mineure |
| ECT-12 | Review P1 | Rotation certificat post-binding non couverte | Hors périmètre actuel, documentable |
| ECT-13 | Confrontation P2 | Baseline explicite des états pré-PD-277 absente | Démonstration INV-08 affaiblie |
4. Scoring
| Critère | Score | Justification |
| completeness | 6.0 | 3 écarts bloquants (3×-2 = -6) → 10-6 = 4, mais contenu fonctionnel bien couvert → remonté à 6.0 |
| testability | 7.0 | 4 tests manquants (-2), 2 invariants partiels (-1) → 10-3 = 7.0 |
| clarity | 7.5 | Documents lisibles, 2 ambiguïtés (nonce format, nonce origin) (-0.5 chacune), ref Epic (-0.5) |
| traceability | 7.5 | Bonne traçabilité spec↔tests, prolog facts manquants (-1), ref Epic (-0.5), baseline absente (-0.25) |
5. Convergences confirmées
- Scope fonctionnel aligné : anti-rejeu nonce + PKI binding, module legal-pre exclusivement
- Invariants critiques repris dans matrice de tests (INV-277-01 à INV-277-08)
- Mode fail-closed cohérent entre spec et tests
- Objectif 24/24 Prolog convergent
- Migration up/down et non-régression couvertes
6. Recommandation
Rework nécessaire — les 3 écarts bloquants (ECT-01, ECT-02, ECT-03) doivent être levés avant progression.