Files
bmad-code-org__bmad-method/website/public/workflow-map-diagram-fr.html
Brian cf54f4d76d refactor(bmm): consolidate sprint skills — one owner for the sprint-status artifact (#2659)
* refactor(bmm): move sprint-planning and sprint-status to plan/

They sit at the plan/ship boundary and their outputs are planning
artifacts of the dev cycle; next commit makes sprint-planning the
readiness gate, which is plan-side work.

* refactor(bmm): fold readiness gate into sprint-planning, retire check-implementation-readiness

The old skill was 1,154 lines of legacy numbered-step ceremony whose
document discovery hardcoded filename globs (*prd*, *ux*, *epic*) that
miss what current skills produce (SPEC.md, DESIGN.md) and still treated
retired sharded docs as first-class. Sprint-planning now opens with a
lean readiness gate: generic artifact discovery by content, forward/back
traceability, PASS/CONCERNS/FAIL, stop on FAIL with findings. The IR
trigger on John's and Winston's menus dispatches sprint-planning, so
'check implementation readiness' still works everywhere it used to.

* refactor(bmm): modernize sprint-planning with deterministic script core

SKILL.md drops the legacy XML step dialect for the product-brief style
(~100 lines, uv run, headless contract). New scripts/sprint_plan.py owns
the mechanical work — epic parsing, key derivation, ordering, preserve-
never-downgrade merge, story-file detection, action_items carry-over,
atomic writes, drift checks — with 11 tests wired in as
test:sprint-planning. Judgment stays with the LLM: epic discovery, the
readiness gate, and reconciling script-reported orphans and unparsed
headings. checklist.md retired (the script performs that checklist);
sprint-status-template.yaml is the single source for the status
vocabulary. Output stays byte-compatible with build's sprint sync and
retrospective's tooling.

* refactor(bmm): fold sprint-status into sprint-planning's status view

sprint_plan.py gains a status subcommand: counts (legacy values mapped),
risk flags, open action items, and a priority-ordered next-action
recommendation — the old skill's inference-driven summary, computed
deterministically and covered by 9 new tests. bmad-sprint-status becomes
a v6-shims husk that forwards with status-view intent and a deprecation
notice; its dead data/validate modes had zero callers and are gone. If
a hand-edited status file defeats the script, the skill falls back to
reading it directly and summarizing by best judgment. New explanation
page docs/explanation/sprint-planning.md covers the consolidated skill;
workflow maps and references updated across all languages.

* docs: changelog entries for skill reorg and sprint consolidation

* fix(bmm): harden sprint_plan.py per review; add validate/fix intents with full progressive disclosure

Review fixes (PR #2659 findings, bot + internal review):
- Normalize legacy v6 statuses (drafted/contexted) on every read — merged by
  meaning and reported, never treated as illegal or reset
- dropped_orphans carry their old status; transplant renames via --set
- project_key/tracking_system/story_location preserved from the existing file
  unless overridden; refresh round-trips custom keys and user comments
- Hardened write path: dump-to-bytes, fsync, permission-preserving atomic
  write inside the guarded block, explicit checks (no asserts), atomic restore
- JSON-only argparse (errors and -h emit JSON); unicode-aware slugs with hash
  fallback; fenced code blocks ignored when parsing epics
- Odd retro keys, date-typed stamps, and non-mapping YAML report cleanly
  instead of crashing; unparseable timestamps warn instead of silently
  disabling the staleness check; malformed action items flagged, not dropped
- Dead check subcommand removed; generate --dry-run reports drift/in_sync
- test:sprint-planning wired into quality and CI (was test-only)
- Retro tests use a vendored template fixture (PATH-05); repo-level
  test-template-sync.js keeps it byte-identical to the source; template
  example timestamps and story_location fixed; header block pinned to the
  template by test

New capability:
- validate subcommand + reference: structural validation, never writes
- fix flow: evidence-gathering subagents -> user-confirmed state table ->
  generate --fresh --set writes a pristine file (the one path allowed to
  downgrade); universal script-failure fallback to inference for every intent
- SKILL.md is now a lean router: gate, tracking, status, fix, and validate
  each load as progressive-disclosure references

Docs: explanation page gains Repair section; workflow-map and getting-started
across all five languages mention the status view; headless payload nests
under 'report' to avoid the status key collision; changelog updated.

Test suite grows 20 -> 37; retro suite 91/91; docs build and validators green.

* docs: mention repair in sprint-planning explanation description
2026-08-01 16:21:38 -05:00

317 lines
15 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Carte des Workflows - Méthode BMad</title>
<style>
:root {
--analysis: #0ea5e9;
--planning: #22c55e;
--solutioning: #eab308;
--implementation: #ef4444;
--bg: #0f172a;
--card: #1e293b;
--text: #f8fafc;
--text-muted: #94a3b8;
--border: #334155;
--success: #10b981;
--arrow: #f59e0b;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
background: var(--bg);
color: var(--text);
line-height: 1.4;
padding: 12px;
}
.header { text-align: center; margin-bottom: 16px; }
.header-badge {
display: inline-flex; align-items: center; gap: 6px;
background: linear-gradient(135deg, var(--analysis), var(--planning));
padding: 4px 12px; border-radius: 20px;
font-size: 0.75rem; font-weight: 600; margin-bottom: 8px;
}
h1 { font-size: 1.5rem; font-weight: 700; }
.subtitle { color: var(--text-muted); font-size: 0.8rem; }
.flow-legend {
background: rgba(245, 158, 11, 0.1); border: 1px solid rgba(245, 158, 11, 0.3);
border-radius: 8px; padding: 8px 12px; margin-bottom: 16px; text-align: center;
font-size: 0.7rem; color: var(--arrow);
}
.flow-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 8px;
margin-bottom: 16px;
}
.phase {
background: var(--card);
border-radius: 10px;
border: 1px solid var(--border);
border-top: 3px solid;
}
.phase.analysis { border-top-color: var(--analysis); }
.phase.planning { border-top-color: var(--planning); }
.phase.solutioning { border-top-color: var(--solutioning); }
.phase.implementation { border-top-color: var(--implementation); }
.phase-header { padding: 10px 12px 8px; border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: 8px; }
.phase-num { width: 22px; height: 22px; border-radius: 6px; display: flex; align-items: center; justify-content: center; font-size: 0.75rem; font-weight: 700; }
.analysis .phase-num { background: var(--analysis); }
.planning .phase-num { background: var(--planning); }
.solutioning .phase-num { background: var(--solutioning); color: #000; }
.implementation .phase-num { background: var(--implementation); }
.phase-title { font-size: 0.95rem; font-weight: 700; }
.phase-opt { font-size: 0.6rem; padding: 2px 6px; border-radius: 4px; background: rgba(14, 165, 233, 0.2); color: #7dd3fc; }
.workflows { padding: 8px 10px; }
.workflow {
background: rgba(255,255,255,0.03); border-radius: 6px;
padding: 8px; margin-bottom: 6px;
font-size: 0.7rem;
}
.workflow-header {
display: flex; justify-content: space-between; align-items: center;
margin-bottom: 4px;
}
.workflow-name {
font-family: monospace; color: var(--success);
background: rgba(16, 185, 129, 0.1); padding: 2px 6px;
border-radius: 3px; font-size: 0.65rem;
}
.workflow-meta { display: flex; justify-content: space-between; align-items: center; }
.agent { display: flex; align-items: center; gap: 4px; }
.agent-icon { width: 14px; height: 14px; border-radius: 3px; display: flex; align-items: center; justify-content: center; font-size: 0.55rem; font-weight: 700; }
.agent-icon.mary { background: linear-gradient(135deg, #f472b6, #ec4899); }
.agent-icon.john { background: linear-gradient(135deg, #60a5fa, #3b82f6); }
.agent-icon.sally { background: linear-gradient(135deg, #fbbf24, #f59e0b); color: #000; }
.agent-icon.winston { background: linear-gradient(135deg, #a78bfa, #8b5cf6); }
.agent-icon.amelia { background: linear-gradient(135deg, #fb7185, #ef4444); }
.agent-name { font-size: 0.65rem; }
.output { color: var(--success); font-family: monospace; font-size: 0.6rem; }
.badge { font-size: 0.55rem; padding: 1px 4px; border-radius: 3px; }
.badge.opt { background: rgba(251,191,36,0.15); color: #fbbf24; }
.badge.iffy { background: rgba(168,85,247,0.15); color: #a855f7; }
.badge.adhoc { background: rgba(59,130,246,0.15); color: #3b82f6; }
.arrow { display: flex; align-items: center; justify-content: center; color: var(--arrow); font-size: 0.9rem; margin: 6px 0; }
.decision { background: linear-gradient(135deg, #a855f7, #9333ea); padding: 4px 8px; border-radius: 4px; text-align: center; font-size: 0.65rem; font-weight: 600; margin: 6px 0; }
.context { background: rgba(14, 165, 233, 0.08); border-radius: 10px; padding: 12px; font-size: 0.75rem; }
.context-header { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; font-weight: 600; }
.context-items { display: flex; flex-wrap: wrap; gap: 6px; }
.context-items code { font-family: monospace; color: var(--success); background: rgba(16, 185, 129, 0.1); padding: 2px 5px; border-radius: 3px; font-size: 0.65rem; }
.context-items span { color: var(--text-muted); }
.legend { display: flex; justify-content: center; gap: 12px; flex-wrap: wrap; font-size: 0.7rem; margin-top: 12px; }
.legend-item { display: flex; align-items: center; gap: 4px; }
.legend-dot { width: 12px; height: 3px; border-radius: 2px; }
</style>
</head>
<body>
<div class="header">
<div class="header-badge">⚡ Carte des Workflows V6</div>
<h1>Méthode BMad</h1>
<p class="subtitle">Ingénierie du contexte pour le développement piloté par l’IA</p>
</div>
<div class="flow-legend">→ les flèches montrent le flux des artefacts entre les workflows</div>
<div class="flow-grid">
<!-- Phase 1: Analysis -->
<div class="phase analysis">
<div class="phase-header">
<div class="phase-num">1</div>
<div class="phase-title">Analyse</div>
<span class="phase-opt">Optionnel</span>
</div>
<div class="workflows">
<div class="workflow">
<div class="workflow-header">
<span class="workflow-name">brainstorm</span>
<span class="badge opt">opt</span>
</div>
<div class="workflow-meta">
<div class="agent"><div class="agent-icon mary">M</div><span class="agent-name">Mary</span></div>
<span class="output">brainstorming-report.md</span>
</div>
</div>
<div class="workflow">
<div class="workflow-header">
<span class="workflow-name">research</span>
<span class="badge opt">opt</span>
</div>
<div class="workflow-meta">
<div class="agent"><div class="agent-icon mary">M</div><span class="agent-name">Mary</span></div>
<span class="output">résultats</span>
</div>
</div>
<div class="workflow">
<div class="workflow-header">
<span class="workflow-name">product-brief</span>
<span class="badge opt">ou ↓</span>
</div>
<div class="workflow-meta">
<div class="agent"><div class="agent-icon mary">M</div><span class="agent-name">Mary</span></div>
<span class="output">product-brief.md →</span>
</div>
</div>
<div class="workflow">
<div class="workflow-header">
<span class="workflow-name">prfaq</span>
<span class="badge opt">ou ↑</span>
</div>
<div class="workflow-meta">
<div class="agent"><div class="agent-icon mary">M</div><span class="agent-name">Mary</span></div>
<span class="output">prfaq.md →</span>
</div>
</div>
</div>
<div class="arrow">→</div>
</div>
<!-- Phase 2: Planning -->
<div class="phase planning">
<div class="phase-header">
<div class="phase-num">2</div>
<div class="phase-title">Planification</div>
</div>
<div class="workflows">
<div class="workflow">
<div class="workflow-header">
<span class="workflow-name">prd</span>
</div>
<div class="workflow-meta">
<div class="agent"><div class="agent-icon john">J</div><span class="agent-name">Au choix</span></div>
<span class="output">prd.md →</span>
</div>
</div>
<div class="decision">Interface utilisateur ?</div>
<div class="workflow">
<div class="workflow-header">
<span class="workflow-name">create-ux-design</span>
<span class="badge iffy">si oui</span>
</div>
<div class="workflow-meta">
<div class="agent"><div class="agent-icon sally">S</div><span class="agent-name">Sally</span></div>
<span class="output">ux-spec.md →</span>
</div>
</div>
</div>
<div class="arrow">→</div>
</div>
<!-- Phase 3: Solutioning -->
<div class="phase solutioning">
<div class="phase-header">
<div class="phase-num">3</div>
<div class="phase-title">Solutioning</div>
</div>
<div class="workflows">
<div class="workflow">
<div class="workflow-header">
<span class="workflow-name">create-architecture</span>
</div>
<div class="workflow-meta">
<div class="agent"><div class="agent-icon winston">W</div><span class="agent-name">Winston</span></div>
<span class="output">architecture.md →</span>
</div>
</div>
<div class="workflow">
<div class="workflow-header">
<span class="workflow-name">create-epics-and-stories</span>
</div>
<div class="workflow-meta">
<div class="agent"><div class="agent-icon john">J</div><span class="agent-name">John</span></div>
<span class="output">epics.md →</span>
</div>
</div>
<div class="workflow">
<div class="workflow-header">
<span class="workflow-name">sprint-planning</span>
</div>
<div class="workflow-meta">
<div class="agent"><div class="agent-icon john">J</div><span class="agent-name">John</span></div>
<span class="output">jalon + sprint-status.yaml →</span>
</div>
</div>
</div>
<div class="arrow">→</div>
</div>
<!-- Phase 4: Implementation -->
<div class="phase implementation">
<div class="phase-header">
<div class="phase-num">4</div>
<div class="phase-title">Implémentation</div>
</div>
<div class="workflows">
<div class="decision">Intention directe ou contexte planifié ↓</div>
<div class="workflow">
<div class="workflow-header">
<span class="workflow-name">build</span>
</div>
<div class="workflow-meta">
<div class="agent"><div class="agent-icon amelia">A</div><span class="agent-name">Amelia</span></div>
<span class="output">spec + code + revue →</span>
</div>
</div>
<div class="workflow">
<div class="workflow-header">
<span class="workflow-name">code-review</span>
</div>
<div class="workflow-meta">
<div class="agent"><div class="agent-icon amelia">A</div><span class="agent-name">Amelia</span></div>
<span class="output">approbation</span>
</div>
</div>
<div class="workflow">
<div class="workflow-header">
<span class="workflow-name">correct-course</span>
<span class="badge adhoc">ad-hoc</span>
</div>
<div class="workflow-meta">
<div class="agent"><div class="agent-icon john">J</div><span class="agent-name">John</span></div>
<span class="output">plan mis à jour</span>
</div>
</div>
<div class="workflow">
<div class="workflow-header">
<span class="workflow-name">retrospective</span>
<span class="badge adhoc">par Epic</span>
</div>
<div class="workflow-meta">
<div class="agent"><div class="agent-icon amelia">A</div><span class="agent-name">Amelia</span></div>
<span class="output">leçons apprises</span>
</div>
</div>
</div>
</div>
</div>
<div class="context">
<div class="context-header">📚 Flux de Contexte</div>
<p style="margin-bottom: 8px; color: var(--text-muted);">Les documents disponibles enrichissent le contexte avant l’implémentation.</p>
<div class="context-items">
<span><code>build</code> <span>charge l’intention, issue, spec, PRD, architecture, UX, epic, story et contexte de sprint disponibles</span></span>
<span><code>code-review</code> <span>ajoute une validation indépendante si nécessaire</span></span>
</div>
</div>
<div class="legend">
<div class="legend-item"><div class="legend-dot" style="background: var(--analysis);"></div>Analyse</div>
<div class="legend-item"><div class="legend-dot" style="background: var(--planning);"></div>Planification</div>
<div class="legend-item"><div class="legend-dot" style="background: var(--solutioning);"></div>Solutioning</div>
<div class="legend-item"><div class="legend-dot" style="background: var(--implementation);"></div>Implémentation</div>
</div>
</body>
</html>