Aller au contenu

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. FAITjira_get_assignee() + jira_assignee_to_executor() + 24/24 transitions validees.
  • Reviews LLM parallelisees — 3 reviews sequentielles (~45 min) → 3 sessions OpenCode concurrentes (~15 min). FAITparallel-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. FAITcollect-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.yaml et les transitions Jira reelles.
  • Versionner les output templates — Comme les prompt templates, ajouter <!-- template_id: X | version: X.Y.Z --> dans templates/outputs/.
  • Nettoyage workspace automatique.workspace/ accumulait 952 fichiers (49 MB). Cleanup integre en fin de gov-workflow.sh. FAIT.
  • Fix check_prerequisites inversee — Garde-fou autorisait des steps futurs. Corrige + Jira down = blocage. FAIT.
  • check_prerequisites dans gov-workflow.sh — Absent de la boucle principale, uniquement dans gov-step.sh. Ajoute. FAIT.
  • Nettoyer refs WORKFLOW-STATE.md residuellesn8n-bridge.sh, morning-review.sh, regenerate-dashboard.sh.
  • Migrer scripts shell critiques → Pythonstate.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%)