Date : 2026-03-13 Story : PD-254 — Protocole migration probatoire Gate : 3 — CONFORMITY_CHECK Itération : v2 Reviewers : Claude (P1 review + P2 confrontation — fallback Art. II, prompt >30KB)
1. Documents analysés
| Document | Auteur | Version | Taille |
| PD-254-specification.md | ChatGPT → Claude (correction v2) | v2 | 32KB |
| PD-254-tests.md | ChatGPT → Claude (correction v2) | v2 | 26KB |
2. Progression v1 → v2
| Métrique | v1 | v2 | Évolution |
| Constats totaux | 15 | 8 | -47% |
| Bloquants | 3 | 2 | -33% |
| Majeurs | 8 | 3 | -63% |
| Mineurs | 3 | 3 | stable |
| Score moyen | 6.375 | — | — |
Les 15 constats v1 ont tous été traités. Les 2 bloquants résiduels portent sur un même sujet (code MANIFEST_STALE non formalisé + transition associée impossible).
3. Écarts identifiés
Bloquants (2)
| ID | Type | Constat | Source | Impact |
| R-01 | Contradiction | Code métier MANIFEST_STALE utilisé dans §5.7/ERR-12 mais absent de la liste des 5 codes définis en §3/§5.2 | P1-R-01, P2-DIV-01, P2-DIV-02 | INV-254-10 violé — code métier non ancré formellement |
| R-02 | Contradiction | ERR-12 prescrit POSTCHECK_RUNNING → DRAFT — transition inexistante dans §5.2 | P1-R-02 | Implémentation impossible sans contredire §5.2 ou ERR-12 |
Majeurs (3)
| ID | Type | Constat | Source | Impact |
| R-03 | Ambiguïté | Canonicalisation JSON du manifest non référencée (RFC 8785 JCS ?) | P1-R-03 | INV-254-12 et INV-254-09 compromis — hash non reproductible entre sérialiseurs |
| R-04 | Incohérence Spec↔Tests | Aucun test dédié pour la transition PRECHECK_EXPIRED (TTL dépassé) | P1-R-04, P2-DIV-03 | Transition SLA critique non vérifiable |
| R-05 | Ambiguïté | Mécanisme de détection de PRECHECK_EXPIRED non spécifié (lazy vs proactif) | P1-R-05 | TC-INV-10A non reproductible sans connaître le déclencheur |
Mineurs (3)
| ID | Type | Constat | Source | Impact |
| R-06 | Incohérence Spec↔Tests | readability_sample_count hors bornes : spec=clamp, test=clamp ou rejet | P1-R-06, P2-DIV-05 | Divergence de comportement |
| R-07 | Incohérence Spec↔Tests | Transitions retour depuis CUTOVER_AUTHORIZED sans test dédié | P1-R-07, P2-ZO-07, P2-ZO-10 | Conservation manifest non vérifiée |
| R-08 | Hypothèse dangereuse | TC-NOM-03 présuppose un dataset cible post-migration (hors périmètre PD-254) | P1-R-08 | Non-reproductibilité du test nominal |
Divergences P1↔P2 additionnelles
| ID | Divergence | Impact |
| DIV-04 | Échec attestation : rollback obligatoire (spec) vs rollback OU incident majeur (tests TC-ERR-08) | Comportement non déterministe |
| DIV-06 | TC-CLR-01 ne teste qu'une valeur de clearing_cycles (3) alors que min=2, max=10 | Couverture paramétrique limitée |
Zones d'ombre (consolidées)
10 zones d'ombre identifiées par la confrontation (ZO-01 à ZO-10). Les points Q restants (Q-03, Q-04, Q-06, Q-07, Q-08) sont reconnus comme non testables par les deux documents et devront être résolus avant implémentation. Aucun n'est bloquant pour la validation du protocole.
4. Scoring
| Critère | Score | Justification |
| Completeness | 7.0 | v1=5.5 → v2=7.0 : 5 états FSM corrigés, manifest protégé, lisibilité définie. Résiduel : MANIFEST_STALE non listé, transition ERR-12 impossible, canonicalisation JSON manquante. |
| Testability | 7.0 | v1=6.0 → v2=7.0 : TC-CLR-01, TC-MAN-01 ajoutés, Q-points documentés. Résiduel : pas de test dédié PRECHECK_EXPIRED, transitions retour CUTOVER_AUTHORIZED non testées. |
| Clarity | 8.0 | v1=6.5 → v2=8.0 : Termes clés définis (lisibilité, artefacts logiques, initiateur), codes métier vs états séparés. Résiduel : canonicalisation JSON, déclencheur PRECHECK_EXPIRED. |
| Traceability | 8.5 | v1=7.5 → v2=8.5 : protocol_version ajouté, JSON Schemas fournis, INV-254-12 ancré. Résiduel mineur : dataset cible test. |
5. Dérogation Art. II
La confrontation (Phase 2) a été exécutée par claude -p au lieu de ChatGPT (OpenCode). Raison : prompt assemblé de 61KB, au-dessus du seuil ~30KB qui déclenche le mode agentic d'OpenCode (cf. mémoire opérationnelle PD-283). Les deux phases ont donc été exécutées par le même LLM (Claude), ce qui constitue une dérogation à l'Article II (séparation des pouvoirs). Cette dérogation est documentée et non structurelle — elle pourrait être levée avec un prompt compressé.
6. Verdict préliminaire
- Scores : completeness=7.0, testability=7.0, clarity=8.0, traceability=8.5
- Moyenne : 7.625
- Score min : 7.0 (completeness, testability)
- Règle : Moyenne >= 7, score min >= 6, au moins un score < 8 → RESERVE
7. Recommandations de correction (si itération v3)
- R-01 : Ajouter
MANIFEST_STALE à la liste §3 et §5.2 des codes d'erreur métier - R-02 : Corriger ERR-12 — soit ajouter la transition
POSTCHECK_RUNNING → DRAFT dans §5.2, soit changer la prescription ERR-12 (transition vers ROLLED_BACK ou RECONCILIATION_FAILED) - R-03 : Référencer RFC 8785 (JCS) pour la canonicalisation JSON du manifest
- R-04 : Ajouter un test TC-PRECHECK-EXPIRED-01 avec scénario Given/When/Then
- R-05 : Spécifier le déclencheur PRECHECK_EXPIRED (recommandé : vérification lazy à la tentative de transition vers CUTOVER_AUTHORIZED)