get-shit-done-cc 1.5.27 → 1.5.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/agents/gsd-codebase-mapper.md +1 -1
  2. package/agents/gsd-executor.md +1 -4
  3. package/agents/gsd-phase-researcher.md +6 -4
  4. package/agents/gsd-plan-checker.md +3 -2
  5. package/agents/gsd-planner.md +6 -2
  6. package/bin/install.js +13 -109
  7. package/commands/gsd/audit-milestone.md +1 -1
  8. package/commands/gsd/create-roadmap.md +0 -2
  9. package/commands/gsd/define-requirements.md +0 -1
  10. package/commands/gsd/discuss-milestone.md +0 -1
  11. package/commands/gsd/discuss-phase.md +24 -16
  12. package/commands/gsd/execute-phase.md +0 -1
  13. package/commands/gsd/help.md +6 -20
  14. package/commands/gsd/new-milestone.md +2 -0
  15. package/commands/gsd/plan-milestone-gaps.md +1 -2
  16. package/commands/gsd/plan-phase.md +25 -13
  17. package/commands/gsd/progress.md +3 -3
  18. package/commands/gsd/research-phase.md +13 -7
  19. package/get-shit-done/references/continuation-format.md +3 -3
  20. package/get-shit-done/templates/context.md +143 -13
  21. package/get-shit-done/templates/phase-prompt.md +0 -1
  22. package/get-shit-done/templates/planner-subagent-prompt.md +1 -1
  23. package/get-shit-done/workflows/discovery-phase.md +2 -2
  24. package/get-shit-done/workflows/discuss-phase.md +115 -55
  25. package/get-shit-done/workflows/execute-phase.md +3 -1
  26. package/get-shit-done/workflows/execute-plan.md +2 -2
  27. package/get-shit-done/workflows/map-codebase.md +2 -2
  28. package/get-shit-done/workflows/resume-project.md +5 -7
  29. package/get-shit-done/workflows/verify-phase.md +4 -4
  30. package/get-shit-done/workflows/verify-work.md +3 -2
  31. package/hooks/gsd-check-update.js +51 -0
  32. package/hooks/statusline.js +84 -0
  33. package/package.json +1 -1
  34. package/commands/gsd/execute-plan.md +0 -400
  35. package/get-shit-done/references/debugging/debugging-mindset.md +0 -11
  36. package/get-shit-done/references/debugging/hypothesis-testing.md +0 -11
  37. package/get-shit-done/references/debugging/investigation-techniques.md +0 -11
  38. package/get-shit-done/references/debugging/verification-patterns.md +0 -11
  39. package/get-shit-done/references/debugging/when-to-research.md +0 -11
  40. package/get-shit-done/references/goal-backward.md +0 -33
  41. package/get-shit-done/references/plan-format.md +0 -32
  42. package/get-shit-done/references/principles.md +0 -29
  43. package/get-shit-done/references/research-pitfalls.md +0 -233
  44. package/get-shit-done/references/scope-estimation.md +0 -32
  45. package/get-shit-done/templates/research-subagent-prompt.md +0 -92
  46. package/get-shit-done/workflows/create-milestone.md +0 -203
  47. package/get-shit-done/workflows/debug.md +0 -14
  48. package/get-shit-done/workflows/plan-phase.md +0 -41
  49. package/get-shit-done/workflows/research-phase.md +0 -17
  50. package/get-shit-done/workflows/research-project.md +0 -23
  51. package/hooks/gsd-check-update.sh +0 -20
  52. package/hooks/gsd-notify.sh +0 -59
  53. package/hooks/statusline.sh +0 -58
@@ -31,7 +31,7 @@ Your job: Explore thoroughly, then write document(s) directly. Return confirmati
31
31
  | refactor, cleanup | CONCERNS.md, ARCHITECTURE.md |
32
32
  | setup, config | STACK.md, STRUCTURE.md |
33
33
 
34
- **`/gsd:execute-plan`** references codebase docs to:
34
+ **`/gsd:execute-phase`** references codebase docs to:
35
35
  - Follow existing conventions when writing code
36
36
  - Know where to place new files (STRUCTURE.md)
37
37
  - Match testing patterns (TESTING.md)
@@ -8,10 +8,7 @@ color: yellow
8
8
  <role>
9
9
  You are a GSD plan executor. You execute PLAN.md files atomically, creating per-task commits, handling deviations automatically, pausing at checkpoints, and producing SUMMARY.md files.
10
10
 
11
- You are spawned by either:
12
-
13
- - `/gsd:execute-plan` command (single plan execution)
14
- - `/gsd:execute-phase` orchestrator (parallel plan execution)
11
+ You are spawned by `/gsd:execute-phase` orchestrator.
15
12
 
16
13
  Your job: Execute the plan completely, commit each task, create SUMMARY.md, update STATE.md.
17
14
  </role>
@@ -444,7 +444,9 @@ Orchestrator provides:
444
444
  **Load phase context (MANDATORY):**
445
445
 
446
446
  ```bash
447
- PHASE_DIR=$(ls -d .planning/phases/${PHASE}-* 2>/dev/null | head -1)
447
+ # Match both zero-padded (05-*) and unpadded (5-*) folders
448
+ PADDED_PHASE=$(printf "%02d" ${PHASE} 2>/dev/null || echo "${PHASE}")
449
+ PHASE_DIR=$(ls -d .planning/phases/${PADDED_PHASE}-* .planning/phases/${PHASE}-* 2>/dev/null | head -1)
448
450
 
449
451
  # Read CONTEXT.md if exists (from /gsd:discuss-phase)
450
452
  cat "${PHASE_DIR}"/*-CONTEXT.md 2>/dev/null
@@ -518,14 +520,14 @@ Run through verification protocol checklist:
518
520
 
519
521
  Use the output format template. Populate all sections with verified findings.
520
522
 
521
- Write to: `${PHASE_DIR}/${PHASE}-RESEARCH.md`
523
+ Write to: `${PHASE_DIR}/${PADDED_PHASE}-RESEARCH.md`
522
524
 
523
525
  Where `PHASE_DIR` is the full path (e.g., `.planning/phases/01-foundation`)
524
526
 
525
527
  ## Step 6: Commit Research
526
528
 
527
529
  ```bash
528
- git add "${PHASE_DIR}/${PHASE}-RESEARCH.md"
530
+ git add "${PHASE_DIR}/${PADDED_PHASE}-RESEARCH.md"
529
531
  git commit -m "docs(${PHASE}): research phase domain
530
532
 
531
533
  Phase ${PHASE}: ${PHASE_NAME}
@@ -558,7 +560,7 @@ When research finishes successfully:
558
560
 
559
561
  ### File Created
560
562
 
561
- `${PHASE_DIR}/${PHASE}-RESEARCH.md`
563
+ `${PHASE_DIR}/${PADDED_PHASE}-RESEARCH.md`
562
564
 
563
565
  ### Confidence Assessment
564
566
 
@@ -244,8 +244,9 @@ issue:
244
244
  Gather verification context from the phase directory and project state.
245
245
 
246
246
  ```bash
247
- # Phase directory (provided in prompt)
248
- PHASE_DIR=".planning/phases/${PHASE_ARG}"
247
+ # Normalize phase and find directory
248
+ PADDED_PHASE=$(printf "%02d" ${PHASE_ARG} 2>/dev/null || echo "${PHASE_ARG}")
249
+ PHASE_DIR=$(ls -d .planning/phases/${PADDED_PHASE}-* .planning/phases/${PHASE_ARG}-* 2>/dev/null | head -1)
249
250
 
250
251
  # List all PLAN.md files
251
252
  ls "$PHASE_DIR"/*-PLAN.md 2>/dev/null
@@ -808,7 +808,9 @@ Triggered by `--gaps` flag. Creates plans to address verification or UAT failure
808
808
  **1. Find gap sources:**
809
809
 
810
810
  ```bash
811
- PHASE_DIR=$(ls -d .planning/phases/${PHASE_ARG}* 2>/dev/null | head -1)
811
+ # Match both zero-padded (05-*) and unpadded (5-*) folders
812
+ PADDED_PHASE=$(printf "%02d" ${PHASE_ARG} 2>/dev/null || echo "${PHASE_ARG}")
813
+ PHASE_DIR=$(ls -d .planning/phases/${PADDED_PHASE}-* .planning/phases/${PHASE_ARG}-* 2>/dev/null | head -1)
812
814
 
813
815
  # Check for VERIFICATION.md (code verification gaps)
814
816
  ls "$PHASE_DIR"/*-VERIFICATION.md 2>/dev/null
@@ -1076,7 +1078,9 @@ Understand:
1076
1078
  **Load phase-specific context files (MANDATORY):**
1077
1079
 
1078
1080
  ```bash
1079
- PHASE_DIR=$(ls -d .planning/phases/${PHASE}-* 2>/dev/null | head -1)
1081
+ # Match both zero-padded (05-*) and unpadded (5-*) folders
1082
+ PADDED_PHASE=$(printf "%02d" ${PHASE} 2>/dev/null || echo "${PHASE}")
1083
+ PHASE_DIR=$(ls -d .planning/phases/${PADDED_PHASE}-* .planning/phases/${PHASE}-* 2>/dev/null | head -1)
1080
1084
 
1081
1085
  # Read CONTEXT.md if exists (from /gsd:discuss-phase)
1082
1086
  cat "${PHASE_DIR}"/*-CONTEXT.md 2>/dev/null
package/bin/install.js CHANGED
@@ -55,8 +55,6 @@ function parseConfigDirArg() {
55
55
  const explicitConfigDir = parseConfigDirArg();
56
56
  const hasHelp = args.includes('--help') || args.includes('-h');
57
57
  const forceStatusline = args.includes('--force-statusline');
58
- const forceNotify = args.includes('--force-notify');
59
- const noNotify = args.includes('--no-notify');
60
58
 
61
59
  console.log(banner);
62
60
 
@@ -70,8 +68,6 @@ if (hasHelp) {
70
68
  ${cyan}-c, --config-dir <path>${reset} Specify custom Claude config directory
71
69
  ${cyan}-h, --help${reset} Show this help message
72
70
  ${cyan}--force-statusline${reset} Replace existing statusline config
73
- ${cyan}--force-notify${reset} Replace existing notification hook
74
- ${cyan}--no-notify${reset} Skip notification hook installation
75
71
 
76
72
  ${yellow}Examples:${reset}
77
73
  ${dim}# Install to default ~/.claude directory${reset}
@@ -221,10 +217,6 @@ function install(isGlobal) {
221
217
  const srcFile = path.join(hooksSrc, entry);
222
218
  const destFile = path.join(hooksDest, entry);
223
219
  fs.copyFileSync(srcFile, destFile);
224
- // Make shell scripts executable
225
- if (entry.endsWith('.sh')) {
226
- fs.chmodSync(destFile, 0o755);
227
- }
228
220
  }
229
221
  console.log(` ${green}✓${reset} Installed hooks`);
230
222
  }
@@ -233,14 +225,11 @@ function install(isGlobal) {
233
225
  const settingsPath = path.join(claudeDir, 'settings.json');
234
226
  const settings = readSettings(settingsPath);
235
227
  const statuslineCommand = isGlobal
236
- ? '$HOME/.claude/hooks/statusline.sh'
237
- : '.claude/hooks/statusline.sh';
228
+ ? 'node "$HOME/.claude/hooks/statusline.js"'
229
+ : 'node .claude/hooks/statusline.js';
238
230
  const updateCheckCommand = isGlobal
239
- ? '$HOME/.claude/hooks/gsd-check-update.sh'
240
- : '.claude/hooks/gsd-check-update.sh';
241
- const notifyCommand = isGlobal
242
- ? '$HOME/.claude/hooks/gsd-notify.sh'
243
- : '.claude/hooks/gsd-notify.sh';
231
+ ? 'node "$HOME/.claude/hooks/gsd-check-update.js"'
232
+ : 'node .claude/hooks/gsd-check-update.js';
244
233
 
245
234
  // Configure SessionStart hook for update checking
246
235
  if (!settings.hooks) {
@@ -267,13 +256,13 @@ function install(isGlobal) {
267
256
  console.log(` ${green}✓${reset} Configured update check hook`);
268
257
  }
269
258
 
270
- return { settingsPath, settings, statuslineCommand, notifyCommand };
259
+ return { settingsPath, settings, statuslineCommand };
271
260
  }
272
261
 
273
262
  /**
274
- * Apply statusline and notification config, then print completion message
263
+ * Apply statusline config, then print completion message
275
264
  */
276
- function finishInstall(settingsPath, settings, statuslineCommand, notifyCommand, shouldInstallStatusline, shouldInstallNotify) {
265
+ function finishInstall(settingsPath, settings, statuslineCommand, shouldInstallStatusline) {
277
266
  if (shouldInstallStatusline) {
278
267
  settings.statusLine = {
279
268
  type: 'command',
@@ -282,25 +271,6 @@ function finishInstall(settingsPath, settings, statuslineCommand, notifyCommand,
282
271
  console.log(` ${green}✓${reset} Configured statusline`);
283
272
  }
284
273
 
285
- if (shouldInstallNotify) {
286
- if (!settings.hooks.Stop) {
287
- settings.hooks.Stop = [];
288
- }
289
- // Remove any existing GSD notify hook first
290
- settings.hooks.Stop = settings.hooks.Stop.filter(entry =>
291
- !(entry.hooks && entry.hooks.some(h => h.command && h.command.includes('gsd-notify')))
292
- );
293
- settings.hooks.Stop.push({
294
- hooks: [
295
- {
296
- type: 'command',
297
- command: notifyCommand
298
- }
299
- ]
300
- });
301
- console.log(` ${green}✓${reset} Configured completion notifications`);
302
- }
303
-
304
274
  // Always write settings (hooks were already configured in install())
305
275
  writeSettings(settingsPath, settings);
306
276
 
@@ -365,66 +335,6 @@ function handleStatusline(settings, isInteractive, callback) {
365
335
  });
366
336
  }
367
337
 
368
- /**
369
- * Handle notification hook configuration with optional prompt
370
- */
371
- function handleNotifications(settings, isInteractive, callback) {
372
- // Check if --no-notify flag was passed
373
- if (noNotify) {
374
- callback(false);
375
- return;
376
- }
377
-
378
- // Check if GSD notify hook already exists
379
- const hasExisting = settings.hooks?.Stop?.some(entry =>
380
- entry.hooks && entry.hooks.some(h => h.command && h.command.includes('gsd-notify'))
381
- );
382
-
383
- // No existing - just install it
384
- if (!hasExisting) {
385
- callback(true);
386
- return;
387
- }
388
-
389
- // Has existing and --force-notify flag
390
- if (forceNotify) {
391
- callback(true);
392
- return;
393
- }
394
-
395
- // Has existing, non-interactive mode - skip
396
- if (!isInteractive) {
397
- console.log(` ${yellow}⚠${reset} Skipping notifications (already configured)`);
398
- console.log(` Use ${cyan}--force-notify${reset} to replace\n`);
399
- callback(false);
400
- return;
401
- }
402
-
403
- // Has existing, interactive mode - prompt user
404
- const rl = readline.createInterface({
405
- input: process.stdin,
406
- output: process.stdout
407
- });
408
-
409
- console.log(`
410
- ${yellow}⚠${reset} Existing notification hook detected
411
-
412
- GSD includes completion notifications that alert you when:
413
- • A phase completes planning or execution
414
- • Claude stops and needs your input
415
- • Works on Mac, Linux, and Windows
416
-
417
- ${cyan}1${reset}) Keep existing
418
- ${cyan}2${reset}) Replace with GSD notifications
419
- `);
420
-
421
- rl.question(` Choice ${dim}[1]${reset}: `, (answer) => {
422
- rl.close();
423
- const choice = answer.trim() || '1';
424
- callback(choice === '2');
425
- });
426
- }
427
-
428
338
  /**
429
339
  * Prompt for install location
430
340
  */
@@ -448,12 +358,10 @@ function promptLocation() {
448
358
  rl.close();
449
359
  const choice = answer.trim() || '1';
450
360
  const isGlobal = choice !== '2';
451
- const { settingsPath, settings, statuslineCommand, notifyCommand } = install(isGlobal);
361
+ const { settingsPath, settings, statuslineCommand } = install(isGlobal);
452
362
  // Interactive mode - prompt for optional features
453
363
  handleStatusline(settings, true, (shouldInstallStatusline) => {
454
- handleNotifications(settings, true, (shouldInstallNotify) => {
455
- finishInstall(settingsPath, settings, statuslineCommand, notifyCommand, shouldInstallStatusline, shouldInstallNotify);
456
- });
364
+ finishInstall(settingsPath, settings, statuslineCommand, shouldInstallStatusline);
457
365
  });
458
366
  });
459
367
  }
@@ -466,20 +374,16 @@ if (hasGlobal && hasLocal) {
466
374
  console.error(` ${yellow}Cannot use --config-dir with --local${reset}`);
467
375
  process.exit(1);
468
376
  } else if (hasGlobal) {
469
- const { settingsPath, settings, statuslineCommand, notifyCommand } = install(true);
377
+ const { settingsPath, settings, statuslineCommand } = install(true);
470
378
  // Non-interactive - respect flags
471
379
  handleStatusline(settings, false, (shouldInstallStatusline) => {
472
- handleNotifications(settings, false, (shouldInstallNotify) => {
473
- finishInstall(settingsPath, settings, statuslineCommand, notifyCommand, shouldInstallStatusline, shouldInstallNotify);
474
- });
380
+ finishInstall(settingsPath, settings, statuslineCommand, shouldInstallStatusline);
475
381
  });
476
382
  } else if (hasLocal) {
477
- const { settingsPath, settings, statuslineCommand, notifyCommand } = install(false);
383
+ const { settingsPath, settings, statuslineCommand } = install(false);
478
384
  // Non-interactive - respect flags
479
385
  handleStatusline(settings, false, (shouldInstallStatusline) => {
480
- handleNotifications(settings, false, (shouldInstallNotify) => {
481
- finishInstall(settingsPath, settings, statuslineCommand, notifyCommand, shouldInstallStatusline, shouldInstallNotify);
482
- });
386
+ finishInstall(settingsPath, settings, statuslineCommand, shouldInstallStatusline);
483
387
  });
484
388
  } else {
485
389
  promptLocation();
@@ -18,7 +18,7 @@ Verify milestone achieved its definition of done. Check requirements coverage, c
18
18
  </objective>
19
19
 
20
20
  <execution_context>
21
- @~/.claude/get-shit-done/references/principles.md
21
+ <!-- Spawns gsd-integration-checker agent which has all audit expertise baked in -->
22
22
  </execution_context>
23
23
 
24
24
  <context>
@@ -35,11 +35,9 @@ Roadmaps define what work happens in what order. Phases map to requirements.
35
35
  </objective>
36
36
 
37
37
  <execution_context>
38
- @~/.claude/get-shit-done/references/principles.md
39
38
  @~/.claude/get-shit-done/workflows/create-roadmap.md
40
39
  @~/.claude/get-shit-done/templates/roadmap.md
41
40
  @~/.claude/get-shit-done/templates/state.md
42
- @~/.claude/get-shit-done/references/goal-backward.md
43
41
  </execution_context>
44
42
 
45
43
  <context>
@@ -36,7 +36,6 @@ Output: `.planning/REQUIREMENTS.md`
36
36
  </objective>
37
37
 
38
38
  <execution_context>
39
- @~/.claude/get-shit-done/references/principles.md
40
39
  @~/.claude/get-shit-done/workflows/define-requirements.md
41
40
  @~/.claude/get-shit-done/templates/requirements.md
42
41
  </execution_context>
@@ -11,7 +11,6 @@ Output: Context gathered, then routes to /gsd:new-milestone
11
11
  </objective>
12
12
 
13
13
  <execution_context>
14
- @~/.claude/get-shit-done/references/principles.md
15
14
  @~/.claude/get-shit-done/workflows/discuss-milestone.md
16
15
  </execution_context>
17
16
 
@@ -18,7 +18,6 @@ Extract implementation decisions that downstream agents need — researcher and
18
18
  </objective>
19
19
 
20
20
  <execution_context>
21
- @~/.claude/get-shit-done/references/principles.md
22
21
  @~/.claude/get-shit-done/workflows/discuss-phase.md
23
22
  @~/.claude/get-shit-done/templates/context.md
24
23
  </execution_context>
@@ -36,10 +35,10 @@ Phase number: $ARGUMENTS (required)
36
35
  <process>
37
36
  1. Validate phase number (error if missing or not in roadmap)
38
37
  2. Check if CONTEXT.md exists (offer update/view/skip if yes)
39
- 3. **Analyze phase** — Identify domain boundary and gray areas by category
40
- 4. **Present gray areas** — Multi-select AskUserQuestion: which to discuss?
41
- 5. **Deep-dive each area** — Loop per area until user says "move on"
42
- 6. **Write CONTEXT.md** — Structured by decisions made
38
+ 3. **Analyze phase** — Identify domain and generate phase-specific gray areas
39
+ 4. **Present gray areas** — Multi-select: which to discuss? (NO skip option)
40
+ 5. **Deep-dive each area** — 4 questions per area, then offer more/next
41
+ 6. **Write CONTEXT.md** — Sections match areas discussed
43
42
  7. Offer next steps (research or plan)
44
43
 
45
44
  **CRITICAL: Scope guardrail**
@@ -48,18 +47,27 @@ Phase number: $ARGUMENTS (required)
48
47
  - If user suggests new capabilities: "That's its own phase. I'll note it for later."
49
48
  - Capture deferred ideas — don't lose them, don't act on them
50
49
 
51
- **Gray area categories (use what's relevant):**
52
- - **UI** Layout, visual presentation, information density
53
- - **UX** Interactions, flows, feedback
54
- - **Behavior** Runtime behavior, state changes
55
- - **Empty/Edge States** What shows in unusual situations
56
- - **Content** What information is shown/hidden
50
+ **Domain-aware gray areas:**
51
+ Gray areas depend on what's being built. Analyze the phase goal:
52
+ - Something users SEE → layout, density, interactions, states
53
+ - Something users CALL → responses, errors, auth, versioning
54
+ - Something users RUN output format, flags, modes, error handling
55
+ - Something users READ structure, tone, depth, flow
56
+ - Something being ORGANIZED → criteria, grouping, naming, exceptions
57
57
 
58
- **Do NOT ask about (downstream agents handle these):**
59
- - Technical implementation (researcher investigates)
60
- - Architecture choices (planner decides)
61
- - Performance concerns (researcher/planner handle)
62
- - Scope expansion (roadmap defines scope)
58
+ Generate 3-4 **phase-specific** gray areas, not generic categories.
59
+
60
+ **Probing depth:**
61
+ - Ask 4 questions per area before checking
62
+ - "More questions about [area], or move to next?"
63
+ - If more → ask 4 more, check again
64
+ - After all areas → "Ready to create context?"
65
+
66
+ **Do NOT ask about (Claude handles these):**
67
+ - Technical implementation
68
+ - Architecture choices
69
+ - Performance concerns
70
+ - Scope expansion
63
71
  </process>
64
72
 
65
73
  <success_criteria>
@@ -23,7 +23,6 @@ Context budget: ~15% orchestrator, 100% fresh per subagent.
23
23
  </objective>
24
24
 
25
25
  <execution_context>
26
- @~/.claude/get-shit-done/references/principles.md
27
26
  @~/.claude/get-shit-done/references/ui-brand.md
28
27
  @~/.claude/get-shit-done/workflows/execute-phase.md
29
28
  </execution_context>
@@ -127,30 +127,16 @@ Result: Creates `.planning/phases/01-foundation/01-01-PLAN.md`
127
127
 
128
128
  ### Execution
129
129
 
130
- **`/gsd:execute-plan <path>`**
131
- Execute a single PLAN.md file.
132
-
133
- - Runs plan tasks sequentially
134
- - Creates SUMMARY.md after completion
135
- - Updates STATE.md with accumulated context
136
- - Use for interactive execution with checkpoints
137
-
138
- Usage: `/gsd:execute-plan .planning/phases/01-foundation/01-01-PLAN.md`
139
-
140
130
  **`/gsd:execute-phase <phase-number>`**
141
- Execute all unexecuted plans in a phase with parallel background agents.
131
+ Execute all plans in a phase.
142
132
 
143
- - Analyzes plan dependencies and spawns independent plans concurrently
144
- - Use when phase has 2+ plans and you want "walk away" execution
145
- - Respects max_concurrent_agents from config.json
133
+ - Groups plans by wave (from frontmatter), executes waves sequentially
134
+ - Plans within each wave run in parallel via Task tool
135
+ - Verifies phase goal after all plans complete
136
+ - Updates REQUIREMENTS.md, ROADMAP.md, STATE.md
146
137
 
147
138
  Usage: `/gsd:execute-phase 5`
148
139
 
149
- Options (via `.planning/config.json` parallelization section):
150
- - `max_concurrent_agents`: Limit parallel agents (default: 3)
151
- - `skip_checkpoints`: Skip human checkpoints in background (default: true)
152
- - `min_plans_for_parallel`: Minimum plans to trigger parallelization (default: 2)
153
-
154
140
  ### Roadmap Management
155
141
 
156
142
  **`/gsd:add-phase <description>`**
@@ -373,7 +359,7 @@ Change anytime by editing `.planning/config.json`
373
359
  ```
374
360
  /gsd:insert-phase 5 "Critical security fix"
375
361
  /gsd:plan-phase 5.1
376
- /gsd:execute-plan .planning/phases/05.1-critical-security-fix/05.1-01-PLAN.md
362
+ /gsd:execute-phase 5.1
377
363
  ```
378
364
 
379
365
  **Completing a milestone:**
@@ -90,6 +90,8 @@ Milestone name: $ARGUMENTS (optional - will prompt if not provided)
90
90
  Last activity: [today] — Milestone v[X.Y] started
91
91
  ```
92
92
 
93
+ Keep Accumulated Context section (decisions, blockers) from previous milestone.
94
+
93
95
  6. **Cleanup:**
94
96
  - Delete MILESTONE-CONTEXT.md if exists (consumed)
95
97
 
@@ -19,8 +19,7 @@ One command creates all fix phases — no manual `/gsd:add-phase` per gap.
19
19
  </objective>
20
20
 
21
21
  <execution_context>
22
- @~/.claude/get-shit-done/references/principles.md
23
- @~/.claude/get-shit-done/workflows/plan-phase.md
22
+ <!-- Spawns gsd-planner agent which has all planning expertise baked in -->
24
23
  </execution_context>
25
24
 
26
25
  <context>
@@ -37,13 +37,7 @@ Phase number: $ARGUMENTS (optional - auto-detects next unplanned phase if not pr
37
37
  - `--gaps` — Gap closure mode (reads VERIFICATION.md, skips research)
38
38
  - `--skip-verify` — Skip planner → checker verification loop
39
39
 
40
- Check for existing research and plans:
41
-
42
- ```bash
43
- ls .planning/phases/${PHASE}-*/*-RESEARCH.md 2>/dev/null
44
- ls .planning/phases/${PHASE}-*/*-PLAN.md 2>/dev/null
45
- ```
46
-
40
+ Normalize phase input in step 2 before any directory lookups.
47
41
  </context>
48
42
 
49
43
  <process>
@@ -56,7 +50,7 @@ ls .planning/ 2>/dev/null
56
50
 
57
51
  **If not found:** Error - user should run `/gsd:new-project` first.
58
52
 
59
- ## 2. Parse Arguments
53
+ ## 2. Parse and Normalize Arguments
60
54
 
61
55
  Extract from $ARGUMENTS:
62
56
 
@@ -68,6 +62,24 @@ Extract from $ARGUMENTS:
68
62
 
69
63
  **If no phase number:** Detect next unplanned phase from roadmap.
70
64
 
65
+ **Normalize phase to zero-padded format:**
66
+
67
+ ```bash
68
+ # Normalize phase number (8 → 08, but preserve decimals like 2.1 → 02.1)
69
+ if [[ "$PHASE" =~ ^[0-9]+$ ]]; then
70
+ PHASE=$(printf "%02d" "$PHASE")
71
+ elif [[ "$PHASE" =~ ^([0-9]+)\.([0-9]+)$ ]]; then
72
+ PHASE=$(printf "%02d.%s" "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}")
73
+ fi
74
+ ```
75
+
76
+ **Check for existing research and plans:**
77
+
78
+ ```bash
79
+ ls .planning/phases/${PHASE}-*/*-RESEARCH.md 2>/dev/null
80
+ ls .planning/phases/${PHASE}-*/*-PLAN.md 2>/dev/null
81
+ ```
82
+
71
83
  ## 3. Validate Phase
72
84
 
73
85
  ```bash
@@ -79,13 +91,13 @@ grep -A5 "Phase ${PHASE}:" .planning/ROADMAP.md 2>/dev/null
79
91
  ## 4. Ensure Phase Directory Exists
80
92
 
81
93
  ```bash
94
+ # PHASE is already normalized (08, 02.1, etc.) from step 2
82
95
  PHASE_DIR=$(ls -d .planning/phases/${PHASE}-* 2>/dev/null | head -1)
83
96
  if [ -z "$PHASE_DIR" ]; then
84
- # Create phase directory from roadmap name with zero-padded phase number
97
+ # Create phase directory from roadmap name
85
98
  PHASE_NAME=$(grep "Phase ${PHASE}:" .planning/ROADMAP.md | sed 's/.*Phase [0-9]*: //' | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
86
- PADDED_PHASE=$(printf "%02d" ${PHASE})
87
- mkdir -p ".planning/phases/${PADDED_PHASE}-${PHASE_NAME}"
88
- PHASE_DIR=".planning/phases/${PADDED_PHASE}-${PHASE_NAME}"
99
+ mkdir -p ".planning/phases/${PHASE}-${PHASE_NAME}"
100
+ PHASE_DIR=".planning/phases/${PHASE}-${PHASE_NAME}"
89
101
  fi
90
102
  ```
91
103
 
@@ -251,7 +263,7 @@ Fill prompt and spawn:
251
263
  </planning_context>
252
264
 
253
265
  <downstream_consumer>
254
- Output consumed by /gsd:execute-phase or /gsd:execute-plan
266
+ Output consumed by /gsd:execute-phase
255
267
  Plans must be executable prompts with:
256
268
 
257
269
  - Frontmatter (wave, depends_on, files_modified, autonomous)
@@ -154,7 +154,7 @@ Read its `<objective>` section.
154
154
 
155
155
  **{phase}-{plan}: [Plan Name]** — [objective summary from PLAN.md]
156
156
 
157
- `/gsd:execute-plan [full-path-to-PLAN.md]`
157
+ `/gsd:execute-phase {phase}`
158
158
 
159
159
  <sub>`/clear` first → fresh context window</sub>
160
160
 
@@ -226,7 +226,7 @@ UAT.md exists with gaps (diagnosed issues). User needs to plan fixes.
226
226
  ---
227
227
 
228
228
  **Also available:**
229
- - `/gsd:execute-plan [path]` — continue with other work first
229
+ - `/gsd:execute-phase {phase}` — execute phase plans
230
230
  - `/gsd:verify-work {phase}` — run more UAT testing
231
231
 
232
232
  ---
@@ -359,7 +359,7 @@ Ready to plan the next milestone.
359
359
  - [ ] Rich context provided (recent work, decisions, issues)
360
360
  - [ ] Current position clear with visual progress
361
361
  - [ ] What's next clearly explained
362
- - [ ] Smart routing: /gsd:execute-plan if plan exists, /gsd:plan-phase if not
362
+ - [ ] Smart routing: /gsd:execute-phase if plans exist, /gsd:plan-phase if not
363
363
  - [ ] User confirms before any action
364
364
  - [ ] Seamless handoff to appropriate gsd command
365
365
  </success_criteria>
@@ -26,17 +26,23 @@ Research how to implement a phase. Spawns gsd-phase-researcher agent with phase
26
26
  <context>
27
27
  Phase number: $ARGUMENTS (required)
28
28
 
29
- Check for existing research:
30
- ```bash
31
- ls .planning/phases/${PHASE}-*/*RESEARCH.md 2>/dev/null
32
- ```
29
+ Normalize phase input in step 1 before any directory lookups.
33
30
  </context>
34
31
 
35
32
  <process>
36
33
 
37
- ## 1. Parse and Validate Phase
34
+ ## 1. Normalize and Validate Phase
38
35
 
39
36
  ```bash
37
+ # Normalize phase number (8 → 08, but preserve decimals like 2.1 → 02.1)
38
+ if [[ "$ARGUMENTS" =~ ^[0-9]+$ ]]; then
39
+ PHASE=$(printf "%02d" "$ARGUMENTS")
40
+ elif [[ "$ARGUMENTS" =~ ^([0-9]+)\.([0-9]+)$ ]]; then
41
+ PHASE=$(printf "%02d.%s" "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}")
42
+ else
43
+ PHASE="$ARGUMENTS"
44
+ fi
45
+
40
46
  grep -A5 "Phase ${PHASE}:" .planning/ROADMAP.md 2>/dev/null
41
47
  ```
42
48
 
@@ -118,7 +124,7 @@ Before declaring complete, verify:
118
124
  </quality_gate>
119
125
 
120
126
  <output>
121
- Write to: .planning/phases/{phase}-{slug}/{phase}-RESEARCH.md
127
+ Write to: .planning/phases/${PHASE}-{slug}/${PHASE}-RESEARCH.md
122
128
  </output>
123
129
  ```
124
130
 
@@ -146,7 +152,7 @@ Continue research for Phase {phase_number}: {phase_name}
146
152
  </objective>
147
153
 
148
154
  <prior_state>
149
- Research file: @.planning/phases/{phase}-{slug}/{phase}-RESEARCH.md
155
+ Research file: @.planning/phases/${PHASE}-{slug}/${PHASE}-RESEARCH.md
150
156
  </prior_state>
151
157
 
152
158
  <checkpoint_response>
@@ -44,7 +44,7 @@ Standard format for presenting next steps after completing a command or workflow
44
44
 
45
45
  **02-03: Refresh Token Rotation** — Add /api/auth/refresh with sliding expiry
46
46
 
47
- `/gsd:execute-plan .planning/phases/02-auth/02-03-PLAN.md`
47
+ `/gsd:execute-phase 2`
48
48
 
49
49
  <sub>`/clear` first → fresh context window</sub>
50
50
 
@@ -69,7 +69,7 @@ Add note that this is the last plan and what comes after:
69
69
  **02-03: Refresh Token Rotation** — Add /api/auth/refresh with sliding expiry
70
70
  <sub>Final plan in Phase 2</sub>
71
71
 
72
- `/gsd:execute-plan .planning/phases/02-auth/02-03-PLAN.md`
72
+ `/gsd:execute-phase 2`
73
73
 
74
74
  <sub>`/clear` first → fresh context window</sub>
75
75
 
@@ -220,7 +220,7 @@ Extract: `**02-03: Refresh Token Rotation** — Add /api/auth/refresh with slidi
220
220
  ## To Continue
221
221
 
222
222
  Run `/clear`, then paste:
223
- /gsd:execute-plan .planning/phases/02-auth/02-03-PLAN.md
223
+ /gsd:execute-phase 2
224
224
  ```
225
225
 
226
226
  User has no idea what 02-03 is about.