src/bmm-skills/4-implementation/bmad-sprint-planning/SKILL.md
Goal: Generate sprint status tracking from epics, detecting current story statuses and building a complete sprint-status.yaml file.
Your Role: You are a Developer generating and maintaining sprint tracking. Parse epic files, detect story statuses, and produce a structured sprint-status.yaml.
checklist.md) resolve from the skill root.{skill-root} resolves to this skill's installed directory (where customize.toml lives).{project-root}-prefixed paths resolve from the project working directory.{skill-name} resolves to the skill directory's basename.Run: python3 {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow
If the script fails, resolve the workflow block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
{skill-root}/customize.toml — defaults{project-root}/_bmad/custom/{skill-name}.toml — team overrides{project-root}/_bmad/custom/{skill-name}.user.toml — personal overridesAny missing file is skipped. Scalars override, tables deep-merge, arrays of tables keyed by code or id replace matching entries and append new entries, and all other arrays append.
Execute each entry in {workflow.activation_steps_prepend} in order before proceeding.
Treat every entry in {workflow.persistent_facts} as foundational context you carry for the rest of the workflow run. Entries prefixed file: are paths or globs under {project-root} — load the referenced contents as facts. All other entries are facts verbatim.
Load config from {project-root}/_bmad/bmm/config.yaml and resolve:
project_name, user_namecommunication_language, document_output_languageimplementation_artifactsplanning_artifactsdate as system-generated current datetime{communication_language}{document_output_language}Greet {user_name}, speaking in {communication_language}.
Execute each entry in {workflow.activation_steps_append} in order.
Activation is complete. Begin the workflow below.
tracking_system = file-systemproject_key = NOKEYstory_location = {implementation_artifacts}story_location_absolute = {implementation_artifacts}epics_location = {planning_artifacts}epics_pattern = *epic*.mdstatus_file = {implementation_artifacts}/sprint-status.yaml| Input | Path | Load Strategy |
|---|---|---|
| Epics | {planning_artifacts}/*epic*.md (whole) or {planning_artifacts}/*epic*/*.md (sharded) | FULL_LOAD |
Strategy: Sprint planning needs ALL epics and stories to build complete status tracking.
Epic Discovery Process:
epics.md, bmm-epics.md, or any *epic*.md fileepics/index.mdindex.md to understand the document structureepic-1.md, epic-2.md, etc.)Fuzzy matching: Be flexible with document names - users may use variations like epics.md, bmm-epics.md, user-stories.md, etc.
<action>For each epic file found, extract:</action>
## Epic 1: or ## Epic 2:### Story 1.1: User AuthenticationEpic.Story: Title to kebab-case key: epic-story-titleStory ID Conversion Rules:
### Story 1.1: User Authentication1-1user-authentication1-1-user-authentication<action>Build complete inventory of all epics and stories from all epic files</action> </step>
<step n="2" goal="Build sprint status structure"> <action>For each epic found, create entries in this order:</action>epic-{num}, Default status: backlog{epic}-{story}-{title}, Default status: backlogepic-{num}-retrospective, Default status: optionalExample structure:
development_status:
epic-1: backlog
1-1-user-authentication: backlog
1-2-account-management: backlog
epic-1-retrospective: optional
Story file detection:
{story_location_absolute}/{story-key}.md (e.g., stories/1-1-user-authentication.md)ready-for-devPreservation rule:
{status_file} exists and has more advanced status, preserve itdone to ready-for-dev)Status Flow Reference:
backlog → in-progress → donebacklog → ready-for-dev → in-progress → review → doneoptional ↔ done
</step>File Structure:
# generated: {date}
# last_updated: {date}
# project: {project_name}
# project_key: {project_key}
# tracking_system: {tracking_system}
# story_location: {story_location}
# STATUS DEFINITIONS:
# ==================
# Epic Status:
# - backlog: Epic not yet started
# - in-progress: Epic actively being worked on
# - done: All stories in epic completed
#
# Epic Status Transitions:
# - backlog → in-progress: Automatically when first story is created (via create-story)
# - in-progress → done: Manually when all stories reach 'done' status
#
# Story Status:
# - backlog: Story only exists in epic file
# - ready-for-dev: Story file created in stories folder
# - in-progress: Developer actively working on implementation
# - review: Ready for code review (via Dev's code-review workflow)
# - done: Story completed
#
# Retrospective Status:
# - optional: Can be completed but not required
# - done: Retrospective has been completed
#
# WORKFLOW NOTES:
# ===============
# - Epic transitions to 'in-progress' automatically when first story is created
# - Stories can be worked in parallel if team capacity allows
# - Developer typically creates next story after previous one is 'done' to incorporate learnings
# - Dev moves story to 'review', then runs code-review (fresh context, different LLM recommended)
generated: { date }
last_updated: { date }
project: { project_name }
project_key: { project_key }
tracking_system: { tracking_system }
story_location: { story_location }
development_status:
# All epics, stories, and retrospectives in order
<action>Write the complete sprint status YAML to {status_file}</action> <action>CRITICAL: Metadata appears TWICE - once as comments (#) for documentation, once as YAML key:value fields for parsing</action> <action>Ensure all items are ordered: epic, its stories, its retrospective, next epic...</action> </step>
<step n="5" goal="Validate and report"> <action>Perform validation checks:</action><action>Count totals:</action>
<action>Display completion summary to {user_name} in {communication_language}:</action>
Sprint Status Generated Successfully
Next Steps:
<action>Run: python3 {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.</action>
</step>
Epic Status Flow:
backlog → in-progress → done
Story Status Flow:
backlog → ready-for-dev → in-progress → review → done
stories/1-3-plant-naming.md)Retrospective Status:
optional ↔ done
in-progress when starting work on its first storyin-progress if team capacity allowsreview before donedone to incorporate learnings