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
- 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.
- 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.
- 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.
- 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.
- 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 | ↑ |