Aller au contenu

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/removeRepeatableByKeygetJobSchedulers/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-accept Phase 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.md dans 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."