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.
- package/agents/gsd-codebase-mapper.md +1 -1
- package/agents/gsd-executor.md +1 -4
- package/agents/gsd-phase-researcher.md +6 -4
- package/agents/gsd-plan-checker.md +3 -2
- package/agents/gsd-planner.md +6 -2
- package/bin/install.js +13 -109
- package/commands/gsd/audit-milestone.md +1 -1
- package/commands/gsd/create-roadmap.md +0 -2
- package/commands/gsd/define-requirements.md +0 -1
- package/commands/gsd/discuss-milestone.md +0 -1
- package/commands/gsd/discuss-phase.md +24 -16
- package/commands/gsd/execute-phase.md +0 -1
- package/commands/gsd/help.md +6 -20
- package/commands/gsd/new-milestone.md +2 -0
- package/commands/gsd/plan-milestone-gaps.md +1 -2
- package/commands/gsd/plan-phase.md +25 -13
- package/commands/gsd/progress.md +3 -3
- package/commands/gsd/research-phase.md +13 -7
- package/get-shit-done/references/continuation-format.md +3 -3
- package/get-shit-done/templates/context.md +143 -13
- package/get-shit-done/templates/phase-prompt.md +0 -1
- package/get-shit-done/templates/planner-subagent-prompt.md +1 -1
- package/get-shit-done/workflows/discovery-phase.md +2 -2
- package/get-shit-done/workflows/discuss-phase.md +115 -55
- package/get-shit-done/workflows/execute-phase.md +3 -1
- package/get-shit-done/workflows/execute-plan.md +2 -2
- package/get-shit-done/workflows/map-codebase.md +2 -2
- package/get-shit-done/workflows/resume-project.md +5 -7
- package/get-shit-done/workflows/verify-phase.md +4 -4
- package/get-shit-done/workflows/verify-work.md +3 -2
- package/hooks/gsd-check-update.js +51 -0
- package/hooks/statusline.js +84 -0
- package/package.json +1 -1
- package/commands/gsd/execute-plan.md +0 -400
- package/get-shit-done/references/debugging/debugging-mindset.md +0 -11
- package/get-shit-done/references/debugging/hypothesis-testing.md +0 -11
- package/get-shit-done/references/debugging/investigation-techniques.md +0 -11
- package/get-shit-done/references/debugging/verification-patterns.md +0 -11
- package/get-shit-done/references/debugging/when-to-research.md +0 -11
- package/get-shit-done/references/goal-backward.md +0 -33
- package/get-shit-done/references/plan-format.md +0 -32
- package/get-shit-done/references/principles.md +0 -29
- package/get-shit-done/references/research-pitfalls.md +0 -233
- package/get-shit-done/references/scope-estimation.md +0 -32
- package/get-shit-done/templates/research-subagent-prompt.md +0 -92
- package/get-shit-done/workflows/create-milestone.md +0 -203
- package/get-shit-done/workflows/debug.md +0 -14
- package/get-shit-done/workflows/plan-phase.md +0 -41
- package/get-shit-done/workflows/research-phase.md +0 -17
- package/get-shit-done/workflows/research-project.md +0 -23
- package/hooks/gsd-check-update.sh +0 -20
- package/hooks/gsd-notify.sh +0 -59
- 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-
|
|
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)
|
package/agents/gsd-executor.md
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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}/${
|
|
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}/${
|
|
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}/${
|
|
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
|
-
#
|
|
248
|
-
|
|
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
|
package/agents/gsd-planner.md
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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.
|
|
237
|
-
: '.claude/hooks/statusline.
|
|
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.
|
|
240
|
-
: '.claude/hooks/gsd-check-update.
|
|
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
|
|
259
|
+
return { settingsPath, settings, statuslineCommand };
|
|
271
260
|
}
|
|
272
261
|
|
|
273
262
|
/**
|
|
274
|
-
* Apply statusline
|
|
263
|
+
* Apply statusline config, then print completion message
|
|
275
264
|
*/
|
|
276
|
-
function finishInstall(settingsPath, settings, statuslineCommand,
|
|
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
|
|
361
|
+
const { settingsPath, settings, statuslineCommand } = install(isGlobal);
|
|
452
362
|
// Interactive mode - prompt for optional features
|
|
453
363
|
handleStatusline(settings, true, (shouldInstallStatusline) => {
|
|
454
|
-
|
|
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
|
|
377
|
+
const { settingsPath, settings, statuslineCommand } = install(true);
|
|
470
378
|
// Non-interactive - respect flags
|
|
471
379
|
handleStatusline(settings, false, (shouldInstallStatusline) => {
|
|
472
|
-
|
|
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
|
|
383
|
+
const { settingsPath, settings, statuslineCommand } = install(false);
|
|
478
384
|
// Non-interactive - respect flags
|
|
479
385
|
handleStatusline(settings, false, (shouldInstallStatusline) => {
|
|
480
|
-
|
|
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
|
-
|
|
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>
|
|
@@ -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
|
|
40
|
-
4. **Present gray areas** — Multi-select
|
|
41
|
-
5. **Deep-dive each area** —
|
|
42
|
-
6. **Write CONTEXT.md** —
|
|
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
|
-
**
|
|
52
|
-
|
|
53
|
-
-
|
|
54
|
-
-
|
|
55
|
-
-
|
|
56
|
-
-
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
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>
|
package/commands/gsd/help.md
CHANGED
|
@@ -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
|
|
131
|
+
Execute all plans in a phase.
|
|
142
132
|
|
|
143
|
-
-
|
|
144
|
-
-
|
|
145
|
-
-
|
|
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-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
87
|
-
|
|
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
|
|
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)
|
package/commands/gsd/progress.md
CHANGED
|
@@ -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-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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.
|
|
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
|
|
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
|
|
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-
|
|
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-
|
|
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-
|
|
223
|
+
/gsd:execute-phase 2
|
|
224
224
|
```
|
|
225
225
|
|
|
226
226
|
User has no idea what 02-03 is about.
|