Skip to main content
ClaudeWave
Skill89 repo starsupdated 1mo ago

epic-sprints

Install in Claude Code
Copy
git clone --depth 1 https://github.com/marcusgoll/Spec-Flow /tmp/epic-sprints && cp -r /tmp/epic-sprints/.claude/skills/epic-sprints ~/.claude/skills/epic-sprints
Then start a new Claude Code session; the skill loads automatically.

SKILL.md

# Epic Sprints Skill

Generate sprint breakdown with dependency graph and execution layers for epic workflows.

## Purpose

Break down epic plans into parallelizable sprints with dependency analysis, API contract locking, and execution layer optimization.

## When to Invoke

- During `/epic` Step 4 (Sprint Breakdown phase)
- After plan.md is complete and reviewed
- Invokes `/tasks` command with epic context

## Sprint Breakdown Process

**Invoke /tasks with epic context:**

```bash
/tasks
```

**The /tasks phase will:**

1. Read plan.md to understand phases
2. Analyze complexity and identify sprint boundaries
3. Build dependency graph between sprints
4. Lock API contracts (OpenAPI schemas) for parallel work
5. Generate sprint-plan.md with execution layers

## Sprint Plan Structure

```xml
<sprint_plan>
  <sprints>
    <sprint id="S01" name="auth-backend">
      <dependencies></dependencies>
      <estimated_hours>16</estimated_hours>
      <subsystems>backend, database</subsystems>
      <contracts_locked>
        <api_contract>contracts/api/auth-v1.yaml</api_contract>
      </contracts_locked>
    </sprint>

    <sprint id="S02" name="auth-frontend">
      <dependencies>S01</dependencies>
      <estimated_hours>20</estimated_hours>
      <subsystems>frontend</subsystems>
    </sprint>

    <sprint id="S03" name="auth-integration">
      <dependencies>S01, S02</dependencies>
      <estimated_hours>12</estimated_hours>
      <subsystems>backend, frontend</subsystems>
    </sprint>
  </sprints>

  <execution_layers>
    <layer num="1">
      <sprint_ids>S01</sprint_ids>
      <parallelizable>true</parallelizable>
    </layer>
    <layer num="2">
      <sprint_ids>S02</sprint_ids>
      <parallelizable>false</parallelizable>
      <depends_on_layer>1</depends_on_layer>
    </layer>
    <layer num="3">
      <sprint_ids>S03</sprint_ids>
      <parallelizable>false</parallelizable>
      <depends_on_layer>2</depends_on_layer>
    </layer>
  </execution_layers>
</sprint_plan>
```

## Tasks Generation

**Also generates tasks.xml:**

- All tasks across all sprints
- Task-level dependencies
- Sprint assignments
- Acceptance criteria per task

## API Contract Locking

For parallel sprint execution, API contracts must be locked:

1. Extract API boundaries from plan.md
2. Generate OpenAPI schemas in `contracts/api/`
3. Mark contracts as locked in sprint-plan.md
4. Sprints reference locked contracts for implementation

## Commit Sprint Breakdown

```bash
# Extract metadata for commit message
SPRINT_COUNT=$(xmllint --xpath 'count(//sprint)' epics/${EPIC_SLUG}/sprint-plan.md)
LAYER_COUNT=$(xmllint --xpath 'count(//layer)' epics/${EPIC_SLUG}/sprint-plan.md)
CONTRACT_COUNT=$(find epics/${EPIC_SLUG}/contracts -name '*.yaml' | wc -l)
TASK_COUNT=$(xmllint --xpath 'count(//task)' epics/${EPIC_SLUG}/tasks.md)

# Commit sprint breakdown and contracts
git add epics/${EPIC_SLUG}/sprint-plan.md
git add epics/${EPIC_SLUG}/tasks.md
git add epics/${EPIC_SLUG}/contracts/
git commit -m "docs(epic-tasks): create sprint breakdown for ${EPIC_SLUG} (${SPRINT_COUNT} sprints)

Sprints: ${SPRINT_COUNT}
Layers: ${LAYER_COUNT}
Contracts locked: ${CONTRACT_COUNT}
Total tasks: ${TASK_COUNT}

Next: /implement-epic (parallel sprint execution)"
```

**Alternative:** `/meta:enforce-git-commits --phase "epic-sprint-breakdown"`

## Dependency Graph Rules

1. **No circular dependencies**: Sprints cannot depend on each other cyclically
2. **Layer assignment**: Sprints in the same layer can run in parallel
3. **Contract boundaries**: Sprints in different layers communicating via API must have locked contracts
4. **Resource constraints**: Consider subsystem conflicts when parallelizing

## Execution Layer Optimization

**Goal**: Maximize parallelization while respecting dependencies

**Algorithm**:

1. Start with sprints that have no dependencies (Layer 1)
2. Sprints depending only on Layer 1 → Layer 2
3. Continue until all sprints assigned
4. Mark layers as parallelizable if multiple sprints share the same layer

**Example optimization**:

```
Before: S01 → S02 → S03 → S04 (sequential, 4 layers)
After:  L1[S01, S03] → L2[S02, S04] (parallel, 2 layers, 2x speedup)
```

## State Updates

After sprint breakdown:

```yaml
phases:
  tasks:
    status: completed
    completed_at: { ISO_TIMESTAMP }

sprints:
  total: { SPRINT_COUNT }
  completed: 0
  failed: 0

layers:
  total: { LAYER_COUNT }
  completed: 0
```

## Next Step

After sprint breakdown, proceed to `/implement-epic` for parallel sprint execution.