PD-280 — Retrospective
Produit par l'orchestrateur Claude apres l'etape 9 (REX). Analyse les learnings PD-280 et des stories recentes pour identifier patterns recurrents et recommandations.
1. Synthese PD-280
| Metrique | Valeur | Comparaison |
| Temps total | 6.1h | +27% vs moyenne medium (4.8h) |
| Iterations gates | 7 (G3:3, G5:3, G8:1) | +40% vs moyenne (5.0) |
| Ecarts totaux | 19 | -14% vs moyenne (22.0) |
| Score convergence moyen | 9.19/10 | +7% vs moyenne (8.56) |
| Gate 8 | GO v1 (9.31/10) | Record legal-compliance |
| Pipeline | FAILED (migration PD-279, pre-existant) | Non imputable PD-280 |
Profil atypique : Double NON_CONFORME v1 (Gate 3: 4.69, Gate 5: 5.50) mais convergence la plus forte de l'historique (delta total +8.06). Gate 8 GO en v1 avec score record.
2. Patterns recurrents confirmes (Sprint 9 : PD-275 a PD-281)
2.1 Patterns stabilises (>=6 occurrences)
| Pattern | Occurrences | Derniere story | Statut |
| Machine a etats avec transitions interdites | 9 | PD-280 | Standard |
| Guard fail-closed (intercepteur/guard NestJS) | 9 | PD-280 | Standard |
| Stubs inter-PD avec story destination | 9 | PD-280 | Convention |
| Format non contractualise en spec v1 | 10 | PD-280 | Checklist ajoutee |
| Faux positifs LLM en reviews | 7 | PD-280 | Section doc-only proposee |
| Sonar Phase 1.5 indisponible | 6 | PD-280 | Derogation active |
2.2 Patterns emergents (Sprint 9)
| Pattern | Occurrences | Stories | Signal |
| Projection a la lecture vs mutation | 1 | PD-280 | Nouveau — a surveiller |
| Intercepteur coherence DTO sortie | 1 | PD-280 | Nouveau — potentiel standard |
| Double NON_CONFORME v1 = complexite | 1 | PD-280 | Indicateur — pas pattern |
| Prefix instruction OpenCode (INSTRUCTION CRITIQUE) | 2 | PD-275, PD-280 | A standardiser |
| Corrections simultanees spec+tests pour debloquer stagnation | 1 | PD-275 | A surveiller |
| Classifier faux positifs par type de projet (doc-only vs backend) | 1 | PD-281 | A standardiser |
2.3 Anti-patterns detectes
| Anti-pattern | Freq Sprint 9 | Impact | Mitigation proposee |
| Verbes ambigus spec ("reclassifie") sur endpoint lecture seule | 1 (PD-280) | +2 iterations Gate 5 | Checklist semantique lecture/ecriture en spec v1 |
| Renumerotation invariants plan vs spec | 1 (PD-279) | Tracabilite rompue | Regle : IDs canoniques spec = IDs plan |
| ChatGPT persiste sur grilles backend pour projet doc-only | 1 (PD-281) | Faux positifs Gate 8 | Template review adaptatif par type de projet |
| Migration PG enum dans meme transaction | 1 (PD-279) | Pipeline FAILED | ALTER TYPE + COMMIT avant usage |
3. Analyse convergence Sprint 9
3.1 Scores Gate 8 (dernieres 6 stories)
| Story | Gate 8 | Iteration | Complexite |
| PD-277 | 9.125 | v1 | simple |
| PD-276 | 8.375 | v1 | simple |
| PD-275 | 9.0 | v1 | simple |
| PD-281 | 9.125 | v1 | simple (doc) |
| PD-279 | 8.25 | v1 | medium |
| PD-280 | 9.31 | v1 | medium |
Tendance : 100% Gate 8 GO en v1 sur les 6 dernieres stories. Score moyen : 8.86/10. Le workflow est mature pour la phase de cloture.
3.2 Iterations Gate 3 + Gate 5
| Story | G3 iter | G5 iter | Total | Signal |
| PD-277 | 2 | 3 | 5 | G5 plus exigeante |
| PD-276 | 2 | 1 | 3 | G3 plus exigeante |
| PD-275 | 3 | 2 | 5 | G3 plus exigeante |
| PD-281 | 1 | 2 | 3 | Rapide |
| PD-279 | 2 | 2 | 4 | Equilibre |
| PD-280 | 3 | 3 | 6 | Maximum iterations (plafond v3 atteint 2x) |
Tendance : PD-280 est la seule story a avoir atteint le plafond v3 sur les deux gates. Cela confirme la complexite conceptuelle (frontiere interne/API + lecture seule + idempotence concurrente).
4. Learnings PD-280 consolides
- Projection a la lecture — Quand un endpoint GET doit "evaluer" un etat derive, modeliser comme projection (pas mutation). Exiger cette semantique des la spec.
- Intercepteur coherence sortie — Pattern NestJS sous-utilise. Cout ~50 lignes, ROI = Gate 8 GO v1 avec defense-in-depth contractuelle.
- verificationRequestId — UUID serveur pour desambiguer les etats transitoires. Generaliser pour toute ressource stateful.
4.2 Learnings a confirmer (1 occurrence)
- Double NON_CONFORME v1 = investir plus en etape 0 pour clarifier frontieres
- SLA lazy sans worker = dette planifiee acceptable si STUB documente
5. Recommandations d'amelioration du processus
5.1 Haute priorite
| # | Amelioration | Impact estime | Effort |
| R1 | Ajouter checklist semantique lecture/ecriture dans template spec (etape 1) | -1 a -2 iterations Gate 5 sur stories avec ambiguite | Faible (1 section template) |
| R2 | Exiger section "Mapping interne/API" dans template spec quand transformation non triviale | -1 iteration Gate 3 sur stories avec frontiere | Faible (1 section template) |
| R3 | Standardiser prefix "INSTRUCTION CRITIQUE" pour prompts OpenCode agentic | Elimine faux positifs tool-use | Faible (1 ligne par prompt) |
5.2 Moyenne priorite
| # | Amelioration | Impact estime | Effort |
| R4 | Classifier faux positifs LLM par type de projet dans template review | Reduction ~30% faux positifs | Moyen (template conditionnel) |
| R5 | Ajouter regle "IDs invariants plan = IDs spec" dans checklist pre-Gate 5 | Elimination ecarts tracabilite | Faible (1 regle) |
| R6 | Documenter pattern intercepteur coherence sortie dans CLAUDE.md backend | Reutilisation inter-stories | Faible (5 lignes) |
5.3 Basse priorite
| # | Amelioration | Impact estime | Effort |
| R7 | Resoudre Sonar Phase 1.5 (derogation active depuis 6 stories) | Quality Gate reelle avant reviews LLM | Moyen-eleve (infra) |
| R8 | Corriger migration PD-279 (ALTER TYPE + COMMIT) | Pipeline vert | Moyen (migration corrective) |
6. Actions prises (PD-280)
| Action | Fichier | Statut |
| 5 regles apprises ajoutees | CLAUDE.md backend | DONE |
| Learning Gate 3 GO | learnings.jsonl | DONE |
| Learning Gate 5 GO | learnings.jsonl | DONE |
| Learning Gate 8 GO | learnings.jsonl | DONE |
| Metrics story | metrics.jsonl | DONE |
| Dashboard regenere | GOVERNANCE-METRICS.md | DONE |
7. Signal CLAUDE.md
Les ameliorations R1, R2, R5, R6 touchent des templates ou CLAUDE.md. Validation humaine requise avant application.
R1 — Checklist semantique lecture/ecriture (template spec)
Ajouter dans templates/prompts/1 Specification.md, section "Contraintes" :
- Si un endpoint est GET (lecture seule), verifier que la spec n'utilise pas de verbes
impliquant une mutation ("reclassifie", "met a jour", "modifie"). Si necessaire,
expliciter "projection a la lecture" (pas de mutation en base).
R2 — Section Mapping interne/API (template spec)
Ajouter dans templates/prompts/1 Specification.md, section "Structure" :
- Si l'API expose une transformation non triviale (ex: enum interne -> null API),
la spec DOIT inclure une section "Mapping interne/API" documentant chaque transformation.
R5 — IDs invariants plan = spec (checklist pre-Gate 5)
Ajouter dans gov-check-plan :
- Verifier que CHAQUE invariant du plan utilise l'ID canonique de la spec (INV-XXX-NN).
Interdire la renumerotation ou l'ajout d'invariants hors canon sans mention explicite.
R6 — Pattern intercepteur coherence (CLAUDE.md backend)
Deja ajoute par Claude -p dans le REX (section "Etat PENDING verification de preuve").
Retrospective produite le 2026-03-01. Prochaine : etape 10 de la story suivante.