Aller au contenu

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

1. Références

  • Spécification : PD-172-specification.md
  • Tests contractuels : PD-172-tests.md
  • Plan d’implémentation : PD-172-plan.md
  • Date de revue : …
  • Reviewer : …

2. Constatations (écarts)

Type Référence (Spec/Test/Plan) Description Impact Gravité (BLOQUANT/MAJEUR/MINEUR)
Non-conformité Spec Spec §… / Plan §… BLOQUANT
Couverture manquante Invariant INV-… MAJEUR
Test irréalisable TC-… BLOQUANT
Hypothèse implicite Plan §… MAJEUR
Risque sécu/conformité MAJEUR

3. Synthèse

  • Nombre d’écarts par gravité : …
  • Points critiques : …

4. Verdict de la revue

  • Statut : ⛔ Rejeté / ⚠️ Accepté avec réserves / ✅ Accepté
  • Motif synthétique : …

codex Je vais faire la revue contractuelle du plan PD-172 contre la spec, les tests et les code contracts, puis produire le contenu final au format exact du template. Je commence par vérifier les fichiers locaux (plan/spec/tests/template) pour m’aligner strictement sur les sources du repo. exec /bin/zsh -lc "pwd; rg --files | rg 'PD-172|PD-172-plan-review|rate-limiting-redis|ProbatioVault-doc/docs/meta/templates'" in /Users/loic/Developpement/ProbatioVault/ProbatioVault-ia-governance succeeded in 648ms: pyenv: cannot rehash: /Users/loic/.pyenv/shims isn't writable pyenv: cannot rehash: /Users/loic/.pyenv/shims isn't writable /Users/loic/Developpement/ProbatioVault/ProbatioVault-ia-governance data/specs-index/backend/epics/backend-core/PD-172-rate-limiting-redis/index.yaml data/specs-index/backend/epics/backend-core/PD-172-rate-limiting-redis/verdict-step3-v1.yaml data/specs-index/backend/epics/backend-core/PD-172-rate-limiting-redis/specification.yaml data/specs-index/backend/epics/backend-core/PD-172-rate-limiting-redis/verdict-step3-v2.yaml data/specs-index/backend/epics/backend-core/PD-172-rate-limiting-redis/besoin.yaml data/specs-index/backend/epics/backend-core/PD-172-rate-limiting-redis/tests.yaml data/specs-index/backend/epics/backend-core/PD-172-rate-limiting-redis/plan.yaml

codex J’ai trouvé les sources PD-172 sous data/specs-index/... en YAML, pas les .md directement. Je vais lire ces fichiers pour confirmer les contenus contractuels avant d’émettre les écarts. exec /bin/zsh -lc "sed -n '1,220p' data/specs-index/backend/epics/backend-core/PD-172-rate-limiting-redis/specification.yaml" in /Users/loic/Developpement/ProbatioVault/ProbatioVault-ia-governance exec /bin/zsh -lc "sed -n '1,220p' data/specs-index/backend/epics/backend-core/PD-172-rate-limiting-redis/tests.yaml" in /Users/loic/Developpement/ProbatioVault/ProbatioVault-ia-governance exec /bin/zsh -lc "sed -n '1,260p' data/specs-index/backend/epics/backend-core/PD-172-rate-limiting-redis/plan.yaml" in /Users/loic/Developpement/ProbatioVault/ProbatioVault-ia-governance succeeded in 966ms: pyenv: cannot rehash: /Users/loic/.pyenv/shims isn't writable pyenv: cannot rehash: /Users/loic/.pyenv/shims isn't writable story_id: PD-172 type: plan title: "Plan d'implémentation — Rate limiting Redis distribué" project: ProbatioVault-backend domain: backend-core created_at: "2026-04-25" author: claude-p

components: 13 agents: 7 waves: 6 invariants_mapped: 14 acceptance_criteria_mapped: 15 test_cases_mapped: 26

key_decisions: - "Guard APP_GUARD global (remplace middleware PD-19 + service PD-23/24/32)" - "Lua script atomique unique rate_limit_v1.lua (9 clés par requête)" - "HMAC secret depuis Vault (kv/app/rate-limit-hmac-secret)" - "Token bucket local en BYPASS_DEGRADED (cap urgence per-process)" - "DiscoveryService introspection au boot — route sans profil → ERR-172-05" - "Feature flag RATE_LIMIT_V2_ENABLED pour migration legacy"

succeeded in 1038ms: pyenv: cannot rehash: /Users/loic/.pyenv/shims isn't writable pyenv: cannot rehash: /Users/loic/.pyenv/shims isn't writable story_id: PD-172 type: tests title: "Scénarios de tests contractuels — Rate limiting Redis" project: ProbatioVault-backend domain: backend-core created_at: "2026-04-25" author: codex-chatgpt model: gpt-5.3-codex

sections: - "1. Références" - "2. Matrice de couverture" - "3. Scénarios de test — Flux nominaux" - "4. Scénarios de test — Cas d'erreur" - "5. Tests d'invariants (non négociables)" - "6. Tests de non-régression" - "7. Tests négatifs et adversariaux" - "8. Observabilité requise pour les tests" - "9. Règles non testables" - "10. Verdict QA"

verdict_qa: "Testable partiellement (avec réserves)"

succeeded in 1042ms: pyenv: cannot rehash: /Users/loic/.pyenv/shims isn't writable pyenv: cannot rehash: /Users/loic/.pyenv/shims isn't writable story_id: PD-172 type: specification title: "Rate limiting distribué Redis multi-dimensions (contractuel V1)" project: ProbatioVault-backend domain: backend-core created_at: "2026-04-25" author: codex-chatgpt model: gpt-5.3-codex tokens_used: 133060

sections: - "1. Objectif" - "2. Périmètre / Hors périmètre" - "3. Définitions" - "4. Invariants (non négociables)" - "5. Flux nominaux" - "5bis. Diagrammes" - "6. Cas d'erreur" - "7. Critères d'acceptation (testables)" - "8. Scénarios de test (Given / When / Then)" - "9. Hypothèses explicites" - "10. Points à clarifier" - "Références"

dimensions_v1: [ip, user_id, tenant, route] windows_v1: [burst, sustained] fail_strategy: auth: fail-closed read: fail-open upload_export: fail-closed

exec /bin/zsh -lc "rg --files | rg 'plan-review|templates|PD-172-plan-review|docs/meta'" in /Users/loic/Developpement/ProbatioVault/ProbatioVault-ia-governance succeeded in 690ms: pyenv: cannot rehash: /Users/loic/.pyenv/shims isn't writable pyenv: cannot rehash: /Users/loic/.pyenv/shims isn't writable templates/outputs/PD-XX-verdict.yaml templates/outputs/PD-XX-dossier-conformite.md templates/outputs/WORKFLOW-STATE.md templates/outputs/PD-XX-acceptability-review.md templates/outputs/PD-XX-plan-review.md templates/outputs/PD-XX-decomposition.md templates/outputs/PD-XX-specification.md templates/outputs/PD-XX-confrontation.md templates/outputs/PD-XX-epic.md templates/outputs/PD-XX-acceptability.md templates/outputs/PD-XX-code-contracts.yaml templates/outputs/governance-metrics.yaml templates/outputs/PD-XX-rex.md templates/outputs/PD-XX-tests.md templates/outputs/PD-XX-plan.md templates/prompts/judge-phase6-code.md templates/prompts/3 Spécification – Review.md templates/prompts/5 Plan d’implémentation - Review.md templates/prompts/pause-context-calm.md templates/prompts/6a Decomposition.md templates/prompts/7a Review Code.md templates/prompts/7c Review Security.md templates/prompts/6c Synthese.md templates/prompts/7b Review Tests.md templates/prompts/2 Tests & Validation.md templates/prompts/7a Review Doc.md templates/prompts/0 Expression de besoin.md templates/prompts/1 Specification.md templates/prompts/judge-phase1-spec.md templates/prompts/4 Plan d’implémentation.md templates/prompts/9 Retour d'expérience.md templates/prompts/6 Implémentation.md templates/prompts/correction-context-calm.md templates/prompts/7 Acceptabilité.md templates/prompts/confrontation.md templates/prompts/8 Revue d’acceptabilité (post-correction).md templates/prompts/6b Agent Task.md templates/README.md docs/epics/legal-compliance/PD-278-nfz42013-dip-state/PD-278-plan-review.md docs/epics/tooling/PD-296-formal-verification-integration/PD-296-plan-review.md data/specs-index/doc/meta/templates/index.yaml data/specs-index/doc/meta/templates/guide-technique.yaml docs/epics/b2c-mineurs/PD-80-scellement-instantane/PD-80-plan-review.md docs/epics/tooling/PD-295-memoire-vivante-5-briques/PD-295-plan-review.md data/specs-index/infra/epics/storage/PD-46-secure-download/PD-46-implementation-plan-review-v1.yaml data/specs-index/infra/epics/storage/PD-44-object-lock-worm/PD-44-plan-review-v2.yaml docs/epics/tooling/PD-293-one-ring-orchestration/PD-293-plan-review.md data/specs-index/infra/epics/infrastructure-souveraine/PD-7-hsm-fips-140-2-level-3/PD-7-implementation-plan-review.yaml data/specs-index/backend/epics/crypto-proof/PD-41-pre/PD-41-implementation-plan-review.yaml data/specs-index/app/epics/crypto/PD-42-recherche-chifree/PD-42-implementation-plan-review.yaml data/specs-index/app/epics/crypto/PD-54-merkle-tree/PD-54-implementation-plan-review.yaml data/specs-index/backend/epics/auth-identity/PD-28-session/PD-28-implementation-plan-review.yaml data/specs-index/backend/epics/docs-api/PD-60-document-upload/PD-60-implementation-plan-review.yaml data/specs-index/backend/epics/auth-identity/PD-241-logout/PD-241-implementation-plan-review.yaml data/specs-index/backend/epics/auth-identity/PD-241-logout/PD-241-implementation-plan-review-v2.yaml data/specs-index/backend/epics/auth-identity/PD-241-logout/PD-241-implementation-plan-review-v3.yaml data/specs-index/backend/epics/auth-identity/PD-239-password-change/PD-239-implementation-plan-review.yaml data/specs-index/backend/epics/auth-identity/PD-239-password-change/PD-239-implementation-plan-review-v2.yaml data/specs-index/backend/epics/auth-identity/PD-238-mfa-management/PD-238-plan-review.yaml data/specs-index/backend/epics/backend-core/PD-19-cors-security-headers/PD-19-plan-review-v1.yaml data/specs-index/backend/epics/backend-core/PD-19-cors-security-headers/PD-19-plan-review.yaml data/specs-index/backend/epics/auth-identity/PD-26-keycloak/PD-26-implementation-plan-review.yaml data/specs-index/backend/epics/blockchain/PD-52-ethereum-l2-setup/PD-52-plan-review.yaml data/specs-index/backend/epics/auth-identity/PD-240-delete-account/PD-240-implementation-plan-review-v1.yaml data/specs-index/backend/epics/auth-identity/PD-240-delete-account/PD-240-implementation-plan-review-v2.yaml data/specs-index/backend/epics/auth-identity/PD-32-user-settings/PD-32-implementation-plan-review.yaml data/specs-index/backend/epics/auth-identity/PD-32-user-settings/PD-32-implementation-plan-review-v2.yaml data/specs-index/backend/epics/backend-core/PD-3-redis-bullmq/PD-3-implementation-plan-review.yaml data/specs-index/backend/epics/backend-core/PD-237-merkle-persistence/PD-237-implementation-plan-review.yaml data/specs-index/backend/epics/backend-core/PD-236-recherche-tokens/PD-236-implementation-plan-review.yaml

codex Je n’ai pas le template exact du chemin mentionné, mais il y a un template générique PD-XX-plan-review.md dans le repo. Je le consulte pour garantir la structure de restitution attendue. exec /bin/zsh -lc "sed -n '1,220p' templates/outputs/PD-XX-plan-review.md" in /Users/loic/Developpement/ProbatioVault/ProbatioVault-ia-governance succeeded in 563ms: pyenv: cannot rehash: /Users/loic/.pyenv/shims isn't writable pyenv: cannot rehash: /Users/loic/.pyenv/shims isn't writable

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

1. Références

  • Spécification : PD-XX-specification.md
  • Tests contractuels : PD-XX-tests.md
  • Plan d’implémentation : PD-XX-plan.md
  • Date de revue : …
  • Reviewer : …

2. Constatations (écarts)

Type Référence (Spec/Test/Plan) Description Impact Gravité (BLOQUANT/MAJEUR/MINEUR)
Non-conformité Spec Spec §… / Plan §… BLOQUANT
Couverture manquante Invariant INV-… MAJEUR
Test irréalisable TC-… BLOQUANT
Hypothèse implicite Plan §… MAJEUR
Risque sécu/conformité MAJEUR

3. Synthèse

  • Nombre d’écarts par gravité : …
  • Points critiques : …

4. Verdict de la revue

  • Statut : ⛔ Rejeté / ⚠️ Accepté avec réserves / ✅ Accepté
  • Motif synthétique : …

exec /bin/zsh -lc "sed -n '1,260p' docs/epics/b2c-mineurs/PD-80-scellement-instantane/PD-80-plan-review.md" in /Users/loic/Developpement/ProbatioVault/ProbatioVault-ia-governance exec /bin/zsh -lc "sed -n '1,260p' docs/epics/tooling/PD-296-formal-verification-integration/PD-296-plan-review.md" in /Users/loic/Developpement/ProbatioVault/ProbatioVault-ia-governance succeeded in 833ms: pyenv: cannot rehash: /Users/loic/.pyenv/shims isn't writable pyenv: cannot rehash: /Users/loic/.pyenv/shims isn't writable

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

1. Références

2. Constatations (écarts)

Type Référence (Spec/Test/Plan) Description Impact Gravité (BLOQUANT/MAJEUR/MINEUR)
Non-conformité Spec Spec INV-296-01, D-296-03/04/05, §5.5 / Plan §Résolution, §3 (INV-296-01), §413-424 Le plan redéfinit le contrat à 6 checkpoints et introduit GATE3_SPEC_FORMAL, GATE3_REVIEW_START, formal_spec, absents du modèle canonique. Rupture de conformité du modèle contractuel et des enums de données. BLOQUANT
Non-conformité Spec Spec §5.4 (PASSED -> * interdit), INV-296-13 / Plan §2.3, H-PLAN-06 Le plan autorise PASSED -> PENDING via --force-recheck. FSM contractuelle non fermée, transition interdite rendue possible. BLOQUANT
Non-conformité Spec Spec D-296-10 / Plan H-PLAN-02, §7 (artifact_path) Le plan remplace la regex canonique artifact_path par une regex dynamique basée sur GOV_WORKSPACE_ROOT. Contrat de donnée D-296-10 modifié unilatéralement. MAJEUR
Non-conformité Spec Spec INV-296-09, ERR-296-13 / Plan §3 (INV-296-09), §4 (CA-296-08), §7 Le plan étend le blocage à DONE_ANOMALY et REJECTED alors que la spec contractualise Done. Règle supplémentaire non spécifiée. MAJEUR
Couverture manquante INV-296-18, INV-296-10 / Plan §9.2, §Périmètre de test Le plan place l’exhaustivité 8 projets hors scope E2E et retient un échantillonnage ≥2. Couverture intégrale des invariants non démontrable. BLOQUANT
Test irréalisable TC-NOM-07 (tests §3, §2 matrice) / Plan §5.1 (TC-NOM-07), §394, §413-424 TC-NOM-07 exige 8 stories et exactement 5 checkpoints; le plan vise 6 checkpoints et un échantillonnage. TC contractuel inexécutable tel que défini. BLOQUANT
Test irréalisable TC-NOM-09 / Plan §413-424 TC-NOM-09 suppose une exécution complète à 5 checkpoints PASSED; le plan contractualise 6 checkpoints. Incohérence directe scénario vs mécanisme. BLOQUANT
Test irréalisable TC-NEG-12, INV-296-13 / Plan §2.3, H-PLAN-06 TC-NEG-12 impose le rejet de toute sortie depuis PASSED; le plan autorise un cas de sortie. Test d’invariant FSM non passable. BLOQUANT
Test irréalisable TC-NOM-08, Tests §8 (observabilité) / Plan §5.1 (TC-NOM-08), §7 Le plan se limite à grep documentaire et ne décrit ni export probatoire vérifiable ni événement signé/hashé. Points d’observabilité contractuels absents pour la preuve. BLOQUANT
Hypothèse implicite Spec §5.6 (reconciliation_interval_sec) / Plan §3 (INV-296-15), H-PLAN-05 Le mécanisme “cron-like scan” suppose un scheduler opérationnel non décrit contractuellement. Réconciliation potentiellement non exécutée en conditions réelles. MAJEUR
Hypothèse implicite Plan §2.1, §6 / Absence section Contraintes techniques Disponibilité de uuidgen, sha256sum, timeout, flock, jq, claude, swipl, alloy supposée. FAIL_CLOSED systématique ou comportement non déterministe selon environnement. MAJEUR
Risque sécu/conformité Tests §8 (événement signé/export probatoire) / Plan §7 (.gov-local.json append-only) L’audit repose sur un fichier local modifiable sans preuve d’intégrité cryptographique décrite. Rupture d’auditabilité et de probativité externe. MAJEUR
Risque sécu/conformité Spec §5.7 (“aucun bypass”) / Plan §3-§4 (risque “transition Jira hors workflow”) Le contrôle repose sur des guards locaux /gov; le contournement hors commandes est explicitement reconnu comme risque. Invariants bloquants potentiellement contournables. MAJEUR
Code Contract — Invariant Code contracts C2/C6 / Spec INV-296-01, D-296-03/04/05 Les invariants de contrats imposent 6 checkpoints / 6 triggers, non conformes au référentiel canonique. Invariants de code contracts hors sous-ensemble de la spec. BLOQUANT
Code Contract — Invariant Code contracts C2 (PASSED→* sans flag --force-recheck) / Spec §5.4 Le contrat introduit une exception --force-recheck sur un état terminal contractuel. Contradiction directe avec la machine d’états canonique. BLOQUANT
Code Contract — Complétude Plan §3 (INV-296-05 mention gov-impl.md) / Code contracts C4 files gov-impl.md est utilisé dans le plan mais absent du périmètre de fichiers contracté C4. Frontière de responsabilité incomplète pour audit tiers. MAJEUR
Code Contract — Forbidden Code contracts C1 (“artifact_path hardcodé” interdit) / Spec D-296-10 Le pattern “forbidden” contredit une exigence explicite de la spec (regex hardcodée). Règle forbidden non justifiée par le contrat canonique. MAJEUR
Contrainte technique non documentée Plan (absence section “Contraintes techniques”) Les dépendances inter-PD avec statut DONE/TODO/STUB ne sont pas documentées. Traçabilité de dépendances incomplète. MINEUR
Contrainte technique non documentée Plan (absence section “Contraintes techniques”) Aucun choix explicite Jest ou Vitest. Ambiguïté de runner de tests. MAJEUR
Contrainte technique non documentée Plan (absence section “Contraintes techniques”) Compatibilité ESM/CJS et dépendances ESM-only non documentées. Risque d’échec d’exécution des tests/outils selon runtime. MAJEUR
Contrainte technique non documentée Plan (absence section “Contraintes techniques”) Variables CI (DATABASE_URL, CI=true, etc.) non documentées. Reproductibilité CI partielle. MINEUR

3. Synthèse

  • Nombre d’écarts par gravité : BLOQUANT = 9, MAJEUR = 10, MINEUR = 2.
  • Points critiques :
  • Écarts contractuels structurants (5 checkpoints canonique, FSM terminale) non respectés.
  • Plusieurs tests contractuels deviennent inexécutables (TC-NOM-07, TC-NOM-09, TC-NEG-12, observabilité probatoire).
  • Code contracts non alignés sur le sous-ensemble d’invariants de la spec.
  • Contraintes techniques attendues non documentées.

4. Verdict de la revue

  • Statut : ⛔ Rejeté
  • Motif synthétique : non-conformités contractuelles bloquantes + tests contractuels irréalisables + incohérences code contracts/spec.

Note d’exécution : le sandbox est en lecture seule (Operation not permitted), je ne peux pas écrire physiquement PD-296-plan-review.md dans le workspace.

succeeded in 833ms: pyenv: cannot rehash: /Users/loic/.pyenv/shims isn't writable pyenv: cannot rehash: /Users/loic/.pyenv/shims isn't writable

PD-80 — Plan d'implémentation : Revue

1. Références

  • Spécification : PD-80-specification.md (v3)
  • Tests contractuels : PD-80-tests.md (v3)
  • Plan d'implémentation : PD-80-plan.md
  • Code Contracts : PD-80-code-contracts.yaml (v1.0.0)
  • Date de revue : 2026-03-12
  • Reviewer : ChatGPT gpt-5.3-codex (review initiale) + Claude Opus 4.6 (confrontation consolidée)
  • Note Art. II : dérogation validation croisée — prompt > 30KB, ChatGPT en mode agentic partiel. Consolidation par Claude sur documents complets.

2. Constatations (écarts)

# Type Référence (Spec/Test/Plan) Description Impact Gravité
ECT-01 Hypothèse implicite INV-80-11 / Plan DA-05 / §3 mapping INV-80-11 Le plan crée deux queues BullMQ séparées (priority-tsa, priority-anchor) via DA-05 et affirme que le « ratio 5:1 est appliqué via limiter BullMQ sur les workers partagés ». Or, limiter BullMQ contrôle le débit par queue (max jobs / durée), pas un ratio pondéré inter-queues. Le mécanisme précis permettant de garantir que le débit standard reste ≥ 16.7% sur une fenêtre de 10 minutes n'est pas décrit. De plus, aucune métrique dédiée au ratio standard/prioritaire n'est exposée (C8 expose 4 métriques, aucune ne mesure le throughput standard relatif). TC-NOM-08 potentiellement irréalisable avec l'architecture décrite. INV-80-11 non démontrable pour audit. MAJEUR
ECT-02 Risque sécu/conformité INV-80-09 / Spec §5.14 / Plan §2.1 Flux A Dans le Flux A, SealCryptoService.generateAndWrapDek(sealId) est appelé après le COMMIT de la transaction d'admission. Un crash entre le COMMIT et l'écriture de wrapped_dek laisse un seal en QUEUED_PRIORITY sans DEK. Le processor TSA traiterait alors un job sans matériel crypto. La spec §5.14 stipule « La DEK est immédiatement wrappée par la KEK HSM ». Le plan ne documente pas cette fenêtre de vulnérabilité ni le comportement du processor en absence de DEK. Le worker de réconciliation (C7) recrée le job BullMQ mais ne régénère pas la DEK manquante. Fenêtre de crash avec seal admis mais sans DEK wrappée. Risque de traitement sans chiffrement des artefacts temporaires (violation INV-80-09) ou erreur non gérée au processing. MAJEUR
ECT-03 Hypothèse implicite INV-80-04 / Plan C8 / TC-NOM-03 C8 décrit l'utilisation de prom-client Histogram pour seal_latency_seconds avec « P95 calculé sur fenêtre 24h glissante ». Les Histograms Prometheus accumulent des compteurs monotoniques — ils ne supportent pas nativement une fenêtre glissante avec seuil minimum d'échantillons (N≥100) et marquage INSUFFICIENT_DATA. Le plan ne précise pas si la logique P95/fenêtre/N-min est côté applicatif (ring buffer) ou côté requête PromQL. TC-NOM-03 exige « Le calcul P95 utilise exactement les N échantillons de la fenêtre (pas de sous-échantillonnage) » et « Si N < 100, P95 marqué INSUFFICIENT_DATA » — non réalisable avec un Histogram Prometheus standard sans logique applicative complémentaire. Testabilité de TC-NOM-03 incertaine. Observabilité P95 contractuelle non démontrée. MAJEUR
ECT-04 Contrainte technique non documentée Plan §8 (HT-01 à HT-10) / Axe 7 review Les hypothèses techniques listent 10 dépendances inter-PD (PD-39 TsaService, PD-55 AnchorService, PD-54 MerkleService, PD-35 CryptoModule, PD-105 NotificationsModule, etc.) mais aucune n'indique son statut actuel (DONE / TODO / STUB acceptable). L'auditeur ne peut pas évaluer la readiness du plan sans cette information. Traçabilité de dépendances incomplète pour évaluation de faisabilité. MAJEUR
ECT-05 Contrainte technique non documentée Plan §12 / Axe 7 review Le framework de test n'est pas explicitement fixé. §12 mentionne « testcontainers » et « couverture 80% » mais ni Jest ni Vitest ne sont nommés. La convention NestJS est Jest, mais elle doit être contractualisée pour éviter toute ambiguïté d'exécution en CI. Ambiguïté d'exécution des suites de test contractuelles. MAJEUR
ECT-06 Contrainte technique non documentée Plan global / Axe 7 review Aucune documentation de la compatibilité ESM/CJS. Les dépendances prom-client, bullmq (v5+) sont ESM-first. Le runner de test et la configuration TypeScript doivent être adaptés. Non documenté. Risque d'échec runtime des tests en CI si le runner n'est pas configuré pour ESM. MAJEUR
ECT-07 Hypothèse implicite Plan C4 / Spec §5.2 / CA-04 L'interaction entre batch_size_min (défaut 5) et le flush timeout (batch_time_max = 5 min) n'est pas explicitée. CA-04 exige « lot contient 1..20 preuves ». Si batch_time_max expire avec 2 jobs et batch_size_min=5, le lot est-il flushé (2 < 5) ou le flush est-il retardé ? C4 dit « refuses to process a single job unless batch_time_max expired » mais ne mentionne pas le seuil batch_size_min. Comportement mini-batch ambigu en faible charge. Risque de non-respect du SLA si le flush est retardé au-delà de 5 min. MINEUR
ECT-08 Contrainte technique non documentée Plan global / Axe 7 review Variables CI nécessaires pour les tests d'intégration avec testcontainers (DATABASE_URL, REDIS_URL, CI=true, etc.) non documentées. Reproductibilité CI partielle. MINEUR
ECT-09 Code Contract — Cohérence CC-80-04 / C4 / Spec §5.2 CC-80-04 (priority-anchor-processor) liste l'invariant « INV-80-05: Mini-batch 1..20, flush ≤ 5 min, JAMAIS d'ancrage individuel urgent » mais ne mentionne pas batch_size_min dans les invariants ni dans les forbidden patterns. Le paramètre batch_size_min (§5.2, configurable 1..20) influence directement le comportement du processor mais n'apparaît pas dans le contrat. Frontière contractuelle incomplète pour l'agent implémentant C4. MINEUR

3. Synthèse

  • Nombre d'écarts par gravité : BLOQUANT = 0, MAJEUR = 6, MINEUR = 3.
  • Points critiques :
  • Anti-starvation (ECT-01) : le mécanisme inter-queues n'est pas décrit avec suffisamment de précision pour garantir INV-80-11 et rendre TC-NOM-08 réalisable.
  • Atomicité DEK (ECT-02) : fenêtre de crash entre admission et wrapping DEK non couverte.
  • P95 sliding window (ECT-03) : implémentation Prometheus insuffisante pour la sémantique contractuelle.
  • Contraintes techniques (ECT-04/05/06) : section « Contraintes techniques » absente du plan (statuts dépendances, framework test, ESM/CJS).

4. Verdict de la revue

  • Statut : ⚠️ Accepté avec réserves
  • Motif synthétique : le plan couvre exhaustivement les 11 invariants, les 18 critères d'acceptation et les 40+ tests contractuels avec des mécanismes identifiés et des points d'observabilité. Les 6 écarts MAJEUR portent sur (a) la précision du mécanisme anti-starvation inter-queues, (b) l'atomicité DEK post-commit, © l'implémentation P95 sliding window, et (d) les contraintes techniques obligatoires non documentées. Aucun écart n'invalide l'architecture globale. Les corrections requises sont des précisions de mécanisme, pas des refonte structurelles.

codex Je passe maintenant à la consolidation des écarts bloquants/majeurs dans le format du template, puis je te fournis le document final prêt à déposer en PD-172-plan-review.md (le sandbox est en lecture seule, donc je le rends en contenu). exec /bin/zsh -lc 'ls -la docs/epics/backend-core/PD-172-rate-limiting-redis 2>/dev/null || true' in /Users/loic/Developpement/ProbatioVault/ProbatioVault-ia-governance succeeded in 562ms: pyenv: cannot rehash: /Users/loic/.pyenv/shims isn't writable pyenv: cannot rehash: /Users/loic/.pyenv/shims isn't writable

codex