Skip to main content
GSD roadmaps are designed to evolve. Scope changes, priorities shift, and urgent work emerges. Phase management commands let you adjust your roadmap without rebuilding everything.

Overview

Three commands control roadmap structure:

Adding Phases

Use /gsd:add-phase to append new work to the end of your current milestone.

Basic usage

GSD will:
  1. Calculate next phase number (ignores decimals)
  2. Generate slug from description
  3. Create phase directory
  4. Update ROADMAP.md
  5. Track change in STATE.md

Example

Phase numbers are always integers. The system ignores any decimal phases when calculating the next number.

Inserting Phases

Use /gsd:insert-phase when urgent work must happen between existing phases.

Why decimal numbering?

Renumbering all phases after an insertion would invalidate:
  • Git commits referencing phase numbers
  • Discussion in issues/PRs
  • Documentation links
  • Your mental model
Decimal phases (e.g., 3.1, 3.2) preserve the logical sequence while accommodating urgent insertions.

Basic usage

This inserts phase 3.1 after phase 3.

Multiple insertions

If phase 3.1 already exists:
GSD creates phase 3.2 (next available decimal).

Example

Only insert phases for truly urgent work that can’t wait. Excessive insertions make roadmaps harder to follow.

Removing Phases

Use /gsd:remove-phase to delete unstarted future work and renumber everything after it.

Why renumber?

Removing a phase leaves a gap (Phase 1, 2, 4, 5…). Renumbering maintains clean linear sequence:
  • Phase 1, 2, 3, 4, 5
Git history preserves the old numbers, so nothing is lost.

Basic usage

GSD will:
  1. Verify phase 7 hasn’t started
  2. Delete .planning/phases/07-phase-name/
  3. Renumber phases 8+ to 7+
  4. Update ROADMAP.md
  5. Commit with message explaining the change

Example

1

Safety check

GSD verifies the phase is in pending status. You cannot remove phases that are in_progress or completed.
2

Deletion

The phase directory is deleted from disk.
3

Renumbering

All subsequent phases are renumbered. Directories, file names, and ROADMAP.md entries are updated.
4

Git commit

Changes are committed with a message documenting the removal. Git history preserves old numbers.

Validation Rules

Add phase

  • ✅ Roadmap must exist
  • ✅ Description must be provided
  • ✅ Current milestone must be active

Insert phase

  • ✅ Target phase must exist
  • ✅ Target phase must be an integer (not 3.1)
  • ✅ Description must be provided

Remove phase

  • ✅ Phase must exist
  • ✅ Phase must be pending (not started)
  • ✅ Phase cannot be the last remaining phase

Roadmap Evolution Tracking

All phase management operations update STATE.md with evolution history:
This provides audit trail for scope changes.

Best Practices

Do:
  • Add phases when scope grows organically
  • Keep descriptions clear and specific
  • Discuss with team before expanding scope
Don’t:
  • Add phases to avoid proper planning
  • Create phases for work better suited to /gsd:quick
  • Add so many phases that the milestone becomes unwieldy
When to add:
  • User feedback reveals must-have feature
  • Technical discovery shows additional work needed
  • Stakeholder requests aligned with milestone goals

Common Patterns

Urgent fix during execution

Scope creep management

Descoping to meet deadline

Integration with Other Commands

After adding phases

After inserting phases

After removing phases

Phase Numbering Reference

Integer phases

  • Sequential: 1, 2, 3, 4, 5…
  • Represent planned work from roadmap
  • Created during /gsd:new-project or /gsd:add-phase

Decimal phases

  • Format: {integer}.{decimal} (e.g., 3.1, 3.2)
  • Represent urgent insertions
  • Created with /gsd:insert-phase
  • Not counted when calculating “next phase number”

Example roadmap

Next /gsd:add-phase creates Phase 07, not 06 (ignores decimals).