Aller au contenu

PD-72 — Retour d'experience (REX)

1. Resume executif

Metrique Valeur
Objectif initial Worker PRE transfert coffre entreprise vers salarie (BullMQ, machine d'etats, preuve composite)
Resultat obtenu Conforme — module complet 29 fichiers, 123 tests, 10 composants, 8 stubs traces
Verdict final GO (Gate 8 : 9.44/10)
Tests contractuels 123/123 passes (7 suites)

2. Metriques de convergence

2.1 Temps et iterations

Etape Duree estimee Duree reelle Iterations Ecart
0 - Besoin 30 min 25 min 1 -17%
1 - Specification 2h 3 min 1 -98%
2 - Tests 1h 18 min 1 -70%
3 - Gate spec 1h 11 min 2 -82%
4 - Plan 1h 9 min 1 -85%
5 - Gate plan 1h 4 min 1 -93%
6 - Implementation 4h 28 min 1 -88%
7 - Acceptabilite 2h 6 min 1 -95%
8 - Gate acceptabilite 1h 16 min 1 -73%
9 - REX 30 min 30 min 1 0%
TOTAL ~14h ~2.5h 11 -82%

2.2 Scores de convergence par gate

Gate Score v1 Score final Delta Iterations
Gate 3 5.5/10 8.2/10 +2.7 2
Gate 5 8.0/10 8.0/10 0 1
Gate 8 9.44/10 9.44/10 0 1

2.3 Ecarts par categorie

Categorie d'ecart Gate 3 Gate 5 Gate 8 Total
ECT (completude/testabilite) 2 1 1 4
DIV (divergence spec/impl) 3 0 3 6
AMB (ambiguite) 3 1 1 5
SEC (securite) 1 0 0 1
PERF (performance) 0 0 0 0
TOTAL ecarts 9 2 5 16

3. Points fluides

  • Spec v1 rapide : ChatGPT a produit une specification dense (10 sections, 9 invariants, 10 CA) en 3 minutes grace au besoin detaille.
  • Gate 5 GO en v1 : Le plan a passe Gate 5 du premier coup (8.0/10), ce qui est rare pour une story crypto-proof.
  • Implementation sequentielle efficace : Claude -p a produit 29 fichiers (20 src + 8 tests + 1 fixtures) en une seule passe de 28 min, avec 123 tests verts, ESLint clean et TSC clean.
  • Gate 8 score eleve : 9.44/10 en v1, le plus haut score Gate 8 du projet. Aucun ecart bloquant.
  • Stubs bien documentes : Les 8 stubs inter-PD avec stories destinations ont ete reconnus et acceptes en Gate 8 sans penalite excessive.

4. Points difficiles

  • Gate 3 v1 NON_CONFORME (5.5/10) : 5 ecarts bloquants identifies en v1 — SLA ancrage non contractualise, machine d'etats incomplete (PRE-01 vers BLOCKED_WAITING_CONSENT absent), condition de retry non specifiee, absence de controle d'autorisation emetteur, timing des preconditions ambigu.
  • Sonar indisponible (tier degraded) : Phase 1.5 Sonar skippee. ESLint + tsc utilises comme substitution.
  • Faux positifs LLM en step 7 : 3 faux positifs (DI sans injection token, code-contracts absent, coherence doc) et 8 ecarts lies aux stubs non cloturables par design. Le tri orchestrateur a reduit 2 bloquants + 6 majeurs a 0 bloquant + 0 majeur.

5. Hypotheses revelees tardivement

  • H-07 (re-evaluation consentement) : Le mecanisme exact de re-evaluation du consentement apres BLOCKED_WAITING_CONSENT (event ou polling) n'etait pas clarifie en spec v1. Decouvert a l'etape 3 (Gate 3 v1 E-04).
  • Ancre temporelle timeout : Le champ de reference pour le calcul du timeout ancrage (created_at vs updated_at) a ete clarifie en Gate 5 — c'est updated_at au moment de la transition vers PROOF_PENDING_ANCHOR.

6. Invariants complexes

  • INV-03 (zeroization rk) : La zeroization en JavaScript est best-effort (buffer.fill(0) + null). Pas de garantie formelle due au GC V8. Le rk est le seul secret temporaire cote Node.js — les cles restent dans le HSM. — TC-INV-03
  • INV-08 (machine d'etats fermee) : 8 etats x 8 = 64 combinaisons a couvrir (10 autorisees, 54 interdites). Service dedie TransferStateMachineService avec map explicite. — TC-INV-08, TC-NR-02
  • INV-05 (chaine probatoire complete) : Dependance de 4 modules externes (HSM, TSA, Merkle, anchoring) pour la chaine append-only → signature → Merkle → TSA → ancrage. — TC-INV-05

7. Dette technique

  • 8 stubs inter-PD : PreEngine (PD-41), HSM (PD-37), TSA (PD-39), Merkle (PD-54), Anchoring (PD-55), Audit (PD-31), Notifications (PD-105), ProofBundle (PD-245) — impact: faible (tous traces avec story destination)
  • hashDoc placeholder : '0'.repeat(64) dans l'orchestrateur — stub trace PD-60 — impact: faible
  • TC-NR-04 absent : Scenario detaille downgrade policy transfer->copy apres TRANSFER_IN_PROGRESS. Couvert fonctionnellement par la machine d'etats fermee (INV-08). — impact: faible
  • Sonar QG non execute : Tier degraded, substitution ESLint+tsc — impact: moyen

8. Risques residuels

Risque Type Probabilite Impact Mitigation
Zeroization JS best-effort tech faible moyen Secrets critiques restent dans HSM (PD-37). rk est le seul secret temporaire.
8 stubs non integres tech moyen moyen Chaque stub a une story destination. Integration progressive.
Sonar non execute ops faible faible ESLint + tsc clean. Sonar a executer quand disponible.
Timeout ancrage configurable ops faible faible ANCHOR_TIMEOUT_HOURS avec bornes 1h-72h. Alerte ops a expiration.

8bis. Matrice de delegation inter-PD

Story Direction Statut Nature de la dependance Probleme rencontre
PD-41 <- depend de STUB PRE re-encryption (Umbral) RAS — stub trace
PD-37 <- depend de STUB Signature HSM PKCS#11 RAS — stub trace
PD-39 <- depend de STUB Horodatage TSA RFC 3161 RAS — stub trace
PD-54 <- depend de STUB Inclusion Merkle batch RAS — stub trace
PD-55 <- depend de STUB Ancrage blockchain RAS — stub trace
PD-31 <- depend de STUB Journal audit append-only RAS — stub trace
PD-105 <- depend de STUB Push notification RAS — stub trace
PD-245 <- depend de STUB Bundle preuve composite RAS — stub trace
PD-60 <- depend de STUB Hash document (hashDoc placeholder) RAS — stub trace

8ter. Bugs de tests

Aucun bug de test rencontre. Les 123 tests ont passe en premiere execution.

8quater. Corrections post-Gate 8

Correction Fichier Nature Pipeline
import type pour TS1272 transfer-orchestrator.service.ts Fix syntaxe (isolatedModules + emitDecoratorMetadata) Pre-Gate 8 (step 7)

9. Patterns recurrents detectes

9.1 Patterns confirmes (deja vus dans d'autres stories)

  • Machine a etats explicite avec transitions autorisees/interdites — aussi dans PD-82, PD-250, PD-264, PD-251, PD-277, PD-276, PD-275, PD-279, PD-280, PD-278, PD-282, PD-265 (13e occurrence)
  • Stubs inter-PD acceptes en Gate 8 si documentes avec story destination — aussi dans PD-63, PD-82, PD-250, PD-251, PD-277, PD-276, PD-281, PD-279, PD-280, PD-278, PD-282, PD-265 (13e occurrence)
  • Faux positifs LLM systematiques en reviews — aussi dans PD-251, PD-276, PD-277, PD-275, PD-281 (18e occurrence). 3 FP detectes en step 7.
  • Format non contractualise dans spec v1 bloque en Gate 3 — SLA ancrage et condition retry non specifies en v1 (20e occurrence)
  • Sonar Phase 1.5 indisponible — derogation de fait — tier degraded (9e occurrence)

9.2 Nouveaux patterns identifies

  • Story crypto-proof avec 8+ stubs et Gate 8 GO v1 a 9.44 : La combinaison besoin detaille + stubs bien documentes + machine d'etats exhaustive permet un score Gate 8 eleve malgre un nombre record de stubs.
  • Implementation sequentielle complete en une passe (Claude -p) : Pour les stories avec architecture clairement decoupee (10 composants, contrats explicites), Claude -p produit un module complet sans iterations de correction.
  • Gate 3 NON_CONFORME v1 suivi de Gate 5+8 GO v1 : Le rebond apres Gate 3 v1 (5.5 -> 8.2) indique que les corrections de spec enrichissent suffisamment le plan pour eviter les gates v2.

10. Ameliorations du workflow

10.1 Ameliorations des prompts/templates

Fichier Amelioration suggeree Priorite
templates/prompts/1 Specification.md Exiger la contractualisation du SLA ancrage (defaut/min/max/configurable) des la spec v1 pour stories avec ancrage blockchain haute
templates/prompts/1 Specification.md Exiger la specification des conditions de retry (erreurs recuperables vs non-recuperables, backoff) des la spec v1 pour stories avec worker BullMQ haute
templates/prompts/7a Review Code.md Injecter la liste des stubs connus ET le nombre de tests pour reduire les ecarts "preuves d'execution non fournies" moyenne

10.2 Ameliorations des agents

Agent Amelioration suggeree Justification
config/agents step 7a Injecter le type de flux (BullMQ worker vs HTTP controller) pour filtrer les criteres de review inapplicables 3 faux positifs en step 7 lies au contexte BullMQ

10.3 Ameliorations du processus

  • La derogation Sonar (tier degraded) persiste depuis 9 stories. Envisager la resolution du probleme d'infrastructure Sonar.

11. Enseignements cles

  1. Besoin detaille = spec rapide — Un besoin structure avec flux nominaux, cas d'erreur et invariants permet a ChatGPT de produire une spec dense en 3 minutes au lieu de 2h.
  2. Gate 3 NON_CONFORME est un investissement, pas un echec — Les 5 ecarts bloquants de Gate 3 v1 (SLA, machine d'etats, retry, auth, timing) ont enrichi la spec v2 au point que Gate 5 et Gate 8 passent en v1.
  3. Stubs traces avec story destination = ROI Gate 8 — 8 stubs n'ont pas empeche un score de 9.44/10 grace a la documentation systematique avec story destination.
  4. Implementation sequentielle viable pour modules bien decomposes — Claude -p a produit 29 fichiers en une passe de 28 min. La cle : 10 code-contracts explicites + architecture arborescente claire dans le plan.
  5. Le tri orchestrateur des ecarts LLM est critique — Sans tri, la step 7 aurait conclu 2 bloquants + 6 majeurs. Apres tri : 0 bloquant + 1 majeur. Le taux de faux positifs LLM reste eleve (~60% des ecarts).

12. Metriques cumulatives (auto-calculees)

Metrique Cette story Moyenne projet Tendance
Temps total 2.5h 6.41h
Iterations gates 4 5.71
Ecarts totaux 16 23.6
Score convergence moyen 8.55/10 8.46/10