Aller au contenu

PD-254 — Dossier de conformité Gate 3 (CONFORMITY_CHECK) — v2

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)

  1. R-01 : Ajouter MANIFEST_STALE à la liste §3 et §5.2 des codes d'erreur métier
  2. 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)
  3. R-03 : Référencer RFC 8785 (JCS) pour la canonicalisation JSON du manifest
  4. R-04 : Ajouter un test TC-PRECHECK-EXPIRED-01 avec scénario Given/When/Then
  5. R-05 : Spécifier le déclencheur PRECHECK_EXPIRED (recommandé : vérification lazy à la tentative de transition vers CUTOVER_AUTHORIZED)