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¶
- Spécification : PD-296-specification.md
- Tests contractuels : PD-296-tests.md
- Plan d’implémentation : PD-296-plan.md
- Date de revue : 2026-04-13
- 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 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