Rétrospective — PD-47¶
Résumé story¶
- Story : PD-47 — Créer service backup incrémental PostgreSQL
- Domaine : storage
- Projet : infra
- Date : 2026-03-03
- Gates : G3 GO (v2, 9.06/10) | G5 RESERVE (v2, 8.19/10) | G8 GO (v1, 8.5/10)
- Temps total : 13.4h | Itérations : 5 | Écarts : 38
Learnings de cette story¶
Depuis les gates¶
| Gate | Verdict | Score | Iter | Tags | Note |
|---|---|---|---|---|---|
| G3 | GO | 9.06/10 | v2 | #backup, #postgresql, #specification | NON_CONFORME v1 (6.0) → 18 corrections spec (ECT dominant) |
| G5 | RESERVE | 8.19/10 | v2 | reconciliation, state-machine, crash-recovery | NON_CONFORME v1 (5.5) → 16 corrections plan, coverage=7.5 |
| G8 | GO | 8.5/10 | v1 | #postgresql, #backup, #vault-transit, #aes-256-gcm | 4 réserves mineures toutes mitigées, 0 BLOQUANT |
Depuis le REX¶
- Envelope encryption fail-closed : Pas de fallback local quand Vault Transit est la seule source de clés — un fallback viole INV-47-03 et INV-47-09
- Journal append-only try/finally : Wrapper l'exécution complète pour garantir l'écriture d'au moins un événement même en échec précoce
- Watchdog découplé via queue BullMQ : Le watchdog produit un job dans la queue, un consommateur séparé injecte l'orchestrateur — indépendance réelle
- Hash sur clair compressé AVANT chiffrement : Pour vérification intégrité bout-en-bout, hash SHA3-256 sur clair compressé, pas sur ciphertext ni clair non compressé
- Double NON_CONFORME v1 = complexité conceptuelle : Pattern fiable (4ème occurrence) — corrections massives mais convergence forte
Patterns récurrents (domaine storage + global)¶
Tags ≥ 5 stories (alertes fortes)¶
| Tag | Stories | Impact PD-47 |
|---|---|---|
state-machine | 7 stories | BackupStateService FSM explicite — 16ème occurrence pattern |
coverage | 5 stories | 90.39% mais 2 fichiers sous-couverts (encryption 67%, relaunch 0%) |
storage | 5 stories | Domaine principal — learnings PD-5, PD-264, PD-8 injectés |
postgresql | 7 stories | pg_dump, pg_basebackup, PITR, WAL — pattern maîtrisé |
Patterns bloquants (NON_CONFORME récurrent)¶
| Pattern | Occurrences | Gates | Impact |
|---|---|---|---|
| Format non contractualisé → ECT dominant Gate 3 | 17 stories | G3 | NON_CONFORME v1 systématique quand spec v1 manque formats/bornes |
| Reconciliation périmètre incomplet | PD-47 + PD-264 | G5 | Divergence spec vs code-contracts sur couverture états non-terminaux |
Axes fragiles (score < 7.5 récurrent)¶
| Axe | Gate | Score PD-47 | Commentaire |
|---|---|---|---|
| coverage (G5) | 5 | 7.5 | Seul score < 8.0 — réconciliation incomplète dans le plan initial |
Recommandations¶
Priorité haute (≥ 5 stories ou NON_CONFORME récurrent)¶
- R-01 : Ajouter dans
templates/prompts/7c Review Security.mdla détection du type de module (HTTP controller / Cron / BullMQ worker) pour désactiver les critères auth/authz non pertinents. 14 stories avec faux positifs LLM auth/authz. - R-02 : Ajouter dans
templates/prompts/1 Specification.mdune checklist obligatoire pour stories infra/backup (RPO, RTO, chiffrement, journal append-only, watchdog). 17 stories avec ECT dominant en Gate 3 v1. - R-03 : Corriger l'infrastructure Sonar (Elasticsearch indexing) — le CE task FAILED rend la Phase 1.5 non fiable. Bloquant pour toutes les stories futures.
Priorité normale¶
- R-04 : Pré-générer les interfaces TypeScript partagées avant de lancer les agents en parallèle (step 6b) — 6 erreurs TS post-synthèse sur PD-47 dues à des types incompatibles entre agents
- R-05 : Exiger la levée des hypothèses techniques AVANT Gate 5 — H-TECH-01 (pg_receivewal OVH) aurait dû être testée entre step 4 et step 5
- R-06 : Détecter les stories cross-repo dès l'étape 0 et signaler la complexité de coordination inter-repo dans le besoin
- R-07 : Ajouter permission
kms:EnableKeyRotation+kms:ScheduleKeyDeletionau user terraformprobatiovault-storage-admin— pipeline infra bloqué
Signal CLAUDE.md¶
Section .claude/rules/learnings.md — ajouts suggérés¶
-
Module sans endpoint HTTP → filtrer critères sécurité auth/authz :
Pour les modules exécutés exclusivement via Cron/BullMQ (pas de contrôleur HTTP), les critères auth/authz de la review sécurité (7c) doivent être désactivés. Signal
project_type: cron|bullmq|apidans le prompt. -
Interfaces TypeScript partagées avant agents parallèles :
Pour stories avec ≥ 10 composants générés par agents parallèles, pré-générer les types/interfaces partagés en phase 6a (décomposition) avant de lancer les agents en phase 6b. Réduit les erreurs TypeScript post-synthèse.
-
Pipeline infra : permissions KMS admin requises :
Le user terraform
probatiovault-storage-adminnécessitekms:EnableKeyRotationetkms:ScheduleKeyDeletionpour gérer les clés KMS. Sans ces permissions, le pipeline infra échoue sur les changements de politique de rotation.
La mise à jour de CLAUDE.md reste à la discrétion du PO.