V6 — Intégration Nick Tune (v3)¶
Commits de référence : 19e7c45 (ADR) → 31f3c73 (fixup) sur feature/sdlc-v3.
Contexte¶
Les vagues V1-V5 ont construit un kit fort sur l'amont : Vision (G1), décomposition BE → Features (G2), plan de fabrication FE (G3). Le pilote kanban-vibe confirme cette solidité. Mais la bascule us.DEV → merge reste mince : #tdd-dev + convention TDD, sans discipline intra-tâche, sans harness qualité par tâche, sans rétrospective structurée pour alimenter la boucle Re-G1.
Nick Tune publie (jan-mars 2026) trois articles et deux repos qui adressent précisément cet aval : deterministic-agent-workflows (moteur TS + SQLite + hook PreToolUse) et claude-skillz (~40 skills packagés en plugin Claude Code, dont create-tasks, lightweight-task-workflow, task-check, architect-refine-critique/arc-prd, reflection-process).
V6 formalise la rencontre. Les deux approches partagent trois invariants qui rendent la greffe possible : l'agent IA ne transite jamais d'état, la machine d'états est en code, la décision humaine est un événement tracé avec contexte git. Mais Nick fait plus agressif sur l'enforcement (intercept des tool calls) et utilise un event-store SQLite là où nous avons un registry JSON single-writer. Fusion en bloc impossible sans trahir nos invariants ; d'où une intégration sélective.
Décisions structurantes¶
Toutes sont consolidées dans ADR 0009. Résumé :
Décision 1 — PRD artefact LIVING de la FE pré-G3 (D1)¶
Nouveau statut fe.PRD_EN_COURS entre NOT_STARTED et FAB_PLAN_EN_COURS. Le PRD (prd.md) y est rédigé en mode LIVING et reste mutable pendant toute la décomposition en USs ; il est figé en COLD à G3, en même temps que spec.md et plan-fab.md. Check G3 enrichi de prd-exists + prd-meta (frontmatter problem_statement / user_personas / success_criteria).
La transition directe NOT_STARTED → FAB_PLAN_EN_COURS est conservée avec deprecated: true pour la migration v2 → v3.
Décision 2 — Pas d'import du moteur TS (D2)¶
Le moteur deterministic-agent-workflows (TS + event-store SQLite + hook PreToolUse + identity-verification 🔵 STATE: X) est explicitement écarté. Son outcome est à 70% couvert par notre pre-commit + conventions ; l'adopter casserait le single-writer sdlc-registry.json et imposerait Claude Code aux consumers Copilot-first.
En revanche, comme pattern (pas comme code) : la shape {canTransitionTo, transitionGuard(GitInfo), allowedWorkflowOperations} inspire nos futures extensions de schema.js.
Décision 3 — Skills task-level en dual-format (D3)¶
Trois skills importés en adaptation originale (pas de copie verbatim — claude-skillz est sans licence explicite) :
create-tasks— décomposition US en tâches via Example Mapping + SPIDR + INVEST + GWT.lightweight-task-workflow— micro-SMCHECK_STATUS → WORKING → VERIFY → COMPLETE → AWAITING_COMMIT → MARK_TASK_COMPLETEintra-us.DEV.task-check— verdict PASS / FAIL / NEED_INFO avant chaqueVERIFY → COMPLETE.
Dual-format : .github/prompts/*.prompt.md (FR, Copilot) et .claude/plugins/sdeg-task-level/ (EN, plugin Claude Code avec subagent + slash-command /check). scripts/bootstrap.js distribue les deux.
Aucune modification de sdlc/schema.js — cette micro-SM est orthogonale au graphe BE/FE/US macro.
Décision 4 — Skill #prd-architect (D4)¶
Nouveau prompt FR inspiré de arc-prd de Nick. Chaîne architect → refiner → critique (3 phases dans une session) produisant prd.md à partir du plan-dev.md de la BE parente. Lentilles sdeg-isées : grain de décision, langue ubiquitaire, falsifiabilité. Appelé pendant fe.PRD_EN_COURS.
Décision 5 — Skill #sdeg-reflection (D5)¶
Nouveau prompt FR inspiré de reflection-process de Nick. Exploite le git log comme event-log (nos commits chore(sdlc): <ID> <FROM>→<TO> sont déjà structurés) — pas d'event-store SQLite. Produit bilan-mvp.md en 5 lentilles : state-efficiency, review-rework, quality-gates, tooling, workflow-design. Matière factuelle pour la décision REVUE_MVP (TERMINE / PERSEVERE / PIVOTED) et pour la boucle Re-G1 si PERSEVERE.
Pivots¶
Abandonné — Fusion en bloc avec le moteur Nick Tune¶
Tentation initiale : adopter le moteur TS pour obtenir l'enforcement PreToolUse qui bloque les tool calls hors-état. Invalidé rapidement : casse le single-writer sdlc-registry.json, impose Claude Code, duplique schema.js. Décision : import comme pattern, pas comme code.
Abandonné — Event-store SQLite pour la rétrospective¶
Première idée pour D5 : exposer un ~/.workflow-events.db alimenté par un nouveau hook. Invalidé : nos commits chore(sdlc): structurés sont déjà un event-log parfaitement exploitable via git log --grep. Zéro nouvelle persistance.
Abandonné — Identity-verification 🔵 STATE: X enforcée¶
Nick impose que chaque message d'agent commence par 🔵 STATE: X via son moteur. En mode convention (pas enforcé) dans #lightweight-task-workflow — pas de hook qui refuse un message non-préfixé. Raison : trop intrusif pour un public Copilot-first, valeur ajoutée marginale en Copilot Chat.
Abandonné — Migration forcée des FEs existantes¶
Les FEs ouvertes sous v2 sautent par défaut PRD_EN_COURS. Option rejetée : script de migration forcée. Option retenue : transition legacy NOT_STARTED → FAB_PLAN_EN_COURS conservée avec deprecated: true. À retirer dans une v3.x ultérieure.
Artefacts produits¶
- ADR
0009-integration-nick-tune-v3.md(Accepté, 2026-04-23). - Machine d'états : 3 transitions ajoutées à
sdlc/schema.js, 1 statut (fe.PRD_EN_COURS), check G3 enrichi, 7 testsevaluator.test.js(59/59 verts). - Template
meta/template-prd.md(D1). - 5 prompts Copilot FR :
prd-architect,sdeg-reflection,create-tasks,lightweight-task-workflow,task-check. - Plugin Claude Code EN
.claude/plugins/sdeg-task-level/: README + 3 skills + subagent + slash-command/check. - Bootstrap étendu : copie
.claude/plugins/→<consumer>/.claude/plugins/, listing détaillé des templates. - Docs narratives :
sdlc/SDLC.mdv3,docs/portes/_annotations/g3.mdPRD, pages portes régénérées, catalogue skills passe à 21.
Leçons apprises¶
1. Importer comme pattern, pas comme code¶
La tentation d'importer un moteur concurrent en bloc est forte quand il est élégant (comme deterministic-agent-workflows). Mais l'importer, c'est en devenir consumer, donc perdre l'opinion qui fait la valeur du kit. La règle dérivée (ADR-0009 §Règle dérivée) formalise ce principe pour tous les futurs imports : vérifier compatibilité invariants sdeg, ne jamais dupliquer schema.js ni sdlc-registry.json, préférer pattern > code > prompt traduit > plugin dual-format.
2. Le git log structuré est un event-store¶
Nos commits chore(sdlc): <ID> <FROM>→<TO> [<GATE>] sont un event-log implicite parfaitement exploitable. Avant d'ajouter une persistance (SQLite, JSONL, fichier à côté), demander : est-ce déjà dans le git log ? Si oui, un script git log --grep + parsing suffit. Cette leçon fait économiser une table, un lock, une migration.
3. Convention > enforcement, sauf pour les invariants critiques¶
Le préfixe 🔵 STATE: X est convention (D3), pas enforcement. L'écriture du registre est enforcement (single-writer invariant, pré-commit hook). Distinguer les deux : ce qui protège contre la perte de données mérite l'enforcement ; ce qui discipline l'agent peut rester convention.
4. Dual-format quand l'équivalence coûte plus que la duplication¶
Les 3 skills task-level existent en Copilot FR et en Claude Code EN. Coût de maintenance doublé sur ces 3 fichiers ; bénéfice : un consumer choisit son environnement sans être bloqué. Règle : n'accepter le dual-format que si (a) la demande consumer existe, (b) l'équivalence mono-format est structurellement impossible. Les autres skills restent mono-format Copilot.
5. La cohérence narrative se construit activement¶
Après livraison technique (D1-D5), la documentation humaine (README, agent coach, glossaire, templates, guides) accumule ~10 fichiers de friction silencieuse. Un audit dédié à la cohérence narrative après chaque vague majeure est plus économique que de corriger dispersément au fil du temps.
Références¶
- ADR 0009 — Intégration Nick Tune v3
- Articles sources : Dev Workflows as Code · Hook-Driven Dev Workflows · Workflow DSL
- Repos sources :
NTCoding/deterministic-agent-workflows·NTCoding/claude-skillz - Skills v3 dans le catalogue (famille Découpage + famille Fabrication élargie + nouvelle famille Rétrospective)
- Porte G3 enrichie des checks
prd-exists/prd-meta