Aller au contenu

PD-278 — Plan d’implémentation : Revue

1. Références

  • Spécification : PD-278-specification.md
  • Tests contractuels : PD-278-tests.md
  • Plan d’implémentation : PD-278-plan.md
  • Date de revue : 2026-03-01
  • Reviewer : Agent de revue technique indépendant

2. Constatations (écarts)

Type Référence (Spec/Test/Plan) Description Impact Gravité (BLOQUANT/MAJEUR/MINEUR)
Non-conformité Spec INV-278-01, Spec §4 + §5.2 / Plan §4 (CA-01), Plan §9 (V-01), Plan §5.3 (TC-INV-01) EC-01 — Le plan acte explicitement une divergence du set d’états (enum DB avec RESTITUTED) et remplace l’exigence “set exact 4 états” par “DIP présent”. Affaiblissement contractuel d’un invariant non négociable. BLOQUANT
Test irréalisable Test TC-INV-01 / Spec INV-278-01 / Plan §9 (V-01), Plan §5.3 EC-02 — Le test contractuel exige l’ensemble exact {PENDING, SEALED, DIP, EXPIRED}, alors que le plan annonce un ensemble DB élargi. Incompatibilité directe Plan↔Tests, échec de validation contractuelle attendu. BLOQUANT
Non-conformité Spec Spec §6 (liste codes erreurs), Spec axe 1 “aucun comportement non spécifié” / Plan §3 (INV-278-02 risque), Plan §8 (H-03), Code contracts dip-rate-limit EC-03 — Le plan introduit un rejet 503 en cas d’indisponibilité Redis (fail-closed), non prévu par le contrat d’erreurs. Introduction d’un comportement hors spécification API. MAJEUR
Non-conformité Spec Spec §6 (codes définis), Spec §5.14 / Plan §13 C9 étape 6 (“sinon 404 / RLS 403”) EC-04 — Le plan prévoit un cas 404 non contractualisé dans la matrice d’erreurs. Non-conformité du contrat API black-box et ambiguïté d’assertion des tests. MAJEUR
Non-conformité Spec INV-278-04, Spec §5.8 (“Persistance audit refus sécurité : synchrone”) / Plan §2.3, Plan §3 (INV-278-04), Plan §13 C11 (logAsync) EC-05 — L’audit des refus sécurité est décrit en asynchrone (logAsync) au lieu d’une persistance synchrone dédiée exigée. Rupture potentielle de traçabilité NF Z42-013 sur événements refusés. BLOQUANT
Couverture manquante INV-278-04, TC-ERR-03, TC-INV-04 / Plan §3 (risque “401 pré-controller non capturé”), Plan §9 (V-05) EC-06 — Le plan reconnaît que les 401 rejetés avant contrôleur peuvent échapper au filtre d’audit refus, sans mécanisme garantissant la couverture. Audit de sécurité incomplet sur un cas explicitement obligatoire. MAJEUR
Couverture manquante Spec §5.13 (attestation: conservation 10 ans, append-only, réplication lecture), INV-278-05 / Plan §13 C9, Plan §8 (H-09) EC-07 — Le plan mentionne la table d’attestation mais ne décrit pas de mécanisme explicite garantissant conservation 10 ans, append-only et réplication. Critères de preuve probatoire non démontrés dans le plan. MAJEUR
Couverture manquante INV-278-12 + Spec §5.9/§5.11 (ordre global cross-module obligatoire) / Plan §11, Plan §9 (V-02) EC-08 — L’exigence cross-module est laissée en “vérification” et non en mécanisme contraignant porté par le plan. Risque résiduel de deadlock/race inter-modules non traité contractuellement. MAJEUR
Hypothèse implicite Spec §3 (copies fourni par couche stockage) + INV-278-02 / Plan §8 (H-06), Plan §9 (V-08) EC-09 — L’équivalence copies = geo_copy_count est posée comme hypothèse avec possibilité de stub dépendant d’une autre story. Dépendance implicite pouvant invalider la garde copies >= MIN_COPIES. MAJEUR
Hypothèse implicite INV-278-07, INV-278-14 / Plan §2.4 (“retention_service, BYPASSRLS”), Plan §8 (H-08) EC-10 — Le fonctionnement suppose un rôle technique BYPASSRLS non contractualisé dans la spec. Changement de posture d’accès non explicitement encadré contractuellement. MAJEUR
Risque sécu/conformité INV-278-10, CA-15 (“testable sans réserve”) / Plan §3 (INV-278-10 risque “stub si HSM non disponible”), Plan §4 (CA-15 risque), Plan §9 EC-11 — Le plan accepte un mode “stub HSM” conditionnel sur une dépendance externe. Invariant crypto potentiellement non satisfait en exécution réelle. BLOQUANT
Contrainte technique non documentée Exigence §7 du prompt (section “Contraintes techniques”, dépendances inter-PD avec statut DONE/TODO/STUB) / Plan global EC-12 — La section normative “Contraintes techniques” est absente et les dépendances inter-PD ne sont pas structurées avec statuts exigés. Traçabilité de dépendances incomplète pour audit de plan. MINEUR
Contrainte technique non documentée Exigence §7 du prompt (framework Jest/Vitest explicite) / Plan §12 EC-13 — Le framework de test n’est pas explicitement verrouillé (Jest ou Vitest). Ambiguïté d’exécution du périmètre de tests. MINEUR
Contrainte technique non documentée Exigence §7 du prompt (compatibilité ESM/CJS et dépendances ESM-only) / Plan global EC-14 — Aucune section explicite sur compatibilité ESM/CJS et adaptation runner. Risque d’échec de campagne tests/CI non couvert au niveau plan. MAJEUR
Contrainte technique non documentée Exigence §7 du prompt (variables CI documentées) / Plan global EC-15 — Variables CI requises (DATABASE_URL, CI=true, etc.) non documentées. Reproductibilité CI des tests d’intégration non garantie. MINEUR
Code Contract — Invariant Code contracts dip-migration + dip-tests / Spec INV-278-01, CA-11 EC-16 — Certains invariants de code contracts ne sont pas un sous-ensemble strict de la spec (ex. formulation “inclut exactement DIP via ADD VALUE”, contrainte “couverture >=80%” non issue des invariants spec). Décalage contrat-code vs contrat-spec, source d’ambiguïté d’audit. MAJEUR
Code Contract — Forbidden Code contracts (plusieurs modules, règles REX non rattachées explicitement à spec/sécurité) EC-17 — Plusieurs forbidden relèvent de conventions internes/REX sans justification explicite par exigence spec ou sécurité normative dans le plan. Justification contractuelle incomplète des interdictions. MINEUR

3. Synthèse

  • Nombre d’écarts par gravité : BLOQUANT = 4, MAJEUR = 9, MINEUR = 4
  • Points critiques :
  • Incohérence structurante sur l’invariant d’état (set exact vs enum élargi) impactant spec et tests.
  • Traçabilité sécurité non garantie sur refus (asynchrone + couverture 401 incertaine).
  • Invariant crypto conditionné (stub HSM), incompatible avec l’exigence “sans réserve”.
  • Comportements d’erreur hors contrat (503, 404) introduits par le plan.

4. Verdict de la revue

  • Statut : ⛔ Rejeté
  • Motif synthétique : Le plan présente des non-conformités contractuelles sur des invariants non négociables (set d’états, auditabilité synchrone, invariant crypto), des tests contractuels rendus incohérents, et des comportements API non spécifiés.