BMAD-METHOD/scripts/epic-execute-lib/INIT.md

9.3 KiB

Epic Execute - Dependencies & Setup

This document describes the required and optional dependencies for running the epic-execute.sh script and its library modules.

Required Dependencies

Core Requirements

Package Purpose Installation
bash Shell interpreter (v4.0+) Pre-installed on macOS/Linux
git Version control operations Pre-installed or brew install git
claude Claude Code CLI for AI-powered execution npm install -g @anthropic-ai/claude-code

Required CLI Tools

Tool Purpose macOS Linux (Debian/Ubuntu)
timeout Command timeout handling brew install coreutils (use gtimeout) Pre-installed
sed Text processing Pre-installed (BSD) Pre-installed (GNU)
grep Pattern matching Pre-installed Pre-installed
awk Text processing Pre-installed Pre-installed
date Timestamp generation Pre-installed Pre-installed
wc Character/line counting Pre-installed Pre-installed

These tools enhance functionality but have fallback behavior if missing:

yq (YAML Processing)

Strongly Recommended - Used for YAML file manipulation (metrics, story status updates).

# macOS (Homebrew)
brew install yq

# Linux (Go version - recommended)
go install github.com/mikefarah/yq/v4@latest

# Linux (snap)
snap install yq

# Linux (wget binary)
wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/local/bin/yq
chmod +x /usr/local/bin/yq

Important: The script expects the mikefarah/yq Go version (v4+), NOT the Python yq (kislyuk/yq). The Python version has different syntax and will trigger fallback mode.

Without yq:

  • YAML updates use sed fallback (less reliable)
  • Metrics updates may be deferred
  • Story status updates may fail silently

jq (JSON Processing)

Recommended - Used for JSON output parsing from Claude responses.

# macOS
brew install jq

# Linux (Debian/Ubuntu)
apt-get install jq

# Linux (RHEL/CentOS)
yum install jq

Without jq:

  • JSON parsing falls back to regex patterns (less accurate)
  • Some structured output extraction may fail

xmllint (XML Validation)

Optional - Used for validating XML workflow files.

# macOS
# Pre-installed as part of libxml2

# Linux (Debian/Ubuntu)
apt-get install libxml2-utils

# Linux (RHEL/CentOS)
yum install libxml2

Without xmllint:

  • XML validation uses basic pattern matching
  • Invalid XML may not be detected until runtime

Project-Specific Test Runners

The regression gate module auto-detects project type and requires the appropriate test runner:

Project Type Detection File Required Tool
Node.js/TypeScript package.json npm (with test script)
Rust Cargo.toml cargo
Go go.mod go
Python requirements.txt or pyproject.toml pytest

Quick Setup Script

Run this to check and install all dependencies on macOS:

#!/bin/bash
# epic-execute-setup.sh

echo "Checking epic-execute dependencies..."

# Check required tools
for tool in git bash; do
    if command -v $tool >/dev/null 2>&1; then
        echo "✓ $tool installed"
    else
        echo "✗ $tool NOT FOUND - please install"
    fi
done

# Check Claude CLI
if command -v claude >/dev/null 2>&1; then
    echo "✓ claude CLI installed"
else
    echo "✗ claude CLI NOT FOUND"
    echo "  Install with: npm install -g @anthropic-ai/claude-code"
fi

# Check yq (Go version)
if command -v yq >/dev/null 2>&1; then
    if yq --version 2>&1 | grep -qE "(mikefarah|version.*v4)"; then
        echo "✓ yq (Go version) installed"
    else
        echo "⚠ yq installed but may be Python version - recommend Go version"
        echo "  Install with: brew install yq"
    fi
else
    echo "⚠ yq NOT FOUND - YAML updates will use sed fallback"
    echo "  Install with: brew install yq"
fi

# Check jq
if command -v jq >/dev/null 2>&1; then
    echo "✓ jq installed"
else
    echo "⚠ jq NOT FOUND - JSON parsing will use regex fallback"
    echo "  Install with: brew install jq"
fi

# Check xmllint
if command -v xmllint >/dev/null 2>&1; then
    echo "✓ xmllint installed"
else
    echo "⚠ xmllint NOT FOUND - XML validation will be limited"
fi

# Check timeout (coreutils on macOS)
if command -v timeout >/dev/null 2>&1 || command -v gtimeout >/dev/null 2>&1; then
    echo "✓ timeout command available"
else
    echo "⚠ timeout NOT FOUND"
    echo "  Install with: brew install coreutils"
fi

echo ""
echo "Dependency check complete."

Environment Variables

The script respects these environment variables:

Variable Default Purpose
CLAUDE_TIMEOUT 600 Timeout in seconds for Claude invocations
MAX_PROMPT_SIZE 150000 Maximum prompt size in bytes
RETRY_MAX_ATTEMPTS 3 Max retry attempts for transient failures
RETRY_INITIAL_DELAY 5 Initial retry delay in seconds
RETRY_MAX_DELAY 60 Maximum retry delay in seconds
PROTECTED_BRANCHES main master Branches that block direct commits
VERBOSE false Enable verbose logging

Directory Structure & Path Configuration

The epic-execute.sh script expects specific directory structures in your project. Before running, inspect your repository and ensure paths are configured correctly.

BMAD-METHOD Repository Structure

The script sources BMAD workflows from these locations relative to the script:

BMAD-METHOD/
├── scripts/
│   ├── epic-execute.sh              # Main script
│   └── epic-execute-lib/            # Library modules
│       ├── utils.sh
│       ├── json-output.sh
│       ├── decision-log.sh
│       ├── design-phase.sh
│       ├── tdd-flow.sh
│       └── regression-gate.sh
└── src/
    ├── bmm-skills/                          # Upstream skill-based workflows (v6.1+)
    │   └── 4-implementation/
    │       ├── bmad-dev-story/             # Dev phase skill
    │       │   ├── SKILL.md
    │       │   └── checklist.md
    │       └── bmad-code-review/           # Review phase skill
    │           ├── SKILL.md
    │           └── steps/
    └── bmm/                                 # Our automation workflows
        └── workflows/
            └── 4-implementation/
                └── epic-execute/            # Quality gate steps
                    ├── steps/
                    │   ├── step-02b-arch-compliance.md
                    │   ├── step-03b-test-quality.md
                    │   ├── step-03c-traceability.md
                    │   └── step-04-generate-uat.md
                    └── templates/
                        └── uat-template.md

Target Project Structure

The script expects your target project (where stories are implemented) to have:

your-project/
├── docs/
│   ├── stories/           # Story markdown files (e.g., 1-1-feature.md)
│   ├── epics/             # Epic definition files
│   ├── sprints/           # Sprint planning files
│   ├── sprint-artifacts/  # Generated metrics, checkpoints, decision logs
│   │   ├── metrics/
│   │   ├── traceability/
│   │   └── test-specs/
│   └── uat/               # Generated UAT documents
└── bmad/                  # Optional: local BMAD configuration

Path Resolution

The script determines paths as follows:

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"    # Two levels up from script
BMAD_SRC_DIR="$SCRIPT_DIR/.."                       # One level up (scripts parent)

Important: If you install BMAD-METHOD differently (e.g., as a submodule, npm package, or symlink), you may need to adjust PROJECT_ROOT detection in epic-execute.sh lines 104-106.

Inspecting Your Setup

Before first run, verify your paths:

# From your target project root, check BMAD-METHOD location
ls -la ./node_modules/bmad-method/scripts/ 2>/dev/null || \
ls -la ./bmad-method/scripts/ 2>/dev/null || \
echo "BMAD-METHOD not found - check installation"

# Verify workflow files exist
BMAD_PATH="<path-to-bmad-method>"
ls -la "$BMAD_PATH/src/bmm-skills/4-implementation/bmad-dev-story/SKILL.md"
ls -la "$BMAD_PATH/src/bmm-skills/4-implementation/bmad-code-review/SKILL.md"
ls -la "$BMAD_PATH/src/bmm/workflows/4-implementation/epic-execute/"

# Verify your project has required directories
ls -la ./docs/stories/
ls -la ./docs/epics/

Creating Missing Directories

If your project doesn't have the expected structure:

# Create required directories
mkdir -p docs/{stories,epics,sprints,sprint-artifacts,uat}
mkdir -p docs/sprint-artifacts/{metrics,traceability,test-specs}

Verification

After installing dependencies, verify the setup:

# Run the script with --dry-run to verify setup
./scripts/epic-execute.sh <epic-id> --dry-run --verbose

The verbose output will show:

  • Platform detection
  • yq availability and version
  • Protected branch configuration
  • Workflow file validation results
  • Missing workflow files (if any)