Documents de référence
- Spécification :
PD-85-specification.md (266 lignes, ChatGPT gpt-5.3-codex, corrigée v2) - Tests :
PD-85-tests.md (323 lignes, ChatGPT gpt-5.3-codex, non corrigés depuis v1) - Review v2 :
PD-85-review-step3-v2.md (20 lignes résumé, Claude) - Confrontation v2 :
PD-85-confrontation-step3-v2.md (72 lignes, ChatGPT gpt-5.3-codex)
Résolution des écarts v1
Les 2 BLOQUANTS et 5 MAJEURS identifiés en v1 (RESERVE 7.75) ont été traités :
| Écart v1 | Type | Résolution v2 |
| A-01 signedUrlTtl non spécifié | BLOQUANT | RÉSOLU — défaut 15 min, env EXPORT_SIGNED_URL_TTL_MIN, §5.2 |
| C-02 404 comportement mixte | BLOQUANT | RÉSOLU — fail-fast première erreur, §6 |
| A-02 doublons proofIds | MAJEUR | RÉSOLU — 400, déduplication interdite, §6 |
| C-04 enum documentType | MAJEUR | RÉSOLU — 7 valeurs figées, §5.1 |
| C-05 format proofEnvelopeRef | MAJEUR | RÉSOLU — UUID v4, §5.1 |
| C-06 politique audit 4xx | MAJEUR | RÉSOLU — CA-12 couvre ALL (200 + 4xx/422) |
| RS-02 rate limiting absent | MAJEUR | RÉSOLU — 10/h/user, 429, §5.2 |
Écarts mineurs v1 également traités : C-07 (proofIds max → 500), REF-01 (epic → PD-185).
Synthèse des écarts v2
Écarts BLOQUANTS (0)
Aucun écart bloquant identifié en v2. L'écart E-08 (JCS hypothèse) est reclassé MAJEUR car H-01 + RFC 8785 en Références contractualisent de facto le mécanisme ; il ne manque que la promotion de hypothèse à exigence.
Écarts MAJEURS (6 après consolidation review + confrontation)
| ID | Type | Description | Source |
| E-01 | ECT | proofCount range [1, 10_000] en §5.1 contradictoire avec borne proofIds = 500 | Review v2 |
| E-05 | ECT | Rate limiting 429 spécifié en §5.2 mais absent des CA (§7), §6, et tests | Review v2 |
| E-06 | AMB | Ordre de priorité des validations (400→403→404→413→422) non défini | Review v2 |
| E-08 | AMB | H-01 (JCS RFC 8785) classée hypothèse alors que tests la présupposent ; promouvoir en exigence | Review v2 |
| E-09 | ECT | Composition et schéma JSON de chronology.json non définis (champs, types, événements) | Review v2 |
| E-14 | AMB | Échec WORM synchrone (§5.7) : fail-closed (500) ou pass-through non spécifié | Review v2 + Confrontation |
Écarts MINEURS (8 — dont 6 désynchronisation spec↔tests inhérente au cycle v2)
| ID | Type | Description | Source |
| DESYNC-01 à 06 | ECT | Tests non mis à jour après corrections spec v2 (signedUrlTtl, doublons, enum, proofEnvelopeRef, audit, fail-fast) | Confrontation DIV-02 à DIV-07 |
| E-04/DIV-01 | ECT | Référence epic EPIC-XX dans tests (corrigé PD-185 dans spec) | Review + Confrontation |
| E-07 | AMB | UUID case-insensitive : normalisation canonique lowercase non contractualisée | Review v2 |
| E-11 | AMB | INV-85-09 (secrets temporaires chiffrés) : applicabilité à PD-85 non clarifiée (aucun secret créé) | Review v2 |
Écarts confirmés comme non-écarts (faux positifs)
| ID | Raison de rejet |
| E-10 | guideUrl : asset statique serveur, pas de livraison dynamique (déjà clarifié §5.1 readmeVerification) |
| E-12 | fail-fast 404 : testable via TC-NEG existant, absence de TC dédié non bloquant |
| E-13 | 404 indistinguabilité (inexistant vs non possédé) : choix sécurité par design, conforme OWASP |
| E-15 | INV-85-05 "Partiel" : formulation obsolète dans tests, cosmétique |
Scoring
| Critère | Score | Justification |
| completeness | 8.0 | 0 BLOQUANT (résolution v1 confirmée). 6 MAJEURS restants sont des précisions contractuelles (proofCount range, rate limiting CA, validation order, JCS promotion, chronology schema, WORM failure). Les 14 CA couvrent le périmètre fonctionnel V1 complet. |
| testability | 7.5 | 40 scénarios, 14/14 CA couverts, 15/15 INV. Mais tests non mis à jour après corrections spec v2 (6 désynchronisations). TC-429 manquant pour rate limiting. Score impacté par inhérence du cycle correctif. |
| clarity | 8.5 | Spec bien structurée, modèle de données contractuel, machine d'états explicite. Ambiguïtés restantes : validation order et WORM failure behavior. |
| traceability | 8.0 | Matrice INV→CA→TC complète. Rate limiting 429 non tracé dans CA ni tests. EPIC-XX dans tests. |
Moyenne : (8.0 + 7.5 + 8.5 + 8.0) / 4 = 8.00
Verdict attendu
- testability (7.5) < 8 → au moins un score < 8
- Moyenne 8.00 >= 7
- → RESERVE (moyenne >= 7 mais au moins un score < 8)
Convergence
- Delta v2-v1 = 8.00 - 7.75 = 0.25
- 0.25 < 0.5 ET mean >= 7 → STOP — convergence atteinte
- Verdict final : RESERVE