Aller au contenu

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

1. Références

  • Spécification : PD-287-specification.md
  • Tests contractuels : PD-287-tests.md
  • Plan d’implémentation : PD-287-plan.md
  • Date de revue : 2026-04-19
  • Reviewer : Codex (auditeur technique indépendant)

2. Constatations (écarts)

Type Référence (Spec/Test/Plan) Description Impact Gravité (BLOQUANT/MAJEUR/MINEUR)
Non-conformité Spec Spec §4 INV-287-12, §6 ERR-287-05/09/10/11, §5.8 / Plan §2ter, §6 Le guard cross-module annonce 403 pour état/session/TTL invalides, alors que le contrat destinataire impose 404 générique homogène (hors 429 rate-limit). Rupture anti-enumeration contractuelle et incohérence avec TC-ERR-05/09/10/11. BLOQUANT
Non-conformité Spec Spec §5.1 D-287-23, §4 INV-287-13 / Plan §4 (CA-287-04), §9 point 26 Le plan introduit LINK_OTP_BLOCKED, LINK_REAUTH_* hors enum contractuel audit_event_type. Soit rejet transactionnel (enum strict), soit journal parallèle non contractualisé. BLOQUANT
Test irréalisable Tests TC-NOM-02, TC-NOM-11 / Plan §5bis (front hors scope), §8 H-plan-07, §10 Les tests exigent des observables UI (RGPD avant activation, affichage warning owner), alors que le plan les externalise à un stub/story séparée. Exécution contractuelle complète des scénarios non démontrable avec le plan seul. BLOQUANT
Hypothèse implicite Spec §5.1 D-287-11, §5.2 / Plan §2.2 (OTP_CODE_TTL_SECONDS=300), §8 H-plan-03 Durée de validité OTP introduite par le plan sans règle canonique dans la spec. Interprétation libre d’un comportement sécurité critique. MAJEUR
Hypothèse implicite Spec §5.2 max_consultations_per_link / Plan §9 point 12, Code Contracts feature_flags.max_consultations_per_link_enabled Le plan ajoute un comportement d’expiration sur plafond de consultations (EXPIRED(reason: consultation_limit)) non contractualisé par invariant/CA/test. Comportement fonctionnel additionnel hors cadre contractuel. MAJEUR
Couverture manquante Invariant INV-287-22 / Plan §2ter, §3 (risque de bypass documenté) La protection inter-module dépend d’un décorateur @ShareContext() avec chemin de bypass si non appliqué. L’exigence “non contournable” n’est pas garantie structurellement par design. MAJEUR
Non-conformité Spec Spec §6 ERR-287-16, §7 CA-287-29 / Plan §3 INV-287-17, §6 Le plan décrit un fail-closed mixte (503 ou crash bootstrap) pour trust-store absent/incomplet. Observable contractuel non déterministe pour TC-ERR-16/CA-287-29. MAJEUR
Code Contract — Frontière Code Contracts (note “files ne se chevauchent pas”), module sharing-api.files vs modules otp/recipient/crypto/audit/... src/sharing/** attribué à sharing-api chevauche les périmètres de quasiment tous les autres modules. Viol de frontière de responsabilité et traçabilité contractuelle des owners. BLOQUANT
Code Contract — Cohérence Plan §2.1 étape 6 / Code Contracts reconciliation-worker.interfaces QuotaCheckService est utilisé dans le flux de création mais n’est pas contractualisé dans les interfaces du module concerné. Contrat d’interface incomplet sur un chemin critique. MAJEUR
Code Contract — Cohérence Plan §2.3 (X-Recipient-Session) / Code Contracts recipient-session.forbidden (politique cookie) Le plan transporte la session via header, le code contract impose une politique cookie (HttpOnly/Secure/SameSite). Contradiction d’interface et d’hypothèse sécurité entre documents contractuels. MAJEUR
Code Contract — Invariant Code Contracts modules otp, recipient-session, audit-journal Plusieurs invariants de code contract ne sont pas un sous-ensemble direct des INV-287-* (ex. Plan-OTP-TTL, invariants ADR, règles opérationnelles additionnelles). Dérive normative hors spec canonique. MAJEUR
Code Contract — Forbidden Code Contracts modules sharing-api, tests Des patterns “forbidden” relèvent de politique d’ingénierie locale (ex. request-scoped, discipline describe.skip) sans ancrage explicite spec/sécurité. Frontière conformité contractuelle vs conventions internes ambiguë. MINEUR
Contrainte technique non documentée Plan global (§8, §10) Absence de section “Contraintes techniques” listant les dépendances inter-PD avec statut explicite DONE/TODO/STUB. Audit de faisabilité inter-story incomplet. MINEUR
Contrainte technique non documentée Plan global (runner/tests/libs) Compatibilité ESM/CJS et adaptation runner non documentées explicitement. Risque d’échec exécution tests/CI lié au mode module. MAJEUR
Contrainte technique non documentée Plan §5bis (intégration/perf), global Variables CI requises pour tests d’intégration non documentées (DATABASE_URL, CI=true, etc.). Reproductibilité CI partielle et audit d’exécution incomplet. MINEUR

3. Synthèse

  • Nombre d’écarts par gravité : BLOQUANT = 4, MAJEUR = 8, MINEUR = 3
  • Points critiques :
  • Non-conformité anti-enumeration (403 vs 404 générique contractuel).
  • Événements d’audit hors enum contractuelle.
  • Tests contractuels UI non réalisables avec périmètre planifié.
  • Frontières de code contracts en chevauchement (src/sharing/**).

4. Verdict de la revue

  • Statut : ⛔ Rejeté
  • Motif synthétique : le plan présente des non-conformités contractuelles bloquantes (anti-enumeration, taxonomie d’événements audit), des tests contractuels non réalisables dans le périmètre décrit, et des incohérences structurantes dans les code contracts (frontières/cohérence), incompatibles avec un audit tiers de conformité stricte. tokens used 89 035 Écriture directe impossible dans ce workspace (read-only). Contenu de PD-287-plan-review.md :