Aller au contenu

PD-177 — Dossier de conformite Gate 5 (AMBIGUITY)

Date : 2026-02-23 Gate : 5 Type : AMBIGUITY Iteration : 1

Synthese

Source Ecarts identifies Score propose
P1 (ChatGPT) 1 BLOQUANT, 8 MAJEUR, 1 MINEUR ~6.5/10
P2 (Claude) 0 BLOQUANT, 1 MAJEUR, 7 MINEUR, 2 REJETES ~8.0/10

Arbitrage des ecarts

E-01 — Passthrough tezos (P1: MAJEUR → Arbitrage: MINEUR)

Justification : Le plan couvre le cas tezos via exclusion (INV-177-04 : "ignore les requetes tezos"). Le code contract interdit "accepter blockchain='tezos' comme valide". La spec autorise "ignoree ou passthrough". Un mecanisme dedie pour ne rien faire serait de la sur-ingenierie. Le plan manque un detail sur le point d'implementation exact mais c'est un detail de decomposition (etape 6a), pas un ecart de plan. Type : AMB (ambiguite mineure)

E-02 — Variables d'environnement en runtime (P1: MAJEUR → Arbitrage: REJETE)

Justification : En mode S2 KMS, la cle privee n'est jamais dans le processus applicatif. Les env vars contiennent l'ARN KMS, pas le secret. Le plan documente cela dans INV-177-10. L'architecture S2 rend l'ecart non applicable. Le reviewer confond "canal d'entree" (lecture config) avec "canal de sortie" (export de secret). Type : FAUX POSITIF

E-03 — signer_address nullable (P1: MAJEUR → Arbitrage: MINEUR)

Justification : La nullabilite est une decision de backward-compatibility expliquee dans le plan. Le service garantit l'ecriture pour les nouveaux enregistrements. Le TC-177-06 verifie la presence. Le plan pourrait etre plus explicite sur la "garantie applicative de non-nullite pour les nouveaux batches" mais c'est un detail de precision, pas un ecart de couverture. Type : AMB (ambiguite mineure)

E-04 — Mecanisme fail-closed TC-SEC-02 (P1: BLOQUANT → Arbitrage: MAJEUR)

Justification : Le TC-SEC-02 est realisable (injection de pattern → detection → blocage → verification canaux). Le test est standard en NestJS (interceptor RxJS). Cependant, le plan decrit le mecanisme de maniere imprecise : "intercepte l'Observable avant next.handle()" est techniquement incorrect. L'interceptor NestJS pipe sur le resultat de next.handle() (post-handler), pas avant. Cette imprecision doit etre corrigee dans la decomposition mais ne bloque pas l'implementation. Le test reste realisable car le pattern interceptor NestJS est bien documente. Type : ECT (ecart technique — description imprecise du mecanisme)

E-05 — Concurrence multi-instance (P1: MAJEUR → Arbitrage: MINEUR)

Justification : En S2 KMS, la derivation d'adresse est mathematiquement deterministe (meme ARN KMS = meme adresse Ethereum sur toutes les instances). Le risque de divergence est nul tant que la configuration est identique par environnement. L'hypothese implicite est que les instances partagent la meme config — ce qui est garanti par l'architecture NestJS (ConfigModule). Type : AMB (hypothese implicite mineure)

E-06 — Atomicite et idempotence (P1: MAJEUR → Arbitrage: MINEUR)

Justification : PD-55 fournit les mecanismes d'atomicite (advisory lock, transaction englobante, concurrency=1 BullMQ). Le plan section 6.1 documente PD-55 comme dependance. PD-177 enrichit le modele sans modifier le flux transactionnel. Les learnings contextuels confirment le pattern. Le plan devrait mentionner explicitement "atomicite heritee de PD-55" mais ce n'est pas un ecart de couverture. Type : AMB (dependance implicite)

E-07 — WORM DB hors perimetre (P1: MAJEUR → Arbitrage: REJETE)

Justification : La spec section 3 dit explicitement : "La protection WORM au niveau base est hors perimetre PD-177". Le verdict Gate 3 v2 NE-04 (MINEUR) a identifie et accepte cette decision. Le plan la documente dans HI-04. Demander plus que ce que la spec contractualise depasse le perimetre de la review AMBIGUITY. Type : FAUX POSITIF

E-08 — Cardinalite 13 vs 14 modules (P1: MINEUR → Arbitrage: MINEUR)

Justification : Le resume annonce "13 modules" mais le YAML contient 14 entries. Ecart documentaire reel sans impact fonctionnel. Tous les composants ont un owner et des frontieres definies. Type : AMB (incoherence documentaire)

E-09 — Code contracts relations immutabilite (P1: MAJEUR → Arbitrage: MINEUR)

Justification : Le code contract anchor-service-enrichment couvre INV-177-14 et interdit les entrees orphelines. L'atomicite est heritee de PD-55. Les code contracts definissent les frontieres PD-177, pas les proprietes heritees des stories fondation. Le plan section 6.1 documente cette dependance. Type : AMB (dependance non repetee dans code contracts)

E-10 — Dependance PostgreSQL reel (P1: MAJEUR → Arbitrage: MINEUR)

Justification : Le plan section 6.4 mentionne "npm run migration:validate + npm run migration:run" et la checklist pre-merge les repete. La commande migration:run implique necessairement un PostgreSQL. La precondition est implicite dans l'outil utilise. Pourrait etre plus explicite dans la section "Contraintes techniques". Type : AMB (prerequis implicite)

Liste consolidee des ecarts

ID Type Severite Description
NE-05-01 AMB MINEUR Passthrough tezos : point d'implementation exact non precise
NE-05-02 ECT MAJEUR Mecanisme fail-closed SecretLeakInterceptor : description imprecise du point d'interception NestJS (post-handler pipe RxJS, pas pre-handler)
NE-05-03 AMB MINEUR signer_address : garantie applicative de non-nullite pour nouveaux batches non explicite
NE-05-04 AMB MINEUR Concurrence multi-instance : hypothese determinisme S2 KMS implicite
NE-05-05 AMB MINEUR Atomicite heritee PD-55 non mentionnee explicitement dans le plan
NE-05-06 AMB MINEUR Cardinalite modules : annonce 13, YAML contient 14 entries
NE-05-07 AMB MINEUR Code contracts : dependance atomicite PD-55 non repetee
NE-05-08 AMB MINEUR Pre-requis PostgreSQL local non contractualise explicitement

Total : 0 BLOQUANT, 1 MAJEUR, 7 MINEUR, 2 FAUX POSITIFS rejetes.

Verification constitutionnelle (OBLIGATOIRE)

  • Article I — Quality Gates : Seuils mathematiques respectes
  • Article II — Validation croisee : Plan produit par Claude → review par ChatGPT (P1) → confrontation Claude (P2)
  • Article III — Tracabilite : Artefacts review + confrontation + dossier produits
  • Article IV — Non-regression : N/A (pas de code a cette etape)
  • Article V — Boucle acceptabilite : N/A (pas de code a cette etape)

Scores proposes

Critere Score Justification
Feasibility 8.5 Plan realisable avec 22 fichiers, 6 phases ordonnees, dependances claires. 1 imprecision technique (N-02) corrigeable en decomposition.
Coverage 8.5 21/21 INV mappes avec observables, 17/17 CA mappes avec tests, 8/8 ERR mappes. Couverture exhaustive.
Risk mitigation 8.0 6 risques identifies avec mitigations. 10 hypotheses explicites. Le mecanisme fail-closed (NE-05-02) est le seul point necessitant precision. Les 2 FP de la review P1 confirment que le plan anticipe bien les risques.
Coherence 8.0 Flux en 6 phases coherent. Dependances documentees. 1 incoherence documentaire mineure (13 vs 14 modules). Le plan herite de PD-55 mais ne l'explicite pas toujours.

Moyenne : (8.5 + 8.5 + 8.0 + 8.0) / 4 = 8.25

Verdict derive : Tous les scores >= 8.0 → GO