jettypod 4.4.1 → 4.4.3

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/jettypod.js CHANGED
@@ -222,6 +222,7 @@ jettypod work create feature "<title>" --parent=<id>
222
222
  jettypod work start <id>
223
223
  jettypod work status <id> cancelled
224
224
  jettypod backlog
225
+ jettypod impact <file> # Show tests/features affected by changing a file
225
226
 
226
227
  ## Advanced Commands
227
228
  For mode management, decisions, project state: docs/COMMAND_REFERENCE.md
@@ -2062,6 +2063,94 @@ Quick commands:
2062
2063
  break;
2063
2064
  }
2064
2065
 
2066
+ case 'impact': {
2067
+ // Test impact analysis
2068
+ const targetFile = args[0];
2069
+
2070
+ if (!targetFile) {
2071
+ console.log('Usage: jettypod impact <file-path>');
2072
+ console.log('');
2073
+ console.log('Analyze what tests and features would be affected by changing a file.');
2074
+ console.log('');
2075
+ console.log('Examples:');
2076
+ console.log(' jettypod impact lib/database.js');
2077
+ console.log(' jettypod impact features/work-tracking/index.js');
2078
+ process.exit(1);
2079
+ }
2080
+
2081
+ try {
2082
+ const { DependencyGraph } = require('./lib/test-impact-analyzer');
2083
+ const graph = new DependencyGraph();
2084
+
2085
+ console.log('šŸ” Building dependency graph...');
2086
+ await graph.build(process.cwd());
2087
+
2088
+ const impact = graph.getImpact(targetFile);
2089
+
2090
+ if (impact.error) {
2091
+ console.error(`\nāŒ ${impact.error}`);
2092
+ console.log('');
2093
+ console.log('Make sure the file path is relative to the project root.');
2094
+ process.exit(1);
2095
+ }
2096
+
2097
+ // Pretty-print impact analysis
2098
+ const levelColors = {
2099
+ LOW: '\x1b[32m', // green
2100
+ MEDIUM: '\x1b[33m', // yellow
2101
+ HIGH: '\x1b[31m' // red
2102
+ };
2103
+ const reset = '\x1b[0m';
2104
+ const bold = '\x1b[1m';
2105
+ const dim = '\x1b[2m';
2106
+
2107
+ console.log('');
2108
+ console.log('═'.repeat(60));
2109
+ console.log(`${bold}IMPACT ANALYSIS: ${targetFile}${reset}`);
2110
+ console.log('═'.repeat(60));
2111
+ console.log('');
2112
+ console.log(`Impact Score: ${bold}${impact.impactScore}/100${reset} ${levelColors[impact.impactLevel]}(${impact.impactLevel})${reset}`);
2113
+ console.log(`Total Affected Files: ${impact.totalAffected}`);
2114
+
2115
+ if (impact.tests.length > 0) {
2116
+ console.log('');
2117
+ console.log(`${bold}AFFECTED TESTS (${impact.tests.length}):${reset}`);
2118
+ for (const t of impact.tests) {
2119
+ console.log(` ${dim}[dist=${t.distance}]${reset} ${t.file}`);
2120
+ }
2121
+ }
2122
+
2123
+ if (impact.features.length > 0) {
2124
+ console.log('');
2125
+ console.log(`${bold}AFFECTED BDD FILES (${impact.features.length}):${reset}`);
2126
+ for (const f of impact.features) {
2127
+ console.log(` ${dim}[dist=${f.distance}]${reset} ${f.file}`);
2128
+ }
2129
+ }
2130
+
2131
+ if (impact.code.length > 0) {
2132
+ console.log('');
2133
+ console.log(`${bold}AFFECTED CODE (${impact.code.length}):${reset}`);
2134
+ const displayCode = impact.code.slice(0, 10);
2135
+ for (const c of displayCode) {
2136
+ console.log(` ${dim}[dist=${c.distance}]${reset} ${c.file}`);
2137
+ }
2138
+ if (impact.code.length > 10) {
2139
+ console.log(` ${dim}... and ${impact.code.length - 10} more${reset}`);
2140
+ }
2141
+ }
2142
+
2143
+ console.log('');
2144
+ console.log('═'.repeat(60));
2145
+ console.log('');
2146
+
2147
+ } catch (err) {
2148
+ console.error(`āŒ Error: ${err.message}`);
2149
+ process.exit(1);
2150
+ }
2151
+ break;
2152
+ }
2153
+
2065
2154
  default:
2066
2155
  // Smart mode: auto-initialize if needed, otherwise show guidance
2067
2156
  if (!fs.existsSync('.jettypod')) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jettypod",
3
- "version": "4.4.1",
3
+ "version": "4.4.3",
4
4
  "description": "AI-powered development workflow manager with TDD, BDD, and automatic test generation",
5
5
  "main": "jettypod.js",
6
6
  "bin": {
@@ -211,23 +211,114 @@ node jettypod.js work epic-implement [epic-id] \
211
211
 
212
212
  **DO NOT display this as example text. EXECUTE IT using the Bash tool.**
213
213
 
214
- After execution succeeds, verify the decision was recorded and display:
214
+ After execution succeeds, display:
215
215
 
216
216
  ```
217
217
  āœ… Architectural decision recorded
218
+ ```
219
+
220
+ Then proceed to Step 7.
221
+
222
+ ### Step 7: Route to Next Planning Skill
223
+
224
+ After features/chores are created (and architectural decision recorded if applicable), route to the appropriate planning skill.
225
+
226
+ #### Step 7A: Query Created Items
227
+
228
+ Query the database to find what was just created under this epic:
229
+
230
+ ```bash
231
+ sqlite3 .jettypod/work.db "SELECT id, title, type FROM work_items WHERE parent_id = <EPIC_ID> ORDER BY id"
232
+ ```
233
+
234
+ #### Step 7B: Display and Recommend
235
+
236
+ Display what was created and recommend which item to plan first:
218
237
 
238
+ ```
219
239
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
220
240
  šŸŽÆ Epic Planning Complete!
221
241
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
222
242
 
223
- Features created: [count]
224
- Architectural decision: Recorded
243
+ Created under this epic:
244
+ ✨ Feature #[id]: [title]
245
+ ✨ Feature #[id]: [title]
246
+ šŸ”§ Chore #[id]: [title] (if any chores were created)
247
+
248
+ šŸ’” Recommendation: Start with [Feature/Chore] #[id] ([title])
249
+ [Reason - e.g., "It's foundational - other items may depend on it."]
250
+
251
+ Plan this one now? [yes / pick different / done for now]
252
+ ```
253
+
254
+ **Recommendation logic:**
255
+ - If features exist, recommend the first feature (features are typically foundational)
256
+ - If only chores exist, recommend the first chore
257
+ - Provide brief reasoning for the recommendation
258
+
259
+ **WAIT for user response.**
260
+
261
+ #### Step 7C: Route on Confirmation
262
+
263
+ Based on user response:
264
+
265
+ **If user confirms (says "yes", "let's go", "proceed", etc.):**
266
+
267
+ Determine the skill to invoke based on item type:
268
+ - **Feature** → invoke `feature-planning`
269
+ - **Chore** → invoke `chore-planning`
225
270
 
226
- **Next step:** Plan your first feature
227
- Run: jettypod work discover [feature-id]
228
- Or talk to Claude Code: "Let's do feature discovery for #[feature-id]"
271
+ **IMMEDIATELY invoke the appropriate skill using the Skill tool:**
272
+
273
+ ```
274
+ Use the Skill tool with skill: "feature-planning"
275
+ ```
276
+ or
277
+ ```
278
+ Use the Skill tool with skill: "chore-planning"
279
+ ```
280
+
281
+ **If user picks different item (says "pick different", "different one", "let me choose", etc.):**
282
+
283
+ Display a numbered list of all created items:
284
+
285
+ ```
286
+ Which item would you like to plan?
287
+
288
+ 1. ✨ Feature #[id]: [title]
289
+ 2. ✨ Feature #[id]: [title]
290
+ 3. šŸ”§ Chore #[id]: [title]
291
+
292
+ Enter the number of your choice:
229
293
  ```
230
294
 
295
+ **WAIT for user to enter a number.**
296
+
297
+ After user selects (e.g., "2" or "number 2"):
298
+ 1. Look up the item from the list
299
+ 2. Determine the skill based on item type:
300
+ - **Feature** → invoke `feature-planning`
301
+ - **Chore** → invoke `chore-planning`
302
+ 3. **IMMEDIATELY invoke the appropriate skill using the Skill tool**
303
+
304
+ **If user says "done for now" (or "later", "not now", "skip", "no thanks", etc.):**
305
+
306
+ Display with actual IDs from the created items:
307
+ ```
308
+ No problem! When you're ready to continue, you can plan any of these:
309
+
310
+ Features:
311
+ • "Let's do feature discovery for #10" (User registration)
312
+ • "Let's do feature discovery for #11" (Password reset)
313
+
314
+ Chores:
315
+ • "Help me plan chore #12" (Update CI config)
316
+
317
+ Or run: jettypod backlog to see all items.
318
+ ```
319
+
320
+ **Do NOT invoke any skill. End epic-planning skill.**
321
+
231
322
  ## Key Principles
232
323
 
233
324
  1. **Feature brainstorming is always required** - Don't skip this even if architectural decision is clear
@@ -235,8 +326,9 @@ Or talk to Claude Code: "Let's do feature discovery for #[feature-id]"
235
326
  3. **Always suggest exactly 3 options** when architectural decision needed - Simple/Conservative, Balanced, Advanced
236
327
  4. **Be specific about features** - Each feature should be user-facing capability
237
328
  5. **Use the Approach Suggestion template** - Pros, Cons, Technical Impact format
238
- 6. **Suggest next step** - Always end with clear guidance on what to do next
329
+ 6. **Route to next skill** - After creating items, recommend one and invoke the appropriate planning skill
239
330
  7. **Use jettypod commands** - Create features using jettypod CLI, record decisions with epic-implement
331
+ 8. **Skill handoff** - Invoke `feature-planning` for features, `chore-planning` for chores
240
332
 
241
333
  ## Example: Epic with Architectural Decision
242
334
 
@@ -297,9 +389,11 @@ Epic: "User Management"
297
389
 
298
390
  ## Validation
299
391
 
300
- Before completing epic discovery, ensure:
301
- - [ ] At least 2-3 features identified
392
+ Before completing epic planning, ensure:
393
+ - [ ] At least 2-3 features/chores identified
302
394
  - [ ] Features are user-facing capabilities (not technical tasks)
395
+ - [ ] Chores (if any) are standalone work items for this epic
303
396
  - [ ] Architectural decision documented if needed
304
- - [ ] Features created in database
305
- - [ ] User knows next step .jettypod work discover [feature-id])
397
+ - [ ] All items created in database with correct parent_id
398
+ - [ ] Recommended next item to plan
399
+ - [ ] Routed to feature-planning or chore-planning (or user declined)
@@ -11,6 +11,21 @@ Guides Claude through feature planning including UX approach exploration, option
11
11
 
12
12
  When this skill is activated, you are helping discover the best approach for a feature. Follow this structured approach:
13
13
 
14
+ ## šŸ”‘ Critical Command Distinction
15
+
16
+ **Two different commands, two different purposes:**
17
+
18
+ | Command | Used For | When | Phase |
19
+ |---------|----------|------|-------|
20
+ | `work implement <feature-id>` | Transition feature to implementation phase | During feature planning (Step 8B) | Feature Planning |
21
+ | `work start <chore-id>` | Start implementing a specific chore | After feature planning complete (Step 8D) | Speed Mode |
22
+
23
+ **CRITICAL:** Both commands are run by **Claude**, not the user. The distinction is:
24
+ - `work implement` = Ends feature planning, creates chores
25
+ - `work start` = Begins implementing a chore (triggers speed-mode skill)
26
+
27
+ ---
28
+
14
29
  ### Step 1: Understand the Feature Context
15
30
 
16
31
  You'll receive context about:
@@ -96,15 +111,42 @@ If user wants prototypes:
96
111
  1. **Build prototypes** in `/prototypes/feature-[id]-[approach-name]/`
97
112
  2. **Name format**: `YYYY-MM-DD-[feature-slug]-[option].ext`
98
113
  3. **Focus on UX**: Show the feel, not production code
99
- 4. **Add prototype header**:
100
- ```
101
- // Prototype: [feature] - [option]
102
- // Created: [date]
103
- // Purpose: [what this explores]
104
- // Decision: [to be filled after testing]
114
+ 4. **Add visible banner header at TOP of page** (for HTML/web prototypes):
115
+ ```html
116
+ <div style="background: #f0f0f0; border: 2px solid #333; padding: 16px; margin-bottom: 24px; font-family: monospace;">
117
+ <strong>🧪 PROTOTYPE</strong><br>
118
+ Feature: [feature name]<br>
119
+ Option: [option number/name]<br>
120
+ Created: [YYYY-MM-DD]<br>
121
+ Purpose: [what this explores]<br>
122
+ Decision: [to be filled after testing]
123
+ </div>
105
124
  ```
125
+ For CLI/terminal prototypes, add similar info as first output.
106
126
  5. **Offer to open them**: "Want me to open these in your browser?"
107
127
 
128
+ <details>
129
+ <summary><strong>šŸ“‹ Prototyping Guidelines (click to expand)</strong></summary>
130
+
131
+ **Use fastest tech to demonstrate UX:**
132
+ - Quick HTML+JS for web UX
133
+ - Simple CLI scripts for command-line UX
134
+ - Minimal frameworks, maximum clarity
135
+
136
+ **What to prototype:**
137
+ - User interaction flow
138
+ - Visual layout (if UI)
139
+ - Command structure (if CLI)
140
+ - API shape (if API)
141
+
142
+ **What NOT to prototype:**
143
+ - Production error handling
144
+ - Database layer
145
+ - Authentication (unless that's the feature)
146
+ - Test coverage
147
+
148
+ </details>
149
+
108
150
  ### Step 5: Choose Winner
109
151
 
110
152
  After user tests (or skips prototyping):
@@ -124,10 +166,12 @@ Based on chosen approach, generate:
124
166
  **A. Scenario file** at `features/[feature-slug].feature` using Write tool:
125
167
 
126
168
  1. **Create file** at `features/[feature-slug].feature` using Write tool
127
- 2. **ONLY include happy path scenario**:
128
- - Happy path ONLY - the core user journey that proves it works
169
+ 2. **Include all "make it work" scenarios**:
170
+ - All success paths - required functionality AND optional features
171
+ - Multiple valid workflows if the feature supports them
172
+ - Success variations (different outcomes that are all correct)
129
173
  - NO error handling scenarios (added in stable mode)
130
- - NO edge cases (added in stable mode)
174
+ - NO validation failures (added in stable mode)
131
175
  - NO security/compliance scenarios (added in production mode)
132
176
 
133
177
  **B. Step definitions file** at `features/step_definitions/[feature-slug].steps.js` using Write tool:
@@ -147,7 +191,7 @@ Based on chosen approach, generate:
147
191
  sqlite3 .jettypod/work.db "UPDATE work_items SET scenario_file = 'features/[feature-slug].feature' WHERE id = <feature-id>"
148
192
  ```
149
193
 
150
- **Template for speed mode (happy path only):**
194
+ **Template for speed mode (make it work):**
151
195
 
152
196
  ```gherkin
153
197
  Feature: [Feature Name]
@@ -156,15 +200,20 @@ Feature: [Feature Name]
156
200
  Epic: [Epic name if applicable]
157
201
  Approach: [Chosen approach name]
158
202
 
159
- Scenario: [Happy path scenario - core user journey]
203
+ Scenario: [Core functionality - required workflow]
160
204
  Given [initial state]
161
205
  When [user takes main action]
162
206
  Then [expected successful outcome]
163
207
  And [observable UI/system state change]
164
208
 
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
209
+ Scenario: [Optional feature 1 - if applicable]
210
+ Given [initial state]
211
+ When [user uses optional feature]
212
+ Then [feature works correctly]
213
+
214
+ # SPEED MODE: All success scenarios above (required + optional functionality)
215
+ # STABLE MODE: Will add error handling, validation failures, edge cases
216
+ # These failure scenarios are added by stable-mode skill, NOT during feature discovery
168
217
  ```
169
218
 
170
219
  **Example for Login feature (speed mode):**
@@ -182,8 +231,66 @@ Scenario: User successfully logs in with valid credentials
182
231
  Then I am redirected to the dashboard
183
232
  And I see a welcome message with my name
184
233
  And I have an active session token
234
+
235
+ Scenario: User logs in with "Remember me" option (optional feature)
236
+ Given I am on the login page
237
+ When I enter valid credentials
238
+ And I check the "Remember me" checkbox
239
+ And I click the login button
240
+ Then I am redirected to the dashboard
241
+ And my session persists for 30 days
242
+ ```
243
+
244
+ <details>
245
+ <summary><strong>šŸ“‹ BDD Scenario Guidelines (click to expand)</strong></summary>
246
+
247
+ **Scenario naming:**
248
+ - Use present tense
249
+ - Be specific about what's being tested
250
+ - Focus on user behavior
251
+
252
+ **Given/When/Then structure:**
253
+ - **Given**: Set up initial state
254
+ - **When**: User action
255
+ - **Then**: Observable outcome
256
+
257
+ **What feature planning creates:**
258
+
259
+ Feature planning creates speed mode scenarios (make it work - all success paths):
260
+ ```gherkin
261
+ Scenario: User successfully [does the required thing]
262
+ Given [setup]
263
+ When [action]
264
+ Then [success]
265
+
266
+ Scenario: User successfully [uses optional feature]
267
+ Given [setup]
268
+ When [uses optional capability]
269
+ Then [feature works correctly]
270
+ ```
271
+
272
+ **Additional scenarios are added LATER by stable-mode skill:**
273
+
274
+ Stable mode adds error handling and validation:
275
+ ```gherkin
276
+ Scenario: Handle invalid input
277
+ Given [setup]
278
+ When [invalid action]
279
+ Then [appropriate error]
185
280
  ```
186
281
 
282
+ Production mode adds security/scale/compliance:
283
+ ```gherkin
284
+ Scenario: Prevent unauthorized access
285
+ Given [unauthorized user]
286
+ When [attempts action]
287
+ Then [access denied with proper error]
288
+ ```
289
+
290
+ **IMPORTANT:** Feature planning creates all success scenarios (required + optional). Stable/production chores add failure scenarios later.
291
+
292
+ </details>
293
+
187
294
  ### Step 6.5: Validate BDD Infrastructure
188
295
 
189
296
  **CRITICAL:** After creating both scenario and step definition files, automatically validate them with cucumber dry-run to catch errors immediately.
@@ -236,7 +343,7 @@ console.log(''); // Extra line before continuing
236
343
 
237
344
  The speed-mode skill guides Claude to:
238
345
  1. Implement the feature code
239
- 2. Create corresponding unit tests for the happy path
346
+ 2. Create corresponding unit tests for all success scenarios
240
347
  3. Ensure tests pass before completing the chore
241
348
 
242
349
  This keeps feature planning focused on BDD scenarios (what users experience) while speed mode handles unit tests (implementation details).
@@ -246,7 +353,7 @@ This keeps feature planning focused on BDD scenarios (what users experience) whi
246
353
  **CRITICAL:** After BDD validation passes, analyze the codebase and propose technical implementation chores. **DO NOT CREATE CHORES YET** - the feature must transition to implementation mode first (Step 8).
247
354
 
248
355
  **Your analysis should consider:**
249
- - The BDD scenarios (especially the happy path)
356
+ - The BDD scenarios (all success paths - required + optional features)
250
357
  - Existing codebase structure and patterns
251
358
  - Epic's architectural decisions (if any)
252
359
  - Tech stack and framework conventions
@@ -286,7 +393,7 @@ Based on the scenario and my understanding of the codebase, here are the chores
286
393
 
287
394
  [etc.]
288
395
 
289
- These chores will make the happy path scenario pass.
396
+ These chores will make all success scenarios pass (required + optional features).
290
397
 
291
398
  Sound good? Any adjustments?
292
399
  ```
@@ -331,16 +438,11 @@ node jettypod.js work implement [feature-id] \
331
438
 
332
439
  **CRITICAL: NOW create the chores.** The feature has transitioned to implementation mode, so chore creation will succeed.
333
440
 
334
- **IMPORTANT:** You MUST pass `--parent=<FEATURE_ID>` with the actual numeric feature ID. Without this, chores won't be linked to the feature.
335
-
336
- For each chore that the user confirmed in Step 7, use the Bash tool to create it. Replace `<FEATURE_ID>` with the actual feature ID number:
441
+ For each chore that the user confirmed in Step 7, use the Bash tool to create it:
337
442
 
338
443
  ```bash
339
- # CORRECT - uses actual numeric feature ID:
340
- node jettypod.js work create chore "Implement cursor position broadcast" "Broadcast cursor positions..." --parent=12
341
-
342
- # WRONG - missing parent flag (chore won't be linked to feature):
343
- node jettypod.js work create chore "Implement cursor position broadcast" "Broadcast cursor positions..."
444
+ # Use Bash tool to execute for each chore:
445
+ node jettypod.js work create chore "[Chore title]" "[Chore description with all the implementation guidance]" --parent=[feature-id]
344
446
  ```
345
447
 
346
448
  **Build the description from your Step 7 proposal:**
@@ -367,7 +469,7 @@ After creating all chores, display:
367
469
  āœ… Created X chores for speed mode
368
470
 
369
471
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
370
- šŸŽÆ Feature Discovery Complete!
472
+ šŸŽÆ Feature Planning Complete!
371
473
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
372
474
 
373
475
  šŸ“‹ BDD scenarios: features/[feature-slug].feature
@@ -378,97 +480,30 @@ After creating all chores, display:
378
480
  Ready to start implementation?
379
481
  ```
380
482
 
381
- #### Step 8D: Transition to Speed Mode
483
+ #### Step 8D: Start First Chore
382
484
 
383
- **WAIT for user confirmation.**
485
+ **Feature planning is now complete.** The feature has been transitioned to implementation phase and chores are ready.
384
486
 
385
- When user confirms they want to proceed with implementation (responds with "yes", "let's go", "proceed", "start", or similar):
386
-
387
- **IMMEDIATELY invoke the speed-mode skill using the Skill tool:**
487
+ **Ask user which chore to start with:**
388
488
 
389
489
  ```
390
- Use the Skill tool with skill: "speed-mode"
490
+ Ready to start implementation? Which chore should we start with?
391
491
  ```
392
492
 
393
- **The speed-mode skill will then:**
394
- 1. Guide the user to start the first chore with `jettypod work start [chore-id]`
395
- 2. Create a worktree for the chore
396
- 3. Follow TDD workflow to implement the chore
397
- 4. Merge when complete
398
-
399
- **End feature-planning skill after invoking speed-mode.**
400
-
401
- ## Key Principles
402
-
403
- 1. **Always suggest exactly 3 options** - Simple, Balanced, Advanced
404
- 2. **Show epic's architectural decision** - Feature should align with epic's technical approach
405
- 3. **UX first, tech second** - Focus on what it feels like to use, not implementation details
406
- 4. **Prototypes are optional but valuable** - User can skip if approach is obvious
407
- 5. **BDD scenarios are required** - Discovery isn't complete without scenarios
408
- 6. **Guide to next step** - Always end with clear action
409
-
410
- ## Prototyping Guidelines
411
-
412
- **Use fastest tech to demonstrate UX:**
413
- - Quick HTML+JS for web UX
414
- - Simple CLI scripts for command-line UX
415
- - Minimal frameworks, maximum clarity
493
+ **After user picks a chore, use Bash tool to run:**
416
494
 
417
- **What to prototype:**
418
- - User interaction flow
419
- - Visual layout (if UI)
420
- - Command structure (if CLI)
421
- - API shape (if API)
422
-
423
- **What NOT to prototype:**
424
- - Production error handling
425
- - Database layer
426
- - Authentication (unless that's the feature)
427
- - Test coverage
428
-
429
- ## BDD Scenario Guidelines
430
-
431
- **Scenario naming:**
432
- - Use present tense
433
- - Be specific about what's being tested
434
- - Focus on user behavior
435
-
436
- **Given/When/Then structure:**
437
- - **Given**: Set up initial state
438
- - **When**: User action
439
- - **Then**: Observable outcome
440
-
441
- **What feature-discover creates:**
442
-
443
- **Feature discovery ONLY creates speed mode scenarios (happy path):**
444
- ```gherkin
445
- Scenario: User successfully [does the thing]
446
- Given [setup]
447
- When [action]
448
- Then [success]
449
- ```
450
-
451
- **Additional scenarios are added LATER by stable-mode skill:**
452
-
453
- Stable mode adds error handling:
454
- ```gherkin
455
- Scenario: Handle invalid input
456
- Given [setup]
457
- When [invalid action]
458
- Then [appropriate error]
495
+ ```bash
496
+ jettypod work start [chore-id]
459
497
  ```
460
498
 
461
- Production mode adds security/scale/compliance:
462
- ```gherkin
463
- Scenario: Prevent unauthorized access
464
- Given [unauthorized user]
465
- When [attempts action]
466
- Then [access denied with proper error]
467
- ```
499
+ **This command will:**
500
+ 1. Create a git worktree and branch for the chore
501
+ 2. Automatically invoke the speed-mode skill
502
+ 3. Begin TDD implementation workflow in the isolated worktree
468
503
 
469
- **IMPORTANT:** Feature discovery only creates happy path. Stable/production chores add more scenarios later.
504
+ **The speed-mode skill takes over from here and handles the implementation.**
470
505
 
471
- ## Example: Feature Discovery Flow
506
+ ## Example: Feature Planning Flow
472
507
 
473
508
  **Feature:** "Email/password login"
474
509
  **Epic decision:** "Using Auth.js with JWT tokens"
@@ -480,17 +515,25 @@ Scenario: Prevent unauthorized access
480
515
 
481
516
  **User picks:** Option 1 (Simple inline form)
482
517
 
483
- **Scenarios generated (happy path only for speed mode):**
518
+ **Scenarios generated (speed mode - all success paths):**
484
519
  ```gherkin
485
520
  Feature: Email/Password Login
486
521
 
487
- Scenario: Successful login
522
+ Scenario: Successful login with credentials
488
523
  Given I am on the login page
489
524
  When I enter valid credentials and submit
490
525
  Then I am redirected to the dashboard
491
526
  And I have an active JWT token
492
527
 
493
- # SPEED MODE: Only happy path above
528
+ Scenario: Login with "Remember me" option
529
+ Given I am on the login page
530
+ When I enter valid credentials
531
+ And I check "Remember me"
532
+ And I submit
533
+ Then I am redirected to the dashboard
534
+ And my session persists for 30 days
535
+
536
+ # SPEED MODE: All success scenarios above (required + optional features)
494
537
  # STABLE MODE: Will add error handling scenarios like "Invalid credentials"
495
538
  ```
496
539
 
@@ -500,15 +543,17 @@ User confirms: "Yes, perfect"
500
543
 
501
544
  **Transition:** `jettypod work implement 10 --winner="prototypes/2025-10-30-login-simple.html" --rationale="Simple inline form chosen - fastest for users, cleanest UX"`
502
545
 
503
- ## Validation
546
+ ## Validation Checklist
504
547
 
505
- Before completing feature discovery, ensure:
548
+ Before completing feature planning, ensure:
506
549
  - [ ] Epic's architectural decision is shown (if exists)
507
550
  - [ ] Exactly 3 approaches suggested
508
551
  - [ ] Winner chosen (with prototypes or without)
509
- - [ ] BDD scenarios written
552
+ - [ ] BDD scenarios written (all success paths)
510
553
  - [ ] Step definitions written for ALL scenario steps
511
554
  - [ ] Scenarios file exists at `features/[feature-slug].feature`
512
555
  - [ ] Step definitions file exists at `features/step_definitions/[feature-slug].steps.js`
513
556
  - [ ] BDD infrastructure validated with dry-run (Step 6.5)
514
- - [ ] User knows next step .jettypod work start [feature-id])
557
+ - [ ] Feature transitioned to implementation with `work implement`
558
+ - [ ] Speed mode chores created
559
+ - [ ] First chore started with `work start [chore-id]` (Step 8D)