Retrospective — GOV-SYSTEM¶
Resume story¶
- Story : GOV-SYSTEM — Systeme de gouvernance IA ProbatioVault
- Domaine : governance (meta-systeme)
- Date : 2026-03-28
- Duree : 2026-01-13 a 2026-03-28 (74 jours, 152.3h de workflow cumulees)
- Gates : 87 evaluations sur 29 stories — G3 moy. 8.43/10 (2.2 iter) | G5 moy. 8.38/10 (1.7 iter) | G8 moy. 8.54/10 (1.3 iter)
Learnings de cette story¶
Depuis les gates (87 evaluations, 536 ecarts)¶
| Gate | Evaluations | Score moyen final | Ecarts domaines | Pattern principal |
|---|---|---|---|---|
| G3 (CONFORMITY_CHECK) | 29 | 8.43/10 | ECT 36%, AMB 24% | Spec v1 incomplete sur bornes/SLA/formats |
| G5 (AMBIGUITY) | 29 | 8.38/10 | AMB 24%, DIV 27% | Plan sans mapping invariants → mecanismes |
| G8 (CLOSURE) | 29 | 8.54/10 | DIV 27%, SEC 11% | Divergences detectees tard, securite en Gate 8 |
Depuis le REX¶
| ID | Tags | Learning |
|---|---|---|
| L-GOV-01 | #process, #capitalisation | Learnings → invariants contractuels = seul mecanisme de capitalisation qui resiste a l'oubli |
| L-GOV-02 | #validation-croisee, #llm | Alternance Claude/ChatGPT en gates compense les biais individuels — ChatGPT excelle en ambiguites formelles, Claude en divergences implementation |
| L-GOV-03 | #template, #spec | Le template de specification est le document le plus critique — 6 enrichissements en 29 stories |
| L-GOV-04 | #jira, #fsm | Machine d'etats formelle (Jira) elimine les inconsistances vs fichier Markdown mutable |
| L-GOV-05 | #opencode, #agentic | OpenCode mode agentic involontaire > 30KB ou chemins absolus — sanitisation obligatoire |
| L-GOV-06 | #sonar, #bloquant | Sonar local Phase 1.5 bloquante evite 8+ corrections post-Gate 8 |
| L-GOV-07 | #gate3, #blockchain | Domaine blockchain = 2+ iterations Gate 3 systematiquement (formalisme eleve) |
| L-GOV-08 | #security, #defense-in-depth | Reviewers LLM surestiment ecarts defense-in-depth quand barriere primaire non explicitee |
| L-GOV-09 | #stagnation, #escalade | Delta=0 sur 2 iterations consecutives → ESCALADE obligatoire (evite boucles infinies) |
| L-GOV-10 | #retrospective, #jira | Step 10 (retrospective) merite son propre statut Jira — bundling avec REX rendait l'etape invisible |
Depuis les corrections post-story¶
| Correction | Cause | Impact |
|---|---|---|
| Ajout statut RETROSPECTIVE (id: 10150) | Bundling REX+RETRO invisible dans Jira | fsm.yaml, state.sh, gov.md, 3 docs GOV-SYSTEM |
| Correction refs WORKFLOW-STATE.md | Migration Jira incomplete | template REX, 6+ fichiers |
| Sanitisation chemins absolus OpenCode | Mode agentic involontaire | assemble-prompt.sh |
Patterns recurrents (29 stories, 355 learnings, 33 tags >= 5 stories)¶
Pattern 1 — Specifications incompletes en v1 : bornes, SLA, formats (ALERTE FORTE)¶
Frequence : ECT represente 36.6% des 536 ecarts. Gate 3 v1 NON_CONFORME sur 6 stories (PD-19, PD-32, PD-238, PD-239, PD-240, PD-106).
Observations : - Chaque NON_CONFORME Gate 3 est cause par l'absence de bornes numeriques, SLA temporels, ou formats de donnees - Le template de specification a ete enrichi 6 fois pour ajouter des sections obligatoires (v1.1 bornes, v1.2 transitions inverses, v1.3 SLA, v1.4 formats, v1.5 migration DDL, v1.6 protection distribuee) - Malgre les enrichissements, Gate 3 reste la gate avec le plus d'iterations (2.2 en moyenne)
Impact : Chaque iteration Gate 3 coute ~1h. 8 stories avec 3+ iterations = ~24h de workflow supplementaire.
Correction appliquee : Template specification v1.8.0 avec 7 sections obligatoires conditionnelles.
Pattern 2 — Capitalisation learnings → invariants (CONFIRME, 8+ stories)¶
Frequence : Tag #invariant-candidate dans 5+ stories. Pattern confirme par PD-177 (INV-177-20/21), PD-282, PD-265, PD-283.
Observations : - Les invariants issus de learnings ont un taux de regression de 0% aux gates suivantes - Les learnings archives dans learnings.jsonl sans materialisation en invariant sont oublies dans ~60% des cas - Le mecanisme /gov-learnings-inject injecte les 5 learnings les plus pertinents en etape 0
Impact : Reduction des ecarts recurrents de ~40% entre stories 1-10 et stories 20-29.
Pattern 3 — Faux positifs LLM en reviews securite (ALERTE FORTE, 6+ stories)¶
Frequence : PD-81, PD-55, PD-63, PD-79, PD-84, PD-177, PD-282. Tag #false-positives dans 5+ stories.
Observations : - Phase 2 (confrontation Claude) reclasse 50-60% des ecarts ChatGPT en moyenne - Les composants defense-in-depth sont systematiquement surclasses en severite - L'injection du contexte "barriere primaire vs defense-in-depth" reduit les faux positifs de ~30%
Impact : Chaque faux positif genere un cycle correction inutile (~30min). Sur 29 stories, estimation 15-20h de corrections inutiles.
Correction appliquee : Injection stubs/corrections dans prompts 7a/7b/7c. Suggestion : enrichir prompt review securite avec cadrage barriere primaire.
Pattern 4 — Domaine blockchain = budget Gate 3 double (CONFIRME, 7 stories)¶
Frequence : Tag #blockchain dans 7 stories. Gate 3 avec 3+ iterations : PD-275, PD-282, PD-265.
Observations : - Score Gate 3 v1 blockchain : 6.50 (PD-177), 6.25 (PD-55), 7.50 (PD-52) - Le formalisme requis (codes erreur, politiques confirmations, formats preuve, mapping chainId) depasse les capacites des specs initiales - Seul PD-53 (Solidity minimaliste) echappe au pattern
Impact : Budget Gate 3 blockchain = 2 iterations minimum. Template spec enrichi avec instruction blockchain-specifique.
Pattern 5 — Sonar comme gardien structurel (ALERTE FORTE, 8+ stories)¶
Frequence : 8 stories avec corrections post-Gate 8 causees par Sonar QG FAILED (PD-55, PD-107, PD-31, PD-44, PD-82, PD-248, PD-177, PD-250).
Observations : - Sonar detecte des problemes que ni ESLint ni les tests n'attrapent (deprecated API, security hotspots, CPD) - La phase 1.5 (Sonar local bloquante) a elimine les corrections post-merge depuis son introduction - Mais l'extraction CPD post-Gate 8 peut creer de nouvelles violations (PD-84)
Impact : Avant Phase 1.5 bloquante : ~1 pipeline supplementaire par story. Apres : 0.
Correction appliquee : Phase 1.5 Sonar local bloquante dans /gov-accept.
Pattern 6 — Machine d'etats composite : flags-as-source-of-truth (CONFIRME, 8 stories)¶
Frequence : PD-82, PD-250, PD-264, PD-279, PD-280, PD-278, PD-282, PD-265.
Observations : - Pour toute entite avec >= 3 conditions de degradation, le calcul d'etat a partir de flags individuels est plus robuste qu'un etat pre-calcule - Pattern documente dans CLAUDE.md learnings.md et injecte dans les prompts de specification
Impact : Stories sans ce pattern = 2-3 iterations Gate 3 supplementaires pour clarifier les transitions d'etat.
Pattern 7 — Code contracts YAML accelerent la convergence (11 stories)¶
Frequence : Tag #code-contracts dans 11 stories.
Observations : - Stories AVEC code contracts : Gate 8 moyen 1.2 iterations - Stories SANS code contracts : Gate 8 moyen 1.8 iterations - Les code contracts structurent la decomposition multi-agents (step 6a) et servent de reference en acceptabilite (step 7)
Impact : Gain estime de 0.6 iteration Gate 8 par story = ~30min/story.
Pattern 8 — NestJS DI invisible aux tests unitaires (3+ stories)¶
Frequence : PD-30, PD-84, BATCH-RETRO. Tag #nestjs + #di.
Observations : - Les tests unitaires mockent les guards → le graphe DI NestJS n'est jamais instancie - Erreur invisible en CI locale, crash en deploy - Checklist DI pre-merge ajoutee dans CLAUDE.md
Impact : 1 pipeline supplementaire + 30min diagnostic par occurrence.
Metriques comparatives¶
Evolution temporelle (stories 1-10 vs 11-20 vs 21-29)¶
| Metrique | Stories 1-10 | Stories 11-20 | Stories 21-29 | Tendance |
|---|---|---|---|---|
| Duree moyenne | ~6.8h | ~5.1h | ~4.2h | ↓ amelioration |
| Gate 3 iterations | ~2.5 | ~2.1 | ~1.8 | ↓ amelioration |
| Gate 8 first-pass GO | ~60% | ~80% | ~89% | ↑ amelioration |
| Ecarts/story | ~22 | ~18 | ~14 | ↓ amelioration |
Score Gate 8 final par domaine¶
| Domaine | Score moyen | Stories | Commentaire |
|---|---|---|---|
| backend-core | 9.69 | 1 | Excellent (story simple) |
| blockchain | 9.00 | 1 | Bon malgre complexite elevee |
| crypto-proof | 8.75 | 2 | Conformite elevee |
| legal-compliance | 8.68 | 9 | Domaine le plus represente, scores stables |
| tooling | 8.60 | 2 | Bon |
| storage | 8.50 | 1 | Correct |
| visualization | 8.25 | 4 | Axe fragile — pixel-governance |
| mobile-ios | 8.25 | 1 | Faible echantillon |
| b2c-mineurs | 7.89 | 3 | Axe fragile — transitions d'etat complexes |
Profil de convergence global¶
| Metrique | Valeur | Interpretation |
|---|---|---|
| Score moyen Gate 3 v1 | ~6.8/10 | Spec v1 systematiquement insuffisante |
| Score moyen Gate 3 final | 8.43/10 | Convergence effective (+1.6 delta moyen) |
| Score moyen Gate 8 final | 8.54/10 | Meilleur score final — le code converge bien |
| Stories avec escalade | 9/29 (31%) | Taux acceptable mais surveiller |
| Gate 8 first-pass GO | 22/29 (76%) | Les gates amont filtrent efficacement |
Recommandations¶
Priorite haute (>= 5 stories ou NON_CONFORME recurrent)¶
- Template spec : sections obligatoires conditionnelles — 6 enrichissements appliques (bornes, SLA, formats, transitions, DDL, protection distribuee). Surveiller la charge cognitive (170+ lignes d'instructions). FAIT — template v1.8.0.
- Sonar Phase 1.5 bloquante — Elimine les corrections post-Gate 8 causees par Sonar. FAIT — integre dans
/gov-accept. - Stagnation delta=0 → ESCALADE — Evite les boucles infinies de gates. FAIT — Art. I §Convergence.
- Statut RETROSPECTIVE dans Jira — Step 10 invisible quand bundle avec REX. FAIT — id: 10150, tid: 24.
- Routage dynamique via assignee Jira — Mapping etape → agent hardcode dans
gov-step.sh. Remplace par lecture de l'assignee Jira (automation rules). 3 utilisateurs agents (Claude, ChatGPT, Loic Pontani). Separation des pouvoirs (Art. II) encodee declarativement dans Jira. FAIT —jira_get_assignee()+jira_assignee_to_executor()+ 24/24 transitions validees. - Reviews LLM parallelisees — 3 reviews sequentielles (~45 min) → 3 sessions OpenCode concurrentes (~15 min). FAIT —
parallel-reviews.sh. - Detection regression inter-stories — Le workflow verifiait chaque story en isolation. Invariants des stories soeurs maintenant injectes dans prompts review (step 7) et agents (step 6b). 1695 invariants au total, filtres par domaine. FAIT —
collect-sibling-invariants.py+ INV-GOV-24. - Cadrage defense-in-depth dans prompts review securite — Injecter "barriere primaire vs defense-in-depth" dans prompts 7c et Gate 8 pour reduire ~30% de faux positifs.
- Factorisation template spec par domaine — 170+ lignes d'instructions generiques. Envisager des sections conditionnelles par domaine (blockchain, crypto, legal) pour reduire la charge cognitive.
Priorite normale¶
- Verification fsm.yaml ↔ Jira automatisee — Script de probing qui valide la coherence entre
data/fsm.yamlet les transitions Jira reelles. - Versionner les output templates — Comme les prompt templates, ajouter
<!-- template_id: X | version: X.Y.Z -->danstemplates/outputs/. - Nettoyage workspace automatique —
.workspace/accumulait 952 fichiers (49 MB). Cleanup integre en fin degov-workflow.sh. FAIT. - Fix
check_prerequisitesinversee — Garde-fou autorisait des steps futurs. Corrige + Jira down = blocage. FAIT. -
check_prerequisitesdansgov-workflow.sh— Absent de la boucle principale, uniquement dansgov-step.sh. Ajoute. FAIT. - Nettoyer refs WORKFLOW-STATE.md residuelles —
n8n-bridge.sh,morning-review.sh,regenerate-dashboard.sh. - Migrer scripts shell critiques → Python —
state.sh(850+ lignes),constitutional-check.sh,jira-api.sh— plus testables. - Checklist DI NestJS pre-merge — Pour chaque
@UseGuards(XxxGuard)externe, verifier imports du module fournisseur. Integrer dans template plan ou checklist step 6c.
Signal CLAUDE.md¶
Section "Regles apprises" — Enrichissement suggere¶
Cadrage defense-in-depth dans prompts review securite :
### Defense-in-depth — Cadrage prompts review (2026-03-28)
**Issu de la retrospective GOV-SYSTEM** : Les reviewers LLM surestiment la severite des ecarts
sur les couches defense-in-depth (interceptor, guard, validation applicative) quand la barriere
primaire (KMS, HSM, S2) n'est pas explicitee.
**Regle** : Injecter dans les prompts 7c (review securite) et Gate 8 :
"Barrieres primaires de cette story : {liste}. Les composants applicatifs sont defense-in-depth.
Les ecarts sont RESERVE sauf si la barriere primaire est elle-meme compromise."
Histoirique : PD-177 (SecretLeakInterceptor + S2-KMS), PD-84 (guard + RLS),
PD-79 (guard + middleware), PD-44 (sanitization + KMS). 0 ecart SEC quand cadrage explicite.
Section "Procedures par etape" — Enrichissement suggere¶
Factorisation template spec par domaine :
### Template spec — Sections conditionnelles par domaine (2026-03-28)
**Issu de la retrospective GOV-SYSTEM** : Le template de specification atteint 170+ lignes
d'instructions generiques. Les sections blockchain (codes erreur, politiques confirmations)
et crypto (envelope encryption, roundtrip sign-verify) sont rarement applicables aux stories
infra ou doc.
**Regle** : Envisager un systeme de sections conditionnelles declenchees par le domaine
de la story. Si le template depasse 200 lignes, la factorisation devient prioritaire.
Bilan¶
| Indicateur | Valeur |
|---|---|
| Patterns identifies | 8 |
| Alertes haute priorite | 8 (6 resolues, 2 ouvertes) |
| Alertes normales | 8 (3 resolues, 5 ouvertes) |
| Stories analysees | 29 |
| Learnings capitalises | 355 |
| Tags dans >= 5 stories | 33 |
| Axe fragile identifie | b2c-mineurs (G8 moyen 7.89) et visualization (G8 moyen 8.25) |
| Amelioration measurable | Duree -38% (6.8h → 4.2h), ecarts -36% (22 → 14), G8 first-pass +29pp (60% → 89%) |