Aller au contenu

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

1. Documents de référence

  • Spécification : PD-275-specification.md v2
  • Tests : PD-275-tests.md v2
  • Plan : PD-275-plan.md (Claude-p)
  • Code contracts : PD-275-code-contracts.yaml (Claude-p)
  • Review : PD-275-review-step5-v1.md (ChatGPT gpt-5.3-codex)
  • Confrontation : PD-275-confrontation-step5-v1.md (Claude-p)

2. Synthèse des écarts

Écarts BLOQUANTS (1)

ID Type Description Analyse
BLK-01 Réalisabilité FT4 séquencement : contrôle signer intervient après création batch dans le flux planifié. TC-NOM-06/07 exigent "aucun batch créé" si signer REVOKED/inconnu. Écart réel — le plan doit garantir que le contrôle signer est évalué AVANT toute création de batch dans submitBatch(). Le code du service doit commencer par assertSignerActive() avant buildBatch().

Écarts MAJEURS (3)

ID Type Description Analyse
MAJ-01 Non-conformité SignerActiveGuard (C8) comme garde NestJS route contradictoire avec INV-275-11 (transaction + FOR UPDATE) et avec l'architecture BullMQ worker P1 et P2 convergent. Le guard HTTP est un pré-contrôle sans transaction — le vrai contrôle transactionnel est dans le service. C8 devrait être supprimé ou reclassé comme optimisation non contractuelle.
MAJ-02 Hypothèse Autorisation revokeSigner() portée uniquement par @Roles au controller — appels service-to-service non protégés Écart réel mais atténué : dans le périmètre PD-275, revokeSigner() n'est exposé que via le controller. L'ajout d'une assertion au niveau service est une bonne pratique mais pas bloquante.
MAJ-03 Complétude C8 (SignerActiveGuard) absent des code contracts Confirmé P1 + P2 (ZO-01). Si C8 est supprimé (cf. MAJ-01), l'écart disparaît.

Écarts MINEURS (5)

ID Type Description
MIN-01 Terminologie PENDING_FINALITY (plan) vs NON_FINALIZED (spec) — DIV-02
MIN-02 Traçabilité Dépendances inter-PD sans statut normalisé
MIN-03 Technique Variables CI non documentées
MIN-04 Duplication Tests TC-ERR-02/04/05 doublons de TC-NOM — DIV-04
MIN-05 Divergence ERR-SIGNER-NOT-FOUND implicite dans F3 — DIV-05

3. Scoring

Gate 5 — AMBIGUITY : feasibility, coverage, risk_mitigation, coherence.

Feasibility (faisabilité du plan)

  • BLK-01 (séquencement FT4) : -2
  • MAJ-01 (SignerActiveGuard contradictoire) : -1
  • Score : 10 - 2 - 1 = 7.0

Coverage (couverture spec/tests par le plan)

  • MAJ-03 (C8 sans code contract) : -1
  • MIN-04 (duplication tests) : -0.25
  • Score : 10 - 1 - 0.25 = 8.75

Risk Mitigation (gestion des risques)

  • MAJ-02 (autorisation service-level absente) : -1
  • MIN-02 (dépendances sans statut) : -0.25
  • MIN-03 (variables CI) : -0.25
  • Score : 10 - 1 - 0.25 - 0.25 = 8.5

Coherence (cohérence plan/spec/tests)

  • MIN-01 (terminologie PENDING_FINALITY) : -0.25
  • MIN-05 (ERR-SIGNER-NOT-FOUND implicite) : -0.25
  • Score : 10 - 0.25 - 0.25 = 9.5

4. Résumé scoring

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

5. Écarts à corriger

  1. BLK-01 : Réordonner FT4 — assertSignerActive() DOIT précéder buildBatch() dans submitBatch()
  2. MAJ-01 : Supprimer C8 (SignerActiveGuard) ou le reclasser comme optimisation non contractuelle
  3. MAJ-02 : Ajouter assertion autorisation dans SignerRegistryService.revokeSigner() en complément du @Roles
  4. MAJ-03 : Résolu si C8 est supprimé (cf. MAJ-01)