Rétrospective — PD-55¶
Résumé story¶
- Story : PD-55 — Créer worker ancrage blockchain périodique
- Domaine : blockchain
- Date : 2026-02-23
- Gates : G3 GO (v3, 8.18/10) | G5 GO (v2, 8.38/10) | G8 GO (v1, 8.00/10)
Learnings de cette story¶
Depuis les gates¶
| Gate | Verdict | Score | Tags | Note |
|---|---|---|---|---|
| G3 v1 | NON_CONFORME | 6.25 | #blockchain, #merkle, #ancrage | Ordre canonique, format preuve, RFC 8785 manquants |
| G3 v2 | RESERVE | 7.88 | #blockchain, #merkle | 3 mineurs résiduels (format created_at, conduite dépassement) |
| G3 v3 | GO | 8.18 | #blockchain, #merkle, #ancrage, #worker | Formalisme RFC complet |
| G5 v1 | RESERVE | 7.75 | #blockchain, #bullmq, #merkle | 4 majeurs (immutabilité relations, atomicité rollback) |
| G5 v2 | GO | 8.38 | #blockchain, #bullmq, #merkle, #immutability | Corrections code contracts + stratégie test triggers |
| G8 v1 | GO | 8.00 | #blockchain, #merkle, #bullmq, #ancrage | 4 mineurs acceptés (ParseUUIDPipe, affectedRows, failBatch, assertions) |
Depuis le REX¶
- PostgreSQL subquery index : Les index partiels avec subquery ne sont pas supportés. Détecté uniquement en CI.
- BullMQ v5 deprecated API :
getRepeatableJobs/removeRepeatableByKey→getJobSchedulers/removeJobScheduler. Détecté par Sonar, pas par ESLint. - Coverage fragile : Seuil global 80% branches atteint à 80.02% avec +29 tests post-Gate 8.
- Gate 3 × 3 itérations : Stories blockchain/crypto nécessitent formalisme RFC dès la spec initiale.
- Faux positifs LLM : Ratio stable 30-40% sur reviews code/sécurité.
Patterns récurrents (domaine blockchain)¶
Pattern 1 — Formalisme RFC obligatoire pour blockchain/crypto¶
- Stories : PD-55 (G3 ×3), PD-53 (G3 GO v1 mais 2 FP), PD-245 (G3 GO v1), PD-52 (REX)
- Fréquence : 4/4 stories blockchain
- Impact : PD-55 = 3 itérations G3 (+200% temps estimé). PD-53 plus fluide car contrat Solidity auto-documenté.
- Recommandation : Injecter un checklist RFC dans le prompt de spécification pour les stories blockchain : canonicalisation, format preuve, encodage, standards référencés.
Pattern 2 — Sonar comme filet de sécurité post-linter¶
- Stories : PD-55 (BullMQ deprecated), PD-107 (jest.doMock), PD-31 (security hotspots), PD-44 (KMS SNS), PD-82 (ES flood-stage), PD-248 (key=index)
- Fréquence : 6 stories (alerte forte)
- Impact : 1-2 commits de correction post-Gate 8 par story. Pipeline bloqué à chaque fois.
- Recommandation : Intégrer un scan Sonar local (sonar-scanner CLI) dans l'étape 7 AVANT merge. Documenter dans CLAUDE.md section acceptabilité.
Pattern 3 — Coverage branches fragile au seuil global¶
- Stories : PD-55 (80.02%), PD-31 (seuil atteint), PD-107 (singleton mocking), PD-44 (82%)
- Fréquence : 4 stories
- Impact : Post-Gate 8 corrections systématiques pour atteindre 80%. Coût : 1-3h par story.
- Recommandation : Viser 85% branches dans les tests de chaque story pour ne pas fragiliser le global. Documenter cette règle dans CLAUDE.md étape 7.
Pattern 4 — Faux positifs reviews LLM (30-40%)¶
- Stories : PD-55 (33-40%), PD-79 (2 FP G3, 1 FP G5), PD-31 (⅚ annulés G3), PD-105 (7→1 après confrontation), PD-53 (2 FP G3)
- Fréquence : 5+ stories (alerte forte)
- Impact : Confrontation P2 élimine la majorité des FP. Sans confrontation, les verdicts seraient biaisés.
- Recommandation : La confrontation P2 est validée comme mécanisme efficace de filtrage. Envisager d'injecter les stubs/dépendances connus dans les prompts de review pour réduire les FP.
Pattern 5 — BullMQ : patterns récurrents¶
- Stories : PD-55 (deprecated API, scheduling), PD-3 (naming, reconnexion), PD-21 (idempotence, retries)
- Fréquence : 3 stories
- Impact : GO sur les 3 stories mais avec corrections post-merge.
- Recommandation : Créer un guide BullMQ interne avec les patterns validés (naming, scheduling, deprecated API, idempotence).
Recommandations¶
Priorité haute (≥ 5 stories ou NON_CONFORME récurrent)¶
- Sonar local dans étape 7 : Intégrer sonar-scanner avant les reviews LLM (6 stories impactées). Le scan Sonar dans
/gov-acceptPhase 1.5 existe mais est optionnel — le rendre systématique. - Réduction faux positifs : Injecter dans les prompts de review (7a/7b/7c) la liste des stubs connus et des dépendances futures documentées dans le plan. Cela réduit les FP de contexte partiel.
Priorité normale¶
- Checklist RFC blockchain : Ajouter dans le prompt de spécification (étape 1) une section conditionnelle pour les stories blockchain/crypto : canonicalisation, format preuve, encodage, standards RFC.
- Cible coverage 85% : Documenter dans CLAUDE.md que chaque story doit viser ≥85% branches (pas juste le seuil global de 80%) pour maintenir une marge de sécurité.
- Guide BullMQ patterns : Capitaliser les learnings PD-3, PD-21, PD-55 dans un guide patterns interne (
docs/guides/bullmq-patterns.mddans le backend).
Signal CLAUDE.md¶
Les patterns forts suivants suggèrent des ajouts à CLAUDE.md :
Section : Étape 7 — Acceptabilité
Règle suggérée : "Le scan Sonar local (Phase 1.5 de
/gov-accept) est OBLIGATOIRE avant merge. Les violations détectées uniquement par Sonar (deprecated API, security hotspots, code smells) ne sont pas couvertes par ESLint/TSC. Pattern observé sur 6 stories : PD-55, PD-107, PD-31, PD-44, PD-82, PD-248."
Section : Étape 7 — Reviews LLM
Règle suggérée : "Injecter dans les prompts de review la liste des stubs connus (services non implémentés, dépendances futures) et le contexte des stories dépendantes. Réduit le taux de faux positifs de ~40% à ~20% estimé."
Section : Coverage
Règle suggérée : "Chaque story doit viser ≥85% branches (pas le seuil global de 80%) pour maintenir une marge de sécurité. Post-Gate 8 corrections systématiques observées sur PD-55, PD-31, PD-107, PD-44."