--- name: release-strategy-advisor description: Expert in analyzing and recommending release strategies for software projects. Detects existing release patterns in brownfield projects (git tags, CI/CD workflows, changelogs, version files). Suggests optimal strategies based on architecture (single-repo, multi-repo, monorepo, microservices), team size, deployment frequency, and dependencies. Creates comprehensive release-strategy.md in living docs (.specweave/docs/internal/delivery/ or projects/{id}/delivery/). Activates for release strategy, versioning strategy, multi-repo releases, monorepo versioning, semantic versioning, coordinated releases, independent releases, release planning, version alignment, brownfield release analysis, deployment strategy, CI/CD release, how to version, release best practices. --- # Release Strategy Advisor **Expertise**: Release management strategy design, version alignment, brownfield release pattern detection, and living documentation of delivery processes. ## Core Capabilities ### 1. Brownfield Strategy Detection **Analyzes existing projects to detect release patterns**: **Git Analysis**: - Version tags (v1.0.0, v2.1.0-rc.1, etc.) - Tag patterns (semantic versioning, date-based, custom) - Release branches (release/*, hotfix/*) - Tag frequency and cadence **CI/CD Detection**: - GitHub Actions workflows (`.github/workflows/release.yml`) - GitLab CI (`.gitlab-ci.yml`) - Jenkins pipelines (`Jenkinsfile`) - CircleCI config (`.circleci/config.yml`) - Azure Pipelines (`azure-pipelines.yml`) **Package Managers**: - NPM: `package.json` (version, scripts: version/publish) - Python: `setup.py`, `pyproject.toml` - Java: `pom.xml`, `build.gradle` - Go: `go.mod` - Ruby: `*.gemspec` - Rust: `Cargo.toml` **Monorepo Tools**: - Lerna (`lerna.json`) - Nx (`nx.json`, `workspace.json`) - Turborepo (`turbo.json`) - Yarn Workspaces (`package.json` workspaces) - Changesets (`.changeset/config.json`) **Release Automation**: - Semantic Release (`.releaserc`, `release.config.js`) - Standard Version (`.versionrc`) - Conventional Changelog - Custom release scripts ### 2. Strategy Recommendation **Suggests optimal strategy based on**: **Project Architecture**: - Single repository → Simple semver strategy - Multi-repo (2-5 repos) → Coordinated or independent - Multi-repo (5+ repos) → Umbrella versioning - Monorepo → Workspace-based versioning - Microservices → Service-level versioning **Team Factors**: - Small team (1-5) → Simple manual releases - Medium team (5-20) → Semi-automated releases - Large team (20+) → Fully automated releases **Deployment Patterns**: - Low frequency (<1/month) → Manual releases - Medium frequency (1-4/month) → Semi-automated - High frequency (daily/weekly) → Automated CI/CD - Continuous deployment → Trunk-based + feature flags **Dependencies**: - No dependencies → Independent releases - Weak coupling → Independent with coordination - Strong coupling → Coordinated/lockstep releases - Shared libraries → Umbrella versioning ### 3. Release Strategy Types **Single Repo Strategies**: ```markdown ## Simple Semver - One repository, one version - Manual or automated bumps (patch/minor/major) - GitHub releases + NPM/PyPI publish - CHANGELOG.md maintenance - Example: SpecWeave itself ``` **Multi-Repo Strategies**: ```markdown ## Coordinated Releases - All repos share same version - Release together (v1.0.0 across all) - Synchronized CI/CD - Example: Microservices with tight coupling ## Independent Releases - Each repo has own version - Release independently - Example: service-a v2.1.0, service-b v1.5.0 ## Umbrella Versioning - Product version (v3.0.0) spans multiple repos - Internal service versions tracked separately - Example: "Product v3.0.0" contains: - frontend v2.5.0 - backend v1.8.0 - api v2.1.0 ``` **Monorepo Strategies**: ```markdown ## Workspace-Based - Lerna/Nx/Turborepo manage versions - Independent package versions - Changesets for semantic release - Example: Babel, Jest ## Fixed Versioning - All packages share same version - Lerna --fixed mode - Example: Angular packages ``` **Microservices Strategies**: ```markdown ## Service-Level Versioning - Each service has own semantic version - API contract versioning separate - Rolling releases (deploy services independently) ## Coordinated Major Releases - Independent minor/patch versions - Coordinated major versions (breaking changes) - Example: v2.x (service-a v2.3.0, service-b v2.1.0) ``` ### 4. Release Candidate (RC) Management **RC Patterns**: **Pre-Release Tags**: - `v1.0.0-rc.1`, `v1.0.0-rc.2` → `v1.0.0` (final) - `v2.0.0-beta.1` → `v2.0.0-rc.1` → `v2.0.0` - `v3.0.0-alpha.1` → `v3.0.0-beta.1` → `v3.0.0-rc.1` → `v3.0.0` **Channel-Based**: - Stable (production) - Beta (pre-release testing) - Alpha (early adopters) - Canary (1% traffic, feature flags) **Environment-Based**: - Dev → Staging (RC) → Production (final) - Feature branches → RC branch → Main branch **RC Workflow**: 1. Create RC: `v1.0.0-rc.1` 2. Deploy to staging/beta channel 3. Testing & bug fixes (creates rc.2, rc.3, ...) 4. Validation complete → Promote RC to v1.0.0 5. Deploy to production ### 5. Living Documentation **Creates release-strategy.md in**: **Cross-Project** (applies to entire system): ``` .specweave/docs/internal/delivery/release-strategy.md ``` **Project-Specific** (multi-project mode): ``` .specweave/docs/internal/projects/{project-id}/delivery/release-strategy.md ``` **Document Structure**: ```markdown # Release Strategy: {Product/Project Name} ## Current Strategy - Type: Single-repo / Multi-repo / Monorepo / Microservices - Versioning: Semantic / Date-based / Custom - Alignment: Lockstep / Independent / Umbrella - RC Process: Pre-release tags / Channels / Feature flags ## Repositories - Repo A: {purpose, current version, release frequency} - Repo B: {purpose, current version, release frequency} ## Version Alignment - Major: Coordinated (breaking changes) - Minor: Independent (new features) - Patch: Independent (bug fixes) ## Release Candidate Workflow 1. Create RC tag: v1.0.0-rc.1 2. Deploy to staging 3. Testing phase (1 week) 4. Promote to production: v1.0.0 ## CI/CD Integration - GitHub Actions: .github/workflows/release.yml - Automated: npm publish, Docker push, Deploy to K8s - Manual gates: QA approval, stakeholder sign-off ## Changelog Management - Tool: Conventional Changelog / Keep a Changelog - Format: CHANGELOG.md (root or per-package) - Automation: semantic-release / standard-version ## Hotfix Strategy - Branch: hotfix/* from production tag - Version: Patch bump (v1.0.1) - Process: Fast-track testing, immediate deploy ## Release Checklist - [ ] All tests passing - [ ] Changelog updated - [ ] Version bumped - [ ] Git tag created - [ ] GitHub release published - [ ] Package published (NPM/PyPI/Docker) - [ ] Deployment successful - [ ] Documentation updated ## Metrics & Monitoring - DORA Metrics: Deployment frequency, lead time, MTTR, change failure rate - Release cadence: {weekly / bi-weekly / monthly} - Hotfix frequency: {target <5% of releases} ## Decision History - 2025-01-15: Adopted umbrella versioning (ADR-023) - 2025-02-01: Introduced RC workflow (ADR-025) - 2025-03-10: Migrated to semantic-release (ADR-028) ``` ### 6. Integration with Brownfield Analyzer **Automatic Strategy Detection** (when brownfield analyzer runs): ```bash # Brownfield analyzer detects: # 1. Repository structure (single/multi/monorepo) # 2. Existing version tags # 3. CI/CD configurations # 4. Package manager configs # 5. Release automation tools # Then invokes release-strategy-advisor: # - Analyze detected patterns # - Classify release strategy # - Document findings in release-strategy.md # - Suggest improvements if needed ``` **Detection Output Example**: ```markdown ## Detected Release Strategy **Type**: Multi-repo Independent Releases **Evidence**: - 3 repositories detected: - frontend: v2.5.0 (last release: 2025-01-10) - backend: v1.8.0 (last release: 2025-01-08) - shared: v1.2.0 (last release: 2024-12-15) - Version alignment: None (independent) - Release frequency: Weekly (frontend), Bi-weekly (backend), Monthly (shared) - CI/CD: GitHub Actions with semantic-release - Changelog: Conventional Changelog (auto-generated) **Recommendations**: 1. Consider umbrella versioning for product releases 2. Add RC workflow for major versions 3. Align major versions for better API compatibility ``` ## When to Use This Skill **Ask me to**: 1. **Analyze existing release strategy**: - "What's our current release strategy?" - "Detect our versioning patterns" - "Analyze how we're releasing across repos" 2. **Recommend optimal strategy**: - "What release strategy should we use?" - "How should we version our microservices?" - "Should we use coordinated or independent releases?" 3. **Create release documentation**: - "Document our release process" - "Create release-strategy.md" - "Write down our versioning approach" 4. **Plan multi-repo releases**: - "How to coordinate releases across 5 repos?" - "Should we align versions?" - "What's the best RC workflow for us?" 5. **Brownfield integration**: - "Understand our existing release process" - "What release tools are we using?" - "Map our current deployment pipeline" ## Best Practices **Version Alignment**: - Lockstep: Use for tightly coupled services (shared breaking changes) - Independent: Use for loosely coupled services (autonomous teams) - Umbrella: Use for products with multiple independent modules **RC Workflows**: - Always use RC for major versions (breaking changes) - Consider RC for minor versions if critical features - Skip RC for patch versions (hotfixes) unless high risk **Changelog Discipline**: - Automate changelog generation (conventional commits) - Manual curation for major releases (highlight key features) - Link to GitHub issues/PRs for traceability **Release Frequency**: - High-risk changes: RC → staging → production (1-2 weeks) - Low-risk changes: Direct to production (daily/weekly) - Balance speed with stability (DORA metrics) ## Integration Points **Brownfield Analyzer**: - Detects existing patterns automatically - Feeds data to release-strategy-advisor - Creates baseline documentation **Living Docs**: - Stores strategy in delivery/ folder - Updates on strategy changes - Links to ADRs for decisions **Multi-Project**: - Different strategies per project - Cross-project release coordination - Shared release templates **Increment Lifecycle**: - Release increments span repositories - Coordinated planning & execution - Automated living docs sync ## Example Workflows ### Single-Repo Project (SpecWeave) ```bash # 1. User asks for release strategy "What release strategy should SpecWeave use?" # 2. Advisor analyzes: # - Single repo (GitHub: anton-abyzov/specweave) # - NPM package # - GitHub Actions for releases # - Existing semver tags # 3. Recommends: # - Simple semver strategy # - Automated releases via GitHub Actions # - CHANGELOG.md maintenance # - RC for major versions only # 4. Creates: # .specweave/docs/internal/delivery/release-strategy.md ``` ### Multi-Repo Microservices ```bash # 1. User asks for strategy "How should we release our 5 microservices?" # 2. Advisor analyzes: # - 5 repos detected (user-service, order-service, ...) # - Tight coupling (shared API contracts) # - High deployment frequency (daily) # 3. Recommends: # - Umbrella versioning (product v1.0.0) # - Independent service versions (service-a v2.3.0) # - RC workflow for product major versions # - Rolling releases for services # 4. Creates: # .specweave/docs/internal/delivery/release-strategy.md # - Umbrella version matrix # - Service version independence # - RC workflow for product releases ``` ### Monorepo (Lerna/Nx) ```bash # 1. User asks for strategy "How to version our Lerna monorepo?" # 2. Advisor analyzes: # - Monorepo with 12 packages # - Lerna detected (lerna.json) # - Changesets for versioning # - Independent package releases # 3. Recommends: # - Independent versioning (Lerna independent mode) # - Changesets for semantic release # - Automated changelogs per package # - Fixed versioning for core packages # 4. Creates: # .specweave/docs/internal/delivery/release-strategy.md # - Lerna configuration explanation # - Changesets workflow # - Package grouping strategy ``` ## Commands Integration Works with release management commands: - `/specweave-release:init` - Analyze & recommend strategy - `/specweave-release:align` - Align versions across repos - `/specweave-release:rc` - Create release candidate - `/specweave-release:publish` - Execute release ## Dependencies **Required**: - Git (version tag analysis) - SpecWeave core (living docs integration) **Optional** (for detection): - GitHub CLI (`gh`) - GitHub release detection - NPM (`npm`) - NPM package detection - Python (`python`) - Python package detection - Lerna (`lerna`) - Monorepo detection - Nx (`nx`) - Nx workspace detection ## Output **Creates/Updates**: - `.specweave/docs/internal/delivery/release-strategy.md` (cross-project) - `.specweave/docs/internal/projects/{id}/delivery/release-strategy.md` (project-specific) **Provides**: - Current strategy analysis - Recommended improvements - RC workflow templates - CI/CD integration guides - Version alignment matrix - Release checklist --- **Remember**: Release strategy is a living document. Update it when: - Architecture changes (new repos, services) - Team size changes - Deployment frequency changes - Tooling changes (new CI/CD, monorepo tools) - Lessons learned from releases **Goal**: Clear, documented, repeatable release process that scales with your team and product.