Aller au contenu

Expression de besoin — GOV-SYSTEM

Champ Valeur
Story GOV-SYSTEM
Titre Système de gouvernance IA ProbatioVault — Orchestration multi-agents gouvernée
Labels governance, tooling, process, multi-agent
Priorité Critique (infrastructure fondatrice)
Auteur Claude (reverse-engineering)
Date 2026-03-28
Version 1.0 (rétrospective — système existant documenté a posteriori)

1. Contexte et motivation

Le problème fondamental

ProbatioVault développe un coffre-fort numérique probatoire soumis à des exigences réglementaires strictes (NF Z42-013, ISO 14641, eIDAS). Le code produit engage la valeur probante des documents archivés — une erreur cryptographique, une faille de sécurité ou une incohérence fonctionnelle peut invalider juridiquement des preuves.

Le développement repose sur des agents IA (Claude, ChatGPT) qui produisent spécifications, code et tests. Or ces agents :

  • N'ont pas de mémoire inter-sessions : chaque invocation repart de zéro, sans capitalisation.
  • Ne se valident pas eux-mêmes : un LLM qui produit un document et le review ensuite a un biais de confirmation systématique.
  • Produisent des artefacts incohérents si le contexte est pollué par les étapes précédentes.
  • Ne respectent pas spontanément les contraintes réglementaires (NF Z42-013 §6.3, ISO 14641 §7.2) sans injection explicite.

Pourquoi un système de gouvernance

Un développeur humain seul face à des agents IA sans cadre produit du code qui compile mais ne prouve rien. Les premières stories ProbatioVault (PD-13 à PD-22) ont été développées sans gouvernance formelle. Le constat :

  • Aucune traçabilité des décisions architecturales — impossible de justifier un choix lors d'un audit.
  • Pas de validation croisée — le même LLM qui écrit la spec la valide, sans contradiction.
  • Corrections tardives — les erreurs découvertes en production (ou par Sonar) au lieu d'être bloquées en amont.
  • Pas de capitalisation — les mêmes erreurs se répétaient d'une story à l'autre (double-hash HSM, createVerify vs crypto.verify, ALTER TYPE ADD VALUE dans la même transaction, etc.).

L'analogie positronique

Le système s'inspire des cerveaux positroniques d'Isaac Asimov : des règles ancrées si profondément dans l'architecture qu'elles ne peuvent être violées, même par l'agent lui-même. Les Trois Lois de la Robotique deviennent les Articles Constitutionnels — des invariants inviolables injectés dans chaque point de contrôle.

Pourquoi 11 étapes

Le workflow en 11 étapes reproduit un cycle de développement industriel complet, adapté à la production IA :

  1. Besoin (étape 0) : capture de l'intention humaine, préservation des tensions.
  2. Spécification + Tests (étapes 1-2) : contractualisation formelle par un LLM distinct.
  3. Gate Spec (étape 3) : premier point de contrôle — la spec est-elle complète, testable, sans ambiguïté ?
  4. Plan (étape 4) : découpage en composants, mapping invariants → mécanismes.
  5. Gate Plan (étape 5) : le plan couvre-t-il tous les invariants ? Les hypothèses sont-elles vérifiables ?
  6. Implémentation (étape 6) : production multi-agents avec isolation par module.
  7. Acceptabilité (étape 7) : quality gates automatisés + reviews LLM.
  8. Gate Closure (étape 8) : le code produit respecte-t-il la spec ? Les invariants sont-ils couverts ?
  9. REX (étape 9) : extraction des apprentissages, métriques.
  10. Rétrospective (étape 10) : patterns récurrents, amélioration du processus.

Chaque gate est un point de non-retour conditionnel : on ne passe pas sans preuve de conformité.


2. Objectif

Fournir un cadre d'orchestration automatisé qui :

  1. Sépare production et validation : aucun agent ne valide jamais son propre travail (validation croisée Claude ↔ ChatGPT).
  2. Impose des quality gates mathématiques : scoring numérique non négociable (GO ≥ 8.0, RESERVE ≥ 7.0, NON_CONFORME sinon) avec plafond d'itérations et détection de stagnation.
  3. Trace chaque événement : état dans Jira (source de vérité), artefacts sur disque, sessions JSONL, commentaires horodatés.
  4. Capitalise les apprentissages : chaque erreur détectée en gate ou en REX alimente une base de learnings indexée par embeddings, réinjectée dans les stories suivantes.
  5. Isole les contextes : chaque étape s'exécute dans un processus distinct, sans pollution inter-étapes.
  6. Survit aux interruptions : le workflow peut être stoppé et repris à tout moment grâce à l'état Jira + données locales.

Le système ne développe pas — il gouverne le développement. Les agents produisent. Claude orchestre. Le PMO juge. L'humain tranche.


3. Périmètre fonctionnel

Lot 1 — Orchestration fondamentale (MUST-HAVE)

# Capacité Description
F-01 Workflow 11 étapes Boucle séquentielle des étapes 0 à 10 avec gestion des exit codes (0=succès, 2=NON_CONFORME, 3=ESCALADE).
F-02 Machine d'états Jira 19 statuts custom, 24 transitions (dirigées + globales), source de vérité pour l'état du workflow. Assignee auto-configuré par automation rules (3 agents : Claude, ChatGPT, Loïc) — routage dynamique de l'executor.
F-03 Données locales .gov-local.json par epic : iteration, substeps step 6, history, accepted_reserves, prompt_versions.
F-04 Gates PMO Steps 3, 5, 8 : review (P1) → confrontation (P2, LLM différent) → dossier de conformité → verdict YAML.
F-05 Scoring constitutionnel GO ≥ 8.0 partout, RESERVE ≥ 7.0 moyenne, NON_CONFORME sinon. Plafond 3 itérations. Delta=0 → ESCALADE.
F-06 Multi-agents step 6 Décomposition (manifest) → agents séquentiels (Claude auto / ChatGPT auto) → synthèse. Vérification TS inter-agent.
F-07 Acceptabilité step 7 Phase 1 (lint/format/tsc/test) → Phase 1.5 (Sonar QG, BLOQUANT) → Phase 2 (3 reviews LLM parallèles via parallel-reviews.sh).
F-08 Assemblage cache-first Prompts assemblés avec contenu statique en tête (cacheable TTL 5 min) et contenu variable en queue.
F-09 Vérification constitutionnelle Scan automatisé des violations Articles I-VII avant chaque verdict de gate.
F-10 Revue documentaire 12/12 artefacts requis (6 MD + 6 YAML) avant clôture Jira.
F-11 Reprise après interruption État déterminé par Jira au redémarrage, .gov-local.json pour les données complémentaires.

Lot 2 — Capitalisation et amélioration continue

# Capacité Description
F-12 Métriques metrics.jsonl : temps, gates, scores, écarts, complexité par story.
F-13 Learnings learnings.jsonl : extraction depuis REX + verdicts, indexation par embeddings (Ollama BGE-M3).
F-14 Injection proactive Au step 0, recherche sémantique des learnings pertinents par domaine et injection dans le prompt.
F-15 Dashboards Régénération batch : stories actives, bloquées, métriques de convergence.
F-16 Améliorations process REX section 10 → modifications CLAUDE.md, rules, procedures. Validation humaine si fichier constitutionnel touché.
F-17 Rétrospective Step 10 : analyse de patterns récurrents sur les N dernières stories, recommandations priorisées.

Lot 3 — Intégrations

# Capacité Description
F-18 Jira REST API Transitions, commentaires, lecture de statut. Credentials dans CLAUDE.local.md.
F-19 OpenCode (ChatGPT) Steps ChatGPT (1, 2, gates P1/P2) via opencode run. Capture en variable (sandbox filesystem).
F-20 Ollama (LLM local) Données sensibles, indexation embeddings, shadow evals. IA-Server 192.168.1.82.
F-21 GitLab CI/CD Feature branches, commits agents, pipeline vert obligatoire avant REX.
F-22 HashiCorp Vault Credentials GitLab, Sonar, AWS via API HTTPS.

Lot 4 — Cohérence et traçabilité

# Capacité Description
F-23 Cohérence inter-EB Pipeline Prolog après step 0 : détection contradictions entre besoins. STOP si critique.
F-24 Data-index YAML Index structuré data/specs-index/ : un YAML par artefact, un index.yaml par story.
F-25 Session recording data/sessions/{story}-session.jsonl : chaque événement horodaté.
F-26 Traçabilité RTM Matrice de traçabilité des exigences : story → RFC → test → code.

4. Contraintes

4.1 Contraintes réglementaires

  • Le code produit via ce workflow DOIT être conforme NF Z42-013 (archivage électronique) et ISO 14641 (gestion des documents).
  • Les preuves cryptographiques DOIVENT respecter eIDAS (signatures qualifiées, horodatage RFC 3161).
  • La traçabilité DOIT être suffisante pour un audit externe (AFNOR, commissaire aux comptes).

4.2 Contraintes organisationnelles

  • Développeur unique : le workflow est conçu pour un développeur assisté par des agents IA, pas pour une équipe.
  • PO = développeur : l'humain qui tranche les RESERVE et ESCALADE est aussi celui qui développe.
  • Budget LLM : le prompt caching (cache-first) est une contrainte économique, pas un luxe.

4.3 Contraintes techniques

  • Claude Code (extension VSCode) est le runtime principal. Les skills .claude/commands/ sont le point d'entrée.
  • OpenCode est le seul accès à ChatGPT (pas de copier-coller). Sandbox filesystem impose la capture en variable.
  • claude -p ne peut pas être lancé depuis une session Claude Code sans unset CLAUDECODE.
  • Jira Team-managed : le workflow n'est pas exposé via l'API classique. Les TIDs sont découverts empiriquement.
  • Ollama sur serveur local (2× RTX 5090) : embeddings BGE-M3, modèles qwen3.5:35b-a3b et llama3.3:70b.

4.4 Contraintes temporelles

  • Le workflow complet d'une story prend 8 à 24 heures selon la complexité.
  • Les gates itératives (v1 → v2 → v3) doivent être exécutées rapidement (< 5 min entre appels) pour bénéficier du prompt caching.
  • Le REX DOIT être lancé APRÈS que le pipeline GitLab soit vert.

5. Scénarios d'échec et résultats inacceptables

# Scénario d'échec Conséquence inacceptable Garde existante
E-01 Un agent valide son propre travail Biais de confirmation, erreurs non détectées Art. II — validation croisée P1 ≠ P2
E-02 Une gate est contournée (skip) Code non conforme en production Art. IV — QG non contournables, exit code bloquant
E-03 Le scoring est modifié pour forcer un GO Perte de crédibilité du processus Art. I — seuils mathématiques dans la Constitution
E-04 L'état du workflow est incohérent entre Jira et le disque PO voit un statut erroné, décision sur base fausse INV-GOV-19 — Jira source de vérité, sync à chaque événement
E-05 Un learning n'est pas capitalisé La même erreur se répète dans la story suivante Compounder obligatoire post-step 9, injection proactive en step 0
E-06 Les artefacts sont incomplets à la clôture Audit impossible, non-conformité check-docs.sh bloque la transition Done si < 12/12
E-07 Le Sonar QG est contourné Bugs/vulnérabilités en production Phase 1.5 BLOQUANTE, substitution ESLint+tsc interdite
E-08 Les prompts changent mid-story sans trace Incohérence entre artefacts produits avec des versions différentes Prompt versioning, prompt_versions dans .gov-local.json
E-09 Un multi-agents step 6 produit du code qui ne compile pas Erreurs TS découvertes tardivement en acceptabilité Vérification tsc --noEmit après CHAQUE agent
E-10 Le workflow tourne en boucle infinie sur une gate Temps perdu, frustration développeur Plafond 3 itérations + détection delta=0 → ESCALADE

6. Tensions et conflits non résolus

T-01 : Autonomie des agents vs. contrôle constitutionnel

Les agents IA sont plus efficaces quand ils ont de la latitude. Mais le domaine réglementaire exige un contrôle strict. La tension se manifeste dans : - Les agents step 6b qui voudraient refactorer du code existant mais sont limités aux fichiers autorisés. - Les gates qui parfois sur-pénalisent des choix techniques valides mais non documentés dans la spec.

Non résolu : le calibrage entre "laisser l'agent s'exprimer" et "imposer la conformité" est empirique, ajusté story par story.

T-02 : Coût du prompt caching vs. complétude du contexte

Le cache-first impose de mettre le contenu statique en tête. Mais parfois, le contexte le plus pertinent pour l'agent est dynamique (corrections de l'itération précédente, écarts spécifiques). Injecter ce contexte en premier casserait le cache.

Non résolu : le compromis actuel (dynamique en queue) est acceptable mais sous-optimal pour les gates itératives complexes.

T-03 : Développeur unique vs. séparation des pouvoirs

L'Art. II impose que l'auteur ne valide jamais son propre travail. Mais avec un développeur unique, c'est le même humain qui guide tous les agents. La séparation se fait entre LLM (Claude vs. ChatGPT), pas entre humains.

Non résolu : la validation croisée inter-LLM est un proxy imparfait pour la vraie séparation des pouvoirs. Un audit externe humain périodique renforcerait le dispositif.

T-04 : Traçabilité exhaustive vs. volume de données

Chaque événement est logué (session JSONL, commentaires Jira, métriques). Sur 30+ stories, le volume de données devient significatif. Les dashboards sont en batch (pas temps réel), les learnings nécessitent un reindex.

Non résolu : le passage à l'échelle (100+ stories) nécessiterait une base structurée (PostgreSQL ?) au lieu de fichiers JSONL.

T-05 : Jira source de vérité vs. latence réseau

Jira est la source de vérité, mais chaque appel API prend 200-500ms. Sur un workflow avec 20+ transitions, ça représente 10+ secondes de latence pure. Le fallback .gov-local.json est un mode dégradé, pas un remplacement.

Non résolu : acceptable pour un développeur unique, problématique si multi-sessions parallèles.


7. Questions ouvertes

# Question Impact Piste
Q-01 Faut-il des tests automatisés pour le workflow lui-même ? Confiance, non-régression du processus Complexité haute (mock Jira, LLM, Git). Aujourd'hui, chaque story est un test d'intégration implicite.
Q-02 Le workflow peut-il fonctionner sans Jira ? Résilience, mode offline complet Possible si .gov-local.json devient source de vérité temporaire + file de transitions. Pas implémenté.
Q-03 Faut-il un dashboard temps réel au lieu du batch ? Visibilité PO, multi-sessions PD-290 dans le backlog (Flask local + WORKFLOW-STATE.md → migration Jira API).
Q-04 Le modèle constitutionnel est-il vérifiable formellement ? Garantie mathématique que les Articles sont respectés Pipeline Prolog existe pour les besoins. Extension aux Articles I-VII envisageable mais non priorisée.
Q-05 Quelle stratégie de migration pour les stories historiques (pré-Jira FSM) ? Cohérence de l'historique Les WORKFLOW-STATE.md existants dans les projets cibles ne sont plus lus. Les données sont dans metrics.jsonl et learnings.jsonl. Pas de rétro-migration prévue.
Q-06 Faut-il supporter plusieurs développeurs en parallèle ? Passage à l'échelle Nécessiterait : mutex .gov-local.json, namespacing Jira, merge de learnings. Hors périmètre actuel (développeur unique).
Q-07 Comment gérer l'obsolescence des TIDs Jira ? Fiabilité des transitions jira_list_transitions() permet la redécouverte dynamique. Pas de mécanisme automatique de mise à jour des mappings data/fsm.yaml.
Q-08 Les credentials doivent-ils être centralisés dans Vault uniquement ? Sécurité, rotation Aujourd'hui dupliqués dans jira-api.sh et CLAUDE.local.md. Migration Vault ajouterait une dépendance au démarrage.

8. Hors périmètre

# Exclusion Raison Story potentielle
HP-01 CI/CD du repo de gouvernance Outil interne, pas un livrable
HP-02 Tests automatisés du workflow Complexité mock multi-LLM Q-01
HP-03 Multi-utilisateur / multi-sessions Développeur unique Q-06
HP-04 Monitoring/alerting temps réel Dashboard manuel suffisant PD-290
HP-05 Gestion centralisée des secrets Vault seul ajouterait une dépendance Q-08
HP-06 Rollback automatique Jira Transitions globales manuelles
HP-07 Vérification formelle des Articles Pipeline Prolog limité aux besoins Q-04
HP-08 Interface web / GUI du workflow CLI + VSCode suffisant
HP-09 Support de LLM alternatifs (Gemini, Mistral) Le routage dynamique via assignee Jira rend l'ajout d'un nouveau LLM trivial (créer l'utilisateur Jira + ajouter le mapping dans jira_assignee_to_executor). Non priorisé.
HP-10 Internationalisation (i18n) Utilisateur francophone unique

9. Risques identifiés

# Risque Probabilité Impact Mitigation
R-01 Dépendance ChatGPT : si API OpenAI down, 5 étapes bloquées Moyenne Élevé Pas de fallback LLM local pour ces étapes. claude -p comme reviewer partiel (dérogation Art. II documentée).
R-02 TIDs Jira instables : si le workflow Jira est modifié Faible Élevé jira_list_transitions() pour redécouverte. data/fsm.yaml à mettre à jour manuellement.
R-03 Race condition .gov-local.json : 2 sessions sur la même story Faible Moyen Convention "1 session par story". Pas de mutex implémenté.
R-04 Prompts > 30KB : ChatGPT bascule en mode agentic involontaire Connue Moyen Sanitisation paths absolus + claude -p comme fallback.
R-05 Stagnation gate : corrections cosmétiques sans progrès réel Moyenne Moyen Détection delta=0 → ESCALADE immédiate (Art. I).
R-06 Volume de données : 100+ stories → JSONL trop gros pour grep/jq Faible Faible Migration vers base structurée si nécessaire. Learnings déjà indexés par FAISS.
R-07 Obsolescence des agents : changement de modèle (GPT-5 → GPT-6, Claude 4 → 5) Certaine Moyen agent-registry.yaml avec shadow evals pour valider les nouveaux modèles avant bascule.
R-08 Constitutional check incomplet : scan heuristique, pas de preuve formelle Moyenne Moyen Vérification formelle Prolog envisageable (Q-04) mais non priorisée.

10. Dépendances

Composant Statut Impact sur le workflow
Jira Cloud (Atlassian) Opérationnel Source de vérité pour l'état. Indisponibilité = mode dégradé.
OpenCode + ChatGPT Plus Opérationnel Steps 1, 2, gates P1/P2. Indisponibilité = blocage.
Claude Code (Anthropic) Opérationnel Runtime principal. Indisponibilité = workflow impossible.
Ollama / IA-Server Opérationnel Embeddings, shadow evals. Indisponibilité = dégradation (pas de nouveaux learnings indexés).
GitLab CI/CD Opérationnel Pipeline vert requis avant REX. Indisponibilité = REX bloqué.
HashiCorp Vault Opérationnel Credentials GitLab, Sonar. Indisponibilité = intégrations bloquées.
sonar-scanner (local) Installé Phase 1.5 step 7. Absence = STOP (substitution interdite).
python3 Installé Parsing JSON réponses Jira. Absence = fonctions Jira cassées.

Annexe — Learnings injectés

Les learnings suivants, issus de 30+ stories gouvernées, ont directement façonné le système :

Source Learning Impact sur le système
PD-55, PD-107, PD-31, PD-44 (8 stories) Sonar QG FAILED découvert post-Gate 8 → Phase 1.5 Sonar BLOQUANTE avant reviews LLM
PD-282 createVerify(ALG).update(hash) = double-hash HSM → Learning injecté dans prompts agents crypto
PD-282, PD-279 ALTER TYPE ADD VALUE dans même transaction → Learning injecté dans prompts agents DB
PD-250, PD-81 Stagnation delta=0 sur gate → Détection automatique + ESCALADE immédiate
PD-254, PD-282, PD-265, PD-283, PD-85 Erreurs TypeScript post-generation multi-agents → Vérification tsc --noEmit après CHAQUE agent
PD-55, PD-79, PD-31, PD-105, PD-53 Faux positifs LLM en review → Injection stubs connus + TODO tracés dans prompts
PD-250, PD-251 Stubs inter-PD sans story destination → Annotation // STUB: PD-XX obligatoire
PD-84 Gate 3 : 3 itérations par manque de transitions retour → Section "Transitions inverses" ajoutée au template spec
PD-86 Spec mentionne Swift/SwiftUI pour un projet React Native → Section "Stack technique" ajoutée au template spec
PD-80 Gate 3 v1 = 5.94/10 par omission locks/idempotence → Section "Mécanismes de protection distribuée" ajoutée au template spec
PD-262 50% faux positifs gate 8 sur stories mobile (natif invisible) → Injection fichiers natifs Swift/Kotlin dans prompts review
PD-283 integrityHash valide en format mais jamais vérifié fonctionnellement → Checklist "Vérification fonctionnelle des champs sécurité"

Ces learnings démontrent le mécanisme d'auto-amélioration du système : chaque erreur détectée en gate ou en REX modifie les templates, les rules ou les procedures pour empêcher sa récurrence.