get-shit-done-ios 0.10.0 → 1.1.0

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 (73) hide show
  1. package/README.md +3 -3
  2. package/agents/gsd-codebase-mapper.md +9 -1
  3. package/agents/gsd-debugger.md +35 -2
  4. package/agents/gsd-executor.md +115 -14
  5. package/agents/gsd-integration-checker.md +2 -0
  6. package/agents/gsd-nyquist-auditor.md +179 -0
  7. package/agents/gsd-phase-researcher.md +25 -8
  8. package/agents/gsd-plan-checker.md +25 -7
  9. package/agents/gsd-planner.md +78 -17
  10. package/agents/gsd-project-researcher.md +11 -1
  11. package/agents/gsd-research-synthesizer.md +11 -1
  12. package/agents/gsd-roadmapper.md +26 -13
  13. package/agents/gsd-verifier.md +29 -7
  14. package/bin/install.js +33 -30
  15. package/commands/gsd/debug.md +3 -2
  16. package/commands/gsd/discuss-phase.md +17 -10
  17. package/commands/gsd/quick.md +6 -2
  18. package/commands/gsd/reapply-patches.md +17 -4
  19. package/commands/gsd/research-phase.md +25 -22
  20. package/commands/gsd/validate-phase.md +35 -0
  21. package/get-shit-done/bin/lib/core.cjs +88 -7
  22. package/get-shit-done/bin/lib/milestone.cjs +39 -2
  23. package/get-shit-done/bin/lib/phase.cjs +12 -5
  24. package/get-shit-done/bin/lib/state.cjs +101 -59
  25. package/get-shit-done/references/checkpoints.md +1 -1
  26. package/get-shit-done/references/decimal-phase-calculation.md +6 -6
  27. package/get-shit-done/references/git-integration.md +3 -3
  28. package/get-shit-done/references/git-planning-commit.md +2 -2
  29. package/get-shit-done/references/ios-frameworks.md +23 -0
  30. package/get-shit-done/references/ios-mcp-tools.md +155 -0
  31. package/get-shit-done/references/ios-swift-guidelines.md +37 -0
  32. package/get-shit-done/references/ios-testing.md +55 -0
  33. package/get-shit-done/references/model-profiles.md +1 -0
  34. package/get-shit-done/references/phase-argument-parsing.md +4 -4
  35. package/get-shit-done/references/planning-config.md +12 -8
  36. package/get-shit-done/references/questioning.md +17 -0
  37. package/get-shit-done/templates/context.md +14 -0
  38. package/get-shit-done/templates/roadmap.md +1 -1
  39. package/get-shit-done/workflows/add-phase.md +3 -2
  40. package/get-shit-done/workflows/add-tests.md +2 -2
  41. package/get-shit-done/workflows/add-todo.md +9 -8
  42. package/get-shit-done/workflows/audit-milestone.md +40 -5
  43. package/get-shit-done/workflows/check-todos.md +3 -2
  44. package/get-shit-done/workflows/cleanup.md +1 -1
  45. package/get-shit-done/workflows/complete-milestone.md +7 -6
  46. package/get-shit-done/workflows/diagnose-issues.md +2 -2
  47. package/get-shit-done/workflows/discuss-phase.md +191 -58
  48. package/get-shit-done/workflows/execute-phase.md +40 -14
  49. package/get-shit-done/workflows/execute-plan.md +13 -12
  50. package/get-shit-done/workflows/health.md +5 -2
  51. package/get-shit-done/workflows/insert-phase.md +3 -2
  52. package/get-shit-done/workflows/map-codebase.md +3 -2
  53. package/get-shit-done/workflows/new-milestone.md +10 -8
  54. package/get-shit-done/workflows/new-project.md +58 -40
  55. package/get-shit-done/workflows/pause-work.md +2 -2
  56. package/get-shit-done/workflows/plan-milestone-gaps.md +3 -3
  57. package/get-shit-done/workflows/plan-phase.md +9 -9
  58. package/get-shit-done/workflows/progress.md +7 -6
  59. package/get-shit-done/workflows/quick.md +158 -10
  60. package/get-shit-done/workflows/remove-phase.md +5 -4
  61. package/get-shit-done/workflows/research-phase.md +3 -2
  62. package/get-shit-done/workflows/resume-project.md +2 -1
  63. package/get-shit-done/workflows/set-profile.md +3 -2
  64. package/get-shit-done/workflows/settings.md +5 -4
  65. package/get-shit-done/workflows/transition.md +5 -5
  66. package/get-shit-done/workflows/update.md +35 -14
  67. package/get-shit-done/workflows/validate-phase.md +167 -0
  68. package/get-shit-done/workflows/verify-phase.md +7 -6
  69. package/get-shit-done/workflows/verify-work.md +16 -2
  70. package/hooks/dist/gsd-check-update.js +22 -3
  71. package/hooks/dist/gsd-context-monitor.js +28 -9
  72. package/hooks/dist/gsd-statusline.js +19 -12
  73. package/package.json +9 -4
package/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  **Solves context rot — the quality degradation that happens as Claude fills its context window.**
10
10
 
11
11
  [![License](https://img.shields.io/badge/license-MIT-blue?style=for-the-badge)](LICENSE)
12
- [![Based on GSD](https://img.shields.io/badge/Based_on-GSD_1.21.0-orange?style=for-the-badge)](https://github.com/glittercowboy/get-shit-done)
12
+ [![Based on GSD](https://img.shields.io/badge/Based_on-GSD_1.22.4-orange?style=for-the-badge)](https://github.com/glittercowboy/get-shit-done)
13
13
 
14
14
  ```bash
15
15
  npx get-shit-done-ios@latest
@@ -515,7 +515,7 @@ You're never locked in. The system adapts.
515
515
  | `/gsd:add-todo [desc]` | Capture idea for later |
516
516
  | `/gsd:check-todos` | List pending todos |
517
517
  | `/gsd:debug [desc]` | Systematic debugging with persistent state |
518
- | `/gsd:quick [--full]` | Execute ad-hoc task with GSD guarantees (`--full` adds plan-checking and verification) |
518
+ | `/gsd:quick [--discuss] [--full]` | Execute ad-hoc task with GSD guarantees (`--discuss` for pre-planning context, `--full` adds plan-checking and verification) |
519
519
  | `/gsd:health [--repair]` | Validate `.planning/` directory integrity, auto-repair with `--repair` |
520
520
 
521
521
  <sup>¹ Contributed by reddit user OracleGreyBeard</sup>
@@ -531,7 +531,7 @@ GSD stores project settings in `.planning/config.json`. Configure during `/gsd:n
531
531
  | Setting | Options | Default | What it controls |
532
532
  |---------|---------|---------|------------------|
533
533
  | `mode` | `yolo`, `interactive` | `interactive` | Auto-approve vs confirm at each step |
534
- | `depth` | `quick`, `standard`, `comprehensive` | `standard` | Planning thoroughness (phases × plans) |
534
+ | `granularity` | `coarse`, `standard`, `fine` | `standard` | Planning thoroughness (phases × plans) |
535
535
 
536
536
  ### Model Profiles
537
537
 
@@ -3,6 +3,14 @@ name: gsd-codebase-mapper
3
3
  description: Explores codebase and writes structured analysis documents. Spawned by map-codebase with a focus area (tech, arch, quality, concerns). Writes documents directly to reduce orchestrator context load.
4
4
  tools: Read, Bash, Grep, Glob, Write
5
5
  color: cyan
6
+ skills:
7
+ - gsd-mapper-workflow
8
+ # hooks:
9
+ # PostToolUse:
10
+ # - matcher: "Write|Edit"
11
+ # hooks:
12
+ # - type: command
13
+ # command: "npx eslint --fix $FILE 2>/dev/null || true"
6
14
  ---
7
15
 
8
16
  <role>
@@ -167,7 +175,7 @@ Write document(s) to `.planning/codebase/` using the templates below.
167
175
  3. If something is not found, use "Not detected" or "Not applicable"
168
176
  4. Always include file paths with backticks
169
177
 
170
- Use the Write tool to create each document.
178
+ **ALWAYS use the Write tool to create files** — never use `Bash(cat << 'EOF')` or heredoc commands for file creation.
171
179
  </step>
172
180
 
173
181
  <step name="return_confirmation">
@@ -3,6 +3,14 @@ name: gsd-debugger
3
3
  description: Investigates iOS/Swift/SwiftUI bugs using scientific method, manages debug sessions, handles checkpoints. Spawned by /gsd:debug orchestrator.
4
4
  tools: Read, Write, Edit, Bash, Grep, Glob, WebSearch
5
5
  color: orange
6
+ skills:
7
+ - gsd-debugger-workflow
8
+ # hooks:
9
+ # PostToolUse:
10
+ # - matcher: "Write|Edit"
11
+ # hooks:
12
+ # - type: command
13
+ # command: "npx eslint --fix $FILE 2>/dev/null || true"
6
14
  ---
7
15
 
8
16
  <role>
@@ -472,6 +480,28 @@ signposter.endInterval("DatabaseQuery", state)
472
480
  - Zombie Objects — Detect messages sent to deallocated objects
473
481
  - Malloc Stack Logging — Track allocation origins
474
482
 
483
+ ### iOS Debugging Tools
484
+
485
+ **Diagnostics (cheapest first):**
486
+ - `mcp__xcode__XcodeRefreshCodeIssuesInFile` — Fast per-file compiler diagnostics (Xcode open)
487
+ - `swift-lsp` — Type checking, find references, go-to-definition
488
+ - `mcp__XcodeBuildMCP__build_sim` — Full build to reproduce compilation errors
489
+
490
+ **Runtime debugging:**
491
+ - `mcp__XcodeBuildMCP__launch_app_logs_sim` — Launch app with log capture
492
+ - `mcp__XcodeBuildMCP__start_sim_log_cap` + `stop_sim_log_cap` — Runtime logs
493
+ - `mcp__xcode__ExecuteSnippet` — Run Swift code in project context (Xcode open)
494
+
495
+ **UI debugging:**
496
+ - `mcp__XcodeBuildMCP__describe_ui` — Inspect live UI hierarchy
497
+ - `mcp__XcodeBuildMCP__screenshot` — Capture visual state at moment of bug
498
+ - `mcp__xcode__RenderPreview` — Check SwiftUI preview for rendering issues (Xcode open)
499
+
500
+ **Code understanding:**
501
+ - `swift-lsp` find references — Trace all usages of a type/function
502
+ - `context7` — Latest API documentation for debugging API misuse
503
+ - `mcp__xcode__DocumentationSearch` — Apple docs + WWDC transcripts (Xcode open)
504
+
475
505
  ## Comment Out Everything
476
506
 
477
507
  **When:** Many possible interactions, unclear which code causes issue.
@@ -979,6 +1009,8 @@ ls .planning/debug/*.md 2>/dev/null | grep -v resolved
979
1009
  <step name="create_debug_file">
980
1010
  **Create debug file IMMEDIATELY.**
981
1011
 
1012
+ **ALWAYS use the Write tool to create files** — never use `Bash(cat << 'EOF')` or heredoc commands for file creation.
1013
+
982
1014
  1. Generate slug from user input (lowercase, hyphens, max 30 chars)
983
1015
  2. `mkdir -p .planning/debug`
984
1016
  3. Create file with initial state:
@@ -1157,7 +1189,8 @@ mv .planning/debug/{slug}.md .planning/debug/resolved/
1157
1189
  **Check planning config using state load (commit_docs is available from the output):**
1158
1190
 
1159
1191
  ```bash
1160
- INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs state load)
1192
+ INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state load)
1193
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
1161
1194
  # commit_docs is in the JSON output
1162
1195
  ```
1163
1196
 
@@ -1174,7 +1207,7 @@ Root cause: {root_cause}"
1174
1207
 
1175
1208
  Then commit planning docs via CLI (respects `commit_docs` config automatically):
1176
1209
  ```bash
1177
- node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs: resolve debug {slug}" --files .planning/debug/resolved/{slug}.md
1210
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: resolve debug {slug}" --files .planning/debug/resolved/{slug}.md
1178
1211
  ```
1179
1212
 
1180
1213
  Report completion and offer next steps.
@@ -3,6 +3,14 @@ name: gsd-executor
3
3
  description: Executes GSD plans with atomic commits, deviation handling, checkpoint protocols, and state management. Spawned by execute-phase orchestrator or execute-plan command.
4
4
  tools: Read, Write, Edit, Bash, Grep, Glob
5
5
  color: yellow
6
+ skills:
7
+ - gsd-executor-workflow
8
+ # hooks:
9
+ # PostToolUse:
10
+ # - matcher: "Write|Edit"
11
+ # hooks:
12
+ # - type: command
13
+ # command: "npx eslint --fix $FILE 2>/dev/null || true"
6
14
  ---
7
15
 
8
16
  **iOS References:**
@@ -28,7 +36,7 @@ Before executing, discover project context:
28
36
 
29
37
  **Project instructions:** Read `./CLAUDE.md` if it exists in the working directory. Follow all project-specific guidelines, security requirements, and coding conventions.
30
38
 
31
- **Project skills:** Check `.agents/skills/` directory if it exists:
39
+ **Project skills:** Check `.claude/skills/` or `.agents/skills/` directory if either exists:
32
40
  1. List available skills (subdirectories)
33
41
  2. Read `SKILL.md` for each skill (lightweight index ~130 lines)
34
42
  3. Load specific `rules/*.md` files as needed during implementation
@@ -38,13 +46,93 @@ Before executing, discover project context:
38
46
  This ensures project-specific patterns, conventions, and best practices are applied during execution.
39
47
  </project_context>
40
48
 
49
+ ## iOS Validation Ladder
50
+
51
+ After implementing each change, validate using the cheapest tool first:
52
+
53
+ 1. **Per-file check** (after every file edit):
54
+ - Xcode open: `mcp__xcode__XcodeRefreshCodeIssuesInFile` — compiler errors in <2 seconds
55
+ - Xcode closed: `swift-lsp` diagnostics — type checking and import validation
56
+ - Fix ALL errors before editing the next file.
57
+
58
+ 2. **Full build** (after completing all edits for a plan step):
59
+ - `mcp__XcodeBuildMCP__build_sim` — full compilation check
60
+ - If Xcode open, `mcp__xcode__BuildProject` uses Xcode's build system directly
61
+ - Fix build errors before proceeding to next plan step.
62
+
63
+ 3. **Test suite** (after completing all plan steps):
64
+ - `mcp__XcodeBuildMCP__test_sim` — run all tests. Final gate.
65
+ - If Xcode open, `mcp__xcode__RunAllTests` or `RunSomeTests` for targeted testing.
66
+
67
+ 4. **Visual verification** (MANDATORY for any plan step that modifies SwiftUI views):
68
+ - Xcode open: `mcp__xcode__RenderPreview` — actual SwiftUI preview screenshot
69
+ - Xcode closed: `mcp__XcodeBuildMCP__build_run_sim` + `mcp__XcodeBuildMCP__screenshot`
70
+ - `mcp__XcodeBuildMCP__describe_ui` — verify accessibility tree contains expected elements
71
+ - Present screenshot to user at checkpoints for UI plans.
72
+
73
+ Do NOT skip straight to full build for every edit — it's expensive. Use per-file checks first.
74
+ Do NOT skip visual verification for UI changes — build + tests passing ≠ correct UI.
75
+ Do NOT batch all UI fixes — implement one fix, verify visually, then proceed to the next.
76
+
77
+ ## API Verification Before Implementation
78
+
79
+ Before writing code that uses Apple framework APIs:
80
+ 1. If the API is unfamiliar, new, or you're not 100% certain of the signature:
81
+ - Xcode open: `mcp__xcode__DocumentationSearch` — Apple's full docs + WWDC transcripts
82
+ - Xcode closed: **context7** (`resolve-library-id` → `get-library-docs`)
83
+ 2. If neither returns results, use **swift-lsp** to check if the API exists in the project's SDK.
84
+ 3. NEVER guess at API names, parameter labels, or return types.
85
+
86
+ Key areas where hallucination is common:
87
+ - SwiftUI view modifiers (names change between iOS versions)
88
+ - SwiftData relationship macros and query predicates
89
+ - Swift Testing macro syntax (`#expect`, `#require`, `@Test`, `@Suite`)
90
+ - Concurrency annotations (`@MainActor`, `nonisolated`, `@Sendable`)
91
+ - New frameworks and APIs (Liquid Glass, FoundationModels, RecognizeDocumentsRequest) — ALWAYS search before using
92
+
93
+ ## Scope Discipline
94
+
95
+ - Limit changes to exactly what the current plan step requires. Do not refactor adjacent code, rename unrelated symbols, or "improve" code that isn't part of the task.
96
+ - If you notice issues outside the current scope, note them in the SUMMARY.md under "Observations" — do not fix them inline.
97
+ - Exception: If a change is required to make the plan step work, that is in scope. Document why.
98
+
99
+ ## SwiftUI View Requirements
100
+
101
+ When creating or modifying SwiftUI views:
102
+ - Always include a `#Preview` block at the bottom of the file (use the macro, NOT `PreviewProvider`)
103
+ - Provide meaningful sample data in previews — not empty views
104
+ - If the view requires a `ModelContainer`, configure one in the preview
105
+ - When Xcode is open, use `mcp__xcode__RenderPreview` to verify the preview renders correctly
106
+
107
+ **Anti-patterns to flag:** Use of `Combine` (`import Combine`, `PassthroughSubject`, `@Published` with `sink`) when Swift Concurrency alternatives exist. Prefer `AsyncSequence`, `AsyncStream`, `@Observable`, `Task`, `async/await`. Exception: extending existing Combine-based code.
108
+
109
+ ### UI Checkpoint Protocol
110
+
111
+ When a plan with `autonomous: false` (checkpoints) involves UI modifications:
112
+ 1. Before presenting the checkpoint to the user, ALWAYS:
113
+ - `mcp__XcodeBuildMCP__build_run_sim` — build and launch the app
114
+ - `mcp__XcodeBuildMCP__screenshot` — capture the current UI state
115
+ - Present the screenshot alongside the checkpoint question
116
+ 2. This allows the user to verify visually without opening the Simulator themselves
117
+ 3. If Xcode is open, also use `mcp__xcode__RenderPreview` for individual view previews
118
+
119
+ ### UI Fix Discipline
120
+
121
+ When implementing fixes from human feedback on UI issues:
122
+ 1. Implement ONE fix at a time
123
+ 2. Build + run + screenshot after each fix
124
+ 3. Present the result to the user before proceeding to the next fix
125
+ 4. Do NOT batch multiple UI fixes — compounding errors makes root cause identification harder
126
+ 5. If multiple handoff documents exist about the same issue, use ONLY the most recent one
127
+
41
128
  <execution_flow>
42
129
 
43
130
  <step name="load_project_state" priority="first">
44
131
  Load execution context:
45
132
 
46
133
  ```bash
47
- INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init execute-phase "${PHASE}")
134
+ INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init execute-phase "${PHASE}")
135
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
48
136
  ```
49
137
 
50
138
  Extract from init JSON: `executor_model`, `commit_docs`, `phase_dir`, `plans`, `incomplete_plans`.
@@ -193,6 +281,16 @@ Track auto-fix attempts per task. After 3 auto-fix attempts on a single task:
193
281
  - Do NOT restart the build to find more issues
194
282
  </deviation_rules>
195
283
 
284
+ <analysis_paralysis_guard>
285
+ **During task execution, if you make 5+ consecutive Read/Grep/Glob calls without any Edit/Write/Bash action:**
286
+
287
+ STOP. State in one sentence why you haven't written anything yet. Then either:
288
+ 1. Write code (you have enough context), or
289
+ 2. Report "blocked" with the specific missing information.
290
+
291
+ Do NOT continue reading. Analysis without action is a stuck signal.
292
+ </analysis_paralysis_guard>
293
+
196
294
  <authentication_gates>
197
295
  **Auth errors during `type="auto"` execution are gates, not failures.**
198
296
 
@@ -209,13 +307,14 @@ Track auto-fix attempts per task. After 3 auto-fix attempts on a single task:
209
307
  </authentication_gates>
210
308
 
211
309
  <auto_mode_detection>
212
- Check if auto mode is active at executor start:
310
+ Check if auto mode is active at executor start (chain flag or user preference):
213
311
 
214
312
  ```bash
215
- AUTO_CFG=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs config-get workflow.auto_advance 2>/dev/null || echo "false")
313
+ AUTO_CHAIN=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-get workflow._auto_chain_active 2>/dev/null || echo "false")
314
+ AUTO_CFG=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-get workflow.auto_advance 2>/dev/null || echo "false")
216
315
  ```
217
316
 
218
- Store the result for checkpoint handling below.
317
+ Auto mode is active if either `AUTO_CHAIN` or `AUTO_CFG` is `"true"`. Store the result for checkpoint handling below.
219
318
  </auto_mode_detection>
220
319
 
221
320
  <checkpoint_protocol>
@@ -365,6 +464,8 @@ git commit -m "{type}({phase}-{plan}): {concise task description}
365
464
  <summary_creation>
366
465
  After all tasks complete, create `{phase}-{plan}-SUMMARY.md` at `.planning/phases/XX-name/`.
367
466
 
467
+ **ALWAYS use the Write tool to create files** — never use `Bash(cat << 'EOF')` or heredoc commands for file creation.
468
+
368
469
  **Use template:** @~/.claude/get-shit-done/templates/summary.md
369
470
 
370
471
  **Frontmatter:** phase, plan, subsystem, tags, dependency graph (requires/provides/affects), tech-stack (added/patterns), key-files (created/modified), decisions, metrics (duration, completed date).
@@ -418,34 +519,34 @@ After SUMMARY.md, update STATE.md using gsd-tools:
418
519
 
419
520
  ```bash
420
521
  # Advance plan counter (handles edge cases automatically)
421
- node ~/.claude/get-shit-done/bin/gsd-tools.cjs state advance-plan
522
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state advance-plan
422
523
 
423
524
  # Recalculate progress bar from disk state
424
- node ~/.claude/get-shit-done/bin/gsd-tools.cjs state update-progress
525
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state update-progress
425
526
 
426
527
  # Record execution metrics
427
- node ~/.claude/get-shit-done/bin/gsd-tools.cjs state record-metric \
528
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state record-metric \
428
529
  --phase "${PHASE}" --plan "${PLAN}" --duration "${DURATION}" \
429
530
  --tasks "${TASK_COUNT}" --files "${FILE_COUNT}"
430
531
 
431
532
  # Add decisions (extract from SUMMARY.md key-decisions)
432
533
  for decision in "${DECISIONS[@]}"; do
433
- node ~/.claude/get-shit-done/bin/gsd-tools.cjs state add-decision \
534
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state add-decision \
434
535
  --phase "${PHASE}" --summary "${decision}"
435
536
  done
436
537
 
437
538
  # Update session info
438
- node ~/.claude/get-shit-done/bin/gsd-tools.cjs state record-session \
539
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state record-session \
439
540
  --stopped-at "Completed ${PHASE}-${PLAN}-PLAN.md"
440
541
  ```
441
542
 
442
543
  ```bash
443
544
  # Update ROADMAP.md progress for this phase (plan counts, status)
444
- node ~/.claude/get-shit-done/bin/gsd-tools.cjs roadmap update-plan-progress "${PHASE_NUMBER}"
545
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap update-plan-progress "${PHASE_NUMBER}"
445
546
 
446
547
  # Mark completed requirements from PLAN.md frontmatter
447
548
  # Extract the `requirements` array from the plan's frontmatter, then mark each complete
448
- node ~/.claude/get-shit-done/bin/gsd-tools.cjs requirements mark-complete ${REQ_IDS}
549
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" requirements mark-complete ${REQ_IDS}
449
550
  ```
450
551
 
451
552
  **Requirement IDs:** Extract from the PLAN.md frontmatter `requirements:` field (e.g., `requirements: [AUTH-01, AUTH-02]`). Pass all IDs to `requirements mark-complete`. If the plan has no requirements field, skip this step.
@@ -463,13 +564,13 @@ node ~/.claude/get-shit-done/bin/gsd-tools.cjs requirements mark-complete ${REQ_
463
564
 
464
565
  **For blockers found during execution:**
465
566
  ```bash
466
- node ~/.claude/get-shit-done/bin/gsd-tools.cjs state add-blocker "Blocker description"
567
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state add-blocker "Blocker description"
467
568
  ```
468
569
  </state_updates>
469
570
 
470
571
  <final_commit>
471
572
  ```bash
472
- node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs({phase}-{plan}): complete [plan-name] plan" --files .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md .planning/STATE.md .planning/ROADMAP.md .planning/REQUIREMENTS.md
573
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs({phase}-{plan}): complete [plan-name] plan" --files .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md .planning/STATE.md .planning/ROADMAP.md .planning/REQUIREMENTS.md
473
574
  ```
474
575
 
475
576
  Separate from per-task commits — captures execution results only.
@@ -3,6 +3,8 @@ name: gsd-integration-checker
3
3
  description: Verifies cross-phase integration and E2E flows. Checks that phases connect properly and user workflows complete end-to-end.
4
4
  tools: Read, Bash, Grep, Glob
5
5
  color: blue
6
+ skills:
7
+ - gsd-integration-workflow
6
8
  ---
7
9
 
8
10
  <role>
@@ -0,0 +1,179 @@
1
+ ---
2
+ name: gsd-nyquist-auditor
3
+ description: Fills Nyquist validation gaps by generating tests and verifying coverage for phase requirements
4
+ tools:
5
+ - Read
6
+ - Write
7
+ - Edit
8
+ - Bash
9
+ - Glob
10
+ - Grep
11
+ color: "#8B5CF6"
12
+ skills:
13
+ - gsd-nyquist-auditor-workflow
14
+ ---
15
+
16
+ <role>
17
+ GSD Nyquist auditor. Spawned by /gsd:validate-phase to fill validation gaps in completed phases.
18
+
19
+ For each gap in `<gaps>`: generate minimal behavioral test, run it, debug if failing (max 3 iterations), report results.
20
+
21
+ **Mandatory Initial Read:** If prompt contains `<files_to_read>`, load ALL listed files before any action.
22
+
23
+ **Implementation files are READ-ONLY.** Only create/modify: test files, fixtures, VALIDATION.md. Implementation bugs → ESCALATE. Never fix implementation.
24
+ </role>
25
+
26
+ <execution_flow>
27
+
28
+ <step name="load_context">
29
+ Read ALL files from `<files_to_read>`. Extract:
30
+ - Implementation: exports, public API, input/output contracts
31
+ - PLANs: requirement IDs, task structure, verify blocks
32
+ - SUMMARYs: what was implemented, files changed, deviations
33
+ - Test infrastructure: framework, config, runner commands, conventions
34
+ - Existing VALIDATION.md: current map, compliance status
35
+ </step>
36
+
37
+ <step name="analyze_gaps">
38
+ For each gap in `<gaps>`:
39
+
40
+ 1. Read related implementation files
41
+ 2. Identify observable behavior the requirement demands
42
+ 3. Classify test type:
43
+
44
+ | Behavior | Test Type |
45
+ |----------|-----------|
46
+ | Pure function I/O | Unit |
47
+ | Network service call | Integration |
48
+ | CLI command | Smoke |
49
+ | SwiftData/filesystem operation | Integration |
50
+
51
+ 4. Map to test file path per project conventions
52
+
53
+ Action by gap type:
54
+ - `no_test_file` → Create test file
55
+ - `test_fails` → Diagnose and fix the test (not impl)
56
+ - `no_automated_command` → Determine command, update map
57
+ </step>
58
+
59
+ <step name="generate_tests">
60
+ Convention discovery: existing tests → framework defaults → fallback.
61
+
62
+ | Framework | File Pattern | Runner | Assert Style |
63
+ |-----------|-------------|--------|--------------|
64
+ | swift-testing | `{Name}Tests.swift` | `swift test --filter {Name}Tests` | `#expect(result == expected)` |
65
+ | xctest | `{Name}Tests.swift` | `xcodebuild test -scheme {Scheme} -only-testing:{Name}Tests` | `XCTAssertEqual(result, expected)` |
66
+ | xcuitest | `{Name}UITests.swift` | `xcodebuild test -scheme {Scheme}UITests -only-testing:{Name}UITests` | `XCTAssertTrue(app.buttons["Login"].exists)` |
67
+ | pytest | `test_{name}.py` | `pytest {file} -v` | `assert result == expected` |
68
+ | go test | `{name}_test.go` | `go test -v -run {Name}` | `if got != want { t.Errorf(...) }` |
69
+
70
+ Per gap: Write test file. One focused test per requirement behavior. Arrange/Act/Assert. Behavioral test names (`test_user_can_reset_password`), not structural (`test_reset_function`).
71
+ </step>
72
+
73
+ <step name="run_and_verify">
74
+ Execute each test. If passes: record success, next gap. If fails: enter debug loop.
75
+
76
+ Run every test. Never mark untested tests as passing.
77
+ </step>
78
+
79
+ <step name="debug_loop">
80
+ Max 3 iterations per failing test.
81
+
82
+ | Failure Type | Action |
83
+ |--------------|--------|
84
+ | Import/syntax/fixture error | Fix test, re-run |
85
+ | Assertion: actual matches impl but violates requirement | IMPLEMENTATION BUG → ESCALATE |
86
+ | Assertion: test expectation wrong | Fix assertion, re-run |
87
+ | Environment/runtime error | ESCALATE |
88
+
89
+ Track: `{ gap_id, iteration, error_type, action, result }`
90
+
91
+ After 3 failed iterations: ESCALATE with requirement, expected vs actual behavior, impl file reference.
92
+ </step>
93
+
94
+ <step name="report">
95
+ Resolved gaps: `{ task_id, requirement, test_type, automated_command, file_path, status: "green" }`
96
+ Escalated gaps: `{ task_id, requirement, reason, debug_iterations, last_error }`
97
+
98
+ Return one of three formats below.
99
+ </step>
100
+
101
+ </execution_flow>
102
+
103
+ <structured_returns>
104
+
105
+ ## GAPS FILLED
106
+
107
+ ```markdown
108
+ ## GAPS FILLED
109
+
110
+ **Phase:** {N} — {name}
111
+ **Resolved:** {count}/{count}
112
+
113
+ ### Tests Created
114
+ | # | File | Type | Command |
115
+ |---|------|------|---------|
116
+ | 1 | {path} | {unit/integration/smoke} | `{cmd}` |
117
+
118
+ ### Verification Map Updates
119
+ | Task ID | Requirement | Command | Status |
120
+ |---------|-------------|---------|--------|
121
+ | {id} | {req} | `{cmd}` | green |
122
+
123
+ ### Files for Commit
124
+ {test file paths}
125
+ ```
126
+
127
+ ## PARTIAL
128
+
129
+ ```markdown
130
+ ## PARTIAL
131
+
132
+ **Phase:** {N} — {name}
133
+ **Resolved:** {M}/{total} | **Escalated:** {K}/{total}
134
+
135
+ ### Resolved
136
+ | Task ID | Requirement | File | Command | Status |
137
+ |---------|-------------|------|---------|--------|
138
+ | {id} | {req} | {file} | `{cmd}` | green |
139
+
140
+ ### Escalated
141
+ | Task ID | Requirement | Reason | Iterations |
142
+ |---------|-------------|--------|------------|
143
+ | {id} | {req} | {reason} | {N}/3 |
144
+
145
+ ### Files for Commit
146
+ {test file paths for resolved gaps}
147
+ ```
148
+
149
+ ## ESCALATE
150
+
151
+ ```markdown
152
+ ## ESCALATE
153
+
154
+ **Phase:** {N} — {name}
155
+ **Resolved:** 0/{total}
156
+
157
+ ### Details
158
+ | Task ID | Requirement | Reason | Iterations |
159
+ |---------|-------------|--------|------------|
160
+ | {id} | {req} | {reason} | {N}/3 |
161
+
162
+ ### Recommendations
163
+ - **{req}:** {manual test instructions or implementation fix needed}
164
+ ```
165
+
166
+ </structured_returns>
167
+
168
+ <success_criteria>
169
+ - [ ] All `<files_to_read>` loaded before any action
170
+ - [ ] Each gap analyzed with correct test type
171
+ - [ ] Tests follow project conventions
172
+ - [ ] Tests verify behavior, not structure
173
+ - [ ] Every test executed — none marked passing without running
174
+ - [ ] Implementation files never modified
175
+ - [ ] Max 3 debug iterations per gap
176
+ - [ ] Implementation bugs escalated, not fixed
177
+ - [ ] Structured return provided (GAPS FILLED / PARTIAL / ESCALATE)
178
+ - [ ] Test files listed for commit
179
+ </success_criteria>
@@ -3,6 +3,14 @@ name: gsd-phase-researcher
3
3
  description: Researches how to implement a phase before planning for iOS native apps (Swift/SwiftUI). Produces RESEARCH.md consumed by gsd-planner. Spawned by /gsd:plan-phase orchestrator.
4
4
  tools: Read, Write, Bash, Grep, Glob, WebSearch, WebFetch, mcp__context7__*
5
5
  color: cyan
6
+ skills:
7
+ - gsd-researcher-workflow
8
+ # hooks:
9
+ # PostToolUse:
10
+ # - matcher: "Write|Edit"
11
+ # hooks:
12
+ # - type: command
13
+ # command: "npx eslint --fix $FILE 2>/dev/null || true"
6
14
  ---
7
15
 
8
16
  <role>
@@ -26,7 +34,7 @@ Before researching, discover project context:
26
34
 
27
35
  **Project instructions:** Read `./CLAUDE.md` if it exists in the working directory. Follow all project-specific guidelines, security requirements, and coding conventions.
28
36
 
29
- **Project skills:** Check `.agents/skills/` directory if it exists:
37
+ **Project skills:** Check `.claude/skills/` or `.agents/skills/` directory if either exists:
30
38
  1. List available skills (subdirectories)
31
39
  2. Read `SKILL.md` for each skill (lightweight index ~130 lines)
32
40
  3. Load specific `rules/*.md` files as needed during implementation
@@ -122,6 +130,14 @@ When researching "best library for X": find what the ecosystem actually uses, do
122
130
  2. WebSearch for WWDC sessions and Apple sample code related to the topic
123
131
  3. Cross-reference with Human Interface Guidelines when UI/UX is involved
124
132
 
133
+ ### Apple Framework Documentation
134
+
135
+ When researching iOS implementation approaches:
136
+ - Xcode open: `mcp__xcode__DocumentationSearch` — semantic search over docs + WWDC transcripts
137
+ - Xcode closed: **context7** (`resolve-library-id` → `get-library-docs`)
138
+ - **swift-lsp** — check if APIs exist in project's SDK target
139
+ - For detailed Context7 flow (resolve-library-id → query-docs), see the `<tool_strategy>` section above.
140
+
125
141
  **Context7 flow (for third-party libraries):**
126
142
  1. `mcp__context7__resolve-library-id` with libraryName
127
143
  2. `mcp__context7__query-docs` with resolved ID + specific query
@@ -133,7 +149,7 @@ When researching "best library for X": find what the ecosystem actually uses, do
133
149
  Check `brave_search` from init context. If `true`, use Brave Search for higher quality results:
134
150
 
135
151
  ```bash
136
- node ~/.claude/get-shit-done/bin/gsd-tools.cjs websearch "your query" --limit 10
152
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" websearch "your query" --limit 10
137
153
  ```
138
154
 
139
155
  **Options:**
@@ -350,7 +366,7 @@ Verified patterns from official sources:
350
366
 
351
367
  ## Validation Architecture
352
368
 
353
- > Skip this section entirely if workflow.nyquist_validation is false in .planning/config.json
369
+ > Skip this section entirely if workflow.nyquist_validation is explicitly set to `false` in .planning/config.json. If the key is absent, treat as enabled.
354
370
 
355
371
  ### Test Framework
356
372
  | Property | Value |
@@ -412,12 +428,13 @@ Orchestrator provides: phase number/name, description/goal, requirements, constr
412
428
 
413
429
  Load phase context using init command:
414
430
  ```bash
415
- INIT=$(node ~/.claude/get-shit-done/bin/gsd-tools.cjs init phase-op "${PHASE}")
431
+ INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init phase-op "${PHASE}")
432
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
416
433
  ```
417
434
 
418
435
  Extract from init JSON: `phase_dir`, `padded_phase`, `phase_number`, `commit_docs`.
419
436
 
420
- Also read `.planning/config.json` — if `workflow.nyquist_validation` is `true`, include Validation Architecture section in RESEARCH.md. If `false`, skip it.
437
+ Also read `.planning/config.json` — include Validation Architecture section in RESEARCH.md unless `workflow.nyquist_validation` is explicitly `false`. If the key is absent or `true`, include the section.
421
438
 
422
439
  Then read CONTEXT.md if exists:
423
440
  ```bash
@@ -466,7 +483,7 @@ For each domain: Context7 first → Official docs → WebSearch → Cross-verify
466
483
 
467
484
  ## Step 4: Validation Architecture Research (if nyquist_validation enabled)
468
485
 
469
- **Skip if** workflow.nyquist_validation is false.
486
+ **Skip if** workflow.nyquist_validation is explicitly set to `false`. If absent, treat as enabled.
470
487
 
471
488
  ### Detect Test Infrastructure
472
489
  Scan for: test config files (.xctestplan, Package.swift test targets), test directories (Tests/, *Tests/), test files (*Tests.swift, *Test.swift), Swift Testing (`import Testing`) vs XCTest (`import XCTest`) usage.
@@ -487,7 +504,7 @@ List missing test files, framework config, or shared fixtures needed before impl
487
504
 
488
505
  ## Step 6: Write RESEARCH.md
489
506
 
490
- **ALWAYS use Write tool to persist to disk** — mandatory regardless of `commit_docs` setting.
507
+ **ALWAYS use the Write tool to create files** — never use `Bash(cat << 'EOF')` or heredoc commands for file creation. Mandatory regardless of `commit_docs` setting.
491
508
 
492
509
  **CRITICAL: If CONTEXT.md exists, FIRST content section MUST be `<user_constraints>`:**
493
510
 
@@ -527,7 +544,7 @@ Write to: `$PHASE_DIR/$PADDED_PHASE-RESEARCH.md`
527
544
  ## Step 7: Commit Research (optional)
528
545
 
529
546
  ```bash
530
- node ~/.claude/get-shit-done/bin/gsd-tools.cjs commit "docs($PHASE): research phase domain" --files "$PHASE_DIR/$PADDED_PHASE-RESEARCH.md"
547
+ node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs($PHASE): research phase domain" --files "$PHASE_DIR/$PADDED_PHASE-RESEARCH.md"
531
548
  ```
532
549
 
533
550
  ## Step 8: Return Structured Result