jettypod 4.1.2 → 4.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/.nvmrc +1 -0
  2. package/docs/COMPLETE-TESTING-STRATEGY.md +970 -0
  3. package/docs/DECISIONS.md +10 -12
  4. package/docs/NODE_VERSION.md +83 -0
  5. package/docs/TDD-INFRASTRUCTURE-STRATEGY.md +1374 -0
  6. package/docs/TESTING-FOR-NON-ENGINEERS.md +1588 -0
  7. package/docs/TESTING-STRATEGY-AUDIT.md +698 -0
  8. package/hooks/post-checkout +17 -0
  9. package/hooks/post-merge +17 -0
  10. package/hooks/pre-commit +30 -0
  11. package/jettypod.js +259 -120
  12. package/lib/coverage-tracker.js +218 -0
  13. package/lib/database.js +2 -0
  14. package/lib/db-export.js +192 -0
  15. package/lib/db-import.js +193 -0
  16. package/lib/external-transition-handler.js +32 -0
  17. package/lib/git-hook-helpers.js +174 -0
  18. package/lib/git-root.js +90 -0
  19. package/lib/infrastructure-chore-generator.js +45 -0
  20. package/lib/install-hooks.js +52 -0
  21. package/lib/jettypod-backup.js +238 -0
  22. package/lib/merge-lock.js +193 -0
  23. package/lib/migrations/012-add-worktree-path.js +38 -0
  24. package/lib/migrations/013-worktrees-table.js +86 -0
  25. package/lib/migrations/014-migrate-worktree-data.js +161 -0
  26. package/lib/migrations/015-merge-locks-table.js +67 -0
  27. package/lib/pattern-finder.js +152 -0
  28. package/lib/process-manager.js +140 -0
  29. package/lib/production-standards-reader.js +13 -2
  30. package/lib/production-standards-writer.js +85 -0
  31. package/lib/skills/feature-planning/dry-run-validator.js +135 -0
  32. package/lib/skills/feature-planning/validation-formatter.js +160 -0
  33. package/lib/smart-conflict-detection.js +168 -0
  34. package/lib/smart-fetch-rebase.js +614 -0
  35. package/lib/step-definition-parser.js +76 -0
  36. package/lib/unit-test-generator.js +232 -0
  37. package/lib/verification-command-generator.js +66 -0
  38. package/lib/worktree-diagnostics.js +413 -0
  39. package/lib/worktree-facade.js +174 -0
  40. package/lib/worktree-manager.js +636 -0
  41. package/lib/worktree-reconciler.js +429 -0
  42. package/package.json +30 -3
  43. package/skills-templates/external-transition/SKILL.md +34 -3
  44. package/skills-templates/feature-planning/SKILL.md +190 -24
  45. package/skills-templates/production-mode/SKILL.md +127 -9
  46. package/skills-templates/speed-mode/SKILL.md +454 -51
  47. package/skills-templates/stable-mode/SKILL.md +285 -76
  48. package/.claude/PROTECT_SKILLS.md +0 -28
  49. package/.claude/settings.json +0 -24
  50. package/.claude/settings.local.json +0 -16
  51. package/.claude/skills/epic-planning/SKILL.md +0 -297
  52. package/.claude/skills/external-transition/SKILL.md +0 -384
  53. package/.claude/skills/feature-planning/SKILL.md +0 -464
  54. package/.claude/skills/production-mode/SKILL.md +0 -369
  55. package/.claude/skills/speed-mode/SKILL.md +0 -481
  56. package/.claude/skills/stable-mode/SKILL.md +0 -713
  57. package/.claude/skills.backup-2025-11-10T23-33-09-368Z/epic-planning/SKILL.md +0 -297
  58. package/.claude/skills.backup-2025-11-10T23-33-09-368Z/feature-planning/SKILL.md +0 -464
  59. package/.claude/skills.backup-2025-11-10T23-33-09-368Z/speed-mode/SKILL.md +0 -467
  60. package/.claude/skills.backup-2025-11-10T23-33-09-368Z/stable-mode/SKILL.md +0 -673
  61. package/.claude/skills.backup-2025-11-11T16-15-10-070Z/epic-discover/SKILL.md +0 -297
  62. package/.claude/skills.backup-2025-11-11T16-42-43-212Z/epic-planning/SKILL.md +0 -297
  63. package/.claude/skills.backup-2025-11-11T16-42-43-212Z/feature-planning/SKILL.md +0 -464
  64. package/.claude/skills.backup-2025-11-11T16-42-43-212Z/speed-mode/SKILL.md +0 -467
  65. package/.claude/skills.backup-2025-11-11T16-42-43-212Z/stable-mode/SKILL.md +0 -673
  66. package/.claude/skills.backup-2025-11-11T17-06-09-783Z/epic-planning/SKILL.md +0 -297
  67. package/.claude/skills.backup-2025-11-11T17-06-09-783Z/feature-planning/SKILL.md +0 -464
  68. package/.claude/skills.backup-2025-11-11T17-06-09-783Z/speed-mode/SKILL.md +0 -467
  69. package/.claude/skills.backup-2025-11-11T17-06-09-783Z/stable-mode/SKILL.md +0 -673
  70. package/.devpod/current-work.json +0 -10
  71. package/.devpod/work.db +0 -0
  72. package/.github/workflows/test-safety.yml +0 -85
  73. package/.jettypod/config.json +0 -5
  74. package/.jettypod/current-work.json +0 -10
  75. package/.jettypod/hooks/README.md +0 -77
  76. package/.jettypod/hooks/protect-claude-md.js +0 -338
  77. package/.jettypod/test-work.db +0 -0
  78. package/.jettypod/work.db +0 -0
  79. package/CLAUDE.md +0 -49
  80. package/SPEED-STABLE-AUDIT.md +0 -853
  81. package/SYSTEM-BEHAVIOR.md +0 -2199
  82. package/TEST_SAFETY_AUDIT.md +0 -314
  83. package/TEST_SAFETY_IMPLEMENTATION.md +0 -97
  84. package/cucumber-report.html +0 -45
  85. package/dist/devpod-linux +0 -0
  86. package/dist/devpod-macos +0 -0
  87. package/dist/devpod-win.exe +0 -0
  88. package/docs/features/jettypod-standards-explained.md +0 -543
  89. package/docs/features/standards-inventory.md +0 -257
  90. package/features/auto-generate-production-chores.feature +0 -13
  91. package/features/backlog-command.feature +0 -26
  92. package/features/backlog-filtering-production.feature +0 -10
  93. package/features/claude-md-protection/steps.js +0 -498
  94. package/features/decisions/index.js +0 -490
  95. package/features/decisions/index.test.js +0 -208
  96. package/features/fix-text-wrapping.feature +0 -42
  97. package/features/git-hooks/git-hooks.feature +0 -30
  98. package/features/git-hooks/index.js +0 -93
  99. package/features/git-hooks/index.test.js +0 -137
  100. package/features/git-hooks/post-commit +0 -56
  101. package/features/git-hooks/post-merge +0 -47
  102. package/features/git-hooks/pre-commit +0 -28
  103. package/features/git-hooks/simple-steps.js +0 -53
  104. package/features/git-hooks/simple-test.feature +0 -10
  105. package/features/git-hooks/steps.js +0 -196
  106. package/features/jettypod-update-command.feature +0 -46
  107. package/features/mode-prompts/index.js +0 -95
  108. package/features/mode-prompts/simple-steps.js +0 -44
  109. package/features/mode-prompts/simple-test.feature +0 -9
  110. package/features/mode-prompts/validation.test.js +0 -120
  111. package/features/multiple-claude-instances.feature +0 -121
  112. package/features/production-mode-skill.feature +0 -121
  113. package/features/refactor-mode/steps.js +0 -217
  114. package/features/refactor-mode.feature +0 -49
  115. package/features/simplify-external-transition.feature +0 -166
  116. package/features/skills-update/index.test.js +0 -216
  117. package/features/step_definitions/backlog-command.steps.js +0 -37
  118. package/features/step_definitions/fix-text-wrapping.steps.js +0 -271
  119. package/features/step_definitions/multiple-claude-instances.steps.js +0 -621
  120. package/features/step_definitions/production-mode-skill.steps.js +0 -862
  121. package/features/step_definitions/simplify-external-transition.steps.js +0 -370
  122. package/features/step_definitions/terminal-logo.steps.js +0 -145
  123. package/features/step_definitions/update-command.steps.js +0 -183
  124. package/features/support/hooks.js +0 -9
  125. package/features/terminal-logo/index.js +0 -39
  126. package/features/terminal-logo/terminal-logo.feature +0 -30
  127. package/features/update-command/index.js +0 -181
  128. package/features/update-command/index.test.js +0 -225
  129. package/features/work-commands/bug-workflow-display.feature +0 -22
  130. package/features/work-commands/index.js +0 -498
  131. package/features/work-commands/simple-steps.js +0 -69
  132. package/features/work-commands/stable-tests.feature +0 -57
  133. package/features/work-commands/steps.js +0 -1174
  134. package/features/work-commands/validation.test.js +0 -88
  135. package/features/work-commands/work-commands.feature +0 -13
  136. package/features/work-tracking/discovery-validation.test.js +0 -228
  137. package/features/work-tracking/index.js +0 -1921
  138. package/features/work-tracking/mode-required.feature +0 -112
  139. package/features/work-tracking/phase-tracking.test.js +0 -482
  140. package/features/work-tracking/prototype-tracking.test.js +0 -485
  141. package/features/work-tracking/tree-view.test.js +0 -310
  142. package/features/work-tracking/work-set-mode.feature +0 -71
  143. package/features/work-tracking/work-start-mode.feature +0 -88
  144. package/full-test.txt +0 -0
  145. package/lib/bug-workflow.test.js +0 -177
  146. package/lib/claudemd.test.js +0 -195
  147. package/lib/config.test.js +0 -511
  148. package/lib/constants.test.js +0 -164
  149. package/lib/current-work.test.js +0 -146
  150. package/lib/database-project-config.test.js +0 -111
  151. package/lib/database.test.js +0 -106
  152. package/lib/decisions-generator.test.js +0 -457
  153. package/lib/decisions-helpers.test.js +0 -310
  154. package/lib/git-coordinator.js +0 -167
  155. package/lib/git.test.js +0 -145
  156. package/lib/migrations/002-default-work-item-modes.test.js +0 -351
  157. package/lib/production-chore-generator.test.js +0 -432
  158. package/lib/production-context-detector.test.js +0 -277
  159. package/lib/production-scenario-appender.test.js +0 -235
  160. package/lib/production-scenario-validator.test.js +0 -246
  161. package/lib/production-standards-reader.test.js +0 -270
  162. package/lib/project-state.test.js +0 -92
  163. package/lib/push-queue.js +0 -417
  164. package/lib/queue-processor.js +0 -74
  165. package/lib/test-helpers.js +0 -202
  166. package/lib/test-helpers.test.js +0 -255
  167. package/prototypes/2025-01-11-production-mode-autonomous.js +0 -119
  168. package/prototypes/2025-01-11-production-mode-collaborative.js +0 -166
  169. package/prototypes/2025-01-11-production-mode-guided.js +0 -217
  170. package/prototypes/2025-01-11-production-mode-smart-context.js +0 -347
  171. package/prototypes/2025-01-11-production-standards-example.md +0 -204
  172. package/prototypes/2025-11-10-backlog-filtering-tree-aware.js +0 -242
  173. package/prototypes/test/index.html +0 -1
  174. package/setup-dist-repo.sh +0 -68
  175. package/test-production-standards-engine.js +0 -130
  176. package/test-results.json +0 -2195
  177. package/test-safety-check.sh +0 -80
  178. package/work-item-tracking-plan.md +0 -199
  179. /package/{.jettypod/devpod.db → jettypod.db} +0 -0
@@ -1,464 +0,0 @@
1
- ---
2
- name: feature-planning
3
- description: Guide feature planning with UX approach exploration and BDD scenario generation. Use when user asks to plan a feature, mentions designing/implementing a feature, says "help me plan feature", or wants to explore UX approaches for a specific feature.
4
- ---
5
-
6
- # Feature Planning Skill
7
-
8
- Guides Claude through feature planning including UX approach exploration, optional prototyping, and BDD scenario generation.
9
-
10
- ## Instructions
11
-
12
- When this skill is activated, you are helping discover the best approach for a feature. Follow this structured approach:
13
-
14
- ### Step 1: Understand the Feature Context
15
-
16
- You'll receive context about:
17
- - Feature title and description
18
- - Parent epic (if any)
19
- - Project context
20
-
21
- ### Step 2: Check Epic Architectural Decisions
22
-
23
- **CRITICAL:** If this feature belongs to an epic, check for existing architectural decisions:
24
-
25
- ```javascript
26
- const { getDecisionsForEpic } = require('../../lib/decisions-helpers');
27
-
28
- if (parentEpicId) {
29
- const epicDecisions = await getDecisionsForEpic(parentEpicId);
30
- // Surface decisions to user
31
- }
32
- ```
33
-
34
- Display the context with decisions:
35
-
36
- ```
37
- ✨ Planning Feature: [Feature Name]
38
- Epic: [Epic Name]
39
-
40
- 🎯 **Epic Architectural Decisions:**
41
- [If decisions exist:]
42
- - **[Aspect]:** [Decision]
43
- *Rationale:* [Why this was chosen]
44
- *Impact:* [How this constrains/guides this feature]
45
-
46
- [If no decisions:]
47
- No architectural decisions recorded for this epic yet.
48
-
49
- Let's explore different approaches for this feature [that align with these decisions].
50
- ```
51
-
52
- **IMPORTANT:** When suggesting UX approaches in the next step, ensure they respect/align with the epic's architectural decisions.
53
-
54
- ### Step 3: Suggest 3 UX Approaches
55
-
56
- Propose exactly 3 approaches with varying complexity/trade-offs:
57
-
58
- ```
59
- Here are 3 different approaches for [feature name]:
60
-
61
- **Option 1: [Simple/Minimal approach name]**
62
- - **Pros**: ✅ [2-3 advantages]
63
- - **Cons**: ❌ [2-3 trade-offs]
64
- - **Experience**: [What it feels like to use]
65
-
66
- **Option 2: [Balanced approach name]**
67
- - **Pros**: ✅ [2-3 advantages]
68
- - **Cons**: ❌ [2-3 trade-offs]
69
- - **Experience**: [What it feels like to use]
70
-
71
- **Option 3: [Advanced/Comprehensive approach name]**
72
- - **Pros**: ✅ [2-3 advantages]
73
- - **Cons**: ❌ [2-3 trade-offs]
74
- - **Experience**: [What it feels like to use]
75
-
76
- **Additional approaches considered but not recommended:**
77
- - *[Alternative 1]*: [Brief] - Not selected because [reason]
78
- - *[Alternative 2]*: [Brief] - Not selected because [reason]
79
-
80
- Would you like me to create working prototypes of these approaches?
81
- ```
82
-
83
- ### Step 4: Optional Prototyping
84
-
85
- If user wants prototypes:
86
-
87
- 1. **Build prototypes** in `/prototypes/feature-[id]-[approach-name]/`
88
- 2. **Name format**: `YYYY-MM-DD-[feature-slug]-[option].ext`
89
- 3. **Focus on UX**: Show the feel, not production code
90
- 4. **Add prototype header**:
91
- ```
92
- // Prototype: [feature] - [option]
93
- // Created: [date]
94
- // Purpose: [what this explores]
95
- // Decision: [to be filled after testing]
96
- ```
97
- 5. **Offer to open them**: "Want me to open these in your browser?"
98
-
99
- ### Step 5: Choose Winner
100
-
101
- After user tests (or skips prototyping):
102
-
103
- ```
104
- Which approach works best?
105
- ```
106
-
107
- User picks winner. Record it.
108
-
109
- ### Step 6: Generate BDD Scenarios AND Step Definitions
110
-
111
- **CRITICAL:** BDD scenarios and step definitions must ALWAYS be created together. Never create scenarios without step definitions.
112
-
113
- Based on chosen approach, generate:
114
-
115
- **A. Scenario file** at `features/[feature-slug].feature` using Write tool:
116
-
117
- 1. **Create file** at `features/[feature-slug].feature` using Write tool
118
- 2. **ONLY include happy path scenario**:
119
- - Happy path ONLY - the core user journey that proves it works
120
- - NO error handling scenarios (added in stable mode)
121
- - NO edge cases (added in stable mode)
122
- - NO security/compliance scenarios (added in production mode)
123
-
124
- **B. Step definitions file** at `features/step_definitions/[feature-slug].steps.js` using Write tool:
125
-
126
- 1. **Create file** at `features/step_definitions/[feature-slug].steps.js`
127
- 2. **Implement all Given/When/Then steps** from the scenarios
128
- 3. **Follow existing patterns** - check other `.steps.js` files for conventions
129
- 4. **Include**:
130
- - Test environment setup/cleanup
131
- - All Given steps (setup state)
132
- - All When steps (execute actions)
133
- - All Then steps (verify outcomes)
134
-
135
- 3. **Update database** with scenario file path:
136
- ```javascript
137
- // After creating scenario file AND step definitions
138
- const { getDb } = require('../../lib/database');
139
- const db = getDb();
140
-
141
- db.run(
142
- `UPDATE work_items SET scenario_file = ? WHERE id = ?`,
143
- ['features/[feature-slug].feature', featureId],
144
- (err) => {
145
- if (err) console.error('Failed to update scenario_file:', err);
146
- }
147
- );
148
- ```
149
-
150
- **Template for speed mode (happy path only):**
151
-
152
- ```gherkin
153
- Feature: [Feature Name]
154
- [Brief description based on chosen UX approach]
155
-
156
- Epic: [Epic name if applicable]
157
- Approach: [Chosen approach name]
158
-
159
- Scenario: [Happy path scenario - core user journey]
160
- Given [initial state]
161
- When [user takes main action]
162
- Then [expected successful outcome]
163
- And [observable UI/system state change]
164
-
165
- # SPEED MODE: Only happy path above
166
- # STABLE MODE: Will add error handling, edge cases, validation scenarios
167
- # These additional scenarios are added by stable-mode skill, NOT during feature discovery
168
- ```
169
-
170
- **Example for Login feature (speed mode):**
171
- ```gherkin
172
- Feature: Email/Password Login
173
- Simple inline form with email and password fields
174
-
175
- Epic: User Authentication
176
- Approach: Simple inline form
177
-
178
- Scenario: User successfully logs in with valid credentials
179
- Given I am on the login page
180
- When I enter valid email and password
181
- And I click the login button
182
- Then I am redirected to the dashboard
183
- And I see a welcome message with my name
184
- And I have an active session token
185
- ```
186
-
187
- ### Step 7: Propose Speed Mode Chores
188
-
189
- **CRITICAL:** After generating BDD scenarios, analyze the codebase and propose technical implementation chores with rich breadcrumbs for speed mode execution.
190
-
191
- **Your analysis should consider:**
192
- - The BDD scenarios (especially the happy path)
193
- - Existing codebase structure and patterns
194
- - Epic's architectural decisions (if any)
195
- - Tech stack and framework conventions
196
- - Which scenario steps each chore addresses
197
- - Similar code patterns to follow
198
- - Specific step definitions that should pass
199
-
200
- **Say to the user:**
201
-
202
- ```
203
- Now let me analyze the codebase and propose implementation chores for speed mode.
204
-
205
- [Analyze codebase, read relevant files, check patterns]
206
-
207
- Based on the scenario and codebase, here are the chores I recommend for speed mode:
208
-
209
- **Chore 1: [Technical task title]**
210
- - Why: [What this accomplishes toward the scenario]
211
- - Scenario steps addressed:
212
- • [Which Given/When/Then steps this chore makes work]
213
- - Implementation guidance:
214
- • Files to create/modify: [specific paths]
215
- • Patterns to follow: [reference existing similar code]
216
- • Key functions/components needed: [list]
217
- - Verification:
218
- • Step definitions that should pass: [specific steps from .steps.js]
219
-
220
- **Chore 2: [Technical task title]**
221
- - Why: [What this accomplishes]
222
- - Scenario steps addressed:
223
- • [Which steps]
224
- - Implementation guidance:
225
- • Files to create/modify: [paths]
226
- • Patterns to follow: [references]
227
- • Key functions/components needed: [list]
228
- - Verification:
229
- • Step definitions that should pass: [steps]
230
-
231
- [etc.]
232
-
233
- These chores will make the happy path scenario pass.
234
-
235
- Sound good? Any adjustments?
236
- ```
237
-
238
- **Wait for user confirmation/adjustments.**
239
-
240
- **Then create the chores with rich descriptions:**
241
-
242
- ```javascript
243
- // For each confirmed chore:
244
- const { create } = require('./features/work-tracking');
245
-
246
- const description = `[Technical description]
247
-
248
- Scenario steps addressed:
249
- • [Which Given/When/Then steps this chore makes work]
250
-
251
- Implementation guidance:
252
- • Files to create/modify: [specific paths]
253
- • Patterns to follow: [reference existing similar code]
254
- • Key functions/components needed: [list]
255
-
256
- Verification:
257
- • Step definitions that should pass: [specific steps from .steps.js file]`;
258
-
259
- await create('chore', 'Chore Title', description, featureId, 'speed', false);
260
- // Repeat for each chore
261
- ```
262
-
263
- **Example chore description:**
264
-
265
- ```
266
- Build login form component with email/password fields
267
-
268
- Scenario steps addressed:
269
- • Given I am on the login page
270
- • When I enter valid credentials and submit
271
-
272
- Implementation guidance:
273
- • Create: src/components/LoginForm.jsx
274
- • Follow pattern: src/components/SignupForm.jsx (similar form structure)
275
- • Key components: EmailInput, PasswordInput, SubmitButton
276
- • Key functions: handleSubmit(), validateEmailFormat()
277
-
278
- Verification:
279
- • features/step_definitions/login.steps.js - 'I am on the login page' should pass
280
- • features/step_definitions/login.steps.js - 'I enter valid credentials and submit' should pass
281
- ```
282
-
283
- **Report:**
284
- ```
285
- ✅ Created X chores for speed mode
286
-
287
- Each chore includes:
288
- • Scenario steps it addresses
289
- • Implementation guidance with file paths and patterns
290
- • Step definitions to verify against
291
-
292
- Ready to start implementation: jettypod work start [first-chore-id]
293
- ```
294
-
295
- ### Step 8: Transition to Implementation
296
-
297
- Complete the discovery phase by transitioning the feature from discovery to implementation.
298
-
299
- **CRITICAL: You must EXECUTE the transition command using the Bash tool. Do NOT just display it as text.**
300
-
301
- #### Step 8A: Propose Rationale
302
-
303
- Display to user:
304
-
305
- ```
306
- I'm going to record this decision:
307
-
308
- Winner: [approach name or prototypes/winner-file]
309
- Rationale: [Why this approach was chosen]
310
-
311
- Does this rationale capture why you chose this approach? (You can edit it if needed)
312
- ```
313
-
314
- **WAIT for user to confirm or provide edited rationale.**
315
-
316
- #### Step 8B: Execute Transition
317
-
318
- **CRITICAL: After user confirms, use Bash tool to EXECUTE the work implement command:**
319
-
320
- ```javascript
321
- // Use Bash tool to execute:
322
- node jettypod.js work implement [feature-id] \
323
- --winner="[approach-name or prototypes/winner-file]" \
324
- --rationale="[user's confirmed/edited rationale]"
325
- ```
326
-
327
- **DO NOT display this as example text. EXECUTE IT using the Bash tool.**
328
-
329
- After execution succeeds, verify the feature transitioned to implementation phase and display:
330
-
331
- ```
332
- ✅ Feature transitioned to implementation phase
333
-
334
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
335
- 🎯 Feature Discovery Complete!
336
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
337
-
338
- 📋 BDD scenarios: features/[feature-slug].feature
339
- 🧪 Step definitions: features/step_definitions/[feature-slug].steps.js
340
- ✅ Feature phase: Implementation
341
- 🚀 Feature mode: Speed
342
-
343
- **Next step:** Start implementing the first chore
344
- Run: jettypod work start [first-chore-id]
345
-
346
- Build code that passes the happy path scenarios we just wrote.
347
- ```
348
-
349
- ## Key Principles
350
-
351
- 1. **Always suggest exactly 3 options** - Simple, Balanced, Advanced
352
- 2. **Show epic's architectural decision** - Feature should align with epic's technical approach
353
- 3. **UX first, tech second** - Focus on what it feels like to use, not implementation details
354
- 4. **Prototypes are optional but valuable** - User can skip if approach is obvious
355
- 5. **BDD scenarios are required** - Discovery isn't complete without scenarios
356
- 6. **Guide to next step** - Always end with clear action
357
-
358
- ## Prototyping Guidelines
359
-
360
- **Use fastest tech to demonstrate UX:**
361
- - Quick HTML+JS for web UX
362
- - Simple CLI scripts for command-line UX
363
- - Minimal frameworks, maximum clarity
364
-
365
- **What to prototype:**
366
- - User interaction flow
367
- - Visual layout (if UI)
368
- - Command structure (if CLI)
369
- - API shape (if API)
370
-
371
- **What NOT to prototype:**
372
- - Production error handling
373
- - Database layer
374
- - Authentication (unless that's the feature)
375
- - Test coverage
376
-
377
- ## BDD Scenario Guidelines
378
-
379
- **Scenario naming:**
380
- - Use present tense
381
- - Be specific about what's being tested
382
- - Focus on user behavior
383
-
384
- **Given/When/Then structure:**
385
- - **Given**: Set up initial state
386
- - **When**: User action
387
- - **Then**: Observable outcome
388
-
389
- **What feature-discover creates:**
390
-
391
- **Feature discovery ONLY creates speed mode scenarios (happy path):**
392
- ```gherkin
393
- Scenario: User successfully [does the thing]
394
- Given [setup]
395
- When [action]
396
- Then [success]
397
- ```
398
-
399
- **Additional scenarios are added LATER by stable-mode skill:**
400
-
401
- Stable mode adds error handling:
402
- ```gherkin
403
- Scenario: Handle invalid input
404
- Given [setup]
405
- When [invalid action]
406
- Then [appropriate error]
407
- ```
408
-
409
- Production mode adds security/scale/compliance:
410
- ```gherkin
411
- Scenario: Prevent unauthorized access
412
- Given [unauthorized user]
413
- When [attempts action]
414
- Then [access denied with proper error]
415
- ```
416
-
417
- **IMPORTANT:** Feature discovery only creates happy path. Stable/production chores add more scenarios later.
418
-
419
- ## Example: Feature Discovery Flow
420
-
421
- **Feature:** "Email/password login"
422
- **Epic decision:** "Using Auth.js with JWT tokens"
423
-
424
- **Suggested approaches:**
425
- 1. **Simple inline form** - Email + password fields, inline validation
426
- 2. **Multi-step flow** - Step 1: Email, Step 2: Password (better mobile UX)
427
- 3. **Unified auth form** - Combined login/signup (switches based on email)
428
-
429
- **User picks:** Option 1 (Simple inline form)
430
-
431
- **Scenarios generated:**
432
- ```gherkin
433
- Feature: Email/Password Login
434
-
435
- Scenario: Successful login
436
- Given I am on the login page
437
- When I enter valid credentials and submit
438
- Then I am redirected to the dashboard
439
- And I have an active JWT token
440
-
441
- Scenario: Invalid credentials
442
- Given I am on the login page
443
- When I enter invalid credentials
444
- Then I see an error message
445
- And I remain on the login page
446
- ```
447
-
448
- **Rationale confirmation:**
449
- Claude proposes: "Simple inline form chosen - fastest for users, cleanest UX"
450
- User confirms: "Yes, perfect"
451
-
452
- **Transition:** `jettypod work implement 10 --winner="prototypes/2025-10-30-login-simple.html" --rationale="Simple inline form chosen - fastest for users, cleanest UX"`
453
-
454
- ## Validation
455
-
456
- Before completing feature discovery, ensure:
457
- - [ ] Epic's architectural decision is shown (if exists)
458
- - [ ] Exactly 3 approaches suggested
459
- - [ ] Winner chosen (with prototypes or without)
460
- - [ ] BDD scenarios written
461
- - [ ] Step definitions written for ALL scenario steps
462
- - [ ] Scenarios file exists at `features/[feature-slug].feature`
463
- - [ ] Step definitions file exists at `features/step_definitions/[feature-slug].steps.js`
464
- - [ ] User knows next step .jettypod work start [feature-id])