From 547ffb8e6fdd574cfbfc5080ee39141289ae720f Mon Sep 17 00:00:00 2001 From: MaksTinyWorkshop Date: Tue, 31 Mar 2026 15:10:38 +0200 Subject: [PATCH] mcp: clean tracked artifacts and document rollout --- .gitignore | 13 +++- README.md | 57 ++++++++++++++++ mcp/leadtech_bmad_mcp/.venv/bin/python | 1 - mcp/leadtech_bmad_mcp/.venv/bin/python3 | 1 - mcp/leadtech_bmad_mcp/.venv/bin/python3.11 | 1 - mcp/leadtech_bmad_mcp/.venv/lib64 | 1 - mcp/leadtech_bmad_mcp/.venv/pyvenv.cfg | 5 -- mcp/leadtech_bmad_mcp/README.md | 64 ++++++++++++++++++ .../__pycache__/__init__.cpython-311.pyc | Bin 300 -> 0 bytes .../__pycache__/knowledge.cpython-311.pyc | Bin 8902 -> 0 bytes .../__pycache__/schemas.cpython-311.pyc | Bin 1051 -> 0 bytes .../__pycache__/server.cpython-311.pyc | Bin 17990 -> 0 bytes .../__pycache__/triage.cpython-311.pyc | Bin 3893 -> 0 bytes 13 files changed, 133 insertions(+), 10 deletions(-) delete mode 120000 mcp/leadtech_bmad_mcp/.venv/bin/python delete mode 120000 mcp/leadtech_bmad_mcp/.venv/bin/python3 delete mode 120000 mcp/leadtech_bmad_mcp/.venv/bin/python3.11 delete mode 120000 mcp/leadtech_bmad_mcp/.venv/lib64 delete mode 100644 mcp/leadtech_bmad_mcp/.venv/pyvenv.cfg delete mode 100644 mcp/leadtech_bmad_mcp/src/leadtech_bmad_mcp/__pycache__/__init__.cpython-311.pyc delete mode 100644 mcp/leadtech_bmad_mcp/src/leadtech_bmad_mcp/__pycache__/knowledge.cpython-311.pyc delete mode 100644 mcp/leadtech_bmad_mcp/src/leadtech_bmad_mcp/__pycache__/schemas.cpython-311.pyc delete mode 100644 mcp/leadtech_bmad_mcp/src/leadtech_bmad_mcp/__pycache__/server.cpython-311.pyc delete mode 100644 mcp/leadtech_bmad_mcp/src/leadtech_bmad_mcp/__pycache__/triage.cpython-311.pyc diff --git a/.gitignore b/.gitignore index 6d0ee45..a00a2f5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,13 @@ .vscode -.DS_Store \ No newline at end of file +.DS_Store + +# Python / MCP +__pycache__/ +*.py[cod] +.pytest_cache/ +.venv/ + +# Build artifacts +build/ +dist/ +*.egg-info/ diff --git a/README.md b/README.md index 6254786..3ebbfd1 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,8 @@ Lead_tech est un dépôt de **mémoire technique partagée** : patterns validés Il est conçu pour fonctionner en tandem avec un copilote IA qui le consulte avant de vous répondre, vous évitant de répéter les mêmes erreurs et de re-expliquer votre contexte à chaque session. +Depuis mars 2026, le repo peut aussi exposer cette doctrine sous forme de **serveur MCP sidecar** pour des workflows BMAD. L'objectif n'est pas de remplacer la lecture des Markdown, mais de rendre la consultation, les gates et la capitalisation actionnables par tool call. + --- ## Comment ça marche — le modèle mental @@ -138,6 +140,7 @@ Lead_tech/ ├── 60_playbooks/ # Procédures opérationnelles réutilisables ├── 70_templates/ # Modèles de fichiers (CLAUDE.md projet, patches knowledge…) ├── 80_bmad/ # Documentation de l'articulation BMAD ↔ Lead_tech +├── mcp/ # Serveurs MCP sidecar et prototypes associés ├── scripts/ # Automatisations (sync IA, bootstrap projet, secrets…) ├── skills/ # Skills custom pour Claude Code / Codex ├── 10_conventions_redaction.md # Conventions de documentation technique @@ -151,6 +154,60 @@ Lead_tech/ --- +## MCP Sidecar BMAD + +Le prototype actuel vit dans `mcp/leadtech_bmad_mcp/`. + +Il expose deux types de primitives : + +- **guidance** : retrouver les patterns, risques et docs globaux pertinents pour une story +- **gates** : valider un plan, un diff, ou la checklist attendue selon le rôle BMAD +- **capitalisation** : proposer des ajouts dans `95_a_capitaliser.md` et aider au tri +- **resources** : lire l'index Lead_tech, les docs globaux, les entrées de connaissance, et les projets actifs + +Le positionnement visé est volontairement sobre : + +- BMAD garde l'orchestration +- Lead_tech garde la doctrine +- le MCP sidecar fournit une couche d'interactivité et de contrôle qualité + +Voir : + +- `80_bmad/integration_mcp_sidecar.md` +- `mcp/leadtech_bmad_mcp/README.md` + +### Niveau de maturité actuel + +Ce sidecar est déjà utile pour un **rollout advisory**. + +Il est pertinent dès maintenant pour : + +- injecter des patterns/risques en entrée de story +- faire un contrôle "pré-plan" et "post-patch" +- sécuriser la capitalisation sans donner un accès d'écriture direct à `knowledge/` + +Avant un usage plus strict en production, il est recommandé d'ajouter : + +- un score de pertinence plus riche que le simple comptage de tokens +- des gates paramétrables par domaine critique +- des métadonnées structurées sur les fichiers `knowledge/` +- une vraie stratégie de versioning et de compatibilité pour les tools MCP + +### Roadmap conseillée + +1. Stabiliser le contrat MCP actuel. + Geler les noms de tools/resources, formaliser leurs inputs/outputs, et documenter les cas limites. +2. Ajouter des métadonnées structurées à la base de connaissance. + Exemple : `domain`, `bucket`, `tags`, `severity`, `applies_to`, `validated_on`, `source_projects`. +3. Introduire un index de recherche compilé. + Un petit pipeline local qui prépare un index JSON/SQLite sera plus robuste et plus rapide qu'un scan Markdown brut à chaque appel. +4. Distinguer clairement `advisory` et `enforced gates`. + Un mode "conseil" pour l'adoption et un mode "blocant" limité à quelques règles à forte valeur. +5. Journaliser l'usage. + Conserver pour chaque story les tools appelés, leurs recommandations, et la décision humaine associée. + +--- + ## Pour qui ? - **Devs solos** qui veulent capitaliser leur expérience et ne plus debugger deux fois le même problème diff --git a/mcp/leadtech_bmad_mcp/.venv/bin/python b/mcp/leadtech_bmad_mcp/.venv/bin/python deleted file mode 120000 index b8a0adb..0000000 --- a/mcp/leadtech_bmad_mcp/.venv/bin/python +++ /dev/null @@ -1 +0,0 @@ -python3 \ No newline at end of file diff --git a/mcp/leadtech_bmad_mcp/.venv/bin/python3 b/mcp/leadtech_bmad_mcp/.venv/bin/python3 deleted file mode 120000 index ae65fda..0000000 --- a/mcp/leadtech_bmad_mcp/.venv/bin/python3 +++ /dev/null @@ -1 +0,0 @@ -/usr/bin/python3 \ No newline at end of file diff --git a/mcp/leadtech_bmad_mcp/.venv/bin/python3.11 b/mcp/leadtech_bmad_mcp/.venv/bin/python3.11 deleted file mode 120000 index b8a0adb..0000000 --- a/mcp/leadtech_bmad_mcp/.venv/bin/python3.11 +++ /dev/null @@ -1 +0,0 @@ -python3 \ No newline at end of file diff --git a/mcp/leadtech_bmad_mcp/.venv/lib64 b/mcp/leadtech_bmad_mcp/.venv/lib64 deleted file mode 120000 index 7951405..0000000 --- a/mcp/leadtech_bmad_mcp/.venv/lib64 +++ /dev/null @@ -1 +0,0 @@ -lib \ No newline at end of file diff --git a/mcp/leadtech_bmad_mcp/.venv/pyvenv.cfg b/mcp/leadtech_bmad_mcp/.venv/pyvenv.cfg deleted file mode 100644 index 91b5194..0000000 --- a/mcp/leadtech_bmad_mcp/.venv/pyvenv.cfg +++ /dev/null @@ -1,5 +0,0 @@ -home = /usr/bin -include-system-site-packages = false -version = 3.11.2 -executable = /usr/bin/python3.11 -command = /usr/bin/python3 -m venv /srv/helpers/_Assistant_Lead_Tech/mcp/leadtech_bmad_mcp/.venv diff --git a/mcp/leadtech_bmad_mcp/README.md b/mcp/leadtech_bmad_mcp/README.md index 321256c..82d2654 100644 --- a/mcp/leadtech_bmad_mcp/README.md +++ b/mcp/leadtech_bmad_mcp/README.md @@ -2,12 +2,28 @@ Serveur MCP **sidecar** pour brancher la base Lead_tech dans un workflow BMAD sans remplacer BMAD. +Etat actuel : **prototype exploitable** pour un rollout advisory. + ## Objectif - BMAD garde l'orchestration (story, roles, statut, handoff). - Ce serveur apporte des outils de guidance et de gate qualite. - Ecriture controlee: uniquement `95_a_capitaliser.md` et memoire projet (optionnel, avec flag). +## Ce que le serveur fait bien aujourd'hui + +- exposer la base Lead_tech en `resources` MCP lisibles par un agent +- retrouver les patterns/risques les plus probables pour une story +- appliquer quelques gates transverses deja stabilises dans Lead_tech +- encapsuler la capitalisation dans un flux plus propre que l'edition manuelle + +## Ce qu'il ne faut pas lui demander pour l'instant + +- remplacer la lecture humaine complete des docs prioritaires +- faire du ranking semantique avance +- ecrire directement dans `knowledge/` +- prendre la decision finale de merge, de done, ou de capitalisation + ## Tools exposes - `get_guidance(domain, task_type, story_text?, keywords?, max_items?)` @@ -24,6 +40,29 @@ Serveur MCP **sidecar** pour brancher la base Lead_tech dans un workflow BMAD sa - `leadtech://capitalisation/pending` - `leadtech://projects/conf` - `leadtech://knowledge/{domain}/{bucket}/{slug}` +- `leadtech://global/architecture` +- `leadtech://global/debug` +- `leadtech://global/conventions` + +## Design de securite + +- lecture libre sur les fichiers Lead_tech exposes +- ecriture desactivee par defaut +- aucune ecriture autorisee dans `knowledge/*` +- ecriture conditionnelle uniquement sur : + - `95_a_capitaliser.md` + - `CLAUDE.md` projet + +## Integration recommandee dans BMAD + +1. Analyst + Appeler `get_guidance(...)` a l'entree de story pour injecter patterns, risques et docs a lire. +2. Builder + Appeler `validate_plan(...)` avant implementation puis `validate_patch(...)` apres generation du diff. +3. Reviewer + Appeler `emit_checklist(...)` et, si besoin, relancer `validate_patch(...)` sur le diff final. +4. Curator + Utiliser `propose_capitalization(..., dry_run=true)` puis `triage_capitalization()`. ## Installation locale @@ -34,6 +73,13 @@ source .venv/bin/activate pip install -e . ``` +Pour le dev local avec tests : + +```bash +pip install -e ".[dev]" +pytest tests -q +``` + ## Lancement (stdio) ```bash @@ -51,3 +97,21 @@ leadtech-bmad-mcp ## Mode de branchement BMAD Voir `80_bmad/integration_mcp_sidecar.md` pour les points d'injection exacts dans le workflow. + +## Merge checklist recommandee + +Avant de merger cette brique dans `main` : + +- supprimer du repo les artefacts locaux (`.venv`, `__pycache__`, `*.pyc`) +- verifier l'installation sur une machine vierge avec `pip install -e ".[dev]"` +- lancer `pytest tests -q` +- confirmer que les tools/resources exposes sont bien ceux attendus par les prompts BMAD +- documenter la phase de rollout retenue : advisory only ou blocage sur `blocking_issues` + +## Upgrades conseilles + +- index de recherche compile plutot qu'un scan fichier par fichier +- metadonnees YAML/front matter dans `knowledge/` pour fiabiliser le ranking +- schémas MCP formalises et versionnes pour chaque tool +- logs d'execution par story pour auditer les gates et la decision humaine +- suites de tests complementaires sur les faux positifs/faux negatifs des regex diff --git a/mcp/leadtech_bmad_mcp/src/leadtech_bmad_mcp/__pycache__/__init__.cpython-311.pyc b/mcp/leadtech_bmad_mcp/src/leadtech_bmad_mcp/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 79d91162ac345b44e603441abf449aaf31573779..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 300 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 diff --git a/mcp/leadtech_bmad_mcp/src/leadtech_bmad_mcp/__pycache__/schemas.cpython-311.pyc b/mcp/leadtech_bmad_mcp/src/leadtech_bmad_mcp/__pycache__/schemas.cpython-311.pyc deleted file mode 100644 index f75cffeb04a2469c0476382a791b96c8b6873ca3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1051 zcmaJ<&1(}u6rb7MY|_*uO+V5`t;8xyK+Ii4=$E$8rUw-zBExoP@`3xs%&ZXTAqNls z2fg&*$q)Po{2M$)DHsNXf+uf*-g@%Q#)KBcx3h14?_=lv_Raf{%ViNr>hx>JHW2!y zjj@2O1)tsneTXQc*h4;UV63s>8NS&t0hE?6 zOIM#VmNWoUbGruM5Vih3avX=f1$>WesBhG(wo3c4kc5V6O0>h+qY31UlBVahgevTN zq5G;6v`9yYm@bItC(Lcvd^f6jU`a5@z7KBg5#0Tk*KIT35qG1mDl$KkUD9$S zBVjC~Sn>s^I1R730jh^i<`xDEi+WvI{#m*`C@l?h=}Yzyja16!bC9Rfk<;};hbk*_ zWLufgUEOa-gn_c^VZdDI>O@k2k}j_SI7A1~(efntZi3E(1AJgm!sH`G-~cZdE?s{Bo;*eHGR>Ywg%t>yKB`ggVsEz*l?uPf(J1 zS!YhEEFsMpW|I-ZH92L=ZUjTaEo~Ie4Thd-UewU+tsfpjhhVhjs?T1YA@ljMwoH J{ZA*P{s3=<0m%RW diff --git a/mcp/leadtech_bmad_mcp/src/leadtech_bmad_mcp/__pycache__/server.cpython-311.pyc b/mcp/leadtech_bmad_mcp/src/leadtech_bmad_mcp/__pycache__/server.cpython-311.pyc deleted file mode 100644 index 4672bc1174fbd25be8064249a73120e5eb64d5e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17990 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