Met en place le squelette d'observabilite pour suivre le rollout
Phase 2 partielle sur les 10-20 prochaines stories BMAD.
Trois fichiers dans 80_bmad/observability/ :
- README.md : flux operationnel + criteres de promotion vers Phase 3
+ criteres de retour en arriere vers Phase 1
- template_releve_story.md : modele a copier-coller par story
- phase2_log.md : log cumulatif (tableau recap + compteurs par regle
+ notes detaillees)
Suivi tenu a la main pour l'instant. Une automatisation (script qui
scanne les sections 'Leadtech MCP Gates' dans les stories des projets
de _projects.conf) sera consideree apres 10 stories releves
manuellement, si le format est juge stable.
rollout_bmad_advisory.md reference le nouveau dossier dans sa section
Observabilite.
Le role Curator de la doc rollout n'avait pas d'agent BMAD dedie, ce
qui laissait planer un doute sur ses points d'invocation. Clarification :
- Pas d'agent BMAD Curator. Le role est execute par l'humain.
- Les autres agents (dev, qa, architect, sm, pm, ux-designer) ecrivent
directement dans 95_a_capitaliser.md via leurs memories — pas besoin
de propose_capitalization en critical_action.
- Le triage est manuel via le skill capitalisation-triage et le tool
MCP triage_capitalization() pour la pre-analyse heuristique.
- propose_capitalization reste utile en interactif quand l'humain veut
formaliser une entree.
Deux agents BMAD avaient critical_actions vide alors qu'ils opèrent
sur des domaines couverts par la base Lead_tech.
- ux-designer : get_guidance(domain='ux', task_type='analysis').
Commentaire explicite : knowledge/ux/ est encore vide (index README
sans entrée), wiring en place pour s'activer dès qu'un pattern UX
validé sera promu via 95_a_capitaliser.md. Le smoke test retourne
2 matched_docs depuis les README index — utile dès maintenant.
- pm : get_guidance(domain='product', task_type='analysis') sur
roadmap, prioritization, epic-level decisions. Smoke test :
confidence HIGH, 3 matched_docs sur knowledge/product/.
Les workflows dev-story appellent validate_plan/validate_patch en
strict=true depuis le commit 355d613, mais les customize.yaml
correspondants disaient encore strict=false. Le workflow surcharge le
customize au moment de l'exécution, donc pas de bug fonctionnel — mais
la lecture du customize seul donnait une fausse impression du rollout.
Changements :
- bmm-dev : strict=true sur validate_plan et validate_patch + memory
Phase 2 partielle remplaçant la mention 'advisory-first'.
- bmm-quick-flow-solo-dev : idem, quick-flow ne contourne pas le strict.
- bmm-qa : strict=false maintenu volontairement (le blocage a déjà eu
lieu côté dev) avec commentaire YAML qui explique le choix, et memory
reformulée pour Phase 2.
Audit santé du chantier mcp_v1 a montré un écart entre la doc rollout
(advisory only) et l'implémentation réelle (workflows dev-story et
create-story en strict=true, personas dev.md et sm.md avec hard-blocker
sur blocking_issues). Décision : aligner la doc sur l'implem.
Changements :
- rollout_bmad_advisory.md : réécrit pour décrire la Phase 2 partielle
avec les 3 blocages stricts effectivement actifs (artefacts BMAD seuls,
sessions sans expiresAt, plan backend sans contracts).
- integration_mcp_sidecar.md : points d'injection mis à jour avec
strict=true sur dev, advisory sur QA, statut Phase 2.
- mcp_v1.md et README.md : statut 'advisory-first' / 'prototype' →
'Phase 2 partielle'.
- 40_decisions_et_archi.md : nouvel ADR retraçant le choix.
Note : les customize.yaml invoquent encore strict=false, surchargés par
les workflows. Cohérence interne à traiter dans un prochain commit si
besoin.
Le repo Lead_tech n'a pas à héberger CLAUDE.md/AGENTS.md.
sync-ai-instructions génère maintenant ~/.claude/CLAUDE.md directement
et ~/.codex/AGENTS.md reste un symlink vers celui-ci.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- aliases.sh : détection par uname au lieu de tester l'existence du dossier
- _AI_INSTRUCTIONS.md : placeholder {{LEADTECH}} pour tous les chemins
- sync-ai-instructions.sh : substitution {{LEADTECH}} → REPO_ROOT à la génération
- .gitignore : exclure CLAUDE.md et AGENTS.md (fichiers générés, machine-spécifiques)
- Anti-pattern: @UseGuards(AdminRoleGuard) sans @RequireAdminRole() → guard inefficace
- Anti-pattern: code erreur générique sur statut HTTP sémantique (ALIAS_ALREADY_RESOLVED)
- Anti-pattern: guard de rôle via return conditionnel dans render React Native
- Pattern: tests e2e scénarios d'autorisation alternatifs avec buildApp isolé
- Anti-pattern: méthodes store Zustand qui avalent les erreurs sans rethrow
- Anti-pattern: regex globale singleton pour transformation de contenu