Files
msd-core/get-shit-done/workflows/add-phase.md
Tom Boucher aaba233f83 fix(#170): migrate workflow fallback hints to @opengsd package (#204)
* fix(#170): update workflow fallback install hint package

* chore(#170): add changeset for workflow fallback hint migration

* fix(#170): mark workflow-hint test as structural text contract
2026-05-24 14:16:30 -04:00

3.1 KiB

Add a new integer phase to the end of the current milestone in the roadmap. Automatically calculates next phase number, creates phase directory, and updates roadmap structure.

<required_reading> Read all files referenced by the invoking prompt's execution_context before starting. </required_reading>

Parse the command arguments: - All arguments become the phase description - Example: `/gsd-add-phase Add authentication` → description = "Add authentication" - Example: `/gsd-add-phase Fix critical performance issues` → description = "Fix critical performance issues"

If no arguments provided:

ERROR: Phase description required
Usage: /gsd-add-phase <description>
Example: /gsd-add-phase Add authentication system

Exit.

Load phase operation context:
# SDK resolution: prefer local gsd-tools.cjs, fall back to global gsd-sdk (#3668)
GSD_TOOLS="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/get-shit-done/bin/gsd-tools.cjs"
if [ -f "$GSD_TOOLS" ]; then
  GSD_SDK="node $GSD_TOOLS"
elif command -v gsd-sdk >/dev/null 2>&1; then
  GSD_SDK="gsd-sdk"
else
  echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
  echo "Run: npx -y @opengsd/get-shit-done-redux@latest --claude --local" >&2
  exit 1
fi
INIT=$($GSD_SDK query init.phase-op "0")
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi

Check roadmap_exists from init JSON. If false:

ERROR: No roadmap found (.planning/ROADMAP.md)
Run /gsd:new-project to initialize.

Exit.

**Delegate the phase addition to `gsd-sdk query phase.add`:**
RESULT=$($GSD_SDK query phase.add "${description}")

The CLI handles:

  • Finding the highest existing integer phase number
  • Calculating next phase number (max + 1)
  • Generating slug from description
  • Creating the phase directory (.planning/phases/{NN}-{slug}/)
  • Inserting the phase entry into ROADMAP.md with Goal, Depends on, and Plans sections

Extract from result: phase_number, padded, name, slug, directory.

Update STATE.md to reflect the new phase:
  1. Read .planning/STATE.md
  2. Under "## Accumulated Context" → "### Roadmap Evolution" add entry:
    - Phase {N} added: {description}
    

If "Roadmap Evolution" section doesn't exist, create it.

Present completion summary:
Phase {N} added to current milestone:
- Description: {description}
- Directory: .planning/phases/{phase-num}-{slug}/
- Status: Not planned yet

Roadmap updated: .planning/ROADMAP.md

---

## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}

**Phase {N}: {description}**

`/clear` then:

`/gsd:plan-phase {N}`

---

**Also available:**
- `/gsd-add-phase <description>` — add another phase
- Review roadmap

---

<success_criteria>

  • gsd-sdk query phase.add executed successfully
  • Phase directory created
  • Roadmap updated with new phase entry
  • STATE.md updated with roadmap evolution note
  • User informed of next steps </success_criteria>