Aller au contenu

V7 — Port full Claude Code (5 plugins par porte + frontmatter métacognitif)

Commits de référence : d9959f5 (ADR-0010 + backfill) → 7bdb3ab (generators) sur feature/full-claude-code.

Contexte

V6 a introduit le dual-format mais limité à 3 skills task-level (create-tasks, lightweight-task-workflow, task-check). Le reste du kit — 18 skills + 1 agent coach — est resté mono-format Copilot. Asymétrie : un consumer Copilot a le kit complet, un consumer Claude Code a uniquement l'atome G4. Le pilote kanban-vibe étant principalement Claude Code, ce déséquilibre commence à coûter.

En parallèle, le coach actuel est monolithique : un seul prompt, une seule posture, identique en G1 (cadrage flou) comme en G4 (exécution). La trajectoire long terme (memo coach métacognitif) est de transformer le coach en dispatcher : à chaque transition, un préambule déterministe assemble {skills autorisées, prohibées, posture cognitive} adapté au domaine épistémique de la porte. Mais on ne peut pas dispatcher ce qu'on n'a pas déclaré — chaque skill doit annoncer son domaine.

V7 traite les deux fronts d'un coup : porter tout le kit en dual-format, et poser la première brique métacognitive (déclaration des contextes en frontmatter, dispatcher différé).

Décisions structurantes

Toutes consolidées dans ADR 0010 (D1) — les autres décisions de cette vague ne déclenchent pas d'ADR car elles sont dérivées du choix de schéma.

Décision 1 — Bloc sdeg: namespacé en frontmatter (ADR-0010)

Chaque skill (Copilot et Claude) déclare désormais dans son frontmatter :

Champ Type Rôle
applies_at [gate] Portes pertinentes en premier choix (g1, g2, g3, g4, re-g1, pre-g1, cross)
also_useful_at [gate] Portes secondaires (skills polyvalents)
posture [posture] hermeneutic / analytical / experimental / socratic / strategic / executional
prohibits [skill] Skills incompatibles à activer simultanément
prerequisites [string] (free-form) Conditions logiques sur l'état SDLC
produces [artefact] Trace skill → artefact (futur knowledge graph)

Backfill en bloc sur les 21 prompts Copilot existants + les 3 SKILL.md Claude du plugin sdeg-task-level/ au moment où l'ADR est actée. Cohérence garantie, pas de "j'ai oublié de remplir le sdeg: sur tel skill". Le bloc est transparent pour Copilot et Claude (champs YAML inconnus ignorés) — il est en attente du dispatcher.

Décision 2 — Port du coach en plugin orthogonal sdeg-coach

Le coach n'est pas une skill comme les autres : il est l'orchestrateur conversationnel qui choisit quelle skill invoquer. D'où un plugin séparé .claude/plugins/sdeg-coach/ (pas un sous-dossier de l'un des plugins de porte). SKILL.md court, EN, qui pointe vers .github/agents/coach-emergent.agent.md comme source de vérité pour les tables canoniques (paliers MVP, seuils délégation, conventions d'événements).

Le coach Claude répond en français à l'utilisateur (vocabulaire sdeg français préservé : BE, FE, US, porte, grain). Le SKILL.md est en EN par cohérence avec les autres plugins Claude, mais il instruit explicitement Claude de répondre en français.

Décision 3 — 4 nouveaux plugins par porte + enrichissement de sdeg-task-level

Plugin Phase Skills (count)
sdeg-vision pré-G1 / G1 7
sdeg-plan-dev G2 1
sdeg-plan-fab G3 4
sdeg-task-level (existant) G4 4 (3 + tdd-dev ajouté)
sdeg-meta cross / Re-G1 5

Choix "1 plugin par porte" délibéré : prépare le dispatcher futur, qui activera le plugin correspondant à la porte courante. sdeg-plan-dev reste maigre (1 skill) — assumé : G2 est une porte courte, refusion plus tard si réel besoin. atelier-incertitudes placé dans meta plutôt que plan-fab (cross-portfolio plus que G3 spécifique).

Décision 4 — Pattern "thin port" : SKILL.md court qui pointe vers le prompt FR

Au lieu de traduire intégralement les 18 prompts FR en EN (~3000 lignes dupliquées, drift garanti), chaque SKILL.md fait ~50 lignes :

  1. Frontmatter complet (name, description avec phrases-trigger pour le routing Claude, version, bloc sdeg:)
  2. Intro de 2-3 lignes en EN
  3. Section "Language" : "Respond in French to the user"
  4. Section "Source of truth" : pointe vers .github/prompts/<name>.prompt.md
  5. Inputs / Outputs / When to invoke (puces courtes)

Le coût de port est divisé par ~10. La maintenance est mono-source : éditer le prompt FR suffit, le SKILL.md ne contient pas de duplication de workflow.

Décision 5 — Generators adaptés au dual-format

tools/docs/gen-skills.js :

  • Lit le bloc sdeg: du frontmatter (parser indenté ad-hoc, pas de dépendance YAML)
  • Détecte automatiquement le plugin Claude correspondant via scan .claude/plugins/*/<slug>/SKILL.md
  • Pages skill : ajoute "Source Claude Code (EN)" + section "Métacognition (ADR-0010)"
  • Mapping porte dérivé du frontmatter (au lieu d'une table hardcodée qui dérivait silencieusement)

scripts/bootstrap.js : énumère les 6 plugins par nom dans la sortie. L'utilisateur voit ce qu'il installe.

tools/e2e-autonomous/ (harness E2E) : pas de changement structurel. Les prompts FR Copilot restent la source de vérité chargée par loadCoachSystem() et loadSkillPrompt(). Le port Claude est un entry-point conversationnel, pas un moteur dupliqué — le harness teste le moteur.

Pivots

Abandonné — Traductions EN intégrales des 18 skills

Tentation initiale : porter chaque prompt FR en SKILL.md EN complet (workflow, exemples, templates, tout). Coût estimé : ~3000 lignes nouvelles, deux sources de vérité à maintenir, drift garanti après 3 mois. Invalidé en faveur du pattern "thin port" (D4) — le SKILL.md route, le prompt FR fait le travail.

Abandonné — Coach intégré dans chaque plugin de porte

Variante : un coach par plugin (sdeg-vision-coach, sdeg-g3-coach...) déjà spécialisé. Invalidé : multiplie les sources de vérité, complique la mise à jour, et anticipe trop sur le dispatcher (qui pourrait choisir un découpage différent). Un coach unique + dispatcher externe = architecture plus souple.

Abandonné — Sunset progressif de Copilot

L'option "full Claude Code, drop Copilot" a été pesée. Rejetée : kanban-vibe pilote en Copilot v2, les habitudes équipe sont Copilot-first, et la dual-format coûte peu à maintenir avec le pattern thin port. Décision : dual-format gardé, Copilot reste source de vérité.

Abandonné — Typage strict des prerequisites

Variante : JSON-Schema validation au commit pour les préconditions (fe.status: PRD_EN_COURS...). Invalidé : on n'a pas encore de dispatcher pour les consommer ; sur-investir maintenant produit du code mort. Free-form string list aujourd'hui, le typage viendra quand on aura un cas d'usage réel.

Artefacts produits

  • ADR 0010-skill-frontmatter-metacognition.md (Accepté, 2026-04-25) + index ADR mis à jour.
  • Backfill sdeg: : 24 frontmatters enrichis (21 prompts FR + 3 SKILL.md Claude existants).
  • 5 plugins Claude Code : sdeg-coach, sdeg-vision, sdeg-plan-dev, sdeg-plan-fab, sdeg-meta ; sdeg-task-level enrichi de tdd-dev.
  • 22 SKILL.md générés (18 ports + coach + 3 existants déjà à jour).
  • Generators : tools/docs/gen-skills.js étendu (lecture sdeg:, détection plugin Claude, dual-format dans les pages générées) ; scripts/bootstrap.js énumère les plugins.
  • Pages skills régénérées (21) avec section "Métacognition" et lien dual-format.
  • CLAUDE.md synchronisé : 6 plugins listés, règle d'autorité Copilot/Claude, ADR-0010 référencée.

Leçons apprises

1. Déclarer avant de coder — la métadonnée précède le moteur

ADR-0010 pose un schéma de frontmatter qu'aucun code ne consomme encore. Tentation : "à quoi bon, c'est mort". Vrai bénéfice : avant que le dispatcher existe, on peut backfiller en bloc, valider la cohérence, ajuster les noms de champs, sans pression de production. Quand le dispatcher arrivera, il aura 21 skills déjà annotées et un schéma stabilisé. Cette discipline (architecture avant implémentation) coûte peu, débloque beaucoup.

2. Le thin port bat le fat port quand l'autorité est claire

18 skills à porter : tentation du fat port (traduction intégrale, ~150 lignes chacun). Coût réel : 50 lignes chacun avec le pattern thin port — divisé par 3, et la maintenance reste mono-source (édition du prompt FR seulement). Règle dérivée : quand le format cible n'est qu'un entry-point (routing + langue), le port doit être thin. Le fat port n'a sens que si les deux formats divergent significativement (workflows différents, audiences différentes).

3. Bootstrap qui dit ce qu'il installe vs bootstrap qui compte

✓ Claude Code plugins (29 fichiers) est inutile : l'utilisateur ne sait pas si c'est ce qu'il voulait. · sdeg-coach/ · sdeg-vision/ ... est lisible : il vérifie d'un coup d'œil que les 6 plugins attendus sont là. Coût d'écriture du listing : 5 lignes de Node. Bénéfice utilisateur : confiance immédiate, pas de "tiens, est-ce que sdeg-meta s'est bien copié ?". Ce genre de micro-amélioration UX bootstrap a des intérêts composés.

4. La cartographie par porte crée des plugins maigres — c'est OK

sdeg-plan-dev ne contient qu'un skill (be-to-features). Tentation : fusionner avec sdeg-plan-fab pour étoffer. Refusé : la cohérence "1 plugin = 1 porte" prépare proprement le dispatcher futur, qui activera le plugin de la porte courante. Si plus tard G2 et G3 fusionnent dans le code, on fusionnera les plugins ; tant qu'ils restent distincts dans schema.js, ils restent distincts en plugins. La forme suit la fonction de la machine d'états, pas l'esthétique du listing.

5. La règle d'autorité doit être inscrite dans CLAUDE.md, pas juste dans une ADR

ADR-0010 dit que le bloc sdeg: est transparent pour Copilot/Claude. Vrai mais insuffisant pour quelqu'un qui édite. CLAUDE.md dit explicitement : "Edit the FR side; the Claude side just routes". Sans cette ligne dans le fichier que Claude charge à chaque session, la règle est latente. Règle dérivée : toute règle d'autorité multi-source doit être listée dans CLAUDE.md, pas seulement dans une ADR archivée.

Références

  • ADR 0010 — Schéma frontmatter pour la métacognition gate-aware
  • Catalogue skills — pages enrichies de la section "Métacognition" et du lien dual-format Copilot ↔ Claude.
  • Branche feature/full-claude-code — 8 commits, +1700 lignes.
  • Roadmap utilisateur (mémoires) : coach métacognitif (l'objectif long terme), observabilité knowledge graph (qui consommera produces: un jour), instanciation socratique (la vision plus large).