PD-56 — Retour d'experience (REX)
1. Resume executif
| Metrique | Valeur |
| Objectif initial | Generation contractuelle de preuve Merkle par eventId |
| Resultat obtenu | Conforme avec reserves (Sonar SKIPPED, coverage 59.5%) |
| Verdict final | GO (Gate 8 v1 — score 9.06/10) |
| Tests contractuels | 120/120 passes (10 suites, 8.5s) |
2. Metriques de convergence
2.1 Temps et iterations
| Etape | Duree estimee | Duree reelle | Iterations | Ecart |
| 0 - Besoin | 30 min | 7h24 min | 1 | +1380% |
| 1 - Specification | 2h | 5 min | 1 | -96% |
| 2 - Tests | 1h | 4 min | 1 | -93% |
| 3 - Gate spec | 1h | 45 min | 3 | -25% |
| 4 - Plan | 1h | 2h49 min | 1 | +182% |
| 5 - Gate plan | 1h | 1h40 min | 2 | +67% |
| 6 - Implementation | 4h | 30 min | 1 | -88% |
| 7 - Acceptabilite | 2h | 30 min | 1 | -75% |
| 8 - Gate acceptabilite | 1h | 15 min | 1 | -75% |
| 9 - REX | 30 min | 30 min | 1 | 0% |
| TOTAL | ~14h | ~14h30 | 13 | +4% |
Note : L'etape 0 a absorbe 51% du temps total. La complexite de la specification contractuelle (9 invariants, 15 CA, 6 flux, machine a etats 3 etats) a necessite 3 versions de besoin et une elaboration poussee. Les etapes 1-2 (production Codex) et 6 (implementation) ont ete anormalement rapides grace a la qualite du besoin/plan.
2.2 Scores de convergence par gate
| Gate | Score v1 | Score final | Delta | Iterations |
| Gate 3 | 6.5/10 | 8.5/10 | +2.0 | 3 |
| Gate 5 | 6.25/10 | 8.06/10 | +1.81 | 2 |
| Gate 8 | 9.06/10 | 9.06/10 | — | 1 |
2.3 Ecarts par categorie
| Categorie d'ecart | Gate 3 | Gate 5 | Gate 8 | Total |
| ECT (completude/testabilite) | 1 | 1 | 3 | 5 |
| DIV (divergence spec/impl) | 0 | 3 | 2 | 5 |
| AMB (ambiguite) | 2 | 2 | 1 | 5 |
| SEC (securite) | 0 | 1 | 2 | 3 |
| PERF (performance) | 1 | 0 | 1 | 2 |
| TOTAL ecarts | 4 | 7 | 9 | 20 |
3. Points fluides
- Gate 8 GO en v1 (9.06/10) : Score le plus eleve obtenu en premiere iteration. La rigueur du besoin (etape 0) et du plan (etape 4) a permis une implementation conforme sans correction post-gate.
- 12/12 composants implementes sans echec : Le decoupage en 4 waves d'execution (fondations, services intermediaires, orchestrateur, validation) a fonctionne sans blocage.
- Migration DDL conforme REX PD-282 : VARCHAR + CHECK constraint (pas ENUM PG natif) +
commitTransaction() avant WHERE. Le pattern est desormais bien ancre. - Anti-flood atomique : Le pattern
UPDATE WHERE state != 'CORRUPTED' RETURNING * pour INV-56-09 est elegant et evite toute race condition multi-instance. - Script off-chain standalone (C12) : Zero import backend, verification SHA-256 pure. Repond a CA-56-03 sans couplage.
4. Points difficiles
- Etape 0 — 7h24 de redaction de besoin : Complexite inherente a la spec (machine a etats, 6 flux, 9 invariants, 5 codes d'erreur). Le volume de contractualisation est le plus eleve des stories blockchain.
- Gate 3 — 3 iterations (v1=6.5, v2=7.625, v3=8.5) : La premiere version manquait de completude (6.0) et de clarte (6.0). Chaque iteration a necessite des ajouts structurels (formats, bornes, machine a etats explicite, cas limites).
- Gate 5 — feasibility a 5.0 en v1 : Le plan initial ne resolvait pas la resolution
eventId -> eventHash ni le recalcul ETA. Score critique declenchant NON_CONFORME automatique. - Codex en mode agentic : GPT-5.3 bascule systematiquement en mode agentic sur les prompts > 15KB. Fallback vers Ollama (llama3.3:70b, context 16K) pour les reviews. Profondeur d'analyse reduite.
- Sonar SKIPPED (auth Vault 401) : Credentials Vault expires empechant l'execution de la Phase 1.5 BLOQUANTE. Contournement par report au pipeline CI.
5. Hypotheses revelees tardivement
- H-56-06 fausse : L'hypothese "proofAvailabilityState est initialise par PD-237" est fausse. PD-237 ne fournit pas cette colonne. Decouverte a l'etape 4 (plan). Corrige par migration PD-56 (C10).
- Resolution eventId -> eventHash non triviale : L'entity
AnchorBatchEvent (PD-55) n'expose pas de colonne eventHash visible. Decouverte a l'etape 4. Resolue par jointure via table source metier. - Convention de tri
computeRootFromProof() : Le code PD-237 mentionne sorted(a,b) mais aussi un mecanisme base sur l'index de feuille. Ambiguite decouverte a l'etape 5. Non definitivement tranchee mais fonctionnel.
6. Invariants complexes
- INV-56-09-security-alert-on-first-corruption-detection — TC-NOM-11, TC-ERR-04, TC-ERR-08, TC-ERR-10 : L'atomicite entre transition d'etat et emission d'alerte necessite un pattern transactionnel precis. Le
UPDATE ... WHERE ... RETURNING * avec rowCount resout l'anti-flood multi-instance, mais deux patrons concurrents existaient dans le plan (UPDATE atomique vs SELECT FOR UPDATE). - INV-56-06-transitions — TC-INV-06, TC-ERR-09, TC-ERR-10, TC-ERR-11 : La machine a etats avec
CORRUPTED terminal strict et AVAILABLE->PENDING interdit necessite une couverture exhaustive des transitions (5 autorisees, 2+ interdites). Le cas AVAILABLE->CORRUPTED sur re-lecture est subtil (TC-ERR-11). - INV-56-05-auto-verification — TC-NOM-05, TC-ERR-08 : L'auto-verification obligatoire avant tout retour
available est critique. Le flux nominal ne peut pas court-circuiter cette etape meme si les donnees persistees semblent valides.
7. Dette technique
- Coverage module merkle 59.5% < 80% : Inclut fichiers pre-existants (PD-237, PD-54, PD-55). Les fichiers PD-56 neufs sont bien couverts mais aucune mesure isolee n'est fournie. Impact: moyen.
- Sonar Quality Gate non execute : Credentials Vault expires. Report au pipeline CI. Risque de detection tardive de code smells. Impact: moyen.
- Etat
AVAILABLE jamais persiste en base : Le plan choisit de deduire le statut a chaque appel (lecture seule en nominal). La colonne proof_availability_state restera PENDING pour toutes les feuilles non corrompues. Les requetes analytiques WHERE state = 'AVAILABLE' retourneront toujours 0. Impact: faible (fonctionnellement correct, analytiquement limitant). - Reviews LLM degradees (Ollama 16K vs Codex) : Profondeur d'analyse reduite. Les 8 findings securite classes "faux positifs" n'ont pas ete contre-expertises. Impact: faible (Gate 8 GO confirme).
- 4 questions ouvertes spec non tranchees : Source eventHash, eventId en batch FAILED, politique pending > 120min, env benchmark. Impact: faible (contournees dans le plan).
8. Risques residuels
| Risque | Type | Probabilite | Impact | Mitigation |
| Sonar detecte des issues post-merge | tech | moyen | moyen | Pipeline CI verifiera. Credentials Vault a renouveler. |
| Resolution eventId->eventHash fragile si table source change | tech | faible | eleve | Jointure a valider sur donnees reelles. |
| Recalcul ETA non architecturalement resolu | ops | faible | faible | Interface C9 prend un seul batch; le flux suivant n'est pas documente. |
| Protection timing attack non verifiee par test | sec | faible | moyen | Plan affirme constantTimeCompare() existant PD-237. A verifier. |
8bis. Matrice de delegation inter-PD
| Story | Direction | Statut | Nature de la dependance | Probleme rencontre |
| PD-54 | <- depend de | DONE | Construction arbre Merkle, hashPair(sorted(a,b)) | Convention de tri ambigue entre spec et code |
| PD-55 | <- depend de | DONE | Tables anchor_batch_events, anchor_batches | Colonne eventHash non visible directement |
| PD-237 | <- depend de | DONE | Tables merkle_trees, merkle_leaves (6 colonnes) | Ne fournit pas proof_availability_state — migration PD-56 requise |
| ProofEnvelope | -> bloque | TODO | Consommation interne getMerkleProof(eventId) | A surveiller lors de l'integration |
8ter. Bugs de tests
Aucun bug de test rencontre. 120/120 tests passes en premiere execution.
8quater. Corrections post-Gate 8
| Correction | Fichier | Nature | Pipeline |
| Credentials Vault Sonar | config/vault | Renouveler token Vault pour Sonar | A planifier |
9. Patterns recurrents detectes
9.1 Patterns confirmes (deja vus dans d'autres stories)
- Codex mode agentic sur prompts > 15KB — aussi dans PD-283 Gate 8, PD-293 step 1. Fallback Ollama systematique. Pattern confirme sur 3+ stories.
- Gate 3 NON_CONFORME en v1 pour stories complexes — aussi dans PD-278 (double NON_CONFORME G3+G5 v1), PD-280, PD-275. Les stories avec machine a etats ou 5+ invariants echouent presque toujours en v1 Gate 3.
- Sonar SKIPPED par auth Vault — aussi dans PD-283. Les credentials Vault expirent et bloquent Phase 1.5. Pattern a corriger a la racine.
- VARCHAR + CHECK au lieu d'ENUM PG — depuis PD-282, systematiquement applique (PD-56, PD-265, PD-280). Pattern stabilise.
9.2 Nouveaux patterns identifies
- Step 0 dominant (>50% du temps total) : Pour les stories crypto/blockchain avec machine a etats, le besoin absorbe la majorite du temps. A surveiller : PD-56 est la premiere story ou l'etape 0 depasse 7h.
- Gate 8 GO en v1 si plan rigoureux : Quand le plan est suffisamment detaille (12 composants, flux techniques, mapping invariants), l'implementation est conforme en un seul passage. Correle avec le score Gate 5 >= 8.0.
- Etat jamais persiste mais fonctionnellement correct : Le choix de ne pas persister la transition PENDING->AVAILABLE est un pattern de design (read-derive vs write-persist) qui peut se generaliser aux machines a etats internes read-heavy.
10. Ameliorations du workflow
10.1 Ameliorations des prompts/templates
| Fichier | Amelioration suggeree | Priorite |
templates/prompts/1-specification.md | Ajouter une section obligatoire "Verification factuelle des hypotheses H-*" avec commande de validation codebase | haute |
templates/prompts/4-plan-implementation.md | Exiger un seul patron de concurrence par mecanisme (pas deux alternatives) | moyenne |
templates/outputs/PD-56-acceptability.md | Exiger le mapping explicite TC-* vers fichiers de test pour la tracabilite | haute |
10.2 Ameliorations des agents
| Agent | Amelioration suggeree | Justification |
| Codex (GPT-5.3) | Investiguer le seuil de mode agentic (15KB?) et decouper les prompts en consequence | 3+ stories impactees |
| Ollama fallback | Augmenter le context a 32K via num_ctx pour les reviews Gate 8 | Reviews 16K trop superficielles |
10.3 Ameliorations du processus
- Renouveler proactivement les credentials Vault : Ajouter un check de validite des credentials au demarrage du workflow (etape 0) pour eviter les SKIP Sonar en etape 7.
- Fournir la coverage isolee des fichiers PD-XX neufs dans l'acceptabilite : un chiffre global qui inclut la dette pre-existante n'est pas actionnable.
- Limiter step 0 a 2h pour stories blockchain : Si le besoin depasse 2h, escalader vers le PO pour simplifier le perimetre ou decouper en sous-stories.
11. Enseignements cles
- Le besoin est l'investissement — 7h24 de besoin ont produit une Gate 8 GO en v1 (9.06/10). L'investissement amont en contractualisation (invariants, machine a etats, formats, bornes) reduit drastiquement les corrections aval.
- Un seul patron de concurrence par mecanisme — Deux alternatives dans le meme plan (UPDATE atomique vs SELECT FOR UPDATE) creent de la confusion. Trancher avant Gate 5.
- Verifier les hypotheses factuellement avant Gate 3 — H-56-06 (colonne PD-237) etait fausse. Un
grep sur le codebase aurait evite une iteration de Gate 5. - Le fallback Ollama 16K est acceptable mais degradant — Art. II respecte, mais profondeur d'analyse insuffisante pour les stories complexes. Prioriser le fix Codex.
- L'etat non persiste en nominal est un pattern valide — Ne pas persister PENDING->AVAILABLE quand le statut est re-derivable a chaque appel simplifie le flux et elimine les ecritures inutiles.
12. Metriques cumulatives (auto-calculees)
| Metrique | Cette story | Moyenne projet | Tendance |
| Temps total | 14.5h | 6.47h | haut |
| Iterations gates | 6 | 5.3 | stable |
| Ecarts totaux | 20 | 14.1 | haut |
| Score convergence moyen | 8.54/10 | 8.45/10 | stable |