get-shit-done-cc 1.38.1 → 1.38.2
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/commands/gsd/sketch.md +13 -4
- package/commands/gsd/spike.md +16 -6
- package/get-shit-done/workflows/sketch-wrap-up.md +6 -4
- package/get-shit-done/workflows/sketch.md +121 -26
- package/get-shit-done/workflows/spike-wrap-up.md +102 -69
- package/get-shit-done/workflows/spike.md +252 -70
- package/package.json +1 -1
package/commands/gsd/sketch.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd:sketch
|
|
3
|
-
description:
|
|
4
|
-
argument-hint: "
|
|
3
|
+
description: Sketch UI/design ideas with throwaway HTML mockups, or propose what to sketch next (frontier mode)
|
|
4
|
+
argument-hint: "[design idea to explore] [--quick] [--text] or [frontier]"
|
|
5
5
|
allowed-tools:
|
|
6
6
|
- Read
|
|
7
7
|
- Write
|
|
@@ -10,11 +10,20 @@ allowed-tools:
|
|
|
10
10
|
- Grep
|
|
11
11
|
- Glob
|
|
12
12
|
- AskUserQuestion
|
|
13
|
+
- WebSearch
|
|
14
|
+
- WebFetch
|
|
15
|
+
- mcp__context7__resolve-library-id
|
|
16
|
+
- mcp__context7__query-docs
|
|
13
17
|
---
|
|
14
18
|
<objective>
|
|
15
19
|
Explore design directions through throwaway HTML mockups before committing to implementation.
|
|
16
20
|
Each sketch produces 2-3 variants for comparison. Sketches live in `.planning/sketches/` and
|
|
17
|
-
integrate with GSD commit patterns, state tracking, and handoff workflows.
|
|
21
|
+
integrate with GSD commit patterns, state tracking, and handoff workflows. Loads spike
|
|
22
|
+
findings to ground mockups in real data shapes and validated interaction patterns.
|
|
23
|
+
|
|
24
|
+
Two modes:
|
|
25
|
+
- **Idea mode** (default) — describe a design idea to sketch
|
|
26
|
+
- **Frontier mode** (no argument or "frontier") — analyzes existing sketch landscape and proposes consistency and frontier sketches
|
|
18
27
|
|
|
19
28
|
Does not require `/gsd-new-project` — auto-creates `.planning/sketches/` if needed.
|
|
20
29
|
</objective>
|
|
@@ -41,5 +50,5 @@ Design idea: $ARGUMENTS
|
|
|
41
50
|
|
|
42
51
|
<process>
|
|
43
52
|
Execute the sketch workflow from @~/.claude/get-shit-done/workflows/sketch.md end-to-end.
|
|
44
|
-
Preserve all workflow gates (intake, decomposition, variant evaluation, MANIFEST updates, commit patterns).
|
|
53
|
+
Preserve all workflow gates (intake, decomposition, target stack research, variant evaluation, MANIFEST updates, commit patterns).
|
|
45
54
|
</process>
|
package/commands/gsd/spike.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsd:spike
|
|
3
|
-
description:
|
|
4
|
-
argument-hint: "
|
|
3
|
+
description: Spike an idea through experiential exploration, or propose what to spike next (frontier mode)
|
|
4
|
+
argument-hint: "[idea to validate] [--quick] [--text] or [frontier]"
|
|
5
5
|
allowed-tools:
|
|
6
6
|
- Read
|
|
7
7
|
- Write
|
|
@@ -10,11 +10,20 @@ allowed-tools:
|
|
|
10
10
|
- Grep
|
|
11
11
|
- Glob
|
|
12
12
|
- AskUserQuestion
|
|
13
|
+
- WebSearch
|
|
14
|
+
- WebFetch
|
|
15
|
+
- mcp__context7__resolve-library-id
|
|
16
|
+
- mcp__context7__query-docs
|
|
13
17
|
---
|
|
14
18
|
<objective>
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
with GSD commit patterns, state tracking,
|
|
19
|
+
Spike an idea through experiential exploration — build focused experiments to feel the pieces
|
|
20
|
+
of a future app, validate feasibility, and produce verified knowledge for the real build.
|
|
21
|
+
Spikes live in `.planning/spikes/` and integrate with GSD commit patterns, state tracking,
|
|
22
|
+
and handoff workflows.
|
|
23
|
+
|
|
24
|
+
Two modes:
|
|
25
|
+
- **Idea mode** (default) — describe an idea to spike
|
|
26
|
+
- **Frontier mode** (no argument or "frontier") — analyzes existing spike landscape and proposes integration and frontier spikes
|
|
18
27
|
|
|
19
28
|
Does not require `/gsd-new-project` — auto-creates `.planning/spikes/` if needed.
|
|
20
29
|
</objective>
|
|
@@ -33,9 +42,10 @@ Idea: $ARGUMENTS
|
|
|
33
42
|
|
|
34
43
|
**Available flags:**
|
|
35
44
|
- `--quick` — Skip decomposition/alignment, jump straight to building. Use when you already know what to spike.
|
|
45
|
+
- `--text` — Use plain-text numbered lists instead of AskUserQuestion (for non-Claude runtimes).
|
|
36
46
|
</context>
|
|
37
47
|
|
|
38
48
|
<process>
|
|
39
49
|
Execute the spike workflow from @~/.claude/get-shit-done/workflows/spike.md end-to-end.
|
|
40
|
-
Preserve all workflow gates (decomposition, risk ordering, verification, MANIFEST updates, commit patterns).
|
|
50
|
+
Preserve all workflow gates (prior spike check, decomposition, research, risk ordering, observability assessment, verification, MANIFEST updates, commit patterns).
|
|
41
51
|
</process>
|
|
@@ -255,15 +255,16 @@ The sketch-findings skill will auto-load when building the UI.
|
|
|
255
255
|
|
|
256
256
|
## ▶ Next Up
|
|
257
257
|
|
|
258
|
-
**
|
|
258
|
+
**Explore frontier sketches** — see what else is worth sketching based on what we've explored
|
|
259
259
|
|
|
260
|
-
`/gsd-
|
|
260
|
+
`/gsd-sketch` (run with no argument — its frontier mode analyzes the sketch landscape and proposes consistency and frontier sketches)
|
|
261
261
|
|
|
262
262
|
───────────────────────────────────────────────────────────────
|
|
263
263
|
|
|
264
264
|
**Also available:**
|
|
265
|
+
- `/gsd-plan-phase` — start building the real UI
|
|
265
266
|
- `/gsd-ui-phase` — generate a UI design contract for a frontend phase
|
|
266
|
-
- `/gsd-sketch` — sketch
|
|
267
|
+
- `/gsd-sketch [idea]` — sketch a specific new design area
|
|
267
268
|
- `/gsd-explore` — continue exploring
|
|
268
269
|
|
|
269
270
|
───────────────────────────────────────────────────────────────
|
|
@@ -279,5 +280,6 @@ The sketch-findings skill will auto-load when building the UI.
|
|
|
279
280
|
- [ ] Reference files contain design decisions, CSS patterns, HTML structures, anti-patterns
|
|
280
281
|
- [ ] `.planning/sketches/WRAP-UP-SUMMARY.md` written for project history
|
|
281
282
|
- [ ] Project CLAUDE.md has auto-load routing line
|
|
282
|
-
- [ ] Summary presented
|
|
283
|
+
- [ ] Summary presented
|
|
284
|
+
- [ ] Next-step options presented (including frontier sketch exploration via `/gsd-sketch`)
|
|
283
285
|
</success_criteria>
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
Explore design directions through throwaway HTML mockups before committing to implementation.
|
|
3
3
|
Each sketch produces 2-3 variants for comparison. Saves artifacts to `.planning/sketches/`.
|
|
4
4
|
Companion to `/gsd-sketch-wrap-up`.
|
|
5
|
+
|
|
6
|
+
Supports two modes:
|
|
7
|
+
- **Idea mode** (default) — user describes a design idea to sketch
|
|
8
|
+
- **Frontier mode** — no argument or "frontier" / "what should I sketch?" — analyzes existing sketch landscape and proposes consistency and frontier sketches
|
|
5
9
|
</purpose>
|
|
6
10
|
|
|
7
11
|
<required_reading>
|
|
@@ -25,9 +29,60 @@ Read all files referenced by the invoking prompt's execution_context before star
|
|
|
25
29
|
Parse `$ARGUMENTS` for:
|
|
26
30
|
- `--quick` flag → set `QUICK_MODE=true`
|
|
27
31
|
- `--text` flag → set `TEXT_MODE=true`
|
|
32
|
+
- `frontier` or empty → set `FRONTIER_MODE=true`
|
|
28
33
|
- Remaining text → the design idea to sketch
|
|
29
34
|
|
|
30
|
-
**Text mode
|
|
35
|
+
**Text mode:** If TEXT_MODE is enabled, replace AskUserQuestion calls with plain-text numbered lists.
|
|
36
|
+
</step>
|
|
37
|
+
|
|
38
|
+
<step name="route">
|
|
39
|
+
## Routing
|
|
40
|
+
|
|
41
|
+
- **FRONTIER_MODE is true** → Jump to `frontier_mode`
|
|
42
|
+
- **Otherwise** → Continue to `setup_directory`
|
|
43
|
+
</step>
|
|
44
|
+
|
|
45
|
+
<step name="frontier_mode">
|
|
46
|
+
## Frontier Mode — Propose What to Sketch Next
|
|
47
|
+
|
|
48
|
+
### Load the Sketch Landscape
|
|
49
|
+
|
|
50
|
+
If no `.planning/sketches/` directory exists, tell the user there's nothing to analyze and offer to start fresh with an idea instead.
|
|
51
|
+
|
|
52
|
+
Otherwise, load in this order:
|
|
53
|
+
|
|
54
|
+
**a. MANIFEST.md** — the design direction, reference points, and sketch table with winners.
|
|
55
|
+
|
|
56
|
+
**b. Findings skills** — glob `./.claude/skills/sketch-findings-*/SKILL.md` and read any that exist, plus their `references/*.md`. These contain curated design decisions from prior wrap-ups.
|
|
57
|
+
|
|
58
|
+
**c. All sketch READMEs** — read `.planning/sketches/*/README.md` for design questions, winners, and tags.
|
|
59
|
+
|
|
60
|
+
### Analyze for Consistency Sketches
|
|
61
|
+
|
|
62
|
+
Review winning variants across all sketches. Look for:
|
|
63
|
+
|
|
64
|
+
- **Visual consistency gaps:** Two sketches made independent design choices that haven't been tested together.
|
|
65
|
+
- **State combinations:** Individual states validated but not seen in sequence.
|
|
66
|
+
- **Responsive gaps:** Validated at one viewport but the real app needs multiple.
|
|
67
|
+
- **Theme coherence:** Individual components look good but haven't been composed into a full-page view.
|
|
68
|
+
|
|
69
|
+
If consistency risks exist, present them as concrete proposed sketches with names and design questions. If no meaningful gaps, say so and skip.
|
|
70
|
+
|
|
71
|
+
### Analyze for Frontier Sketches
|
|
72
|
+
|
|
73
|
+
Think laterally about the design direction from MANIFEST.md and what's been explored:
|
|
74
|
+
|
|
75
|
+
- **Unsketched screens:** UI surfaces assumed but unexplored.
|
|
76
|
+
- **Interaction patterns:** Static layouts validated but transitions, loading, drag-and-drop need feeling.
|
|
77
|
+
- **Edge case UI:** 0 items, 1000 items, errors, slow connections.
|
|
78
|
+
- **Alternative directions:** Fresh takes on "fine but not great" sketches.
|
|
79
|
+
- **Polish passes:** Typography, spacing, micro-interactions, empty states.
|
|
80
|
+
|
|
81
|
+
Present frontier sketches as concrete proposals numbered from the highest existing sketch number.
|
|
82
|
+
|
|
83
|
+
### Get Alignment and Execute
|
|
84
|
+
|
|
85
|
+
Present all consistency and frontier candidates, then ask which to run. When the user picks sketches, update `.planning/sketches/MANIFEST.md` and proceed directly to building them starting at `build_sketches`.
|
|
31
86
|
</step>
|
|
32
87
|
|
|
33
88
|
<step name="setup_directory">
|
|
@@ -49,27 +104,45 @@ COMMIT_DOCS=$(gsd-sdk query config-get commit_docs 2>/dev/null || echo "true")
|
|
|
49
104
|
</step>
|
|
50
105
|
|
|
51
106
|
<step name="mood_intake">
|
|
52
|
-
**If `QUICK_MODE` is true:** Skip mood intake. Use whatever the user provided in `$ARGUMENTS` as the design direction. Jump to `
|
|
107
|
+
**If `QUICK_MODE` is true:** Skip mood intake. Use whatever the user provided in `$ARGUMENTS` as the design direction. Jump to `load_spike_context`.
|
|
53
108
|
|
|
54
109
|
**Otherwise:**
|
|
55
110
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
Before sketching anything, explore the design intent through conversation. Ask one question at a time — using AskUserQuestion in normal mode, or a plain-text numbered list if TEXT_MODE is active — with a paragraph of context and reasoning for each.
|
|
111
|
+
Before sketching anything, explore the design intent through conversation. Ask one question at a time — using AskUserQuestion in normal mode, or a plain-text numbered list if TEXT_MODE is active.
|
|
59
112
|
|
|
60
113
|
**Questions to cover (adapt to what the user has already shared):**
|
|
61
114
|
|
|
62
|
-
1. **Feel:** "What should this feel like? Give me adjectives, emotions, or a vibe."
|
|
63
|
-
2. **References:** "What apps, sites, or products have a similar feel to what you're imagining?"
|
|
64
|
-
3. **Core action:** "What's the single most important thing a user does here?"
|
|
115
|
+
1. **Feel:** "What should this feel like? Give me adjectives, emotions, or a vibe."
|
|
116
|
+
2. **References:** "What apps, sites, or products have a similar feel to what you're imagining?"
|
|
117
|
+
3. **Core action:** "What's the single most important thing a user does here?"
|
|
65
118
|
|
|
66
|
-
|
|
119
|
+
After each answer, briefly reflect what you heard and how it shapes your thinking.
|
|
67
120
|
|
|
68
121
|
When you have enough signal, ask: **"I think I have a good sense of the direction. Ready for me to sketch, or want to keep discussing?"**
|
|
69
122
|
|
|
70
123
|
Only proceed when the user says go.
|
|
71
124
|
</step>
|
|
72
125
|
|
|
126
|
+
<step name="load_spike_context">
|
|
127
|
+
## Load Spike Context
|
|
128
|
+
|
|
129
|
+
If spikes exist for this project, read them to ground the sketches in reality. Mockups are still pure HTML, but they should reflect what's actually been proven — real data shapes, real component names, real interaction patterns.
|
|
130
|
+
|
|
131
|
+
**a.** Glob for `./.claude/skills/spike-findings-*/SKILL.md` and read any that exist, plus their `references/*.md`. These contain validated patterns and requirements.
|
|
132
|
+
|
|
133
|
+
**b.** Read `.planning/spikes/MANIFEST.md` if it exists — check the Requirements section for non-negotiable design constraints (e.g., "must support streaming", "must render markdown"). These requirements should be visible in the mockup even though the mockup doesn't implement them for real.
|
|
134
|
+
|
|
135
|
+
**c.** Read `.planning/spikes/CONVENTIONS.md` if it exists — the established stack informs what's buildable and what interaction patterns are idiomatic.
|
|
136
|
+
|
|
137
|
+
**How spike context improves sketches:**
|
|
138
|
+
- Use real field names and data shapes from spike findings instead of generic placeholders
|
|
139
|
+
- Show realistic UI states that match what the spikes proved (e.g., if streaming was validated, show a streaming message state)
|
|
140
|
+
- Reference real component names and patterns from the target stack
|
|
141
|
+
- Include interaction states that reflect what the spikes discovered (loading, error, reconnection states)
|
|
142
|
+
|
|
143
|
+
**If no spikes exist**, skip this step.
|
|
144
|
+
</step>
|
|
145
|
+
|
|
73
146
|
<step name="decompose">
|
|
74
147
|
Break the idea into 2-5 design questions. Present as a table:
|
|
75
148
|
|
|
@@ -92,6 +165,28 @@ Bad sketches:
|
|
|
92
165
|
Present the table and get alignment before building.
|
|
93
166
|
</step>
|
|
94
167
|
|
|
168
|
+
<step name="research_stack">
|
|
169
|
+
## Research the Target Stack
|
|
170
|
+
|
|
171
|
+
Before sketching, ground the design in what's actually buildable. Sketches are HTML, but they should reflect real constraints of the target implementation.
|
|
172
|
+
|
|
173
|
+
**a. Identify the target stack.** Check for package.json, Cargo.toml, etc. If the user mentioned a framework (React, SwiftUI, Flutter, etc.), note it.
|
|
174
|
+
|
|
175
|
+
**b. Check component/pattern availability.** Use context7 (resolve-library-id → query-docs) or web search to answer:
|
|
176
|
+
- What layout primitives does the target framework provide?
|
|
177
|
+
- Are there existing component libraries in use? What components are available?
|
|
178
|
+
- What interaction patterns are idiomatic?
|
|
179
|
+
|
|
180
|
+
**c. Note constraints that affect design:**
|
|
181
|
+
- Platform conventions (iOS nav patterns, desktop menu bars, terminal grid constraints)
|
|
182
|
+
- Framework limitations (what's easy vs requires custom work)
|
|
183
|
+
- Existing design tokens or theme systems already in the project
|
|
184
|
+
|
|
185
|
+
**d. Let research inform variants.** At least one variant should follow the path of least resistance for the target stack.
|
|
186
|
+
|
|
187
|
+
**Skip when unnecessary.** Greenfield project with no stack, or user says "just explore visually." The point is grounding, not gatekeeping.
|
|
188
|
+
</step>
|
|
189
|
+
|
|
95
190
|
<step name="create_manifest">
|
|
96
191
|
Create or update `.planning/sketches/MANIFEST.md`:
|
|
97
192
|
|
|
@@ -124,26 +219,24 @@ Build each sketch in order.
|
|
|
124
219
|
|
|
125
220
|
### For Each Sketch:
|
|
126
221
|
|
|
127
|
-
**a.** Find next available number
|
|
128
|
-
Format: three-digit zero-padded + hyphenated descriptive name.
|
|
222
|
+
**a.** Find next available number. Format: three-digit zero-padded + hyphenated descriptive name.
|
|
129
223
|
|
|
130
224
|
**b.** Create the sketch directory: `.planning/sketches/NNN-descriptive-name/`
|
|
131
225
|
|
|
132
226
|
**c.** Build `index.html` with 2-3 variants:
|
|
133
227
|
|
|
134
|
-
**First round — dramatic differences:**
|
|
135
|
-
|
|
136
|
-
**Subsequent rounds — refinements:** Once the user has picked a direction or cherry-picked elements, build subtler variations within that direction.
|
|
228
|
+
**First round — dramatic differences:** 2-3 meaningfully different approaches.
|
|
229
|
+
**Subsequent rounds — refinements:** Subtler variations within the chosen direction.
|
|
137
230
|
|
|
138
231
|
Each variant is a page/tab in the same HTML file. Include:
|
|
139
232
|
- Tab navigation to switch between variants (see `sketch-variant-patterns.md`)
|
|
140
233
|
- Clear labels: "Variant A: Sidebar Layout", "Variant B: Top Nav", etc.
|
|
141
234
|
- The sketch toolbar (see `sketch-tooling.md`)
|
|
142
235
|
- All interactive elements functional (see `sketch-interactivity.md`)
|
|
143
|
-
- Real-ish content, not lorem ipsum
|
|
236
|
+
- Real-ish content, not lorem ipsum (use real field names from spike context if available)
|
|
144
237
|
- Link to `../themes/default.css` for shared theme variables
|
|
145
238
|
|
|
146
|
-
**All sketches are plain HTML with inline CSS and JS.** No build step, no npm, no framework.
|
|
239
|
+
**All sketches are plain HTML with inline CSS and JS.** No build step, no npm, no framework.
|
|
147
240
|
|
|
148
241
|
**d.** Write `README.md`:
|
|
149
242
|
|
|
@@ -190,16 +283,16 @@ Compare: {what to look for between variants}
|
|
|
190
283
|
──────────────────────────────────────────────────────────────
|
|
191
284
|
|
|
192
285
|
**f.** Handle feedback:
|
|
193
|
-
- **Pick a direction:**
|
|
194
|
-
- **Cherry-pick elements:**
|
|
195
|
-
- **Want more exploration:**
|
|
286
|
+
- **Pick a direction:** mark winner, move to next sketch
|
|
287
|
+
- **Cherry-pick elements:** build synthesis as new variant, show again
|
|
288
|
+
- **Want more exploration:** build new variants
|
|
196
289
|
|
|
197
|
-
Iterate until
|
|
290
|
+
Iterate until satisfied.
|
|
198
291
|
|
|
199
292
|
**g.** Finalize:
|
|
200
|
-
1. Mark
|
|
201
|
-
2. Add ★ indicator to
|
|
202
|
-
3. Update `.planning/sketches/MANIFEST.md`
|
|
293
|
+
1. Mark winning variant in README frontmatter (`winner: "B"`)
|
|
294
|
+
2. Add ★ indicator to winning tab in HTML
|
|
295
|
+
3. Update `.planning/sketches/MANIFEST.md`
|
|
203
296
|
|
|
204
297
|
**h.** Commit (if `COMMIT_DOCS` is true):
|
|
205
298
|
```bash
|
|
@@ -215,7 +308,7 @@ gsd-sdk query commit "docs(sketch-NNN): [winning direction] — [key visual insi
|
|
|
215
308
|
</step>
|
|
216
309
|
|
|
217
310
|
<step name="report">
|
|
218
|
-
After all sketches complete
|
|
311
|
+
After all sketches complete:
|
|
219
312
|
|
|
220
313
|
```
|
|
221
314
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
@@ -243,8 +336,8 @@ After all sketches complete, present the summary:
|
|
|
243
336
|
───────────────────────────────────────────────────────────────
|
|
244
337
|
|
|
245
338
|
**Also available:**
|
|
339
|
+
- `/gsd-sketch` — sketch more (or run with no argument for frontier mode)
|
|
246
340
|
- `/gsd-plan-phase` — start building the real UI
|
|
247
|
-
- `/gsd-explore` — continue exploring the concept
|
|
248
341
|
- `/gsd-spike` — spike technical feasibility of a design pattern
|
|
249
342
|
|
|
250
343
|
───────────────────────────────────────────────────────────────
|
|
@@ -255,7 +348,9 @@ After all sketches complete, present the summary:
|
|
|
255
348
|
<success_criteria>
|
|
256
349
|
- [ ] `.planning/sketches/` created (auto-creates if needed, no project init required)
|
|
257
350
|
- [ ] Design direction explored conversationally before any code (unless --quick)
|
|
258
|
-
- [ ]
|
|
351
|
+
- [ ] Spike context loaded — real data shapes, requirements, and conventions inform mockups
|
|
352
|
+
- [ ] Target stack researched — component availability, constraints, idioms (unless greenfield/skipped)
|
|
353
|
+
- [ ] Each sketch has 2-3 variants for comparison (at least one follows path of least resistance)
|
|
259
354
|
- [ ] User can open and interact with sketches in a browser
|
|
260
355
|
- [ ] Winning variant selected and marked for each sketch
|
|
261
356
|
- [ ] All variants preserved (winner marked, not others deleted)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<purpose>
|
|
2
|
-
|
|
3
|
-
build conversations. Reads from `.planning/spikes/`, writes skill to
|
|
4
|
-
(project-local) and summary to
|
|
5
|
-
Companion to `/gsd-spike`.
|
|
2
|
+
Package spike experiment findings into a persistent project skill — an implementation blueprint
|
|
3
|
+
for future build conversations. Reads from `.planning/spikes/`, writes skill to
|
|
4
|
+
`./.claude/skills/spike-findings-[project]/` (project-local) and summary to
|
|
5
|
+
`.planning/spikes/WRAP-UP-SUMMARY.md`. Companion to `/gsd-spike`.
|
|
6
6
|
</purpose>
|
|
7
7
|
|
|
8
8
|
<required_reading>
|
|
@@ -22,7 +22,7 @@ Read all files referenced by the invoking prompt's execution_context before star
|
|
|
22
22
|
<step name="gather">
|
|
23
23
|
## Gather Spike Inventory
|
|
24
24
|
|
|
25
|
-
1. Read `.planning/spikes/MANIFEST.md` for the overall idea context
|
|
25
|
+
1. Read `.planning/spikes/MANIFEST.md` for the overall idea context and requirements
|
|
26
26
|
2. Glob `.planning/spikes/*/README.md` and parse YAML frontmatter from each
|
|
27
27
|
3. Check if `./.claude/skills/spike-findings-*/SKILL.md` exists for this project
|
|
28
28
|
- If yes: read its `processed_spikes` list from the metadata section and filter those out
|
|
@@ -41,53 +41,28 @@ COMMIT_DOCS=$(gsd-sdk query config-get commit_docs 2>/dev/null || echo "true")
|
|
|
41
41
|
```
|
|
42
42
|
</step>
|
|
43
43
|
|
|
44
|
-
<step name="
|
|
45
|
-
##
|
|
44
|
+
<step name="auto_include">
|
|
45
|
+
## Auto-Include All Spikes
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
Include all unprocessed spikes automatically. Present a brief inventory showing what's being processed:
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
Then ask the user:
|
|
57
|
-
|
|
58
|
-
╔══════════════════════════════════════════════════════════════╗
|
|
59
|
-
║ CHECKPOINT: Decision Required ║
|
|
60
|
-
╚══════════════════════════════════════════════════════════════╝
|
|
61
|
-
|
|
62
|
-
Spike {NNN}: {name} — {verdict}
|
|
63
|
-
|
|
64
|
-
{key findings summary}
|
|
65
|
-
|
|
66
|
-
──────────────────────────────────────────────────────────────
|
|
67
|
-
→ Include / Exclude / Partial / Help me UAT this
|
|
68
|
-
──────────────────────────────────────────────────────────────
|
|
69
|
-
|
|
70
|
-
**If "Help me UAT this":**
|
|
71
|
-
1. Read the spike's README "How to Run" and "What to Expect" sections
|
|
72
|
-
2. Present step-by-step instructions
|
|
73
|
-
3. Ask: "Does this match what you expected?"
|
|
74
|
-
4. After UAT, return to the include/exclude/partial decision
|
|
49
|
+
```
|
|
50
|
+
Processing N spikes:
|
|
51
|
+
001 — name (VALIDATED)
|
|
52
|
+
002 — name (PARTIAL)
|
|
53
|
+
003 — name (INVALIDATED)
|
|
54
|
+
```
|
|
75
55
|
|
|
76
|
-
|
|
77
|
-
|
|
56
|
+
Every spike carries forward:
|
|
57
|
+
- **VALIDATED** spikes provide proven patterns
|
|
58
|
+
- **PARTIAL** spikes provide constrained patterns
|
|
59
|
+
- **INVALIDATED** spikes provide landmines and dead ends
|
|
78
60
|
</step>
|
|
79
61
|
|
|
80
62
|
<step name="group">
|
|
81
63
|
## Auto-Group by Feature Area
|
|
82
64
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
1. Read all included spikes' tags, names, `related` fields, and content
|
|
86
|
-
2. Propose feature-area groupings, e.g.:
|
|
87
|
-
- "**WebSocket Streaming** — spikes 001, 004, 007"
|
|
88
|
-
- "**Foo API Integration** — spikes 002, 003"
|
|
89
|
-
- "**PDF Parsing** — spike 005"
|
|
90
|
-
3. Present the grouping for approval — user may merge, split, rename, or rearrange
|
|
65
|
+
Group spikes by feature area based on tags, names, `related` fields, and content. Proceed directly into synthesis.
|
|
91
66
|
|
|
92
67
|
Each group becomes one reference file in the generated skill.
|
|
93
68
|
</step>
|
|
@@ -118,21 +93,29 @@ For each included spike:
|
|
|
118
93
|
<step name="synthesize">
|
|
119
94
|
## Synthesize Reference Files
|
|
120
95
|
|
|
121
|
-
For each feature-area group, write a reference file at `references/[feature-area-name].md
|
|
96
|
+
For each feature-area group, write a reference file at `references/[feature-area-name].md` as an **implementation blueprint** — it should read like a recipe, not a research paper. A future build session should be able to follow this and build the feature correctly without re-spiking anything.
|
|
122
97
|
|
|
123
98
|
```markdown
|
|
124
99
|
# [Feature Area Name]
|
|
125
100
|
|
|
126
|
-
##
|
|
127
|
-
|
|
101
|
+
## Requirements
|
|
102
|
+
|
|
103
|
+
[Non-negotiable design decisions from MANIFEST.md Requirements section that apply to this feature area. These MUST be honored in the real build. E.g., "Must use streaming JSON output", "Must support reconnection".]
|
|
128
104
|
|
|
129
|
-
##
|
|
130
|
-
|
|
105
|
+
## How to Build It
|
|
106
|
+
|
|
107
|
+
[Step-by-step: what to install, how to configure, what code pattern to use. Include key code snippets extracted from the spike source. This is the proven approach — not theory, but tested and working code.]
|
|
108
|
+
|
|
109
|
+
## What to Avoid
|
|
110
|
+
|
|
111
|
+
[Things that look right but aren't. Gotchas. Anti-patterns discovered during spiking. Dead ends that were tried and failed.]
|
|
131
112
|
|
|
132
113
|
## Constraints
|
|
114
|
+
|
|
133
115
|
[Hard facts: rate limits, library limitations, version requirements, incompatibilities]
|
|
134
116
|
|
|
135
117
|
## Origin
|
|
118
|
+
|
|
136
119
|
Synthesized from spikes: NNN, NNN, NNN
|
|
137
120
|
Source files available in: sources/NNN-spike-name/, sources/NNN-spike-name/
|
|
138
121
|
```
|
|
@@ -146,7 +129,7 @@ Create (or update) the generated skill's SKILL.md:
|
|
|
146
129
|
```markdown
|
|
147
130
|
---
|
|
148
131
|
name: spike-findings-[project-dir-name]
|
|
149
|
-
description:
|
|
132
|
+
description: Implementation blueprint from spike experiments. Requirements, proven patterns, and verified knowledge for building [project-dir-name]. Auto-loaded during implementation work.
|
|
150
133
|
---
|
|
151
134
|
|
|
152
135
|
<context>
|
|
@@ -157,6 +140,15 @@ description: Validated patterns, constraints, and implementation knowledge from
|
|
|
157
140
|
Spike sessions wrapped: [date(s)]
|
|
158
141
|
</context>
|
|
159
142
|
|
|
143
|
+
<requirements>
|
|
144
|
+
## Requirements
|
|
145
|
+
|
|
146
|
+
[Copied directly from MANIFEST.md Requirements section. These are non-negotiable design decisions that emerged from the user's choices during spiking. Every feature area reference must honor these.]
|
|
147
|
+
|
|
148
|
+
- [requirement 1]
|
|
149
|
+
- [requirement 2]
|
|
150
|
+
</requirements>
|
|
151
|
+
|
|
160
152
|
<findings_index>
|
|
161
153
|
## Feature Areas
|
|
162
154
|
|
|
@@ -193,13 +185,9 @@ Write `.planning/spikes/WRAP-UP-SUMMARY.md` for project history:
|
|
|
193
185
|
**Feature areas:** [list]
|
|
194
186
|
**Skill output:** `./.claude/skills/spike-findings-[project]/`
|
|
195
187
|
|
|
196
|
-
##
|
|
197
|
-
| # | Name | Verdict | Feature Area |
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
## Excluded Spikes
|
|
201
|
-
| # | Name | Reason |
|
|
202
|
-
|---|------|--------|
|
|
188
|
+
## Processed Spikes
|
|
189
|
+
| # | Name | Type | Verdict | Feature Area |
|
|
190
|
+
|---|------|------|---------|--------------|
|
|
203
191
|
|
|
204
192
|
## Key Findings
|
|
205
193
|
[consolidated findings summary]
|
|
@@ -218,11 +206,47 @@ Add an auto-load routing line to the project's CLAUDE.md (create the file if it
|
|
|
218
206
|
If this routing line already exists (append mode), leave it as-is.
|
|
219
207
|
</step>
|
|
220
208
|
|
|
209
|
+
<step name="generate_conventions">
|
|
210
|
+
## Generate or Update CONVENTIONS.md
|
|
211
|
+
|
|
212
|
+
Analyze all processed spikes for recurring patterns and write `.planning/spikes/CONVENTIONS.md`. This file tells future spike sessions *how we spike* — the stack, structure, and patterns that have been established.
|
|
213
|
+
|
|
214
|
+
1. Read all spike source code and READMEs looking for:
|
|
215
|
+
- **Stack choices** — What language/framework/runtime appears across multiple spikes?
|
|
216
|
+
- **Structure patterns** — Common file layouts, port numbers, naming schemes
|
|
217
|
+
- **Recurring approaches** — How auth is handled, how styling is done, how data is served
|
|
218
|
+
- **Tools & libraries** — Packages that showed up repeatedly with versions that worked
|
|
219
|
+
|
|
220
|
+
2. Write or update `.planning/spikes/CONVENTIONS.md`:
|
|
221
|
+
|
|
222
|
+
```markdown
|
|
223
|
+
# Spike Conventions
|
|
224
|
+
|
|
225
|
+
Patterns and stack choices established across spike sessions. New spikes follow these unless the question requires otherwise.
|
|
226
|
+
|
|
227
|
+
## Stack
|
|
228
|
+
[What we use for frontend, backend, scripts, and why — derived from what repeated across spikes]
|
|
229
|
+
|
|
230
|
+
## Structure
|
|
231
|
+
[Common file layouts, port assignments, naming patterns]
|
|
232
|
+
|
|
233
|
+
## Patterns
|
|
234
|
+
[Recurring approaches: how we handle auth, how we style, how we serve, etc.]
|
|
235
|
+
|
|
236
|
+
## Tools & Libraries
|
|
237
|
+
[Preferred packages with versions that worked, and any to avoid]
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
3. Only include patterns that appeared in 2+ spikes or were explicitly chosen by the user.
|
|
241
|
+
|
|
242
|
+
4. If `CONVENTIONS.md` already exists (append mode), update sections with new patterns. Remove entries contradicted by newer spikes.
|
|
243
|
+
</step>
|
|
244
|
+
|
|
221
245
|
<step name="commit">
|
|
222
246
|
Commit all artifacts (if `COMMIT_DOCS` is true):
|
|
223
247
|
|
|
224
248
|
```bash
|
|
225
|
-
gsd-sdk query commit "docs(spike-wrap-up): package [N] spike findings into project skill" .planning/spikes/WRAP-UP-SUMMARY.md
|
|
249
|
+
gsd-sdk query commit "docs(spike-wrap-up): package [N] spike findings into project skill" .planning/spikes/WRAP-UP-SUMMARY.md .planning/spikes/CONVENTIONS.md
|
|
226
250
|
```
|
|
227
251
|
</step>
|
|
228
252
|
|
|
@@ -232,29 +256,37 @@ gsd-sdk query commit "docs(spike-wrap-up): package [N] spike findings into proje
|
|
|
232
256
|
GSD ► SPIKE WRAP-UP COMPLETE ✓
|
|
233
257
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
234
258
|
|
|
235
|
-
**
|
|
259
|
+
**Processed:** {N} spikes
|
|
236
260
|
**Feature areas:** {list}
|
|
237
261
|
**Skill:** `./.claude/skills/spike-findings-[project]/`
|
|
262
|
+
**Conventions:** `.planning/spikes/CONVENTIONS.md`
|
|
238
263
|
**Summary:** `.planning/spikes/WRAP-UP-SUMMARY.md`
|
|
239
264
|
**CLAUDE.md:** routing line added
|
|
240
265
|
|
|
241
266
|
The spike-findings skill will auto-load in future build conversations.
|
|
242
267
|
```
|
|
268
|
+
</step>
|
|
269
|
+
|
|
270
|
+
<step name="whats_next">
|
|
271
|
+
## What's Next
|
|
272
|
+
|
|
273
|
+
After the summary, present next-step options:
|
|
243
274
|
|
|
244
275
|
───────────────────────────────────────────────────────────────
|
|
245
276
|
|
|
246
277
|
## ▶ Next Up
|
|
247
278
|
|
|
248
|
-
**
|
|
279
|
+
**Explore frontier spikes** — see what else is worth spiking based on what we've learned
|
|
249
280
|
|
|
250
|
-
`/gsd-
|
|
281
|
+
`/gsd-spike` (run with no argument — its frontier mode analyzes the spike landscape and proposes integration and frontier spikes)
|
|
251
282
|
|
|
252
283
|
───────────────────────────────────────────────────────────────
|
|
253
284
|
|
|
254
285
|
**Also available:**
|
|
255
|
-
- `/gsd-
|
|
256
|
-
- `/gsd-spike` — spike
|
|
286
|
+
- `/gsd-plan-phase` — start planning the real implementation
|
|
287
|
+
- `/gsd-spike [idea]` — spike a specific new idea
|
|
257
288
|
- `/gsd-explore` — continue exploring
|
|
289
|
+
- Other
|
|
258
290
|
|
|
259
291
|
───────────────────────────────────────────────────────────────
|
|
260
292
|
</step>
|
|
@@ -262,12 +294,13 @@ The spike-findings skill will auto-load in future build conversations.
|
|
|
262
294
|
</process>
|
|
263
295
|
|
|
264
296
|
<success_criteria>
|
|
265
|
-
- [ ]
|
|
266
|
-
- [ ]
|
|
267
|
-
- [ ] Spike-findings skill exists at `./.claude/skills/` with SKILL.md, references/, sources/
|
|
268
|
-
- [ ]
|
|
269
|
-
- [ ]
|
|
297
|
+
- [ ] All unprocessed spikes auto-included and processed
|
|
298
|
+
- [ ] Spikes grouped by feature area
|
|
299
|
+
- [ ] Spike-findings skill exists at `./.claude/skills/` with SKILL.md (including requirements), references/, sources/
|
|
300
|
+
- [ ] Reference files are implementation blueprints with Requirements, How to Build It, What to Avoid, Constraints
|
|
301
|
+
- [ ] `.planning/spikes/CONVENTIONS.md` created or updated with recurring stack/structure/pattern choices
|
|
270
302
|
- [ ] `.planning/spikes/WRAP-UP-SUMMARY.md` written for project history
|
|
271
303
|
- [ ] Project CLAUDE.md has auto-load routing line
|
|
272
|
-
- [ ] Summary presented
|
|
304
|
+
- [ ] Summary presented
|
|
305
|
+
- [ ] Next-step options presented (including frontier spike exploration via `/gsd-spike`)
|
|
273
306
|
</success_criteria>
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
<purpose>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
Companion to `/gsd-spike-wrap-up`.
|
|
2
|
+
Spike an idea through experiential exploration — build focused experiments to feel the pieces
|
|
3
|
+
of a future app, validate feasibility, and produce verified knowledge for the real build.
|
|
4
|
+
Saves artifacts to `.planning/spikes/`. Companion to `/gsd-spike-wrap-up`.
|
|
5
|
+
|
|
6
|
+
Supports two modes:
|
|
7
|
+
- **Idea mode** (default) — user describes an idea to spike
|
|
8
|
+
- **Frontier mode** — no argument or "frontier" / "what should I spike?" — analyzes existing spike landscape and proposes integration and frontier spikes
|
|
5
9
|
</purpose>
|
|
6
10
|
|
|
7
11
|
<required_reading>
|
|
@@ -19,7 +23,63 @@ Read all files referenced by the invoking prompt's execution_context before star
|
|
|
19
23
|
|
|
20
24
|
Parse `$ARGUMENTS` for:
|
|
21
25
|
- `--quick` flag → set `QUICK_MODE=true`
|
|
26
|
+
- `--text` flag → set `TEXT_MODE=true`
|
|
27
|
+
- `frontier` or empty → set `FRONTIER_MODE=true`
|
|
22
28
|
- Remaining text → the idea to spike
|
|
29
|
+
|
|
30
|
+
**Text mode:** If TEXT_MODE is enabled, replace AskUserQuestion calls with plain-text numbered lists.
|
|
31
|
+
</step>
|
|
32
|
+
|
|
33
|
+
<step name="route">
|
|
34
|
+
## Routing
|
|
35
|
+
|
|
36
|
+
- **FRONTIER_MODE is true** → Jump to `frontier_mode`
|
|
37
|
+
- **Otherwise** → Continue to `setup_directory`
|
|
38
|
+
</step>
|
|
39
|
+
|
|
40
|
+
<step name="frontier_mode">
|
|
41
|
+
## Frontier Mode — Propose What to Spike Next
|
|
42
|
+
|
|
43
|
+
### Load the Spike Landscape
|
|
44
|
+
|
|
45
|
+
If no `.planning/spikes/` directory exists, tell the user there's nothing to analyze and offer to start fresh with an idea instead.
|
|
46
|
+
|
|
47
|
+
Otherwise, load in this order:
|
|
48
|
+
|
|
49
|
+
**a. MANIFEST.md** — the overall idea, requirements, and spike table with verdicts.
|
|
50
|
+
|
|
51
|
+
**b. Findings skills** — glob `./.claude/skills/spike-findings-*/SKILL.md` and read any that exist, plus their `references/*.md`. These contain curated knowledge from prior wrap-ups.
|
|
52
|
+
|
|
53
|
+
**c. CONVENTIONS.md** — read `.planning/spikes/CONVENTIONS.md` if it exists. Established stack and patterns.
|
|
54
|
+
|
|
55
|
+
**d. All spike READMEs** — read `.planning/spikes/*/README.md` for verdicts, results, investigation trails, and tags.
|
|
56
|
+
|
|
57
|
+
### Analyze for Integration Spikes
|
|
58
|
+
|
|
59
|
+
Review every pair and cluster of VALIDATED spikes. Look for:
|
|
60
|
+
|
|
61
|
+
- **Shared resources:** Two spikes that both touch the same API, database, state, or data format but were tested independently.
|
|
62
|
+
- **Data handoffs:** Spike A produces output that Spike B consumes. The formats were assumed compatible but never proven.
|
|
63
|
+
- **Timing/ordering:** Spikes that work in isolation but have sequencing dependencies in the real flow.
|
|
64
|
+
- **Resource contention:** Spikes that individually work but may compete for connections, memory, rate limits, or tokens when combined.
|
|
65
|
+
|
|
66
|
+
If integration risks exist, present them as concrete proposed spikes with names and Given/When/Then validation questions. If no meaningful integration risks exist, say so and skip this category.
|
|
67
|
+
|
|
68
|
+
### Analyze for Frontier Spikes
|
|
69
|
+
|
|
70
|
+
Think laterally about the overall idea from MANIFEST.md and what's been proven so far. Consider:
|
|
71
|
+
|
|
72
|
+
- **Gaps in the vision:** Capabilities assumed but unproven.
|
|
73
|
+
- **Discovered dependencies:** Findings that reveal new questions.
|
|
74
|
+
- **Alternative approaches:** Different angles for PARTIAL or INVALIDATED spikes.
|
|
75
|
+
- **Adjacent capabilities:** Things that would meaningfully improve the idea if feasible.
|
|
76
|
+
- **Comparison opportunities:** Approaches that worked but felt heavy.
|
|
77
|
+
|
|
78
|
+
Present frontier spikes as concrete proposals numbered from the highest existing spike number with Given/When/Then and risk ordering.
|
|
79
|
+
|
|
80
|
+
### Get Alignment and Execute
|
|
81
|
+
|
|
82
|
+
Present all integration and frontier candidates, then ask which to run. When the user picks spikes, write definitions into `.planning/spikes/MANIFEST.md` (appending to existing table) and proceed directly to building them starting at `research`.
|
|
23
83
|
</step>
|
|
24
84
|
|
|
25
85
|
<step name="setup_directory">
|
|
@@ -41,13 +101,16 @@ COMMIT_DOCS=$(gsd-sdk query config-get commit_docs 2>/dev/null || echo "true")
|
|
|
41
101
|
</step>
|
|
42
102
|
|
|
43
103
|
<step name="detect_stack">
|
|
44
|
-
Check for the project's tech stack to inform spike technology choices
|
|
104
|
+
Check for the project's tech stack to inform spike technology choices.
|
|
105
|
+
|
|
106
|
+
**Check conventions first.** If `.planning/spikes/CONVENTIONS.md` exists, follow its stack and patterns — these represent validated choices the user expects to see continued.
|
|
45
107
|
|
|
108
|
+
**Then check the project stack:**
|
|
46
109
|
```bash
|
|
47
110
|
ls package.json pyproject.toml Cargo.toml go.mod 2>/dev/null
|
|
48
111
|
```
|
|
49
112
|
|
|
50
|
-
Use the project's language/framework by default. For greenfield projects with no existing stack, pick whatever gets to a runnable result fastest
|
|
113
|
+
Use the project's language/framework by default. For greenfield projects with no conventions and no existing stack, pick whatever gets to a runnable result fastest.
|
|
51
114
|
|
|
52
115
|
Avoid unless the spike specifically requires it:
|
|
53
116
|
- Complex package management beyond `npm install` or `pip install`
|
|
@@ -56,40 +119,53 @@ Avoid unless the spike specifically requires it:
|
|
|
56
119
|
- Env files or config systems — hardcode everything
|
|
57
120
|
</step>
|
|
58
121
|
|
|
59
|
-
<step name="
|
|
60
|
-
|
|
122
|
+
<step name="load_prior_context">
|
|
123
|
+
If `.planning/spikes/` has existing content, load context in this priority order:
|
|
124
|
+
|
|
125
|
+
**a. Conventions:** Read `.planning/spikes/CONVENTIONS.md` if it exists.
|
|
126
|
+
|
|
127
|
+
**b. Findings skills:** Glob for `./.claude/skills/spike-findings-*/SKILL.md` and read any that exist, plus their `references/*.md` files.
|
|
128
|
+
|
|
129
|
+
**c. Manifest:** Read `.planning/spikes/MANIFEST.md` for the index of all spikes.
|
|
130
|
+
|
|
131
|
+
**d. Related READMEs:** Based on the new idea, identify which prior spikes are related by matching tags, names, technologies, or domain overlap. Read only those `.planning/spikes/*/README.md` files. Skip unrelated ones.
|
|
61
132
|
|
|
62
|
-
|
|
133
|
+
Cross-reference against this full body of prior work:
|
|
134
|
+
- **Skip already-validated questions.** Note the prior spike number and move on.
|
|
135
|
+
- **Build on prior findings.** Don't repeat failed approaches. Use their Research and Results sections.
|
|
136
|
+
- **Reuse prior research.** Carry findings forward rather than re-researching.
|
|
137
|
+
- **Follow established conventions.** Mention any deviation.
|
|
138
|
+
- **Call out relevant prior art** when presenting the decomposition.
|
|
63
139
|
|
|
64
|
-
|
|
140
|
+
If no `.planning/spikes/` exists, skip this step.
|
|
141
|
+
</step>
|
|
142
|
+
|
|
143
|
+
<step name="decompose">
|
|
144
|
+
**If `QUICK_MODE` is true:** Skip decomposition and alignment. Take the user's idea as a single spike question. Assign it the next available number. Jump to `research`.
|
|
145
|
+
|
|
146
|
+
Break the idea into 2-5 independent questions. Frame each as Given/When/Then. Present as a table:
|
|
65
147
|
|
|
66
148
|
```
|
|
67
|
-
| # | Spike | Validates (Given/When/Then) | Risk |
|
|
68
|
-
|
|
69
|
-
| 001 | websocket-streaming | Given a WS connection, when LLM streams tokens, then client receives chunks < 100ms | **High** |
|
|
70
|
-
|
|
|
149
|
+
| # | Spike | Type | Validates (Given/When/Then) | Risk |
|
|
150
|
+
|---|-------|------|-----------------------------|------|
|
|
151
|
+
| 001 | websocket-streaming | standard | Given a WS connection, when LLM streams tokens, then client receives chunks < 100ms | **High** |
|
|
152
|
+
| 002a | pdf-parse-pdfjs | comparison | Given a multi-page PDF, when parsed with pdfjs, then structured text is extractable | Medium |
|
|
153
|
+
| 002b | pdf-parse-camelot | comparison | Given a multi-page PDF, when parsed with camelot, then structured text is extractable | Medium |
|
|
71
154
|
```
|
|
72
155
|
|
|
73
|
-
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
- "Can we get X and Y to talk to each other?" — thinnest integration
|
|
77
|
-
- "What does X feel like as a UI?" — minimal interactive prototype
|
|
78
|
-
- "Does X API actually support Y?" — script that calls it and shows the response
|
|
156
|
+
**Spike types:**
|
|
157
|
+
- **standard** — one approach answering one question
|
|
158
|
+
- **comparison** — same question, different approaches. Shared number with letter suffix.
|
|
79
159
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
- "Design the architecture" — planning, not spiking
|
|
83
|
-
- "Build the backend" — too broad, no specific question
|
|
160
|
+
Good spikes: specific feasibility questions with observable output.
|
|
161
|
+
Bad spikes: too broad, no observable output, or just reading/planning.
|
|
84
162
|
|
|
85
|
-
Order by risk —
|
|
163
|
+
Order by risk — most likely to kill the idea runs first.
|
|
86
164
|
</step>
|
|
87
165
|
|
|
88
166
|
<step name="align">
|
|
89
167
|
**If `QUICK_MODE` is true:** Skip.
|
|
90
168
|
|
|
91
|
-
Present the ordered spike list and ask which to build:
|
|
92
|
-
|
|
93
169
|
╔══════════════════════════════════════════════════════════════╗
|
|
94
170
|
║ CHECKPOINT: Decision Required ║
|
|
95
171
|
╚══════════════════════════════════════════════════════════════╝
|
|
@@ -99,8 +175,33 @@ Present the ordered spike list and ask which to build:
|
|
|
99
175
|
──────────────────────────────────────────────────────────────
|
|
100
176
|
→ Build all in this order, or adjust the list?
|
|
101
177
|
──────────────────────────────────────────────────────────────
|
|
178
|
+
</step>
|
|
179
|
+
|
|
180
|
+
<step name="research">
|
|
181
|
+
## Research and Briefing Before Each Spike
|
|
182
|
+
|
|
183
|
+
This step runs **before each individual spike**, not once at the start.
|
|
184
|
+
|
|
185
|
+
**a. Present a spike briefing:**
|
|
186
|
+
|
|
187
|
+
> **Spike NNN: Descriptive Name**
|
|
188
|
+
> [2-3 sentences: what this spike is, why it matters, key risk or unknown.]
|
|
102
189
|
|
|
103
|
-
|
|
190
|
+
**b. Research the current state of the art.** Use context7 (resolve-library-id → query-docs) for libraries/frameworks. Use web search for APIs/services without a context7 entry. Read actual documentation.
|
|
191
|
+
|
|
192
|
+
**c. Surface competing approaches** as a table:
|
|
193
|
+
|
|
194
|
+
| Approach | Tool/Library | Pros | Cons | Status |
|
|
195
|
+
|----------|-------------|------|------|--------|
|
|
196
|
+
| ... | ... | ... | ... | ... |
|
|
197
|
+
|
|
198
|
+
**Chosen approach:** [which one and why]
|
|
199
|
+
|
|
200
|
+
If 2+ credible approaches exist, plan to build quick variants within the spike and compare them.
|
|
201
|
+
|
|
202
|
+
**d. Capture research findings** in a `## Research` section in the README.
|
|
203
|
+
|
|
204
|
+
**Skip when unnecessary** for pure logic with no external dependencies.
|
|
104
205
|
</step>
|
|
105
206
|
|
|
106
207
|
<step name="create_manifest">
|
|
@@ -112,33 +213,75 @@ Create or update `.planning/spikes/MANIFEST.md`:
|
|
|
112
213
|
## Idea
|
|
113
214
|
[One paragraph describing the overall idea being explored]
|
|
114
215
|
|
|
216
|
+
## Requirements
|
|
217
|
+
[Design decisions that emerged from the user's choices during spiking. Non-negotiable for the real build. Updated as spikes progress.]
|
|
218
|
+
|
|
219
|
+
- [e.g., "Must use streaming JSON output, not single-response"]
|
|
220
|
+
- [e.g., "Must support reconnection on network failure"]
|
|
221
|
+
|
|
115
222
|
## Spikes
|
|
116
223
|
|
|
117
|
-
| # | Name | Validates | Verdict | Tags |
|
|
118
|
-
|
|
224
|
+
| # | Name | Type | Validates | Verdict | Tags |
|
|
225
|
+
|---|------|------|-----------|---------|------|
|
|
119
226
|
```
|
|
120
227
|
|
|
121
|
-
|
|
228
|
+
**Track requirements as they emerge.** When the user expresses a preference during spiking, add it to the Requirements section immediately.
|
|
229
|
+
</step>
|
|
230
|
+
|
|
231
|
+
<step name="reground">
|
|
232
|
+
## Re-Ground Before Each Spike
|
|
233
|
+
|
|
234
|
+
Before starting each spike (not just the first), re-read `.planning/spikes/MANIFEST.md` and `.planning/spikes/CONVENTIONS.md` to prevent drift within long sessions. Check the Requirements section — make sure the spike doesn't contradict any established requirements.
|
|
122
235
|
</step>
|
|
123
236
|
|
|
124
237
|
<step name="build_spikes">
|
|
125
|
-
Build
|
|
238
|
+
## Build Each Spike Sequentially
|
|
239
|
+
|
|
240
|
+
**Depth over speed.** The goal is genuine understanding, not a quick verdict. Never declare VALIDATED after a single happy-path test. Follow surprising findings. Test edge cases. Document the investigation trail, not just the conclusion.
|
|
241
|
+
|
|
242
|
+
**Comparison spikes** use shared number with letter suffix: `NNN-a-name` / `NNN-b-name`. Build back-to-back, then head-to-head comparison.
|
|
126
243
|
|
|
127
244
|
### For Each Spike:
|
|
128
245
|
|
|
129
|
-
**a.**
|
|
130
|
-
|
|
246
|
+
**a.** Create `.planning/spikes/NNN-descriptive-name/`
|
|
247
|
+
|
|
248
|
+
**b.** Assess whether the user needs to experience this spike or Claude can verify alone:
|
|
249
|
+
|
|
250
|
+
Build interactive prototype when validating:
|
|
251
|
+
- Behavior that unfolds over time (streaming, real-time, animations)
|
|
252
|
+
- Cause-and-effect sequences (click X → Y happens)
|
|
253
|
+
- Data flow between systems
|
|
254
|
+
- Visual or presentation quality
|
|
255
|
+
- Timing or performance feel
|
|
131
256
|
|
|
132
|
-
|
|
257
|
+
Stay with stdout/CLI when validating:
|
|
258
|
+
- Pure data transformation
|
|
259
|
+
- Binary yes/no questions
|
|
260
|
+
- Benchmark numbers
|
|
261
|
+
- Facts, not feelings
|
|
133
262
|
|
|
134
|
-
**
|
|
263
|
+
**If the spike needs runtime observability,** build a forensic log layer:
|
|
264
|
+
1. Event log array with ISO timestamps and category tags
|
|
265
|
+
2. Export mechanism (server: GET endpoint, CLI: JSON file, browser: Export button)
|
|
266
|
+
3. Log summary (event counts, duration, errors, metadata)
|
|
267
|
+
4. Analysis helpers if volume warrants it
|
|
135
268
|
|
|
136
|
-
**
|
|
269
|
+
**c.** Build the code. Start with simplest version, then deepen.
|
|
270
|
+
|
|
271
|
+
**d.** Iterate when findings warrant it:
|
|
272
|
+
- **Surprising surface?** Write a follow-up test that isolates and explores it.
|
|
273
|
+
- **Answer feels shallow?** Probe edge cases — large inputs, concurrent requests, malformed data, network failures.
|
|
274
|
+
- **Assumption wrong?** Adjust. Note the pivot in the README.
|
|
275
|
+
|
|
276
|
+
Multiple files per spike are expected for complex questions (e.g., `test-basic.js`, `test-edge-cases.js`, `benchmark.js`).
|
|
277
|
+
|
|
278
|
+
**e.** Write `README.md` with YAML frontmatter:
|
|
137
279
|
|
|
138
280
|
```markdown
|
|
139
281
|
---
|
|
140
282
|
spike: NNN
|
|
141
283
|
name: descriptive-name
|
|
284
|
+
type: standard
|
|
142
285
|
validates: "Given [precondition], when [action], then [expected outcome]"
|
|
143
286
|
verdict: PENDING
|
|
144
287
|
related: []
|
|
@@ -148,30 +291,38 @@ tags: [tag1, tag2]
|
|
|
148
291
|
# Spike NNN: Descriptive Name
|
|
149
292
|
|
|
150
293
|
## What This Validates
|
|
151
|
-
[
|
|
294
|
+
[Given/When/Then]
|
|
295
|
+
|
|
296
|
+
## Research
|
|
297
|
+
[Docs checked, approach comparison table, chosen approach, gotchas. Omit if no external deps.]
|
|
152
298
|
|
|
153
299
|
## How to Run
|
|
154
|
-
[
|
|
300
|
+
[Command(s)]
|
|
155
301
|
|
|
156
302
|
## What to Expect
|
|
157
|
-
[Concrete observable outcomes
|
|
303
|
+
[Concrete observable outcomes]
|
|
304
|
+
|
|
305
|
+
## Observability
|
|
306
|
+
[If forensic log layer exists. Omit otherwise.]
|
|
307
|
+
|
|
308
|
+
## Investigation Trail
|
|
309
|
+
[Updated as spike progresses. Document each iteration: what tried, what revealed, what tried next.]
|
|
158
310
|
|
|
159
311
|
## Results
|
|
160
|
-
[
|
|
312
|
+
[Verdict, evidence, surprises, log analysis findings.]
|
|
161
313
|
```
|
|
162
314
|
|
|
163
|
-
**
|
|
315
|
+
**f.** Auto-link related spikes silently.
|
|
164
316
|
|
|
165
|
-
**
|
|
166
|
-
-
|
|
167
|
-
-
|
|
317
|
+
**g.** Run and verify:
|
|
318
|
+
- Self-verifiable: run, iterate if findings warrant deeper investigation, update verdict
|
|
319
|
+
- Needs human judgment: present checkpoint box:
|
|
168
320
|
|
|
169
321
|
╔══════════════════════════════════════════════════════════════╗
|
|
170
322
|
║ CHECKPOINT: Verification Required ║
|
|
171
323
|
╚══════════════════════════════════════════════════════════════╝
|
|
172
324
|
|
|
173
325
|
**Spike {NNN}: {name}**
|
|
174
|
-
|
|
175
326
|
**How to run:** {command}
|
|
176
327
|
**What to expect:** {concrete outcomes}
|
|
177
328
|
|
|
@@ -179,43 +330,69 @@ tags: [tag1, tag2]
|
|
|
179
330
|
→ Does this match what you expected? Describe what you see.
|
|
180
331
|
──────────────────────────────────────────────────────────────
|
|
181
332
|
|
|
182
|
-
**g.** Update verdict to VALIDATED / INVALIDATED / PARTIAL. Update Results section with evidence.
|
|
183
|
-
|
|
184
333
|
**h.** Update `.planning/spikes/MANIFEST.md` with the spike's row.
|
|
185
334
|
|
|
186
335
|
**i.** Commit (if `COMMIT_DOCS` is true):
|
|
187
336
|
```bash
|
|
188
|
-
gsd-sdk query commit "docs(spike-NNN): [VERDICT] — [key finding
|
|
337
|
+
gsd-sdk query commit "docs(spike-NNN): [VERDICT] — [key finding]" .planning/spikes/NNN-descriptive-name/ .planning/spikes/MANIFEST.md
|
|
189
338
|
```
|
|
190
339
|
|
|
191
|
-
**j.** Report
|
|
340
|
+
**j.** Report:
|
|
192
341
|
```
|
|
193
342
|
◆ Spike NNN: {name}
|
|
194
343
|
Verdict: {VALIDATED ✓ / INVALIDATED ✗ / PARTIAL ⚠}
|
|
195
|
-
|
|
196
|
-
Impact: {effect on remaining spikes
|
|
344
|
+
Key findings: {not just verdict — investigation trail, surprises, edge cases explored}
|
|
345
|
+
Impact: {effect on remaining spikes}
|
|
197
346
|
```
|
|
198
347
|
|
|
199
|
-
|
|
348
|
+
Do not rush to a verdict. A spike that says "VALIDATED — it works" with no nuance is almost always incomplete.
|
|
349
|
+
|
|
350
|
+
**k.** If core assumption invalidated:
|
|
200
351
|
|
|
201
352
|
╔══════════════════════════════════════════════════════════════╗
|
|
202
353
|
║ CHECKPOINT: Decision Required ║
|
|
203
354
|
╚══════════════════════════════════════════════════════════════╝
|
|
204
355
|
|
|
205
356
|
Core assumption invalidated by Spike {NNN}.
|
|
206
|
-
|
|
207
357
|
{what was invalidated and why}
|
|
208
358
|
|
|
209
359
|
──────────────────────────────────────────────────────────────
|
|
210
360
|
→ Continue with remaining spikes / Pivot approach / Abandon
|
|
211
361
|
──────────────────────────────────────────────────────────────
|
|
362
|
+
</step>
|
|
363
|
+
|
|
364
|
+
<step name="update_conventions">
|
|
365
|
+
## Update Conventions
|
|
366
|
+
|
|
367
|
+
After all spikes in this session are built, update `.planning/spikes/CONVENTIONS.md` with patterns that emerged or solidified.
|
|
368
|
+
|
|
369
|
+
```markdown
|
|
370
|
+
# Spike Conventions
|
|
212
371
|
|
|
213
|
-
|
|
372
|
+
Patterns and stack choices established across spike sessions. New spikes follow these unless the question requires otherwise.
|
|
373
|
+
|
|
374
|
+
## Stack
|
|
375
|
+
[What we use for frontend, backend, scripts, and why]
|
|
376
|
+
|
|
377
|
+
## Structure
|
|
378
|
+
[Common file layouts, port assignments, naming patterns]
|
|
379
|
+
|
|
380
|
+
## Patterns
|
|
381
|
+
[Recurring approaches: how we handle auth, how we style, how we serve]
|
|
382
|
+
|
|
383
|
+
## Tools & Libraries
|
|
384
|
+
[Preferred packages with versions that worked, and any to avoid]
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
Only include patterns that repeated across 2+ spikes or were explicitly chosen by the user. If `CONVENTIONS.md` already exists, update sections with new patterns from this session.
|
|
388
|
+
|
|
389
|
+
Commit (if `COMMIT_DOCS` is true):
|
|
390
|
+
```bash
|
|
391
|
+
gsd-sdk query commit "docs(spikes): update conventions" .planning/spikes/CONVENTIONS.md
|
|
392
|
+
```
|
|
214
393
|
</step>
|
|
215
394
|
|
|
216
395
|
<step name="report">
|
|
217
|
-
After all spikes complete, present the consolidated report:
|
|
218
|
-
|
|
219
396
|
```
|
|
220
397
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
221
398
|
GSD ► SPIKE COMPLETE ✓
|
|
@@ -223,35 +400,35 @@ After all spikes complete, present the consolidated report:
|
|
|
223
400
|
|
|
224
401
|
## Verdicts
|
|
225
402
|
|
|
226
|
-
| # | Name | Verdict |
|
|
227
|
-
|
|
228
|
-
| 001 | {name} | ✓ VALIDATED |
|
|
229
|
-
|
|
|
403
|
+
| # | Name | Type | Verdict |
|
|
404
|
+
|---|------|------|---------|
|
|
405
|
+
| 001 | {name} | standard | ✓ VALIDATED |
|
|
406
|
+
| 002a | {name} | comparison | ✓ WINNER |
|
|
230
407
|
|
|
231
408
|
## Key Discoveries
|
|
232
|
-
{surprises, gotchas,
|
|
409
|
+
{surprises, gotchas, investigation trail highlights}
|
|
233
410
|
|
|
234
411
|
## Feasibility Assessment
|
|
235
|
-
{overall
|
|
412
|
+
{overall viability}
|
|
236
413
|
|
|
237
414
|
## Signal for the Build
|
|
238
|
-
{what
|
|
415
|
+
{what to use, avoid, watch out for}
|
|
239
416
|
```
|
|
240
417
|
|
|
241
418
|
───────────────────────────────────────────────────────────────
|
|
242
419
|
|
|
243
420
|
## ▶ Next Up
|
|
244
421
|
|
|
245
|
-
**Package findings** — wrap spike knowledge into
|
|
422
|
+
**Package findings** — wrap spike knowledge into an implementation blueprint
|
|
246
423
|
|
|
247
424
|
`/gsd-spike-wrap-up`
|
|
248
425
|
|
|
249
426
|
───────────────────────────────────────────────────────────────
|
|
250
427
|
|
|
251
428
|
**Also available:**
|
|
429
|
+
- `/gsd-spike` — spike more ideas (or run with no argument for frontier mode)
|
|
252
430
|
- `/gsd-plan-phase` — start planning the real implementation
|
|
253
431
|
- `/gsd-explore` — continue exploring the idea
|
|
254
|
-
- `/gsd-add-phase` — add a phase to the roadmap based on findings
|
|
255
432
|
|
|
256
433
|
───────────────────────────────────────────────────────────────
|
|
257
434
|
</step>
|
|
@@ -260,11 +437,16 @@ After all spikes complete, present the consolidated report:
|
|
|
260
437
|
|
|
261
438
|
<success_criteria>
|
|
262
439
|
- [ ] `.planning/spikes/` created (auto-creates if needed, no project init required)
|
|
263
|
-
- [ ]
|
|
264
|
-
- [ ]
|
|
265
|
-
- [ ]
|
|
266
|
-
- [ ]
|
|
440
|
+
- [ ] Prior spikes and findings skills consulted before building
|
|
441
|
+
- [ ] Conventions followed (or deviation documented)
|
|
442
|
+
- [ ] Research grounded each spike in current docs before coding
|
|
443
|
+
- [ ] Depth over speed — edge cases tested, surprising findings followed, investigation trail documented
|
|
444
|
+
- [ ] Comparison spikes built back-to-back with head-to-head verdict
|
|
445
|
+
- [ ] Spikes needing human interaction have forensic log layer
|
|
446
|
+
- [ ] Requirements tracked in MANIFEST.md as they emerge from user choices
|
|
447
|
+
- [ ] CONVENTIONS.md created or updated with patterns that emerged
|
|
448
|
+
- [ ] Each spike README has complete frontmatter, Investigation Trail, and Results
|
|
449
|
+
- [ ] MANIFEST.md is current (with Type column and Requirements section)
|
|
267
450
|
- [ ] Commits use `docs(spike-NNN): [VERDICT]` format
|
|
268
451
|
- [ ] Consolidated report presented with next-step routing
|
|
269
|
-
- [ ] If core assumption invalidated, execution stopped and user consulted
|
|
270
452
|
</success_criteria>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "get-shit-done-cc",
|
|
3
|
-
"version": "1.38.
|
|
3
|
+
"version": "1.38.2",
|
|
4
4
|
"description": "A meta-prompting, context engineering and spec-driven development system for Claude Code, OpenCode, Gemini and Codex by TÂCHES.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"get-shit-done-cc": "bin/install.js"
|