Aller au contenu

PD-264 — Dossier de conformité (Gate 5 — AMBIGUITY v1)

Documents de référence

  • Plan : PD-264-plan.md
  • Review (Phase 1) : PD-264-plan-review.md (ChatGPT)
  • Confrontation (Phase 2) : PD-264-confrontation-step5.md (Claude)
  • Spec : PD-264-specification.md (v3, Gate 3 GO)
  • Tests : PD-264-tests.md (v3, Gate 3 GO)

Analyse croisée Review + Confrontation

Écart #1 — BLOQUANT proposé (ChatGPT) : TC-264-11 non réalisable

Position ChatGPT : Le plan fonde l'interdiction des transitions inverses sur "pas de méthode" plutôt que sur une API explicite de transition. TC-264-11 ne peut pas exécuter 5 tentatives explicites.

Position Claude : Convergence confirmée sur les 5 transitions interdites. Les tests unitaires vérifient via "tentative d'appel aux méthodes de transition qui refusent l'opération" (Plan §1 TASK-4).

Délibération : Le mécanisme est valide en test unitaire : on vérifie que l'API n'expose pas de chemin pour les transitions interdites (absence de méthode = rejet par construction) ET que les méthodes existantes refusent les séquences invalides (ex: appeler persistToken() depuis un état REJECTED → exception). Le plan précise un enum NonceValidationStatus et des méthodes qui vérifient l'état courant. TC-264-11 est réalisable comme test unitaire vérifiant les gardes de méthode. Reclassé de BLOQUANT → MAJEUR (le plan devrait expliciter le mécanisme de test plus clairement).

Écart #2 — MAJEUR (ChatGPT + Claude DIV-02/ZO-01) : Collision nonce 0x00...00

Les deux reviewers convergent sur ce point critique : si plusieurs tokens PD-55 ont nonce = NULL, le backfill uniforme 0x00...00 viole l'index UNIQUE.

Délibération : Écart MAJEUR légitime. Le plan doit soit confirmer H-01 (aucun token existant) soit proposer des nonces de remplissage uniques (ex: hash(id)).

Écart #3 — MAJEUR (ChatGPT) : CA-264-12 affaibli par skip nightly

Position ChatGPT : Le plan permet un "skip conditionnel" du nightly si TSA indisponible.

Position Claude (DIV-06) : Impact faible, détail d'intégration CI.

Délibération : Le skip ne compte pas comme succès (status unstable). CA-264-12 n'est pas affaibli, il est rendu réaliste face à l'indisponibilité d'un service externe. Le plan documente le comportement de dégradation gracieuse. Reclassé de MAJEUR → MINEUR.

Écart #4 — MAJEUR (ChatGPT) : H-01 non vérifié au Go/No-Go

Délibération : Légitime. Le Go/No-Go dit "À confirmer" puis conclut "GO". Le plan aurait dû marquer cela comme condition conditionnelle. Cependant, la Phase A de migration gère les deux cas (tokens existants et vierge). Maintenu MAJEUR — le plan devrait être plus rigoureux sur la vérification de H-01.

Écart #5 — MAJEUR (ChatGPT) : Sur-contrat code contracts

Délibération : Les code contracts ajoutent des contraintes d'implémentation (migration réversible, REJECTED in-memory) qui ne sont pas dans la spec mais découlent logiquement du plan. C'est le rôle des code contracts d'affiner la spec pour l'implémentation. Reclassé de MAJEUR → MINEUR.

Écart #6 — MAJEUR (ChatGPT + Claude DIV-02) : Nonce backfill non contractualisé

Délibération : Même cluster que #2. Le backfill 0x00...00 est une décision d'implémentation non spécifiée. Le plan la prend mais doit la rendre explicite et résoudre la collision. Regroupé avec #2.

Écarts confrontation supplémentaires

  • DIV-01 (trigger désactivation) : Faible impact, détail d'implémentation. → MINEUR
  • DIV-03 (TC-MIG absents du cahier de tests) : Moyen impact. Les TC-MIG sont des ajouts légitimes du plan. → MINEUR
  • DIV-04 (H-03 worker PD-55 non vérifié) : Moyen impact. Hypothèse à vérifier. → MAJEUR
  • DIV-05 (exit code ESCALADE) : Faible impact. → MINEUR
  • ZO-02..06 : Mineurs, détails d'implémentation.

Synthèse des écarts v1

Écarts BLOQUANTS (0)

Aucun (reclassement du BLOQUANT ChatGPT → MAJEUR).

Écarts MAJEURS (3)

# Type Réf. Description
1 AMB Plan TASK-4, TC-264-11 Mécanisme de test des transitions interdites insuffisamment explicité
2 AMB Plan TASK-1, ZO-01 Collision nonce backfill 0x00 si tokens PD-55 multiples avec nonce NULL
3 HYP Plan H-01/H-03 Hypothèses migration non vérifiées (données existantes, worker PD-55)

Écarts MINEURS (6)

# Type Réf. Description
4 DIV CA-264-12, Plan nightly Skip conditionnel = dégradation gracieuse documentée
5 DIV Code contracts Sur-contrat d'implémentation légitime
6 DIV Plan TASK-1, trigger Désactivation trigger non dans la spec
7 DIV TC-MIG-01/02/03 Ajouts plan non dans cahier de tests
8 AMB Plan TASK-6, TC-264-07 Convention exit code non contractualisée
9 AMB ZO-02..06 Zones d'ombre mineures (nommage SQL, Prolog, grep)

Scoring (4 critères AMBIGUITY)

Feasibility (faisabilité du plan)

  • Architecture claire : 7 TASKs bien découpées, dépendances identifiées
  • Go/No-Go documenté (6/7 hypothèses OK, H-01 "À confirmer")
  • Migration DDL en 3 phases réaliste
  • Écart #2 (collision backfill) menace la faisabilité migration si tokens existants = -0.75
  • Écart #3 (H-01/H-03 non vérifiés) = -0.5
  • Score : 10 - 1×0.75 - 1×0.5 - 1×0.25 = 8.5

Coverage (couverture INV/CA)

  • Checklist INV/CA 26/26 complète (§12)
  • Mapping INV → mécanisme → composant → observable (§3)
  • Mapping CA → mécanisme → composant → observable (§4)
  • Mapping TC → mécanisme → point d'observation (§5)
  • TC-MIG ajoutés pour adresser constats Gate 3 (R01/R02)
  • Écart #1 (TC-264-11 mécanisme) = mécanisme décrit mais insuffisamment explicité = -0.5
  • Score : 10 - 1×0.5 = 9.5

Risk_mitigation (atténuation des risques)

  • 7 risques sécurité identifiés avec mitigations (§7)
  • 8 hypothèses documentées avec impact si faux (§8)
  • 5 points de vigilance explicites (§9)
  • Hors périmètre clairement borné (§10)
  • Écart #2 (collision nonce) = risque non mitigé = -1.0
  • Écart #3 (hypothèses non vérifiées) = mitigation incomplète = -0.5
  • Score : 10 - 1×1.0 - 1×0.5 = 8.5

Coherence (cohérence plan ↔ spec ↔ tests)

  • Confrontation confirme convergence forte
  • 10 convergences identifiées (§2 confrontation)
  • 6 divergences (DIV-01..06) : principalement clarifications d'implémentation
  • Écart #1 (TC-264-11) = divergence review/plan sur mécanisme = -0.5
  • Mineurs (TC-MIG, trigger, convention exit) = 3×0.25
  • Score : 10 - 1×0.5 - 3×0.25 = 8.75

Scores finaux

Critère Score
feasibility 8.5
coverage 9.5
risk_mitigation 8.5
coherence 8.75
Moyenne 8.8125

Confrontation

La confrontation Claude confirme une convergence forte sur les 14 INV, 12 CA, 18 TC et 7 TASK. Les divergences identifiées (DIV-01 à DIV-06) sont principalement des clarifications d'implémentation ou des additions légitimes du plan.

Le point critique partagé par les deux reviewers est la collision potentielle des nonces de remplissage (DIV-02/ZO-01), adressable par une correction mineure de la stratégie de backfill.


Délibération

Le plan est structurellement solide, avec une couverture complète des invariants et critères d'acceptation. Les 3 écarts majeurs sont des questions de précision adressables par correction du plan sans refonte architecturale :

  1. #1 (TC-264-11) : Expliciter le mécanisme de test dans le plan.
  2. #2 (collision backfill) : Utiliser des nonces de remplissage uniques (randomBytes ou hash(id)) au lieu de 0x00...00 uniforme.
  3. #3 (hypothèses) : Vérifier H-01 et H-03 avant implémentation.

Recommandation : Verdict déterministe à calculer.