chore(bmad): migrate 80_bmad/base from 6.0.4 to 6.9 + port customizations to TOML overrides

Migration des modules via l'installer officiel (Quick update, en place) :
- core/bmm 6.0.4 -> 6.9.0
- tea 1.5.3 -> 1.19.0
- cis 0.1.8 -> 0.2.1

Portage des customisations Lead_tech vers le nouveau mécanisme d'overrides
(_bmad/custom/<skill>.toml, couche "team" résolue par resolve_customization.py) :
- 6 agents directs (analyst, architect, dev, pm, tech-writer, ux-designer)
- module tea
- workflows: dev-story, create-story, code-review, quick-dev, qa-generate-e2e-tests
- agents disparus en 6.9 reportés vers leurs workflows hôtes
  (QA -> code-review, SM -> create-story, quick-flow-solo-dev -> quick-dev)
- règle de capitalisation 95_a_capitaliser factorisée dans
  _bmad/custom/leadtech-capitalisation.md (référencée via persistent_facts)

Nettoyage du legacy 6.0.4 :
- suppression des 17 *.customize.yaml (non lus par 6.9)
- suppression des .bak générés par l'installer (contenu porté en .toml)
- suppression de 17 skills orphelins dans .agents/skills (anciens noms, .agents/.claude réalignés 66=66)
- suppression des coquilles de workflows disparus

Tous les overrides validés par le resolver officiel (12/12 JSON valide,
base préservée + ajouts Lead_tech). Le cœur (couche customize.toml) n'est plus modifié,
donc les updates 6.x futurs ne pourront plus écraser ces customisations.

Note env: resolve_customization.py exige Python >=3.11 (uv installé, python3 -> 3.12.13).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
MaksTinyWorkshop
2026-06-24 16:48:44 +02:00
parent a7b96919a6
commit cbace46989
2117 changed files with 477236 additions and 29144 deletions
+1
View File
@@ -0,0 +1 @@
*.user.toml
@@ -0,0 +1,9 @@
# Lead_tech override — Analyst. Voir leadtech-capitalisation.md pour la règle commune.
[agent]
activation_steps_append = [
"At story entry, call Leadtech MCP `get_guidance(domain, task_type='analysis', story_text=...)` and copy a short summary into the story under `Leadtech MCP Gates`.",
]
persistent_facts = [
"file:{project-root}/_bmad/custom/leadtech-capitalisation.md",
"When Leadtech MCP is available, use it in advisory mode during analysis: call get_guidance(...), keep the 2-5 most relevant must_do/red_flags, and document the human decision in `Leadtech MCP Gates`. Capitalisation cibles: product/backend patterns+risques, 40_decisions_et_archi.md.",
]
@@ -0,0 +1,9 @@
# Lead_tech override — Architect. Voir leadtech-capitalisation.md.
[agent]
activation_steps_append = [
"For architecture or design decisions, call Leadtech MCP `get_guidance(domain, task_type='architecture', story_text=...)` and use the returned docs as mandatory reading inputs.",
]
persistent_facts = [
"file:{project-root}/_bmad/custom/leadtech-capitalisation.md",
"When Leadtech MCP highlights architecture docs or red flags, reference them explicitly in the decision record instead of keeping the guidance implicit. Capitalisation cibles: 40_decisions_et_archi.md, knowledge/backend/patterns+risques.",
]
@@ -0,0 +1,11 @@
# Lead_tech override — Dev (Amelia). Voir leadtech-capitalisation.md.
[agent]
activation_steps_append = [
"Before any development task, run: `bash $LEADTECH/scripts/sync-projects-conf.sh --project-root {project-root} --sync-existing`",
"Before implementation, call Leadtech MCP `validate_plan(domain, plan_text, agent_role='builder', strict=true)` and record the result in `Leadtech MCP Gates`. Treat blocking_issues as hard blockers — explicit user override required to proceed.",
"After producing a diff, call Leadtech MCP `validate_patch(domain, diff_text, changed_files, strict=true)` and record the result in the Dev Agent Record. Treat blocking_issues as hard blockers before moving the story to review.",
]
persistent_facts = [
"file:{project-root}/_bmad/custom/leadtech-capitalisation.md",
"Leadtech MCP is in Phase 2 partielle (strict ciblé): blocking_issues from validate_plan/validate_patch are hard blockers requiring explicit user override. Trace the override and its rationale in the `Leadtech MCP Gates` section of the story. Capitalisation cibles dev: backend/frontend patterns+risques, 90_debug_et_postmortem.md.",
]
@@ -0,0 +1,9 @@
# Lead_tech override — PM. Voir leadtech-capitalisation.md.
[agent]
activation_steps_append = [
"On product roadmap, prioritization, or epic-level decisions, call Leadtech MCP `get_guidance(domain='product', task_type='analysis', story_text=...)` and integrate matched patterns/risks into the decision rationale.",
]
persistent_facts = [
"file:{project-root}/_bmad/custom/leadtech-capitalisation.md",
"Capitalisation cibles PM: knowledge/product/patterns/general.md, knowledge/product/risques/<theme>.md, 40_decisions_et_archi.md.",
]
@@ -0,0 +1,6 @@
# Lead_tech override — Tech Writer. Voir leadtech-capitalisation.md.
[agent]
persistent_facts = [
"file:{project-root}/_bmad/custom/leadtech-capitalisation.md",
"Capitalisation cibles Tech Writer: 10_conventions_redaction.md, 40_decisions_et_archi.md, knowledge/workflow/risques/story-tracking.md.",
]
@@ -0,0 +1,10 @@
# Lead_tech override — UX Designer. Voir leadtech-capitalisation.md.
# NB: knowledge/ux/ encore vide; get_guidance peut retourner confidence=LOW sur ux, c'est attendu.
[agent]
activation_steps_append = [
"On a UX/UI design task, call Leadtech MCP `get_guidance(domain='ux', task_type='analysis', story_text=...)` and copy patterns/risks into the design rationale. If confidence is LOW or matched_docs is empty, note it explicitly and proceed.",
]
persistent_facts = [
"file:{project-root}/_bmad/custom/leadtech-capitalisation.md",
"Capitalisation cibles UX: knowledge/ux/patterns/<theme>.md, knowledge/ux/risques/<theme>.md, 40_decisions_et_archi.md.",
]
@@ -0,0 +1,12 @@
# Lead_tech override — workflow code-review (porte aussi l'ex-rôle QA, advisory strict=false).
[workflow]
activation_steps_prepend = [
"Before starting review, synchronize Lead_tech project registry: `bash $LEADTECH/scripts/sync-projects-conf.sh --project-root {project-root} --sync-existing`. If it fails, warn and continue if the repository state is still analyzable.",
]
activation_steps_append = [
"Ex-QA duty: during review, call Leadtech MCP `emit_checklist(agent_role='reviewer', domain, story_text)` and `validate_patch(domain, diff_text, changed_files, strict=false)` before accepting 'done'. QA stays advisory (strict=false) on purpose — strict blocks were already taken on the dev side (Phase 2 partielle). A blocking_issues surfacing here means a dev override was not properly traced: refuse 'done' until the override and its rationale are explicit in `Leadtech MCP Gates`.",
]
persistent_facts = [
"file:{project-root}/_bmad/custom/leadtech-capitalisation.md",
"Capitalisation review: for EACH candidate (aim 1-3) write a FILE_UPDATE_PROPOSAL to 95_a_capitaliser.md ONLY — never inside the project repo. If nothing: output explicitly 'Rien à capitaliser pour cette review.' — do NOT skip silently. Cibles QA: frontend tests patterns+risques, knowledge/workflow/risques/story-tracking.md, 90_debug_et_postmortem.md.",
]
@@ -0,0 +1,10 @@
# Lead_tech override — workflow create-story (porte aussi l'ex-rôle SM).
[workflow]
activation_steps_append = [
"If leadtech-bmad MCP server is available: extract domain (backend|frontend|ux|n8n|product|workflow) from the story, then call get_guidance(domain, task_type='analysis', story_text). Read full docs for URIs listed under 'Lire le contenu complet' (leadtech://knowledge/... or leadtech://global/...).",
"Write must_do into story section 'Patterns a appliquer', red_flags into 'Risques a eviter', and a 'Leadtech MCP Gates' entry { tool: 'get_guidance', timestamp, must_do, red_flags, blocking_issues }. If blocking_issues is non-empty, do NOT set the story ready-for-dev without explicit user acknowledgement (ex-SM responsibility).",
]
persistent_facts = [
"file:{project-root}/_bmad/custom/leadtech-capitalisation.md",
"Ex-SM duty: each active story using Leadtech MCP must keep a short `Leadtech MCP Gates` section with tool calls, findings, and the human decision. Capitalisation cibles SM: knowledge/workflow/risques/story-tracking.md, 40_decisions_et_archi.md, 90_debug_et_postmortem.md.",
]
@@ -0,0 +1,13 @@
# Lead_tech override — workflow dev-story. Gates MCP validate_plan/validate_patch.
[workflow]
activation_steps_prepend = [
"Before any implementation work, synchronize Lead_tech project registry: `bash $LEADTECH/scripts/sync-projects-conf.sh --project-root {project-root} --sync-existing`. If it fails, warn and continue only if story work can proceed safely.",
]
activation_steps_append = [
"If leadtech-bmad MCP is available, before implementation: extract domain from story, build plan_text from tasks/subtasks + Dev Notes, call validate_plan(domain, plan_text, agent_role='builder', strict=true). Record into 'Leadtech MCP Gates'. If blocking_issues non-empty: HALT and fix the plan before coding. Scan must_do/red_flags for leadtech://knowledge|global URIs and read them as authoritative constraints.",
]
on_complete = "If leadtech-bmad MCP is available, before marking the story 'review': produce diff_text and changed_files (from File List), call validate_patch(domain, diff_text, changed_files, strict=true), record into 'Leadtech MCP Gates'. If blocking_issues non-empty: HALT and fix before review. Treat any uncovered must_do as complementary tasks before review."
persistent_facts = [
"file:{project-root}/_bmad/custom/leadtech-capitalisation.md",
"Phase 2 partielle: blocking_issues from validate_plan/validate_patch are hard blockers requiring explicit user override, traced in `Leadtech MCP Gates`. Capitalisation cibles: backend/frontend patterns+risques, 90_debug_et_postmortem.md.",
]
@@ -0,0 +1,9 @@
# Lead_tech override — workflow qa-generate-e2e-tests.
[workflow]
activation_steps_prepend = [
"Before generating E2E/API tests, synchronize Lead_tech project registry: `bash $LEADTECH/scripts/sync-projects-conf.sh --project-root {project-root} --sync-existing`. If it fails, warn and continue if the repository state is still analyzable.",
]
persistent_facts = [
"file:{project-root}/_bmad/custom/leadtech-capitalisation.md",
"Capitalisation cibles tests: knowledge/frontend/patterns/tests.md, knowledge/frontend/risques/tests.md, 90_debug_et_postmortem.md.",
]
@@ -0,0 +1,12 @@
# Lead_tech override — workflow quick-dev (ex bmm-quick-flow-solo-dev).
[workflow]
activation_steps_prepend = [
"Before any implementation task, run: `bash $LEADTECH/scripts/sync-projects-conf.sh --project-root {project-root} --sync-existing`",
]
activation_steps_append = [
"Quick-flow does NOT bypass strict gates: still call Leadtech MCP validate_plan(domain, plan_text, agent_role='builder', strict=true) before coding and validate_patch(domain, diff_text, changed_files, strict=true) before declaring complete. blocking_issues are hard blockers — explicit user override required, traced in `Leadtech MCP Gates`.",
]
persistent_facts = [
"file:{project-root}/_bmad/custom/leadtech-capitalisation.md",
"Capitalisation cibles quick-dev: backend/frontend patterns+risques, 90_debug_et_postmortem.md.",
]
+6
View File
@@ -0,0 +1,6 @@
# Lead_tech override — module tea (test architect).
[agent]
persistent_facts = [
"file:{project-root}/_bmad/custom/leadtech-capitalisation.md",
"Capitalisation cibles tea: knowledge/frontend/patterns/tests.md, knowledge/frontend/risques/tests.md, knowledge/backend/risques/general.md, knowledge/workflow/risques/story-tracking.md, 90_debug_et_postmortem.md.",
]
+7
View File
@@ -0,0 +1,7 @@
# Team / enterprise overrides for _bmad/config.toml.
# Committed to the repo — applies to every developer on the project.
# Tables deep-merge over base config; keyed entries merge by key.
# Example: override an agent descriptor, or add a new agent.
#
# [agents.bmad-agent-pm]
# description = "Prefers short, bulleted PRDs over narrative drafts."
@@ -0,0 +1,32 @@
# Lead_tech — Règle de capitalisation contrôlée (commune à tous les agents/workflows BMAD)
Quand un apprentissage réutilisable émerge (pattern validé, bug difficile, anti-pattern,
décision d'architecture, friction récurrente), écrire une **proposition** — jamais directement
dans les fichiers validés.
**Cible du fichier de propositions :**
- Mac : `~/AI_RULES/_Assistant_Lead_Tech/95_a_capitaliser.md`
- NUC : `/srv/helpers/_Assistant_Lead_Tech/95_a_capitaliser.md`
- (ou via `$LEADTECH/95_a_capitaliser.md`)
**Format d'une entrée :**
```
DATE — base / FILE_UPDATE_PROPOSAL / Fichier cible: <cible> / Pourquoi: <reason> / Proposition: <content>
```
**Fichiers cibles possibles (`<cible>`) selon le domaine :**
| Domaine | Cibles patterns | Cibles risques |
| --- | --- | --- |
| backend | `knowledge/backend/patterns/<theme>.md` | `knowledge/backend/risques/<theme>.md` |
| frontend | `knowledge/frontend/patterns/<theme>.md` (dont `tests.md`) | `knowledge/frontend/risques/<theme>.md` (dont `tests.md`) |
| ux | `knowledge/ux/patterns/<theme>.md` | `knowledge/ux/risques/<theme>.md` |
| n8n | `knowledge/n8n/patterns/general.md` | `knowledge/n8n/risques/general.md` |
| product | `knowledge/product/patterns/general.md` | `knowledge/product/risques/<theme>.md` |
| workflow | — | `knowledge/workflow/risques/story-tracking.md` |
| transverse | `10_conventions_redaction.md` · `40_decisions_et_archi.md` · `90_debug_et_postmortem.md` | idem |
**Règle absolue :** ne jamais écrire directement dans les fichiers Lead_tech validés.
Toujours passer par une proposition dans `95_a_capitaliser.md`.
> Chaque rôle choisit la cible la plus pertinente pour son domaine dans la table ci-dessus.