Introduction & Sens du Nom EPURE
EPURE (Giskard-AI/epure) est un framework d'ingénierie logicielle centré sur GitHub qui associe une gouvernance architecturale humaine structurée à une implémentation TDD et une revue de code multi-agents autonomes.
EPURE garantit à l'ingénierie assistée par IA un verrouillage cryptographique du mandat de spécification (spec_sha), un fichier de configuration déclaratif unique (.github/agents.yml) et un flux reproductible de l'issue jusqu'à la release.
Pourquoi le nom « EPURE » ?
Le nom EPURE possède un double sens qui ancre le projet à la fois dans la tradition architecturale française et dans l'ingénierie logicielle moderne :
1. L'Épure d'Architecte (Le Tracé Avant l'Usinage)
En architecture classique, en taille de pierre (stéréotomie) et en charpente navale, une épure est le dessin géométrique tracé à l'échelle grandeur nature sur le mur ou le sol de l'atelier avant même de tailler la première pierre ou d'assembler la moindre pièce.
Dans le développement logiciel assisté par agents IA, la cause principale d'échec est le codage prématuré : laisser un modèle deviner les besoins produit, inventer son propre vocabulaire métier ou trancher silencieusement des compromis d'architecture au milieu d'une Pull Request. EPURE impose la discipline inverse :
- Tracer l'épure d'abord : sur une issue GitHub de pilotage, le mainteneur humain et l'agent lèvent chaque ambiguïté lors d'un entretien contradictoire structuré (le Grill).
- Versionner le domaine et la spécification : avant qu'une seule ligne de code applicatif ne soit écrite, EPURE versionne le langage ubiquitaire (
GLOSSARY.md), les décisions d'architecture (docs/adr/), la spécification fonctionnelle et technique (docs/specs/<slug>.md) et — dès qu'une interface utilisateur est concernée — le contrat de système de design (DESIGN.md) sur une branche dédiéeplan/<issue>-<slug>. - Usiner les pièces sous mandat verrouillé : ce n'est qu'après la signature explicite du plan par un mainteneur via
/epure approve(qui verrouille lespec_shaexact dansrefs/epure/state/<issue>) que les agents exécutent le graphe orienté acyclique (DAG) de tickets (task/* -> feature/*).
2. Le Rétro-Acronyme Bilingue
EPURE résume également les cinq piliers de son moteur d'orchestration en français comme en anglais :
| Lettre | Acronyme Français | Acronyme Anglais | Rôle dans le cycle d'ingénierie |
|---|---|---|---|
| E | Élaboration | Engineered | Entretien de conception structuré (/epure plan & Grill) qui explicite les compromis avant de coder. |
| P | Plans | Planning | Versionnement de GLOSSARY.md, des ADRs, de DESIGN.md, de la Spécification et du DAG de tickets (blocked_by). |
| U | Usinage | Unified | Boucle d'implémentation TDD en sandbox sans secret (npm test, npm run build, contrats) sur des branches task/* isolées. |
| R | Revue | Review | Revue de code multi-agents spécialisés chargés depuis dev, porte UI Impeccable WCAG AA et squash sémantique par IA. |
| E | Exécution | Execution | Intégration gouvernée (merge humain feature/* -> dev) et promotion de release fast-forward (dev -> main). |
La Tripartition des Étapes du Flux (Q101)
Un principe fondateur d'EPURE est la clarté absolue sur qui décide et ce qui s'exécute automatiquement. Chaque étape du cycle de vie appartient à l'une des trois catégories formelles suivantes :
1. Portes de Validation Humaine Obligatoires (4 Jalons)
Aucun agent ne peut contourner ces quatre points de décision. Ils exigent l'intervention explicite d'un contributeur disposant des droits write ou admin sur le dépôt :
- Jalon 1 — Lancement & Réponses au Grill (
/epure plan) : un mainteneur déclenche/epure plansur une issue GitHub et répond aux questions de cadrage jusqu'à ce que toutes les ambiguïtés soient levées. - Jalon 2 — Signature du Mandat d'Implémentation (
/epure approve) : après relecture de la spécification et du DAG de tickets générés surplan/<issue>-<slug>, le mainteneur poste/epure approve. Cette commande intègre directement les artefacts deplan/*dans la branche d'intégrationfeature/<issue>-<slug>(avec fusion additive deGLOSSARY.mdet renumérotation monotone des ADRs, sans PR intermédiaireplan/* -> devselon ADR-0031), scelle lespec_shadansrefs/epure/state/<issue>et lance l'exécution du DAG de tickets. - Jalon 3 — Merge Humain d'Intégration (
feature/* -> dev) : lorsque tous les tickets du DAG sont implémentés, audités et squashés dansfeature/*(et validés parEpicConvergenceAudit), EPURE ouvre la PR finale de synthèsefeature/* -> dev. Le rulesetepure-dev-governanceinterdit matériellement à l'Agent App de fusionner du code applicatif dansdev: un humain doit cliquer sur Squash and merge. - Jalon 4 — Promotion Humaine de Release (
dev -> main) : la promotion dedevversmainet la publication du tagvX.Y.Zexigent le déclenchement manuel (workflow_dispatch) du workflowrelease-promote.ymlpar un mainteneur.
2. Étapes Automatisées Obligatoires
Dès qu'un jalon humain est franchi, l'orchestrateur EPURE exécute de manière déterministe :
- Génération de l'Épure, Audit Goldfish de la Spec & DAG de Tickets : exécution de l'audit de spécification Goldfish zéro-contexte (
runGoldfishSpecAudit), commit deGLOSSARY.md,docs/adr/etdocs/specs/<slug>.md(incluantEpicGoalContract) surplan/<issue>-<slug>, puis création des issues GitHub atomiques avec leurs relations nativessub_issuesetblocked_byet le labelready-for-agent. - Boucle TDD en Sandbox Noyau Sans Secret : pour chaque ticket débloqué, application des mutations incrémentales (
write_repo_file,patch_repo_file,delete_repo_file) et vérification Stage 1 dans une sandbox noyau Linux en 2 phases (landrun/bubblewrap) dépourvue deLLM_API_KEYet des clés privées PEM des GitHub Apps. - CI Externe Événementielle, Revue Multi-Agents depuis
dev& Squash Sémantique IA : libération immédiate du runner pendant la CI externe (waiting_ticket_ci), réveil surcheck_suite.completed/workflow_run.completed, exécution parallèle de jusqu'à 4 reviewers spécialisés (chargés exclusivement depuisdev) +spec-parity-reviewer, puis synthèse d'un titre/corps Conventional Commit (Refs #<ticket>) et squash-merge automatiquetask/* -> feature/*. - Audit de Convergence Zéro-Contexte (
EpicConvergenceAudit) & Revue de Synthèse Finale : exécution derunEpicConvergenceAuditsurfeature/*pour vérifier le câblage effectif desrequired_entrypointset l'absence deforbidden_stubs(avec création automatique de tickets de Phase 2 si nécessaire), puis ouverture et audit complet de la PR finalefeature/* -> devavec les liensCloses #<issue>etCloses #<ticket>.
3. Étapes Facultatives ou Conditionnelles
Ces opérations ne s'activent que selon la nature du changement ou sur demande explicite d'un mainteneur :
- Porte Conditionnelle UI & Impeccable (automatique si surface UI) : dès que la fonctionnalité ou le diff touche des fichiers d'interface (
.vue,.tsx,.jsx,.css,.html), EPURE génère automatiquementDESIGN.md, exécuteuser-advocateen modedesign-gateavant/epure approve, puis imposeuser-advocate(implementation-review) etimpeccable-gatecomme checks bloquants sur chaque PR. Les projets ou tickets purement backend/CLI ignorent automatiquement cette étape. - Détour Exploratoire
/prototype& Preview Pages Isolée (facultatif) : lorsqu'un comportement visuel ou une machine d'état ne peut être tranché par le texte pendant le Grill, un mainteneur peut demander un prototype jetable surprototype/*. La prévisualisation statique GitHub Pages est désactivée par défaut (enable_pages_preview: false) et nécessite un consentement explicite. - Commandes Slash de Pilotage Granulaire (facultatives) :
/epure to-spec: valide la frontière du Grill (ou force le passage anticipé) pour générer la spécification surplan/*./epure to-tickets: valide la spécification surplan/*et génère le DAG natif de tickets GitHub (sub_issues+blocked_by)./epure continue: reprend l'orchestration après une pauseneeds-human, un correctif manuel ou la fin d'une CI externe (waiting_ticket_ci/waiting_feature_ci)./epure sync(alias/epure rebase) : synchronisedev -> feature/*(etfeature/* -> task/*) avec résolution de conflits 3-way et validation Sandbox Stage 1./epure status: rafraîchit et affiche l'état d'orchestration et la table d'avancement des tickets./epure cancel(alias/epure stop) : interrompt immédiatement l'orchestration et marque le mandatcancelleddansrefs/epure/state/<issue>.
- Escalade Humaine Conditionnelle (
needs-human) : déclenchée automatiquement si une branchetask/*modifie un chemin sensible (.github/workflows/**,.github/agents.yml, le répertoire du roster de reviewersreviewers_dir/**(par défaut.agents/reviewers/**),CODEOWNERS) sans exception approuvée, ou si un ticket échoue encore aprèsmax_code_fix_attempts = 3tours d'auto-remédiation.
Écosystème Amont & Crédits (ADR-0018)
EPURE s'appuie sur des dépôts open source, des skills d'agents, des outils de design et des moteurs de sécurité épinglés par révision (attributions complètes dans NOTICE et skills-lock.json) :
| Dépôt Amont | Licence | Rôle dans EPURE |
|---|---|---|
Matt Pocock Agent Skills (mattpocock/skills) | MIT | Socle des skills de cadrage et d'exécution (grill-with-docs, to-spec, to-tickets, domain-modeling, tdd, code-review, prototype, wizard, pr avec crédit à Dex Horthy / HumanLayer). |
Impeccable (pbakaus/impeccable) | Apache-2.0 | Cadrage UX/UI (shape, DESIGN.md, .impeccable/surfaces/*.md) et contrôle qualité déterministe frontend / accessibilité WCAG 2.1 AA (actions/impeccable, impeccable-gate). |
Archify (tt-a1i/archify) | MIT | Moteur de schémas d'architecture interactifs en qualité showcase embarqué dans scripts/archify/ (npm run docs:diagrams). |
iFixAi (ifixai-ai/iFixAi) | Apache-2.0 | Audit déterministe des trajectoires d'autorisation et des frontières de privilèges (actions/ifixai). |
zizmor (woodruffw/zizmor) | MIT | Analyse statique de sécurité des workflows GitHub Actions (actions/zizmor-audit). |
Renovate (renovatebot/renovate) | AGPL-3.0 (Outil) | Mise à jour automatisée des workflows épinglés par SHA et des dépendances avec migration assistée optionnelle (auto_migrate). |

