10 KiB
Epic Chain - Analysis and Execution Instructions
The workflow execution engine is governed by: {project-root}/.bmad/core/tasks/workflow.xml You MUST have already loaded and processed: {project-root}/.bmad/bmm/workflows/4-implementation/epic-chain/workflow.yaml
Overview
This workflow analyzes multiple epics to understand their relationships, then chains their execution with context sharing between epics.
Communicate in {communication_language} with {user_name} Ask which epics to chain if not already providedAccept input formats:
- Space-separated:
36 37 38 - Comma-separated:
36, 37, 38 - Range notation:
36-38(expand to individual IDs) - Mixed:
36-38, 40(expand ranges, keep individuals)
For each epic ID, validate:
- Epic file exists at
{epics_location}/epic-{id}*.md - At least one story exists for the epic in
{stories_location}/
Output: List of validated epic IDs in order provided
Report which epic IDs failed validation and ask user to correct
For each validated epic, load:- Epic file: Read full content from
{epics_location}/epic-{id}*.md - Story files: Find all stories matching patterns:
{stories_location}/{id}-*-*.md(e.g.,36-1-user-auth.md){stories_location}/story-{id}.*-*.md- Files containing
Epic: {id}in content
Extract from each epic:
- Title and description
- User stories listed
- Any
## Dependenciessection - Technical context or requirements
- Mentioned patterns, components, or integrations
Extract from each story:
- Story ID and title
- Status (Draft, Ready, In Progress, Done)
- Acceptance criteria
- Technical implementation notes
- References to shared code, APIs, or components
Structured data for all epics and stories
Perform dependency analysis across all loaded epics:3.1 Explicit Dependencies
- Check each epic for
## Dependenciessection - Parse references like "Depends on Epic 36" or "Requires 36-3 complete"
- Build explicit dependency graph
3.2 Implicit Dependencies (Pattern Detection)
Scan story content for shared resources:
| Pattern | Detection Method | Dependency Type |
|---|---|---|
| Database tables | Look for CREATE TABLE, model names, migrations |
Schema dependency |
| API endpoints | Look for /api/, route definitions |
API dependency |
| Components | Look for import from shared paths |
Code dependency |
| Configuration | Look for env vars, feature flags | Config dependency |
| Types/Interfaces | Look for shared type definitions | Type dependency |
3.3 Build Dependency Matrix
Epic | Depends On | Required By
--------|------------|------------
36 | - | 37, 38
37 | 36 | 38
38 | 36, 37 | -
dependency_graph with edges and reasons
Using dependency graph, determine execution order:4.1 Topological Sort
- Epics with no dependencies execute first
- Epics are ordered so dependencies are satisfied
- Circular dependencies → error and ask user to resolve
4.2 Story-Level Ordering (within epic)
- Stories execute in numerical order by default
- Detect story-level dependencies if specified
- Identify parallelizable stories (no shared resources)
4.3 Risk Assessment
For each epic/story, assess complexity:
- High: Multiple integrations, new patterns, security-sensitive
- Medium: Extends existing patterns, moderate scope
- Low: Simple CRUD, isolated changes
execution_order list with risk annotations
Detect concerns that span multiple epics:5.1 Database Migrations
- If multiple epics modify schema, flag migration order requirements
- Recommend: Run all migrations before story execution, or sequence carefully
5.2 API Versioning
- If epics add/modify APIs, check for versioning consistency
- Flag breaking changes that affect other epics
5.3 Shared Component Changes
- If early epic modifies shared code, flag impact on later epics
- Recommend: Review shared code changes before proceeding
5.4 Test Dependencies
- If tests in later epics depend on fixtures from earlier epics
- Recommend: Ensure test data setup is consistent
cross_cutting_concerns list with recommendations
Find stories that can execute in parallel:Within an epic:
- Stories with no shared files or dependencies
- Stories that only read (don't modify) shared resources
- Stories flagged as
parallel-safein story file
Across epics (advanced):
- Independent epics with no dependency relationship
- Requires
--parallel-epicsflag to enable
parallel_opportunities list
Create chain-plan.yaml with all analysis results:# chain-plan.yaml
generated: {date}
epics: [{epic_ids}]
total_stories: {story_count}
analysis_depth: {analysis_depth}
execution_order:
- epic: {id}
title: "{epic_title}"
stories: [{story_ids}]
story_count: {count}
estimated_complexity: {low|medium|high}
dependencies: []
# OR
dependencies:
- epic: {dep_id}
reason: "{why}"
cross_cutting_concerns:
- name: "{concern_name}"
affects: [{epic_ids}]
recommendation: "{action}"
parallel_opportunities:
- scope: "within-epic"
epic: {id}
stories: [{story_ids}]
reason: "{why_parallel}"
risk_areas:
- epic: {id}
story: "{story_id}"
risk: "{description}"
severity: {low|medium|high}
mitigation: "{recommendation}"
estimated_execution:
total_stories: {count}
complex_stories: {count}
low_risk_stories: {count}
Save to {chain_plan_file}
Display formatted analysis to {user_name}:═══════════════════════════════════════════════════════════
EPIC CHAIN ANALYSIS
═══════════════════════════════════════════════════════════
Epics: {epic_list}
Total Stories: {total_stories}
EXECUTION ORDER
───────────────────────────────────────────────────────────
{For each epic in execution_order:}
{n}. Epic {id}: {title} ({story_count} stories)
Dependencies: {deps or "None"}
Complexity: {complexity}
{end for}
CROSS-CUTTING CONCERNS
───────────────────────────────────────────────────────────
{For each concern:}
• {name}
Affects: {epic_ids}
Action: {recommendation}
{end for}
RISK AREAS
───────────────────────────────────────────────────────────
{For each risk:}
• Story {story_id}: {risk}
Severity: {severity}
Mitigation: {mitigation}
{end for}
═══════════════════════════════════════════════════════════
Ask user to choose:
- Approve - Proceed with execution
- Modify - Change order or exclude epics
- Analyze Only - Save plan, don't execute
- Cancel - Abort workflow
Proceed to step 9 Return to step 1 with modifications Save plan, display shell command for later, end workflow End workflow
Display the shell command for execution:The epic chain requires shell orchestration for context isolation.
Provide commands:
# Dry run (recommended first)
./.bmad/scripts/epic-chain.sh {epic_ids} --dry-run --verbose
# Full execution
./.bmad/scripts/epic-chain.sh {epic_ids}
# With specific options
./.bmad/scripts/epic-chain.sh {epic_ids} --skip-done --verbose
Explain what will happen:
-
For each epic in order:
- Load context handoff from previous epic (if any)
- Execute via
epic-execute.sh(dev → review → commit per story) - Generate context handoff for next epic
-
After all epics:
- Generate combined UAT document
- Update sprint-status.yaml
- Display execution summary
Remind user:
- Use
--dry-runfirst to validate - Use
--start-from {epic_id}to resume after interruption - Use
--skip-doneto skip already-completed stories - Check logs at
{chain_log_file}if issues occur
Context Handoff Template
After each epic completes, generate handoff:
# Epic {id} → Epic {next_id} Handoff
## Generated
{timestamp}
## Patterns Established
{List coding patterns, conventions, architectural decisions made}
## Key Decisions
{Major technical decisions with rationale}
## Gotchas & Lessons Learned
{Issues encountered, workarounds applied, things to watch for}
## Files to Reference
{Key files that establish patterns for next epic}
## Test Patterns
{Testing conventions, fixture patterns, coverage expectations}
Error Handling
| Scenario | Behavior |
|---|---|
| Epic not found | Report missing epic, ask user to correct |
| Circular dependency | Report cycle, ask user to resolve |
| Story execution fails | Log failure, continue to next story, report in summary |
| Epic fails completely | Pause chain, ask user whether to continue or abort |
| Context handoff fails | Log warning, continue without handoff |