refactor: unify milestone flow, remove deprecated commands

Consolidate /gsd:new-milestone to mirror /gsd:new-project:
- questioning → research (optional) → requirements → roadmap

BREAKING CHANGES:
- Remove /gsd:discuss-milestone (consolidated into new-milestone)
- Remove /gsd:create-roadmap (integrated into project/milestone flows)
- Remove /gsd:define-requirements (integrated into project/milestone flows)
- Remove /gsd:research-project (integrated into project/milestone flows)

Deleted files:
- commands/gsd/{discuss-milestone,create-roadmap,define-requirements,research-project}.md
- get-shit-done/workflows/{discuss-milestone,create-roadmap,define-requirements}.md
- get-shit-done/templates/milestone-context.md

Updated references in:
- progress.md, complete-milestone.md, help.md
- complete-milestone workflow, continuation-format.md
- questioning.md, requirements.md template, SUMMARY.md template
- gsd-project-researcher.md, gsd-roadmapper.md
- README.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Lex Christopherson
2026-01-17 00:28:41 -06:00
parent 54f2d5600b
commit c54071ccb8
21 changed files with 736 additions and 2199 deletions

View File

@@ -108,8 +108,7 @@ Output: Milestone archived (roadmap + requirements), PROJECT.md evolved, git tag
- Ask about pushing tag
8. **Offer next steps:**
- `/gsd:discuss-milestone` — thinking partner, creates context file
- Then `/gsd:new-milestone` — update PROJECT.md with new goals
- `/gsd:new-milestone` — start next milestone (questioning → research → requirements → roadmap)
</process>
@@ -133,5 +132,5 @@ Output: Milestone archived (roadmap + requirements), PROJECT.md evolved, git tag
- **Archive before deleting:** Always create archive files before updating/deleting originals
- **One-line summary:** Collapsed milestone in ROADMAP.md should be single line with link
- **Context efficiency:** Archive keeps ROADMAP.md and REQUIREMENTS.md constant size per milestone
- **Fresh requirements:** Next milestone starts with `/gsd:define-requirements`, not reusing old file
- **Fresh requirements:** Next milestone starts with `/gsd:new-milestone` which includes requirements definition
</critical_rules>

View File

@@ -1,145 +0,0 @@
---
name: gsd:create-roadmap
description: Create roadmap with phases for the project
allowed-tools:
- Read
- Write
- Bash
- AskUserQuestion
- Glob
- Task
---
<!--
DEPRECATED: This command is now integrated into /gsd:new-project
The unified /gsd:new-project flow includes roadmap creation as Phase 8,
using the gsd-roadmapper agent for heavy lifting.
This standalone command is kept for users who want to:
- Recreate roadmap after significant scope changes
- Create roadmap for a project initialized before this integration
- Replace an existing roadmap
For new projects, use /gsd:new-project instead.
Deprecated: 2026-01-16
-->
<objective>
Create project roadmap with phase breakdown.
Roadmaps define what work happens in what order. Phases map to requirements.
**Note:** For new projects, `/gsd:new-project` includes roadmap creation. Use this command to recreate roadmap later.
</objective>
<execution_context>
@~/.claude/get-shit-done/workflows/create-roadmap.md
@~/.claude/get-shit-done/templates/roadmap.md
@~/.claude/get-shit-done/templates/state.md
</execution_context>
<context>
@.planning/PROJECT.md
@.planning/config.json
@.planning/REQUIREMENTS.md
@.planning/research/SUMMARY.md (if exists)
</context>
<process>
<step name="validate">
```bash
# Verify project exists
[ -f .planning/PROJECT.md ] || { echo "ERROR: No PROJECT.md found. Run /gsd:new-project first."; exit 1; }
# Verify requirements exist
[ -f .planning/REQUIREMENTS.md ] || { echo "ERROR: No REQUIREMENTS.md found. Run /gsd:define-requirements first."; exit 1; }
```
</step>
<step name="check_existing">
Check if roadmap already exists:
```bash
[ -f .planning/ROADMAP.md ] && echo "ROADMAP_EXISTS" || echo "NO_ROADMAP"
```
**If ROADMAP_EXISTS:**
Use AskUserQuestion:
- header: "Roadmap exists"
- question: "A roadmap already exists. What would you like to do?"
- options:
- "View existing" - Show current roadmap
- "Replace" - Create new roadmap (will overwrite)
- "Cancel" - Keep existing roadmap
If "View existing": `cat .planning/ROADMAP.md` and exit
If "Cancel": Exit
If "Replace": Continue with workflow
</step>
<step name="create_roadmap">
Follow the create-roadmap.md workflow starting from identify_phases step.
The workflow handles:
- Loading requirements
- Phase identification mapped to requirements
- Requirement coverage validation (no orphaned requirements)
- Research flags for each phase
- Confirmation gates (respecting config mode)
- ROADMAP.md creation with requirement mappings
- STATE.md initialization
- REQUIREMENTS.md traceability update
- Phase directory creation
- Git commit
</step>
<step name="done">
```
Roadmap created:
- Roadmap: .planning/ROADMAP.md
- State: .planning/STATE.md
- [N] phases defined
---
## ▶ Next Up
**Phase 1: [Name]** — [Goal from ROADMAP.md]
`/gsd:discuss-phase 1` — gather context and clarify approach
<sub>`/clear` first → fresh context window</sub>
---
**Also available:**
- `/gsd:plan-phase 1` — skip discussion, plan directly
- Review roadmap
---
```
</step>
</process>
<output>
- `.planning/ROADMAP.md`
- `.planning/STATE.md`
- `.planning/phases/XX-name/` directories
</output>
<success_criteria>
- [ ] PROJECT.md validated
- [ ] REQUIREMENTS.md validated
- [ ] All v1 requirements mapped to phases (no orphans)
- [ ] Success criteria derived for each phase (2-5 observable behaviors)
- [ ] Success criteria cross-checked against requirements (gaps resolved)
- [ ] ROADMAP.md created with phases, requirement mappings, and success criteria
- [ ] STATE.md initialized
- [ ] REQUIREMENTS.md traceability section updated
- [ ] Phase directories created
- [ ] Changes committed
</success_criteria>

View File

@@ -1,134 +0,0 @@
---
name: gsd:define-requirements
description: Define what "done" looks like with checkable requirements
allowed-tools:
- Read
- Write
- Bash
- Glob
- AskUserQuestion
---
<!--
DEPRECATED: This command is now integrated into /gsd:new-project
The unified /gsd:new-project flow includes requirements definition as Phase 7.
This standalone command is kept for users who want to:
- Redefine requirements mid-project
- Add new requirements after initial project setup
- Adjust v1/v2 scope boundaries
For new projects, use /gsd:new-project instead.
Deprecated: 2026-01-16
-->
<objective>
Define concrete, checkable requirements for v1.
Two modes:
1. **With research** — Transform FEATURES.md into scoped requirements
2. **Without research** — Gather requirements through questioning
Output: `.planning/REQUIREMENTS.md`
**Note:** For new projects, `/gsd:new-project` includes requirements definition. Use this command to redefine requirements later.
</objective>
<execution_context>
@~/.claude/get-shit-done/workflows/define-requirements.md
@~/.claude/get-shit-done/templates/requirements.md
</execution_context>
<context>
@.planning/PROJECT.md
@.planning/research/FEATURES.md (if exists)
@.planning/research/SUMMARY.md (if exists)
</context>
<process>
<step name="validate">
```bash
# Verify project exists
[ -f .planning/PROJECT.md ] || { echo "ERROR: No PROJECT.md found. Run /gsd:new-project first."; exit 1; }
# Check for research
[ -f .planning/research/FEATURES.md ] && echo "HAS_RESEARCH" || echo "NO_RESEARCH"
# Check if requirements already exist
[ -f .planning/REQUIREMENTS.md ] && echo "REQUIREMENTS_EXISTS" || echo "NO_REQUIREMENTS"
```
</step>
<step name="check_existing">
**If REQUIREMENTS_EXISTS:**
Use AskUserQuestion:
- header: "Requirements exist"
- question: "Requirements already defined. What would you like to do?"
- options:
- "View existing" — Show current requirements
- "Replace" — Define requirements fresh (will overwrite)
- "Cancel" — Keep existing requirements
If "View existing": Read and display `.planning/REQUIREMENTS.md`, then exit
If "Cancel": Exit
If "Replace": Continue with workflow
</step>
<step name="execute">
**If HAS_RESEARCH:**
Follow the define-requirements.md workflow:
- Load research features from FEATURES.md
- Present features by category
- Ask user to scope each category (v1 / v2 / out of scope)
- Capture any additions research missed
- Generate REQUIREMENTS.md with checkable list
**If NO_RESEARCH:**
Gather requirements through questioning:
- Read PROJECT.md for core value and context
- Ask: "What are the main things users need to be able to do?"
- For each capability mentioned, probe for specifics
- Group into categories (Authentication, Content, etc.)
- For each category, ask what's v1 vs v2 vs out of scope
- Generate REQUIREMENTS.md with checkable list
Same output format either way — the difference is source (research vs conversation).
</step>
<step name="done">
```
Requirements defined:
- Requirements: .planning/REQUIREMENTS.md
- v1 scope: [N] requirements across [M] categories
- v2 scope: [X] requirements deferred
- Out of scope: [Y] requirements excluded
---
## ▶ Next Up
**Create roadmap** — phases mapped to requirements
`/gsd:create-roadmap`
<sub>`/clear` first → fresh context window</sub>
---
```
</step>
</process>
<success_criteria>
- [ ] PROJECT.md validated
- [ ] Features gathered (from research OR questioning)
- [ ] User scoped each category (v1/v2/out of scope)
- [ ] User had opportunity to add missing requirements
- [ ] REQUIREMENTS.md created with checkable list
- [ ] Requirements committed to git
- [ ] User knows next step (create-roadmap)
</success_criteria>

View File

@@ -1,47 +0,0 @@
---
name: gsd:discuss-milestone
description: Gather context for next milestone through adaptive questioning
---
<objective>
Help you figure out what to build in the next milestone through collaborative thinking.
Purpose: After completing a milestone, explore what features you want to add, improve, or fix. Features first — scope and phases derive from what you want to build.
Output: Context gathered, then routes to /gsd:new-milestone
</objective>
<execution_context>
@~/.claude/get-shit-done/workflows/discuss-milestone.md
</execution_context>
<context>
**Load project state first:**
@.planning/STATE.md
**Load project:**
@.planning/PROJECT.md
**Load milestones (if exists):**
@.planning/MILESTONES.md
</context>
<process>
1. Verify previous milestone complete (or acknowledge active milestone)
2. Present context from previous milestone (accomplishments, phase count)
3. Follow discuss-milestone.md workflow with **ALL questions using AskUserQuestion**:
- Use AskUserQuestion: "What do you want to add, improve, or fix?" with feature categories
- Use AskUserQuestion to dig into features they mention
- Use AskUserQuestion to help them articulate what matters most
- Use AskUserQuestion for decision gate (ready / ask more / let me add context)
4. Hand off to /gsd:new-milestone with gathered context
**CRITICAL: ALL questions use AskUserQuestion. Never ask inline text questions.**
</process>
<success_criteria>
- Project state loaded and presented
- Previous milestone context summarized
- Milestone scope gathered through adaptive questioning
- Context handed off to /gsd:new-milestone
</success_criteria>

View File

@@ -76,14 +76,6 @@ Map an existing codebase for brownfield projects.
Usage: `/gsd:map-codebase`
### Standalone Commands (deprecated, kept for mid-project use)
These commands are now integrated into `/gsd:new-project` but remain available for mid-project adjustments:
**`/gsd:research-project`** — Re-research a domain (integrated into new-project Phase 6)
**`/gsd:define-requirements`** — Redefine requirements (integrated into new-project Phase 7)
**`/gsd:create-roadmap`** — Recreate roadmap (integrated into new-project Phase 8)
### Phase Planning
**`/gsd:discuss-phase <number>`**
@@ -171,21 +163,15 @@ Result: Phase 17 deleted, phases 18-20 become 17-19
### Milestone Management
**`/gsd:discuss-milestone`**
Figure out what you want to build in the next milestone.
- Reviews what shipped in previous milestone
- Helps you identify features to add, improve, or fix
- Routes to /gsd:new-milestone when ready
Usage: `/gsd:discuss-milestone`
**`/gsd:new-milestone <name>`**
Create a new milestone with phases for an existing project.
Start a new milestone through unified flow.
- Adds milestone section to ROADMAP.md
- Creates phase directories
- Updates STATE.md for new milestone
- Deep questioning to understand what you're building next
- Optional domain research (spawns 4 parallel researcher agents)
- Requirements definition with scoping
- Roadmap creation with phase breakdown
Mirrors `/gsd:new-project` flow for brownfield projects (existing PROJECT.md).
Usage: `/gsd:new-milestone "v2.0 Features"`
@@ -366,7 +352,8 @@ Change anytime by editing `.planning/config.json`
```
/gsd:complete-milestone 1.0.0
/gsd:new-milestone # Start next milestone
/clear
/gsd:new-milestone # Start next milestone (questioning → research → requirements → roadmap)
```
**Capturing ideas during work:**

View File

@@ -6,23 +6,40 @@ allowed-tools:
- Read
- Write
- Bash
- Task
- AskUserQuestion
- Glob
---
<objective>
Start a new milestone by updating PROJECT.md with new goals, then routing to the requirements → roadmap cycle.
This is the brownfield equivalent of new-project. The project exists, PROJECT.md has history. This command gathers "what's next" and updates PROJECT.md to reflect the new milestone's goals.
Start a new milestone through unified flow: questioning → research (optional) → requirements → roadmap.
This is the brownfield equivalent of new-project. The project exists, PROJECT.md has history. This command gathers "what's next" and takes you through the full cycle.
**Creates/Updates:**
- `.planning/PROJECT.md` — updated with new milestone goals
- `.planning/research/` — domain research (optional)
- `.planning/REQUIREMENTS.md` — scoped requirements
- `.planning/ROADMAP.md` — phase structure
- `.planning/STATE.md` — updated project memory
- `.planning/phases/` — phase directories
**After this command:** Run `/gsd:plan-phase [N]` to start execution.
Output: Updated PROJECT.md, routes to research-project or define-requirements
</objective>
<execution_context>
@~/.claude/get-shit-done/references/questioning.md
@~/.claude/get-shit-done/references/ui-brand.md
@~/.claude/get-shit-done/templates/project.md
@~/.claude/get-shit-done/templates/requirements.md
</execution_context>
<context>
Milestone name: $ARGUMENTS (optional - will prompt if not provided)
**Load project context:**
@@ -31,111 +48,672 @@ Milestone name: $ARGUMENTS (optional - will prompt if not provided)
@.planning/MILESTONES.md
@.planning/config.json
**Load milestone context (if exists, from /gsd:discuss-milestone):**
@.planning/MILESTONE-CONTEXT.md
</context>
<process>
1. **Load context:**
- Read PROJECT.md (existing project, Validated requirements, decisions)
- Read MILESTONES.md (what shipped previously)
- Read STATE.md (pending todos, blockers)
- Check for MILESTONE-CONTEXT.md (from /gsd:discuss-milestone)
## Phase 1: Validate
2. **Gather milestone goals:**
**MANDATORY FIRST STEP — Execute these checks before ANY user interaction:**
**If MILESTONE-CONTEXT.md exists:**
- Use features and scope from discuss-milestone
- Present summary for confirmation
**If no context file:**
- Present what shipped in last milestone
- Ask: "What do you want to build next?"
- Use AskUserQuestion to explore features
- Probe for priorities, constraints, scope
3. **Determine milestone version:**
- Parse last version from MILESTONES.md
- Suggest next version (v1.0 → v1.1, or v2.0 for major)
- Confirm with user
4. **Update PROJECT.md:**
Add/update these sections:
```markdown
## Current Milestone: v[X.Y] [Name]
**Goal:** [One sentence describing milestone focus]
**Target features:**
- [Feature 1]
- [Feature 2]
- [Feature 3]
```
Update Active requirements section with new goals.
Update "Last updated" footer.
5. **Update STATE.md:**
```markdown
## Current Position
Phase: Not started (run /gsd:create-roadmap)
Plan: —
Status: Defining requirements
Last activity: [today] — Milestone v[X.Y] started
```
Keep Accumulated Context section (decisions, blockers) from previous milestone.
6. **Cleanup:**
- Delete MILESTONE-CONTEXT.md if exists (consumed)
7. **Git commit:**
1. **Verify project exists:**
```bash
git add .planning/PROJECT.md .planning/STATE.md
git commit -m "docs: start milestone v[X.Y] [Name]"
[ -f .planning/PROJECT.md ] || { echo "ERROR: No PROJECT.md. Run /gsd:new-project first."; exit 1; }
```
8. **Route to next step:**
2. **Check for active milestone (ROADMAP.md exists):**
```bash
[ -f .planning/ROADMAP.md ] && echo "ACTIVE_MILESTONE" || echo "READY_FOR_NEW"
```
Milestone v[X.Y] [Name] initialized.
PROJECT.md updated with new goals.
**If ACTIVE_MILESTONE:**
Use AskUserQuestion:
- header: "Active Milestone"
- question: "A milestone is in progress. What would you like to do?"
- options:
- "Complete current first" — Run /gsd:complete-milestone
- "Continue anyway" — Start new milestone (will archive current)
---
If "Complete current first": Exit with routing to `/gsd:complete-milestone`
If "Continue anyway": Continue to Phase 2
## ▶ Next Up
Choose your path:
**Option A: Research first** (new domains/capabilities)
Research ecosystem before scoping. Discovers patterns, expected features, architecture approaches.
`/gsd:research-project`
**Option B: Define requirements directly** (familiar territory)
Skip research, define requirements from what you know.
`/gsd:define-requirements`
<sub>`/clear` first → fresh context window</sub>
---
3. **Load previous milestone context:**
```bash
cat .planning/MILESTONES.md 2>/dev/null || echo "NO_MILESTONES"
cat .planning/STATE.md
```
## Phase 2: Present Context
**Display stage banner:**
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► NEW MILESTONE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
**Present what shipped:**
```
Last milestone: v[X.Y] [Name] (shipped [DATE])
Key accomplishments:
- [From MILESTONES.md]
- [From MILESTONES.md]
- [From MILESTONES.md]
Validated requirements:
- [From PROJECT.md Validated section]
Pending todos:
- [From STATE.md if any]
```
## Phase 3: Deep Questioning
**Display stage banner:**
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► QUESTIONING
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
**Open the conversation:**
Ask inline (freeform, NOT AskUserQuestion):
"What do you want to build next?"
Wait for their response. This gives you the context needed to ask intelligent follow-up questions.
**Follow the thread:**
Based on what they said, ask follow-up questions that dig into their response. Use AskUserQuestion with options that probe what they mentioned — interpretations, clarifications, concrete examples.
Keep following threads. Each answer opens new threads to explore. Ask about:
- What excited them
- What problem sparked this
- What they mean by vague terms
- What it would actually look like
- What's already decided
Consult `questioning.md` for techniques:
- Challenge vagueness
- Make abstract concrete
- Surface assumptions
- Find edges
- Reveal motivation
**Decision gate:**
When you could update PROJECT.md with clear new goals, use AskUserQuestion:
- header: "Ready?"
- question: "I think I understand what you're after. Ready to update PROJECT.md?"
- options:
- "Update PROJECT.md" — Let's move forward
- "Keep exploring" — I want to share more / ask me more
If "Keep exploring" — ask what they want to add, or identify gaps and probe naturally.
Loop until "Update PROJECT.md" selected.
## Phase 4: Determine Milestone Version
Parse last version from MILESTONES.md and suggest next:
Use AskUserQuestion:
- header: "Version"
- question: "What version is this milestone?"
- options:
- "v[X.Y+0.1] (patch)" — Minor update: [suggested name]
- "v[X+1].0 (major)" — Major release
- "Custom" — I'll specify
## Phase 5: Update PROJECT.md
Update `.planning/PROJECT.md` with new milestone section:
```markdown
## Current Milestone: v[X.Y] [Name]
**Goal:** [One sentence describing milestone focus]
**Target features:**
- [Feature 1]
- [Feature 2]
- [Feature 3]
```
Update Active requirements section with new goals (keep Validated section intact).
Update "Last updated" footer.
**Commit PROJECT.md:**
```bash
git add .planning/PROJECT.md
git commit -m "$(cat <<'EOF'
docs: start milestone v[X.Y] [Name]
[One-liner describing milestone focus]
EOF
)"
```
## Phase 6: Research Decision
Use AskUserQuestion:
- header: "Research"
- question: "Research the domain ecosystem before defining requirements?"
- options:
- "Research first (Recommended)" — Discover patterns, expected features, architecture
- "Skip research" — I know this domain well, go straight to requirements
**If "Research first":**
Display stage banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► RESEARCHING
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Researching [domain] ecosystem...
```
Create research directory:
```bash
mkdir -p .planning/research
```
**Milestone context is "subsequent"** — Research focuses on new features, not re-researching validated requirements.
Display spawning indicator:
```
◆ Spawning 4 researchers in parallel...
→ Stack research
→ Features research
→ Architecture research
→ Pitfalls research
```
Spawn 4 parallel gsd-project-researcher agents with context:
```
Task(prompt="
<research_type>
Project Research — Stack dimension for [domain].
</research_type>
<milestone_context>
Subsequent milestone (v[X.Y]).
Research what's needed to add [target features] to an existing [domain] app. Don't re-research the existing system.
</milestone_context>
<question>
What's needed to add [target features] to [domain]?
</question>
<project_context>
[PROJECT.md summary - core value, validated requirements, new goals]
</project_context>
<downstream_consumer>
Your STACK.md feeds into roadmap creation. Be prescriptive:
- Specific libraries with versions
- Clear rationale for each choice
- What NOT to use and why
</downstream_consumer>
<output>
Write to: .planning/research/STACK.md
Use template: ~/.claude/get-shit-done/templates/research-project/STACK.md
</output>
", subagent_type="gsd-project-researcher", description="Stack research")
Task(prompt="
<research_type>
Project Research — Features dimension for [domain].
</research_type>
<milestone_context>
Subsequent milestone (v[X.Y]).
How do [target features] typically work? What's expected behavior?
</milestone_context>
<question>
What features are expected for [target features]?
</question>
<project_context>
[PROJECT.md summary]
</project_context>
<downstream_consumer>
Your FEATURES.md feeds into requirements definition. Categorize clearly:
- Table stakes (must have)
- Differentiators (competitive advantage)
- Anti-features (things to deliberately NOT build)
</downstream_consumer>
<output>
Write to: .planning/research/FEATURES.md
Use template: ~/.claude/get-shit-done/templates/research-project/FEATURES.md
</output>
", subagent_type="gsd-project-researcher", description="Features research")
Task(prompt="
<research_type>
Project Research — Architecture dimension for [domain].
</research_type>
<milestone_context>
Subsequent milestone (v[X.Y]).
How do [target features] integrate with existing [domain] architecture?
</milestone_context>
<question>
How should [target features] integrate with the existing system?
</question>
<project_context>
[PROJECT.md summary]
</project_context>
<downstream_consumer>
Your ARCHITECTURE.md informs phase structure in roadmap. Include:
- Component boundaries (what talks to what)
- Data flow (how information moves)
- Suggested build order (dependencies between components)
</downstream_consumer>
<output>
Write to: .planning/research/ARCHITECTURE.md
Use template: ~/.claude/get-shit-done/templates/research-project/ARCHITECTURE.md
</output>
", subagent_type="gsd-project-researcher", description="Architecture research")
Task(prompt="
<research_type>
Project Research — Pitfalls dimension for [domain].
</research_type>
<milestone_context>
Subsequent milestone (v[X.Y]).
What are common mistakes when adding [target features] to [domain]?
</milestone_context>
<question>
What pitfalls should we avoid when adding [target features]?
</question>
<project_context>
[PROJECT.md summary]
</project_context>
<downstream_consumer>
Your PITFALLS.md prevents mistakes in roadmap/planning. For each pitfall:
- Warning signs (how to detect early)
- Prevention strategy (how to avoid)
- Which phase should address it
</downstream_consumer>
<output>
Write to: .planning/research/PITFALLS.md
Use template: ~/.claude/get-shit-done/templates/research-project/PITFALLS.md
</output>
", subagent_type="gsd-project-researcher", description="Pitfalls research")
```
After all 4 agents complete, spawn synthesizer:
```
Task(prompt="
<task>
Synthesize research outputs into SUMMARY.md.
</task>
<research_files>
Read these files:
- .planning/research/STACK.md
- .planning/research/FEATURES.md
- .planning/research/ARCHITECTURE.md
- .planning/research/PITFALLS.md
</research_files>
<output>
Write to: .planning/research/SUMMARY.md
Use template: ~/.claude/get-shit-done/templates/research-project/SUMMARY.md
Commit after writing.
</output>
", subagent_type="gsd-research-synthesizer", description="Synthesize research")
```
Display research complete:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► RESEARCH COMPLETE ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
## Key Findings
**Stack:** [from SUMMARY.md]
**Table Stakes:** [from SUMMARY.md]
**Watch Out For:** [from SUMMARY.md]
Files: `.planning/research/`
```
**If "Skip research":** Continue to Phase 7.
## Phase 7: Define Requirements
Display stage banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► DEFINING REQUIREMENTS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
**Load context:**
Read PROJECT.md and extract:
- Core value (the ONE thing that must work)
- New milestone goals
- Validated requirements (what already works)
- Stated constraints
**If research exists:** Read research/FEATURES.md and extract feature categories.
**Present features by category:**
```
Here are the features for [milestone focus]:
## [Category 1]
**Table stakes:**
- [Feature]
- [Feature]
**Differentiators:**
- [Feature]
**Research notes:** [any relevant notes]
---
## [Next Category]
...
```
**If no research:** Gather requirements through conversation instead.
Ask: "What are the main things users need to be able to do in this milestone?"
For each capability mentioned:
- Ask clarifying questions to make it specific
- Probe for related capabilities
- Group into categories
**Scope each category:**
For each category, use AskUserQuestion:
- header: "[Category name]"
- question: "Which [category] features are in this milestone?"
- multiSelect: true
- options:
- "[Feature 1]" — [brief description]
- "[Feature 2]" — [brief description]
- "None for this milestone" — Defer
Track responses:
- Selected features → v1 requirements
- Unselected table stakes → v2 (users expect these)
- Unselected differentiators → out of scope
**Identify gaps:**
Use AskUserQuestion:
- header: "Additions"
- question: "Any requirements research missed? (Features specific to your vision)"
- options:
- "No, research covered it" — Proceed
- "Yes, let me add some" — Capture additions
**Validate core value:**
Cross-check requirements against Core Value from PROJECT.md. If gaps detected, surface them.
**Generate REQUIREMENTS.md:**
Create `.planning/REQUIREMENTS.md` with:
- v1 Requirements grouped by category (checkboxes, REQ-IDs)
- v2 Requirements (deferred)
- Out of Scope (explicit exclusions with reasoning)
- Traceability section (empty, filled by roadmap)
**REQ-ID format:** `[CATEGORY]-[NUMBER]` (AUTH-01, CONTENT-02)
**Requirement quality criteria:**
Good requirements are:
- **Specific and testable:** "User can reset password via email link" (not "Handle password reset")
- **User-centric:** "User can X" (not "System does Y")
- **Atomic:** One capability per requirement
- **Independent:** Minimal dependencies on other requirements
**Present full requirements list for confirmation:**
Show every requirement (not counts) for user confirmation:
```
## v1 Requirements
### [Category]
- [ ] **[CAT]-01**: [Requirement description]
- [ ] **[CAT]-02**: [Requirement description]
[... full list ...]
---
Does this capture what you're building? (yes / adjust)
```
If "adjust": Return to scoping.
**Commit requirements:**
```bash
git add .planning/REQUIREMENTS.md
git commit -m "$(cat <<'EOF'
docs: define v[X.Y] requirements
[X] requirements across [N] categories
[Y] requirements deferred to v2
EOF
)"
```
## Phase 8: Create Roadmap
Display stage banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► CREATING ROADMAP
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◆ Spawning roadmapper...
```
**Calculate starting phase number:**
```bash
# Find highest existing phase number
ls -d .planning/phases/[0-9]*-* 2>/dev/null | sort -V | tail -1 | grep -oE '[0-9]+' | head -1
```
If phases exist: New phases start at last + 1
If no phases: Start at Phase 1
Spawn gsd-roadmapper agent with context:
```
Task(prompt="
<planning_context>
**Project:**
@.planning/PROJECT.md
**Requirements:**
@.planning/REQUIREMENTS.md
**Research (if exists):**
@.planning/research/SUMMARY.md
**Config:**
@.planning/config.json
**Starting phase number:** [N]
</planning_context>
<instructions>
Create roadmap:
1. Derive phases from requirements (don't impose structure)
2. Map every v1 requirement to exactly one phase
3. Derive 2-5 success criteria per phase (observable user behaviors)
4. Validate 100% coverage
5. Write files immediately (ROADMAP.md, STATE.md, phase directories, update REQUIREMENTS.md traceability)
6. Return ROADMAP CREATED with summary
Write files first, then return.
</instructions>
", subagent_type="gsd-roadmapper", description="Create roadmap")
```
**Handle roadmapper return:**
**If `## ROADMAP BLOCKED`:**
- Present blocker information
- Work with user to resolve
- Re-spawn when resolved
**If `## ROADMAP CREATED`:**
Read the created ROADMAP.md and present it inline.
**Ask for approval:**
Use AskUserQuestion:
- header: "Roadmap"
- question: "Does this roadmap structure work for you?"
- options:
- "Approve" — Commit and continue
- "Adjust phases" — Tell me what to change
- "Review full file" — Show raw ROADMAP.md
**If "Approve":** Continue to commit.
**If "Adjust phases":**
- Get user's adjustment notes
- Re-spawn roadmapper with revision context
- Loop until approved
**Commit roadmap:**
```bash
git add .planning/ROADMAP.md .planning/STATE.md .planning/REQUIREMENTS.md .planning/phases/
git commit -m "$(cat <<'EOF'
docs: create v[X.Y] roadmap ([N] phases)
Phases:
1. [phase-name]: [requirements covered]
2. [phase-name]: [requirements covered]
...
All v1 requirements mapped to phases.
EOF
)"
```
## Phase 9: Done
Present completion with next steps:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► MILESTONE INITIALIZED ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
**v[X.Y] [Name]**
| Artifact | Location |
|----------------|-----------------------------
| Project | `.planning/PROJECT.md` |
| Research | `.planning/research/` |
| Requirements | `.planning/REQUIREMENTS.md` |
| Roadmap | `.planning/ROADMAP.md` |
**[N] phases** | **[X] requirements** | Ready to build ✓
───────────────────────────────────────────────────────────────
## ▶ Next Up
**Phase [N]: [Phase Name]** — [Goal from ROADMAP.md]
`/gsd:discuss-phase [N]` — gather context and clarify approach
<sub>`/clear` first → fresh context window</sub>
---
**Also available:**
- `/gsd:plan-phase [N]` — skip discussion, plan directly
───────────────────────────────────────────────────────────────
```
</process>
<output>
- `.planning/PROJECT.md` (updated)
- `.planning/research/` (if research selected)
- `STACK.md`
- `FEATURES.md`
- `ARCHITECTURE.md`
- `PITFALLS.md`
- `SUMMARY.md`
- `.planning/REQUIREMENTS.md`
- `.planning/ROADMAP.md`
- `.planning/STATE.md`
- `.planning/phases/XX-name/` directories
</output>
<success_criteria>
- PROJECT.md updated with Current Milestone section
- Active requirements reflect new milestone goals
- STATE.md reset for new milestone
- MILESTONE-CONTEXT.md consumed and deleted (if existed)
- Git commit made
- User routed to define-requirements (or research-project)
- [ ] Project validated (PROJECT.md exists)
- [ ] Previous milestone context presented
- [ ] Deep questioning completed (threads followed)
- [ ] Milestone version determined
- [ ] PROJECT.md updated with new milestone goals → **committed**
- [ ] Research completed (if selected) → **committed**
- [ ] Requirements gathered and scoped
- [ ] REQUIREMENTS.md created with REQ-IDs → **committed**
- [ ] gsd-roadmapper spawned with context
- [ ] Roadmap files written immediately
- [ ] User feedback incorporated (if any)
- [ ] ROADMAP.md, STATE.md, phase directories → **committed**
- [ ] User knows next step is `/gsd:plan-phase [N]`
</success_criteria>

View File

@@ -323,21 +323,12 @@ Ready to plan the next milestone.
## ▶ Next Up
**Discuss Next Milestone** — figure out what to build next
**Start Next Milestone** — questioning → research → requirements → roadmap
`/gsd:discuss-milestone`
`/gsd:new-milestone`
<sub>`/clear` first → fresh context window</sub>
---
**Next milestone flow:**
1. `/gsd:discuss-milestone` — thinking partner, creates context file
2. `/gsd:new-milestone` — update PROJECT.md with new goals
3. `/gsd:research-project` — (optional) research ecosystem
4. `/gsd:define-requirements` — scope what to build
5. `/gsd:create-roadmap` — plan how to build it
---
```

View File

@@ -1,323 +0,0 @@
---
name: gsd:research-project
description: Research domain ecosystem before creating roadmap
allowed-tools:
- Read
- Write
- Bash
- Task
- AskUserQuestion
---
<!--
DEPRECATED: This command is now integrated into /gsd:new-project
The unified /gsd:new-project flow includes optional research as Phase 6.
This standalone command is kept for users who want to:
- Re-research a domain mid-project
- Research without running full new-project flow
- Add research after skipping it initially
For new projects, use /gsd:new-project instead.
Deprecated: 2026-01-16
-->
<objective>
Research domain ecosystem. Spawns 4 parallel gsd-project-researcher agents for comprehensive coverage.
**Orchestrator role:** Analyze project, generate research questions, spawn 4 parallel agents, synthesize SUMMARY.md.
**Why subagents:** Research burns context fast. Fresh 200k context per domain. Main context stays lean.
**Note:** For new projects, `/gsd:new-project` includes research as an optional step. Use this command to re-research or add research later.
</objective>
<context>
@.planning/PROJECT.md
@.planning/config.json (if exists)
</context>
<process>
## 1. Validate Prerequisites
```bash
[ -f .planning/PROJECT.md ] || { echo "ERROR: No PROJECT.md. Run /gsd:new-project first."; exit 1; }
[ -f .planning/ROADMAP.md ] && echo "WARNING: ROADMAP.md exists. Research is typically done before roadmap."
[ -d .planning/research ] && echo "RESEARCH_EXISTS" || echo "NO_RESEARCH"
```
## 2. Handle Existing Research
**If RESEARCH_EXISTS:** Use AskUserQuestion (View existing / Replace / Cancel)
## 3. Analyze Project
Read PROJECT.md, extract domain/stack/core value/constraints. Present for approval:
```
Domain analysis:
- Type: [domain]
- Stack: [stated or TBD]
- Core: [core value]
Does this look right? (yes / adjust)
```
## 4. Generate Research Questions
| Dimension | Question |
|-----------|----------|
| Stack | "What's the standard 2025 stack for [domain]?" |
| Features | "What features do [domain] products have?" |
| Architecture | "How are [domain] systems structured?" |
| Pitfalls | "What do [domain] projects get wrong?" |
Present for approval.
## 5. Spawn Research Agents
```bash
mkdir -p .planning/research
```
**Determine milestone context:**
- If no "Validated" requirements in REQUIREMENTS.md → Greenfield (v1.0)
- If "Validated" requirements exist → Subsequent milestone (v1.1+)
Spawn all 4 in parallel with rich context:
```
Task(prompt="
<research_type>
Project Research — Stack dimension for [domain].
</research_type>
<milestone_context>
{greenfield OR subsequent}
Greenfield: Research the standard stack for building [domain] from scratch.
Subsequent: Research what's needed to add [target features] to an existing [domain] app. Don't re-research the existing system.
</milestone_context>
<question>
[stack question from step 4]
</question>
<project_context>
[PROJECT.md summary]
</project_context>
<downstream_consumer>
Your STACK.md feeds into /gsd:create-roadmap. Be prescriptive:
- Specific libraries with versions
- Clear rationale for each choice
- What NOT to use and why
</downstream_consumer>
<quality_gate>
- [ ] Versions are current (not Claude's training data)
- [ ] Rationale explains WHY, not just WHAT
- [ ] Confidence levels assigned
</quality_gate>
<output>
Write to: .planning/research/STACK.md
Use template: ~/.claude/get-shit-done/templates/research-project/STACK.md
</output>
", subagent_type="gsd-project-researcher", description="Stack research")
Task(prompt="
<research_type>
Project Research — Features dimension for [domain].
</research_type>
<milestone_context>
{greenfield OR subsequent}
Greenfield: What features do [domain] products have? What's table stakes vs differentiating?
Subsequent: How do [target features] typically work? What's expected behavior?
</milestone_context>
<question>
[features question from step 4]
</question>
<project_context>
[PROJECT.md summary]
</project_context>
<downstream_consumer>
Your FEATURES.md feeds into /gsd:define-requirements. Categorize clearly:
- Table stakes (must have or users leave)
- Differentiators (competitive advantage)
- Anti-features (things to deliberately NOT build)
</downstream_consumer>
<quality_gate>
- [ ] Categories are clear
- [ ] Complexity noted for each
- [ ] Dependencies between features identified
</quality_gate>
<output>
Write to: .planning/research/FEATURES.md
Use template: ~/.claude/get-shit-done/templates/research-project/FEATURES.md
</output>
", subagent_type="gsd-project-researcher", description="Features research")
Task(prompt="
<research_type>
Project Research — Architecture dimension for [domain].
</research_type>
<milestone_context>
{greenfield OR subsequent}
Greenfield: How are [domain] systems typically structured? What are major components?
Subsequent: How do [target features] integrate with existing [domain] architecture?
</milestone_context>
<question>
[architecture question from step 4]
</question>
<project_context>
[PROJECT.md summary]
</project_context>
<downstream_consumer>
Your ARCHITECTURE.md informs phase structure in roadmap. Include:
- Component boundaries (what talks to what)
- Data flow (how information moves)
- Suggested build order (dependencies between components)
</downstream_consumer>
<quality_gate>
- [ ] Components clearly defined
- [ ] Boundaries explicit
- [ ] Build order implications noted
</quality_gate>
<output>
Write to: .planning/research/ARCHITECTURE.md
Use template: ~/.claude/get-shit-done/templates/research-project/ARCHITECTURE.md
</output>
", subagent_type="gsd-project-researcher", description="Architecture research")
Task(prompt="
<research_type>
Project Research — Pitfalls dimension for [domain].
</research_type>
<milestone_context>
{greenfield OR subsequent}
Greenfield: What do [domain] projects commonly get wrong? Critical mistakes?
Subsequent: What are common mistakes when adding [target features] to [domain]?
</milestone_context>
<question>
[pitfalls question from step 4]
</question>
<project_context>
[PROJECT.md summary]
</project_context>
<downstream_consumer>
Your PITFALLS.md prevents mistakes in roadmap/planning. For each pitfall:
- Warning signs (how to detect early)
- Prevention strategy (how to avoid)
- Which phase should address it
</downstream_consumer>
<quality_gate>
- [ ] Pitfalls are specific, not generic
- [ ] Prevention is actionable
- [ ] Phase mapping included
</quality_gate>
<output>
Write to: .planning/research/PITFALLS.md
Use template: ~/.claude/get-shit-done/templates/research-project/PITFALLS.md
</output>
", subagent_type="gsd-project-researcher", description="Pitfalls research")
```
**Announce:** "Spawning 4 research agents... may take 2-3 minutes."
## 6. Synthesize Results
After all agents complete, read their outputs and write `.planning/research/SUMMARY.md`:
- Read template: `~/.claude/get-shit-done/templates/research-project/SUMMARY.md`
- Synthesize executive summary from all 4 files
- Add confidence assessment
**Critical: Include "Implications for Roadmap" section:**
```markdown
## Implications for Roadmap
Based on research, suggested phase structure:
1. **[Phase name]** — [rationale from research]
- Addresses: [features from FEATURES.md]
- Avoids: [pitfall from PITFALLS.md]
- Uses: [stack element from STACK.md]
2. **[Phase name]** — [rationale from research]
- Implements: [architecture component from ARCHITECTURE.md]
...
**Phase ordering rationale:**
- [Why this order based on dependencies discovered in ARCHITECTURE.md]
- [Why this grouping based on PITFALLS.md prevention strategies]
**Research flags for phases:**
- Phase [X]: Likely needs deeper research (reason)
- Phase [Y]: Standard patterns, unlikely to need research
```
This section directly feeds into `/gsd:create-roadmap`.
## 7. Commit Research
```bash
git add .planning/research/
git commit -m "docs: research [domain] ecosystem
Key findings:
- Stack: [one-liner]
- Architecture: [one-liner]
- Critical pitfall: [one-liner]"
```
## 8. Present Results
```
Research complete:
Files: SUMMARY.md, STACK.md, FEATURES.md, ARCHITECTURE.md, PITFALLS.md
Key findings:
- Stack: [one-liner]
- Architecture: [one-liner]
- Critical pitfall: [one-liner]
---
## > Next Up
**Define requirements** - `/gsd:define-requirements`
<sub>`/clear` first</sub>
---
```
</process>
<success_criteria>
- [ ] PROJECT.md validated
- [ ] Domain identified and approved
- [ ] 4 gsd-project-researcher agents spawned in parallel
- [ ] All research files created
- [ ] SUMMARY.md synthesized with roadmap implications
- [ ] Research committed
</success_criteria>