PD-275 — Rétrospective¶
Contexte¶
Cette rétrospective analyse PD-275 (PV Anchor — ANCHOR-16/17 finality depth + signer revocation) dans le contexte des 4 stories récentes du Sprint 9 : PD-251, PD-276, PD-277, PD-275. Corpus total : 247 learnings.
1. Patterns récurrents confirmés¶
P1 — Sonar Phase 1.5 systématiquement contournée (3 stories consécutives)¶
Stories : PD-275, PD-276, PD-277 (Sprint 9 complet) Cause racine : Token Sonar référencé au mauvais chemin Vault (kv/data/ci/sonar au lieu de kv/data/ci/sonarqube) + URL incorrecte dans Vault (sonarqube.dev.probatiovault.com au lieu de sonar.dev.probatiovault.com) Impact : Phase 1.5 BLOQUANTE du workflow gouvernance contournée de facto depuis 3 stories. Les learnings historiques (PD-107, PD-44, PD-248, PD-63, PD-55) montrent que Sonar détecte des problèmes invisibles aux autres outils (BullMQ deprecated API, security hotspots, React key violations, crypto.randomUUID).
Recommandation : BLOQUANT — Configurer le token Sonar dans Vault AVANT le prochain sprint. ✅ RÉSOLU (2026-02-28) — Chemin Vault corrigé dans gov-accept.md et probe-capabilities.sh. URL corrigée dans Vault. Phase 1.5 sera opérationnelle dès le prochain sprint.
P2 — Gate 3 nécessite correction simultanée spec+tests (4e occurrence)¶
Stories : PD-275 (delta=0.25 en v2), PD-251, PD-277 (historiques similaires) Pattern : Quand la spec est corrigée (ajout d'invariants) sans réalignement des tests, le revieweur voit des invariants sans tests → score testability chute → stagnation. Preuve PD-275 : v1→7.875 (RESERVE), v2→8.125 (delta=0.25, STOP convergence), v3→9.062 (après correction tests). L'itération v2 n'a rien apporté car les tests n'étaient pas alignés.
Recommandation : Modifier le prompt de correction Gate 3 pour exiger explicitement : "Si des invariants sont ajoutés à la spec, le document de tests DOIT être corrigé dans la même itération."
P3 — Fail-closed comme pattern universel (7+ stories)¶
Stories : PD-275, PD-277, PD-276, PD-251, PD-250, PD-240, PD-238 Pattern : Toute feature sécuritaire nécessite un guard fail-closed (deny-by-default). Le learning PD-39 injecté au démarrage de PD-275 a été directement utile (INV-275-01).
Statut : Pattern mature, bien documenté dans les learnings et CLAUDE.md. Aucune action nécessaire.
P4 — Machine à états explicite (7+ stories)¶
Stories : PD-275, PD-277, PD-276, PD-264, PD-251, PD-250, PD-82 Pattern : Les transitions d'état autorisées/interdites doivent être modélisées explicitement (enum + constante VALID_*_TRANSITIONS). PD-275 : signer ACTIVE→REVOKED autorisé, REVOKED→* interdit.
Statut : Pattern mature. Aucune action nécessaire.
P5 — Guard HTTP vs worker BullMQ (nouveau, 1 occurrence)¶
Story : PD-275 uniquement Pattern : Un guard NestJS HTTP est inutile quand le flux passe par un worker BullMQ. Le plan v1 avait créé C8 (SignerActiveGuard) supprimé en Gate 5. Risque de récurrence : Moyen — le backend ProbatioVault utilise BullMQ pour plusieurs flux (anchor, signature, archivage).
Recommandation : Ajouter un check dans le prompt étape 4 (Plan) : "Pour chaque guard/middleware, vérifier si le point d'entrée est un endpoint HTTP ou un worker BullMQ."
2. Analyse quantitative Sprint 9¶
2.1 Convergence des gates¶
| Story | G3 iters | G5 iters | G8 iters | Total | G3 final | G5 final | G8 final | Moy. finale |
|---|---|---|---|---|---|---|---|---|
| PD-251 | 2 | 2 | 1 | 5 | 8.17 | 8.67 | 8.75 | 8.53 |
| PD-277 | 2 | 3 | 1 | 6 | 8.25 | 8.75 | 9.125 | 8.71 |
| PD-276 | 2 | 1 | 1 | 4 | 7.50 | 7.25 | 8.375 | 7.71 |
| PD-275 | 3 | 2 | 1 | 6 | 9.062 | 9.312 | 9.0 | 9.125 |
| Moyenne | 2.25 | 2.0 | 1.0 | 5.25 | 8.25 | 8.50 | 8.81 | 8.52 |
Observations : - Gate 8 GO en v1 systématique (4/4) — le processus est suffisamment robuste en amont. - Gate 3 est la plus consommatrice d'itérations (2.25 en moyenne) — les specs initiales manquent régulièrement de précision. - PD-275 a le meilleur score final (9.125) malgré 3 itérations en G3 — la rigueur des corrections itératives paie. - PD-276 a les scores les plus bas (7.71) — complexité crypto Argon2id/RFC 9106 + zero-knowledge pattern.
2.2 Distribution des écarts¶
| Catégorie | PD-251 | PD-277 | PD-276 | PD-275 | Total | % |
|---|---|---|---|---|---|---|
| ECT | 2 | 5 | 7 | 1 | 15 | 22% |
| DIV | 4 | 5 | 11 | 14 | 34 | 50% |
| AMB | 1 | 12 | 6 | 2 | 21 | 31% |
| SEC | 5 | 2 | 1 | 1 | 9 | 13% |
| PERF | 0 | 0 | 0 | 0 | 0 | 0% |
Tendance : DIV (divergences spec/impl) dominent à 50% — le principal risque reste l'écart entre ce qui est spécifié et ce qui est implémenté. AMB (ambiguïtés) en forte hausse via PD-277 (12 ambiguïtés liées aux contradictions internes de la spec nonce/PKI).
2.3 Temps¶
| Story | Heures | Complexité |
|---|---|---|
| PD-251 | 4.1 | medium |
| PD-277 | 3.5 | simple |
| PD-276 | 4.4 | simple |
| PD-275 | 4.3 | simple |
| Moyenne | 4.08 | — |
Le temps moyen est stable (~4h) quel que soit le domaine (legal-compliance, crypto, blockchain).
3. Améliorations process à appliquer¶
A1 — Token Sonar dans Vault (CRITIQUE) — ✅ FAIT (2026-02-28)¶
Fichier : Aucun — action opérationnelle Action : Configurer Credentials déjà présents dans Vault à kv/data/ci/sonar dans HashiCorp Vault avec le token SonarQube.kv/data/ci/sonarqube (login/password, pas token). URL corrigée dans Vault (sonar.dev.probatiovault.com au lieu de sonarqube.dev.probatiovault.com). Scripts gov-accept.md et probe-capabilities.sh mis à jour. Priorité : BLOQUANTE Résolue — probe-capabilities.sh confirme sonar: available.
A2 — Correction simultanée spec+tests en boucle Gate 3¶
Fichier : governance/CONSTITUTIONAL.md Article II § Cohérence spec/tests Action : Ajouter règle de correction simultanée spec+tests. Règle ajoutée : "Toute modification de la spécification DOIT être reportée dans le document de tests dans la même itération." (CONSTITUTIONAL.md v1.2 → v1.3) Priorité : Haute FAIT (2026-02-28)
A3 — Check HTTP vs worker dans prompt Plan¶
Fichier : templates/prompts/4 Plan d'implémentation.md Action : Ajouter un check HTTP vs worker BullMQ. — Écarté (1 occurrence unique, Gate 5 attrape naturellement ce type d'écart) Priorité : Moyenne N/A
4. Signal CLAUDE.md¶
Les améliorations A2 et A3 impactent des fichiers de gouvernance. A2 touche potentiellement CONSTITUTIONAL.md (Article I, section correction Gate 3). Validation humaine requise avant application.
5. Learnings as invariants¶
Les learnings suivants ont atteint le seuil de récurrence (3+ stories) et pourraient être promus en invariants :
| Learning | Occurrences | Candidat invariant |
|---|---|---|
| Fail-closed obligatoire | 7+ stories | Déjà dans CLAUDE.md |
| Machine à états explicite | 7+ stories | Déjà dans CLAUDE.md |
| Correction spec+tests simultanée | 4 stories | Nouveau candidat → A2 |
| Sonar Phase 1.5 bloquante | 8+ stories historiques | Déjà dans procedures.md |