leadtech-bmad-mcp: close lot 3 rollout and gates config

This commit is contained in:
MaksTinyWorkshop
2026-03-31 16:12:42 +02:00
parent bafc872030
commit 6adc35d0ac
9 changed files with 448 additions and 55 deletions

View File

@@ -15,9 +15,9 @@ Mode d'usage :
| Lot | Objectif | Statut |
| --- | --- | --- |
| Lot 1 | Contrat MCP v1 + metadonnees `knowledge` + compatibilite loader | En cours avance |
| Lot 1 | Contrat MCP v1 + metadonnees `knowledge` + compatibilite loader | Termine |
| Lot 2 | Index compile local + branchement de la recherche MCP dessus | Termine |
| Lot 3 | Gates configurables + packaging + rollout BMAD | A faire |
| Lot 3 | Gates configurables + packaging + rollout BMAD | Termine |
---
@@ -56,7 +56,7 @@ Stabiliser le contrat du MCP et preparer un corpus `knowledge/` assez structure
- [x] Verifier si `knowledge/backend/patterns/prisma.md` doit aussi entrer dans le noyau pilote
- [x] Verifier si `knowledge/frontend/risques/tests.md` doit aussi entrer dans le noyau pilote
- [ ] Faire un commit de cloture explicite du Lot 1
- [x] Faire un commit de cloture explicite du Lot 1
### Critere de fin
@@ -105,19 +105,19 @@ Sortir les regles du code dur, rendre l'installation reproductible, puis cabler
### Taches
- [ ] Extraire les gates dans une config versionnee
- [ ] Distinguer advisory et blocking dans la config
- [ ] Ajouter des tests sur les faux positifs/faux negatifs des gates
- [ ] Stabiliser l'installation `pip install -e ".[dev]"`
- [ ] Ajouter une doc machine vierge / quickstart
- [ ] Preparer un rollout BMAD advisory
- [ ] Definir 2-3 blocages stricts seulement apres validation
- [x] Extraire les gates dans une config versionnee
- [x] Distinguer advisory et blocking dans la config
- [x] Ajouter des tests sur les faux positifs/faux negatifs des gates
- [x] Stabiliser l'installation `pip install -e ".[dev]"`
- [x] Ajouter une doc machine vierge / quickstart
- [x] Preparer un rollout BMAD advisory
- [x] Definir 2-3 blocages stricts seulement apres validation
### Livrables attendus
- `config/gates.yaml`
- quickstart dev local
- procedure de rollout BMAD
- `docs/quickstart_dev_local.md`
- `docs/rollout_bmad_advisory.md`
### Critere de fin
@@ -142,6 +142,16 @@ Sortir les regles du code dur, rendre l'installation reproductible, puis cabler
- `search_knowledge()` et `search_global_docs()` relis d'abord sur l'index avec fallback scan
- script `leadtech-bmad-build-index` ajoute
- tests d'integration indexes ajoutes
- commit explicite de cloture Lot 1 + Lot 2: `bafc872`
- Lot 3 demarre
- gates textuelles extraites dans `config/gates.yaml`
- distinction advisory / blocking portee par la config
- chargeur `gates.py` ajoute avec override `LEADTECH_GATES_CONFIG`
- couverture de tests gates et serveur etendue
- install `pip install -e ".[dev]"` reverifiee sur venv propre
- quickstart local ajoute
- procedure de rollout BMAD advisory ajoutee
- shortlist de 3 blocages stricts recommandes documentee
---

View File

@@ -0,0 +1,53 @@
# leadtech-bmad-mcp — Quickstart dev local
Objectif : installer et verifier rapidement le serveur MCP sur une machine vierge ou un nouvel environnement local.
## Prerequis
- Python `>= 3.10`
- acces au repo Lead_tech
- shell POSIX
## Installation
```bash
cd /srv/helpers/_Assistant_Lead_Tech/mcp/leadtech_bmad_mcp
python3.10 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
```
## Verification minimale
```bash
source .venv/bin/activate
pytest tests -q
leadtech-bmad-build-index
```
Attendus :
- tous les tests passent
- un fichier `.leadtech_mcp_index.json` est genere a la racine de `LEADTECH_ROOT`
## Lancement local
```bash
source .venv/bin/activate
export LEADTECH_ROOT=/srv/helpers/_Assistant_Lead_Tech
leadtech-bmad-mcp
```
En dev local hors `/srv/helpers`, `LEADTECH_ROOT` peut pointer vers le checkout courant.
## Variables utiles
- `LEADTECH_ROOT` : racine de la base Lead_tech
- `LEADTECH_GATES_CONFIG` : chemin alternatif vers `config/gates.yaml`
- `LEADTECH_MCP_ALLOW_WRITE=1` : active les writes controles (`95_a_capitaliser.md`, memoire projet)
## Depannage
- `ModuleNotFoundError: yaml` : relancer `pip install -e ".[dev]"` pour installer `PyYAML`
- `command not found: pytest` : verifier que `.venv` est active
- index ecrit au mauvais endroit : verifier `LEADTECH_ROOT`

View File

@@ -0,0 +1,155 @@
# leadtech-bmad-mcp — Rollout BMAD advisory
Ce document decrit comment brancher `leadtech-bmad-mcp` dans BMAD sans introduire de blocage automatique au demarrage.
## Objectif
- injecter la guidance Lead_tech au bon moment
- rendre les gates visibles dans les artefacts BMAD
- observer les faux positifs avant d'activer des blocages stricts
## Principe
Phase de depart :
- **advisory only**
- aucune story ne s'arrete automatiquement sur la seule base du MCP
- la decision finale reste humaine
Le MCP doit d'abord servir a :
- augmenter le niveau de vigilance
- homogeniser la lecture des patterns et risques
- detecter les cas manifestement fragiles
## Points d'injection BMAD
### 1. Analyst — entree de story
Appel recommande :
```txt
get_guidance(domain, task_type="analysis", story_text=...)
```
Sortie a reporter dans la story :
- patterns a appliquer
- risques a eviter
- docs prioritaires a lire
### 2. Builder — avant implementation
Appel recommande :
```txt
validate_plan(domain, plan_text, agent_role="builder", strict=false)
```
Regle advisory :
- les `blocking_issues` sont traces mais ne bloquent pas encore automatiquement
- le Builder doit repondre explicitement a chaque point dans son plan ou son Dev Agent Record
### 3. Builder — apres diff
Appel recommande :
```txt
validate_patch(domain, diff_text, changed_files, strict=false)
```
Regle advisory :
- ajouter un resume dans le Dev Agent Record
- si `blocking_issues` apparait, le statut cible doit devenir `review`, pas `done`
### 4. Reviewer — revue finale
Appels recommandes :
```txt
emit_checklist(agent_role="reviewer", domain, story_text)
validate_patch(domain, diff_text, changed_files, strict=false)
```
Regle advisory :
- un `blocking_issues` n'est pas un veto automatique
- mais il impose une justification explicite si la PR/story est acceptee
### 5. Curator — apprentissage
Appels recommandes :
```txt
propose_capitalization(..., dry_run=true)
triage_capitalization()
```
## Trace minimale a imposer
Chaque story doit contenir une section courte `Leadtech MCP Gates` avec :
- timestamp
- tools appeles
- resume de `must_do`, `red_flags`, `blocking_issues`
- decision humaine prise
Format minimal :
```txt
Leadtech MCP Gates
- 2026-03-31 16:20
- get_guidance / validate_plan / validate_patch
- blocking_issues: 0
- red_flags: AuthGuard non visible dans le diff
- decision: review demandee avant done
```
## Observabilite a suivre pendant la phase advisory
Sur 10 a 20 stories, relever :
- nombre de `blocking_issues`
- nombre de faux positifs
- nombre de cas ou le MCP a evite une regression reelle
- domaines les plus stables (`backend`, `workflow`, etc.)
Objectif de sortie de phase advisory :
- faux positifs faibles sur les gates promues
- vocabulaire compris par les agents BMAD
- section `Leadtech MCP Gates` remplie de facon reguliere
## Blocages stricts recommandes apres validation
Ne promouvoir en strict que des regles avec signal fort et faible ambiguite.
### Blocage strict 1
- `validate_patch` : `Patch sans fichier source: seulement des artefacts BMAD.`
- Pourquoi : signal tres fort, directement aligne avec `story-tracking.md`
### Blocage strict 2
- `validate_patch` : `Session modifiee sans expiresAt visible dans le diff.`
- Pourquoi : gate backend precise, issue recurrente et couteuse
### Blocage strict 3
- `validate_plan` : `Plan backend sans reference aux contrats partages.`
- Pourquoi : aligne avec la regle contracts-first, utile surtout sur monorepos TS fullstack
## Ce qu'il ne faut pas promouvoir trop tot
- warning `requestId` sur texte libre si la formulation du plan/diff est trop partielle
- warning `AuthGuard` sur des extraits de diff incomplets
- suggestions de tests si la story est purement documentaire
## Sequence recommandee
1. phase advisory sur toutes les stories backend + workflow
2. promotion du blocage strict `bmad-only artifacts`
3. promotion du blocage strict `sessions sans expiresAt`
4. promotion eventuelle du blocage `contracts-first` si le contexte repo le justifie