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.
- package/README.md +3 -3
- package/agents/gsd-codebase-mapper.md +9 -1
- package/agents/gsd-debugger.md +35 -2
- package/agents/gsd-executor.md +115 -14
- package/agents/gsd-integration-checker.md +2 -0
- package/agents/gsd-nyquist-auditor.md +179 -0
- package/agents/gsd-phase-researcher.md +25 -8
- package/agents/gsd-plan-checker.md +25 -7
- package/agents/gsd-planner.md +78 -17
- package/agents/gsd-project-researcher.md +11 -1
- package/agents/gsd-research-synthesizer.md +11 -1
- package/agents/gsd-roadmapper.md +26 -13
- package/agents/gsd-verifier.md +29 -7
- package/bin/install.js +33 -30
- package/commands/gsd/debug.md +3 -2
- package/commands/gsd/discuss-phase.md +17 -10
- package/commands/gsd/quick.md +6 -2
- package/commands/gsd/reapply-patches.md +17 -4
- package/commands/gsd/research-phase.md +25 -22
- package/commands/gsd/validate-phase.md +35 -0
- package/get-shit-done/bin/lib/core.cjs +88 -7
- package/get-shit-done/bin/lib/milestone.cjs +39 -2
- package/get-shit-done/bin/lib/phase.cjs +12 -5
- package/get-shit-done/bin/lib/state.cjs +101 -59
- package/get-shit-done/references/checkpoints.md +1 -1
- package/get-shit-done/references/decimal-phase-calculation.md +6 -6
- package/get-shit-done/references/git-integration.md +3 -3
- package/get-shit-done/references/git-planning-commit.md +2 -2
- package/get-shit-done/references/ios-frameworks.md +23 -0
- package/get-shit-done/references/ios-mcp-tools.md +155 -0
- package/get-shit-done/references/ios-swift-guidelines.md +37 -0
- package/get-shit-done/references/ios-testing.md +55 -0
- package/get-shit-done/references/model-profiles.md +1 -0
- package/get-shit-done/references/phase-argument-parsing.md +4 -4
- package/get-shit-done/references/planning-config.md +12 -8
- package/get-shit-done/references/questioning.md +17 -0
- package/get-shit-done/templates/context.md +14 -0
- package/get-shit-done/templates/roadmap.md +1 -1
- package/get-shit-done/workflows/add-phase.md +3 -2
- package/get-shit-done/workflows/add-tests.md +2 -2
- package/get-shit-done/workflows/add-todo.md +9 -8
- package/get-shit-done/workflows/audit-milestone.md +40 -5
- package/get-shit-done/workflows/check-todos.md +3 -2
- package/get-shit-done/workflows/cleanup.md +1 -1
- package/get-shit-done/workflows/complete-milestone.md +7 -6
- package/get-shit-done/workflows/diagnose-issues.md +2 -2
- package/get-shit-done/workflows/discuss-phase.md +191 -58
- package/get-shit-done/workflows/execute-phase.md +40 -14
- package/get-shit-done/workflows/execute-plan.md +13 -12
- package/get-shit-done/workflows/health.md +5 -2
- package/get-shit-done/workflows/insert-phase.md +3 -2
- package/get-shit-done/workflows/map-codebase.md +3 -2
- package/get-shit-done/workflows/new-milestone.md +10 -8
- package/get-shit-done/workflows/new-project.md +58 -40
- package/get-shit-done/workflows/pause-work.md +2 -2
- package/get-shit-done/workflows/plan-milestone-gaps.md +3 -3
- package/get-shit-done/workflows/plan-phase.md +9 -9
- package/get-shit-done/workflows/progress.md +7 -6
- package/get-shit-done/workflows/quick.md +158 -10
- package/get-shit-done/workflows/remove-phase.md +5 -4
- package/get-shit-done/workflows/research-phase.md +3 -2
- package/get-shit-done/workflows/resume-project.md +2 -1
- package/get-shit-done/workflows/set-profile.md +3 -2
- package/get-shit-done/workflows/settings.md +5 -4
- package/get-shit-done/workflows/transition.md +5 -5
- package/get-shit-done/workflows/update.md +35 -14
- package/get-shit-done/workflows/validate-phase.md +167 -0
- package/get-shit-done/workflows/verify-phase.md +7 -6
- package/get-shit-done/workflows/verify-work.md +16 -2
- package/hooks/dist/gsd-check-update.js +22 -3
- package/hooks/dist/gsd-context-monitor.js +28 -9
- package/hooks/dist/gsd-statusline.js +19 -12
- 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)
|
|
12
|
-
[](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
|
-
| `
|
|
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
|
-
|
|
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">
|
package/agents/gsd-debugger.md
CHANGED
|
@@ -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
|
|
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
|
|
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.
|
package/agents/gsd-executor.md
CHANGED
|
@@ -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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
525
|
+
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state update-progress
|
|
425
526
|
|
|
426
527
|
# Record execution metrics
|
|
427
|
-
node
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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` —
|
|
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
|
|
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
|
|
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
|