bmad-planning-orchestrator/skills/bmad-correct-course/SKILL.md
CROSS-PHASE mid-stream scope correction. Re-enters planning when requirements, features, architecture, or constraints change after planning has started. Re-shards affected epics/stories, re-sequences sprint-status.yaml, appends rationale to decision-log.md. Routes to bmad-epics-and-stories, bmad-sprint-planning, or bmad-parallel-plan as needed. Changes the PLAN, never code. Use when: "we need to change course", "scope has changed", "new requirement came in", "we're dropping feature X", "we need to pivot", "re-plan after the change", "requirements changed mid-sprint", "correct course", "architecture changed", "re-scope the backlog", "update epics after feedback", "cancel story X", "add epic for Y", "change the plan", "we got new constraints", or when stories are split/merged/reordered due to a decision not in the original plan. Produces: updated epics.md (affected only), revised/new story files, updated sprint-status.yaml, new decision-log.md entry. NEVER writes code or runs tests.
npx skillsauth add aj-geddes/claude-code-bmad-skills bmad-correct-courseInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Role: Cross-phase re-entry point for mid-stream planning changes.
When reality diverges from the plan — a stakeholder pivots, a constraint surfaces, a feature is cut — this skill re-enters the planning phase, makes the minimum-necessary plan changes, and routes forward to the appropriate downstream skill. It changes the plan, never the code.
Persona flavor: Mary (Analyst) surfaces the impact; John (PM) scopes the
delta; Winston (Architect) re-shards affected epics.
Lightweight flavor only — this is a workflow.
This skill PLANS. It NEVER writes application code, runs tests, lints, checks coverage, builds, or reviews diffs. If tempted to "fix the code" or "run the suite" — STOP. Plan the change and hand it off.
The latest artifact this skill may produce is a story file marked
ready-for-dev, an updated sprint-status.yaml, or a routing directive
to a downstream planning skill.
Trigger when ANY of the following is true:
decision-log.md
before proceeding.| File | Why |
|------|-----|
| bmad-output/project-context.md | Project constitution — load every run |
| bmad-output/decision-log.md | Threaded decisions; append here |
| bmad-output/epics.md | Existing epic map to diff against |
| bmad-output/prd.md | Source of truth for requirements |
| bmad-output/architecture.md | Tech boundaries (if architecture changed) |
| bmad-output/sprint-status.yaml | Current sequencing state |
| bmad-output/stories/*.story.md | In-flight and backlog stories |
Output folder default: bmad-output/. Honor any user-configured override
from bmad-output/config.yaml.
| Intent | When to use | |--------|-------------| | Scope Change | A feature is added, dropped, or reshaped — re-shard affected epics and re-sequence. | | Architecture Change | Module boundaries, stack, or integrations shift — update Owned Scope declarations in impacted stories. | | Record Only | The change is already reflected in planning artifacts; write the decision-log entry and confirm consistency. |
State the intent explicitly before proceeding. When unclear, ask the user which scenario applies rather than assuming.
Use TodoWrite to track progress through these steps.
Identify the minimum blast radius:
in-progress stories touched by
the change need special care — flag them; do not silently move them.)sprint-status.yaml need re-sequencing?Present the triage to the user and confirm before editing.
Apply only the minimum-necessary changes.
# COURSE-CORRECTION annotation and the date.status: cancelled — do not delete; preserve history.For any epic that changed scope, invoke the story-sharding workflow:
Route to
bmad-epics-and-stories(intent: Update or Create)
Provide the updated epic definition and a list of story IDs to add, drop, or revise. The sharding skill owns the story context-object contract; do not reproduce it here.
status: cancelled in the story file header
and in sprint-status.yaml. Do not delete files.status: backlog.decision-log.md.After all story changes are settled, route to bmad-sprint-planning to
re-derive wave assignments:
Route to
bmad-sprint-planning(intent: Update)
Pass the full list of changed story IDs and their new statuses. Ask it to recompute the dependency graph and re-assign parallel sets.
Alternatively, if the change is confined to a single story swap (a
pure add-one / drop-one with no dependency ripple), you may edit
sprint-status.yaml directly:
# Validate current sprint-status.yaml before editing
bash "${CLAUDE_PLUGIN_ROOT}/scripts/scope-conflict-check.sh" bmad-output/stories/
If Owned File/Module Scope declarations changed or new stories were added to the backlog, re-plan the wave assignment:
Route to
bmad-parallel-plan(intent: Update)
Pass the updated story list and note which scopes changed. Ask it to rebuild the dependency DAG and emit a revisedparallelization-plan.md.
Only invoke this if the project was previously using parallel waves. If the project is on Quick Flow or sequential delivery, skip this step.
Every course-correction MUST produce a decision-log entry. Use this format (append newest-first):
### YYYY-MM-DD — Course Correction: <short title>
- **Decision:** <what changed in the plan>
- **Rationale:** <why the change was necessary; alternatives considered>
- **Impact:** <epics added/dropped, stories added/dropped/re-scoped,
status changes in sprint-status.yaml>
- **In-progress stories affected:** <list, or "none">
- **Made by:** bmad-correct-course
- **Supersedes:** <link to prior entry, if any>
Append to bmad-output/decision-log.md using the template at
templates/course-correction.template.md.
After all updates are applied, report:
Course correction applied.
Decision log : entry appended → bmad-output/decision-log.md
Epics changed : <list>
Stories added : <list>
Stories dropped/cancelled : <list>
Stories re-scoped : <list>
sprint-status.yaml : re-sequenced (wave assignments updated)
Next step : <route taken — epics-and-stories / sprint-planning / parallel-plan>
Do NOT implement. The plan is ready; external dev tools pick it up.
in-progress or
review, flag it to the user and wait for explicit confirmation before
altering scope or cancelling it. Do not silently mutate live work.bmad-epics-and-stories. Wave math belongs to bmad-sprint-planning and
bmad-parallel-plan. Route rather than duplicating their logic.| Downstream skill | When to route |
|-----------------|---------------|
| bmad-epics-and-stories (Update or Create) | Epic scope changed; stories need to be re-sharded or new ones compiled |
| bmad-sprint-planning (Update) | Dependency graph or wave assignments need recomputation |
| bmad-parallel-plan (Update) | Owned File/Module Scope changed; parallel waves need to be rebuilt |
You may route to more than one downstream skill in sequence. Always update
decision-log.md before routing.
backlog → ready-for-dev → in-progress → review → done
↑
cancelled (set here on drop; never deleted) ────
cancelled is a terminal state. Cancelled stories remain in
sprint-status.yaml with status: cancelled so the history is preserved.
Pattern: parallel impact analysis, sequential application.
For large backlogs (15+ stories, 3+ affected epics), fan out analysis:
| Agent | Task | Output |
|-------|------|--------|
| Agent 1 | Diff epics.md against the change statement; list affected epic IDs | bmad-output/context/affected-epics.md |
| Agent 2 | Scan all story files; identify stories whose Owned Scope or dependencies are invalidated | bmad-output/context/affected-stories.yaml |
| Agent 3 | Read sprint-status.yaml; identify dependency ripple from cancelled/added stories | bmad-output/context/ripple-analysis.yaml |
Coordinator (main context): merge outputs, confirm triage with the user, then apply changes and route to downstream skills.
Example subagent prompt:
Task: Identify stories affected by the scope change.
Context: Read all *.story.md files under bmad-output/stories/.
Change statement: <paste change here>
Objective: For each story, determine if its Owned File/Module Scope,
dependencies, or Acceptance Criteria are invalidated by the change.
Output: Write YAML list to bmad-output/context/affected-stories.yaml
Format:
- id: "2.1.stripe-integration"
affected: true
reason: "owned scope includes src/payments/ which moves to new module"
status: "ready-for-dev"
bmad-output/decision-log.md — append here; never overwrite prior entries.${CLAUDE_PLUGIN_ROOT}/scripts/scope-conflict-check.sh — validate Owned Scope after story changes.bmad-epics-and-stories, bmad-sprint-planning, bmad-parallel-plan.
Part of the BMAD Planning & Orchestrator plugin — a Claude Code harness for the BMAD Method by the BMAD Code Organization (https://github.com/bmad-code-org/BMAD-METHOD). Implements the spirit of
bmad-correct-course. All methodology credit belongs to the BMAD Code Organization.
testing
Solutioning-phase UX planning skill (optional; activate when the project has a UI). Produces TWO planning documents: DESIGN.md (the visual system — design tokens, color palette, typography, spacing, component specs, WCAG 2.1 AA contract) and EXPERIENCE.md (user journeys, flow diagrams, screen states, error/empty/loading handling). Use when the user says "design the UX", "create UX planning docs", "define the design system", "map the user flows", "UX for this feature", "wireframe the flows", "what are the user journeys", "accessibility design", "WCAG compliance", "design tokens", "responsive design plan", "mobile-first design", or "create DESIGN.md / EXPERIENCE.md". Runs after architecture is drafted and before stories are created. Supports Create / Update / Validate intents.
testing
Quick Flow lightweight technical specification for small-scope work (1-15 stories). Replaces the full PRD + architecture pair when scope is small and requirements are clear. Produces bmad-output/tech-spec.md as the single planning artifact before story creation. Use when the user says: "write a tech spec", "create a technical specification", "I need a tech spec for this feature", "quick spec", "small project spec", "we don't need a full PRD", "just a tech spec", "spec out this change", "document this feature". QUICK FLOW TRACK ONLY (1-15 stories). If scope grows beyond ~15 stories or involves multiple teams / external integrations at scale, stop and redirect to bmad-prd + bmad-architecture instead — those skills are built for that complexity. Supports three intents: Create (new spec), Update (revise an existing tech-spec.md), Validate (review a draft for completeness against BMAD criteria).
tools
Orchestration handoff bridge: emits and maintains sprint-status.yaml as the project's sequencing system-of-record. Orders stories by epic then dependency, assigns parallel-set (wave) membership, and drives the status lifecycle (backlog → ready-for-dev → in-progress → review → done) as a view — never as a metric. Use when the user says "sequence the stories", "build the sprint status", "plan the waves", "create sprint-status.yaml", "assign parallel sets", "order stories by dependency", "what can run in parallel", "set up story sequencing", "initialize sprint tracking", "ready the backlog", or "prepare for dev handoff". Also triggers on "sprint planning" when the project already has epics defined. SCOPE: SEQUENCING AND ORCHESTRATION ONLY. No velocity, no burndown, no committed points, no coverage metrics. Capacity is expressed as wave width (concurrent story count), not points. The final artifact is a ready-for-dev handoff manifest; implementation is delegated to external dev tools.
development
Distills ANY messy input — brain dump, transcript, long PRD, stakeholder notes, feature request, voice memo — into a tight five-field SPEC.md kernel that any downstream planning skill can consume. The five fields are: Problem, Capabilities, Constraints, Non-Goals, Success Metrics. Use when the user says "create a spec", "write a spec for", "distill this into a spec", "I have a brain dump", "turn this into something structured", "clean up these notes", "make a SPEC from", "I want to define the problem", "help me scope this", "summarize what we're building", "I have a PRD but need a kernel", "what are we actually solving?", or drops raw text/transcript and asks for structure. Also use when starting any new initiative and a clean shared definition is missing.