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.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: gsd:sketch
3
- description: Rapidly sketch UI/design ideas using throwaway HTML mockups with multi-variant exploration
4
- argument-hint: "<design idea to explore> [--quick]"
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>
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: gsd:spike
3
- description: Rapidly spike an idea with throwaway experiments to validate feasibility before planning
4
- argument-hint: "<idea to validate> [--quick]"
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
- Rapid feasibility validation through focused, throwaway experiments. Each spike answers one
16
- specific question with observable evidence. Spikes live in `.planning/spikes/` and integrate
17
- with GSD commit patterns, state tracking, and handoff workflows.
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
- **Start building** — implement the validated design
258
+ **Explore frontier sketches** — see what else is worth sketching based on what we've explored
259
259
 
260
- `/gsd-plan-phase`
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 additional design areas
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 with next-step routing
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 (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available.
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 `decompose`.
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
- **Text mode:** If TEXT_MODE is enabled (set in the banner step), replace AskUserQuestion calls with plain-text numbered lists emit the options and ask the user to type the number of their choice.
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 timeusing 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." (e.g., "clean and clinical", "warm and playful", "dense and powerful")
63
- 2. **References:** "What apps, sites, or products have a similar feel to what you're imagining?" (gives concrete visual anchors)
64
- 3. **Core action:** "What's the single most important thing a user does here?" (focuses the sketch on what matters)
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
- You may need more or fewer questions depending on how much the user shares upfront. After each answer, briefly reflect what you heard and how it shapes your thinking.
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 by checking existing `.planning/sketches/NNN-*/` directories.
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:** Build 2-3 meaningfully different approaches to the design question. Different layouts, different visual structures, different interaction models.
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. Opens instantly in a browser.
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:** "I like variant B" → mark winner in README, move to next sketch
194
- - **Cherry-pick elements:** "Rounded edges from A, color treatment from C" → build a synthesis as a new variant, show again
195
- - **Want more exploration:** "None of these feel right, try X instead" → build new variants
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 the user is satisfied with a direction for this sketch.
290
+ Iterate until satisfied.
198
291
 
199
292
  **g.** Finalize:
200
- 1. Mark the winning variant in the README frontmatter (`winner: "B"`)
201
- 2. Add ★ indicator to the winning tab in the HTML
202
- 3. Update `.planning/sketches/MANIFEST.md` with the sketch row
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, present the summary:
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
- - [ ] Each sketch has 2-3 variants for comparison
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
- Curate spike experiment findings and package them into a persistent project skill for future
3
- build conversations. Reads from `.planning/spikes/`, writes skill to `./.claude/skills/spike-findings-[project]/`
4
- (project-local) and summary to `.planning/spikes/WRAP-UP-SUMMARY.md`.
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="curate">
45
- ## Curate Spikes One-at-a-Time
44
+ <step name="auto_include">
45
+ ## Auto-Include All Spikes
46
46
 
47
- Present each unprocessed spike in ascending order. For each spike, show:
47
+ Include all unprocessed spikes automatically. Present a brief inventory showing what's being processed:
48
48
 
49
- - **Spike number and name**
50
- - **Validates:** the Given/When/Then from frontmatter
51
- - **Verdict:** VALIDATED / INVALIDATED / PARTIAL
52
- - **Tags:** from frontmatter
53
- - **Key findings:** summarize the Results section from the README
54
- - **Grey areas:** anything uncertain or partially proven
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
- **If "Partial":**
77
- Ask what specifically to include or exclude. Record their notes alongside the spike.
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
- After all spikes are curated:
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
- ## Validated Patterns
127
- [For each validated finding: describe the approach that works, include key code snippets extracted from the spike source, explain why it works]
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
- ## Landmines
130
- [Things that look right but aren't. Gotchas. Anti-patterns discovered during spiking.]
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: Validated patterns, constraints, and implementation knowledge from spike experiments. Auto-loaded during implementation work on [project-dir-name].
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
- ## Included Spikes
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
- **Curated:** {N} spikes ({included} included, {excluded} excluded)
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
- **Start building** — plan the real implementation
279
+ **Explore frontier spikes** — see what else is worth spiking based on what we've learned
249
280
 
250
- `/gsd-plan-phase`
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-add-phase` — add a phase based on spike findings
256
- - `/gsd-spike` — spike additional ideas
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
- - [ ] Every unprocessed spike presented for individual curation
266
- - [ ] Feature-area grouping proposed and approved
267
- - [ ] Spike-findings skill exists at `./.claude/skills/` with SKILL.md, references/, sources/
268
- - [ ] Core source files from included spikes copied into sources/
269
- - [ ] Reference files contain validated patterns, code snippets, landmines, constraints
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 with next-step routing
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
- Rapid feasibility validation through focused, throwaway experiments. Each spike answers one
3
- specific question with observable evidence. Saves artifacts to `.planning/spikes/`.
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 (Python, Node, Bash, single HTML file).
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="decompose">
60
- **If `QUICK_MODE` is true:** Skip decomposition and alignment. Take the user's idea as a single spike question. Assign it spike number `001` (or next available). Jump to `build_spikes`.
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
- **Otherwise:**
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
- Break the idea into 2-5 independent questions that each prove something specific. Frame each as an informal Given/When/Then. Present as a table:
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
- | 002 | pdf-extraction | Given a multi-page PDF, when parsed with pdfjs, then structured text is extractable | Medium |
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
- Good spikes answer one specific feasibility question:
74
- - "Can we parse X format and extract Y?" script that does it on a sample file
75
- - "How fast is X approach?" benchmark with real-ish data
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
- Bad spikes are too broad or don't produce observable output:
81
- - "Set up the project" not a question, just busywork
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 — the spike most likely to kill the idea runs first.
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
- The user may reorder, merge, split, or skip spikes. Wait for alignment.
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
- If MANIFEST.md already exists, append new spikes to the existing table.
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 each spike sequentially, highest-risk first.
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.** Find next available number by checking existing `.planning/spikes/NNN-*/` directories.
130
- Format: three-digit zero-padded + hyphenated descriptive name.
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
- **b.** Create the spike directory: `.planning/spikes/NNN-descriptive-name/`
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
- **c.** Build the minimum code that answers the spike's question. Every line must serve the question — nothing incidental. If auth isn't the question, hardcode a token. If the database isn't the question, use a JSON file. Strip everything that doesn't directly answer "does X work?"
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
- **d.** Write `README.md` with YAML frontmatter:
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
- [The specific feasibility question, framed as Given/When/Then]
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
- [Single command or short sequence to run the spike]
300
+ [Command(s)]
155
301
 
156
302
  ## What to Expect
157
- [Concrete observable outcomes: "When you click X, you should see Y within Z seconds"]
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
- [Filled in after running — verdict, evidence, surprises]
312
+ [Verdict, evidence, surprises, log analysis findings.]
161
313
  ```
162
314
 
163
- **e.** Auto-link related spikes: read existing spike READMEs and infer relationships from tags, names, and descriptions. Write the `related` field silently.
315
+ **f.** Auto-link related spikes silently.
164
316
 
165
- **f.** Run and verify:
166
- - If self-verifiable: run it, check output, update README verdict and Results section
167
- - If needs human judgment: run it, present instructions using a checkpoint box:
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 in one sentence]" .planning/spikes/NNN-descriptive-name/ .planning/spikes/MANIFEST.md
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 before moving to next spike:
340
+ **j.** Report:
192
341
  ```
193
342
  ◆ Spike NNN: {name}
194
343
  Verdict: {VALIDATED ✓ / INVALIDATED ✗ / PARTIAL ⚠}
195
- Finding: {one sentence}
196
- Impact: {effect on remaining spikes, if any}
344
+ Key findings: {not just verdict — investigation trail, surprises, edge cases explored}
345
+ Impact: {effect on remaining spikes}
197
346
  ```
198
347
 
199
- **k.** If a spike invalidates a core assumption: stop and present:
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
- Only proceed if the user says to.
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
- | 002 | {name} | INVALIDATED |
403
+ | # | Name | Type | Verdict |
404
+ |---|------|------|---------|
405
+ | 001 | {name} | standard | ✓ VALIDATED |
406
+ | 002a | {name} | comparison | ✓ WINNER |
230
407
 
231
408
  ## Key Discoveries
232
- {surprises, gotchas, things that weren't expected}
409
+ {surprises, gotchas, investigation trail highlights}
233
410
 
234
411
  ## Feasibility Assessment
235
- {overall, is the idea viable?}
412
+ {overall viability}
236
413
 
237
414
  ## Signal for the Build
238
- {what the real implementation should use, avoid, or watch out for}
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 a reusable skill
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
- - [ ] Each spike answers one specific question with observable evidence
264
- - [ ] Each spike README has complete frontmatter, run instructions, and results
265
- - [ ] User verified each spike (self-verified or human checkpoint)
266
- - [ ] MANIFEST.md is current
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.1",
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"