jettypod 3.0.3 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,16 +1,17 @@
1
1
  # JettyPod System Behaviors
2
2
 
3
- *Auto-generated from test scenarios on 2025-11-06*
3
+ *Auto-generated from test scenarios on 2025-11-10*
4
4
 
5
5
  ## Summary
6
6
 
7
- - **13** features
8
- - **65** test scenarios
9
- - **312** test steps
7
+ - **14** features
8
+ - **73** test scenarios
9
+ - **360** test steps
10
10
 
11
11
  ## Table of Contents
12
12
 
13
- - [Auto-generate production chores on external transition](#auto-generate-production-chores-on-external-transition) (1 scenarios)
13
+ - [Auto-Generate Production Chores at End of Stable Mode](#auto-generate-production-chores-at-end-of-stable-mode) (6 scenarios)
14
+ - [Backlog Command](#backlog-command) (3 scenarios)
14
15
  - [Git Hook Integration](#git-hook-integration) (4 scenarios)
15
16
  - [Git Hooks Integration](#git-hooks-integration) (1 scenarios)
16
17
  - [JettyPod update command](#jettypod-update-command) (5 scenarios)
@@ -30,14 +31,46 @@
30
31
 
31
32
  This documentation is derived from actual passing tests. It describes the verified behaviors of the system.
32
33
 
33
- ### Auto-generate production chores on external transition
34
+ ### Auto-Generate Production Chores at End of Stable Mode
34
35
 
35
- *Related features: Auto-generate production chores on external transition*
36
+ *Related features: Auto-Generate Production Chores at End of Stable Mode*
36
37
 
37
38
  **Verified behaviors:**
38
39
 
39
- - **User transitions project to external with stable features**
40
- When I have a project with 3 features in stable mode, the project state is "internal", I transition the project to external → the project state is set to "external" and a "Feature Production Readiness" epic is created and 3 production chores are created for each stable feature and the chores are grouped under the epic and I see a summary of created chores
40
+ - **Generate production chores after stable mode completes (external project)**
41
+ When I have a feature with all stable mode scenarios passing, the project state is "external", the stable mode skill has hot context from implementation, the stable mode skill completes and I confirm the production choresit analyzes the implementation files for production gaps and it proposes specific production chores with file references and it shows a preview of the production chores and it asks for confirmation and it creates the production chores in production mode and the chores are visible in the backlog and the feature transitions to production mode and I see "✅ Created N production chores. Feature elevated to production mode."
42
+
43
+ - **User declines production chore creation**
44
+ When I have a feature with all stable mode scenarios passing, the project state is "external", the stable mode skill has hot context from implementation, the stable mode skill completes and it proposes production chores and I decline the production chores → no production chores are created and the feature remains in stable mode and I see "⏭️ Skipped production chore creation"
45
+
46
+ - **No implementation files found in git history**
47
+ When I have a feature with all stable mode scenarios passing, the feature has no git commits, the stable mode skill completes → it warns "No git commits found for this feature" and it creates generic production chores and the feature transitions to production mode
48
+
49
+ - **Internal project state (feature elevated to production mode)**
50
+ When I have a feature with all stable mode scenarios passing, the project state is "internal", the stable mode skill completes → it creates production chores and the feature transitions to production mode and I see "Created 3 production chores. Feature elevated to production mode."
51
+
52
+ - **No production gaps found**
53
+ When I have a feature with all stable mode scenarios passing, the implementation has no security, scale, or compliance gaps, the stable mode skill completes → it creates generic production chores as placeholders and the feature transitions to production mode
54
+
55
+ - **Feature already in production mode**
56
+ When I have a feature already in production mode, I try to complete a stable mode chore → the system does not trigger production chore generation and I see a warning "Feature is already in production mode"
57
+
58
+ ---
59
+
60
+ ### Backlog Command
61
+
62
+ *Related features: Backlog Command*
63
+
64
+ **Verified behaviors:**
65
+
66
+ - **User views active backlog items**
67
+ When I have work items in various statuses, I run "jettypod backlog" → I see only active work items (backlog, todo, in_progress) and I see the items in a tree hierarchy and completed items are hidden
68
+
69
+ - **User views all work items including completed**
70
+ When I have work items in various statuses, I run "jettypod backlog all" → I see all work items regardless of status and I see the items in a tree hierarchy
71
+
72
+ - **User views only completed items**
73
+ When I have work items in various statuses, I run "jettypod backlog completed" → I see only completed work items (done, cancelled) and I see the items in a tree hierarchy
41
74
 
42
75
  ---
43
76
 
@@ -246,7 +279,7 @@ This documentation is derived from actual passing tests. It describes the verifi
246
279
  When jettypod is initialized, jettypod is initialized, I create a chore "Test Chore" without mode and I create a feature "Test Feature" with mode "<mode>" → the work item is created successfully and the work item has NULL mode and the work item is created successfully and the work item has mode "<mode>"
247
280
 
248
281
  - **Epic with children in different modes**
249
- When jettypod is initialized, I create an epic "Test Epic" without mode, I create a feature "Speed Feature" with mode "speed" and parent epic, I create a bug "Stable Bug" with mode "stable" and parent epic, I create a chore "Test Chore" without mode and parent epic, I view the work tree → I see the epic without mode indicator and I see the feature with mode "speed" and I see the bug with mode "stable" and I see the chore without mode indicator
282
+ When jettypod is initialized, I create an epic "Test Epic" without mode, I create a feature "Speed Feature" with mode "speed" and parent epic, I create a bug "Stable Bug" with mode "stable" and parent epic, I create a chore "Test Chore" without mode and parent epic, I view the backlog → I see the epic without mode indicator and I see the feature with mode "speed" and I see the bug with mode "stable" and I see the chore without mode indicator
250
283
 
251
284
  - **Create multiple items with same title but different modes**
252
285
  When jettypod is initialized, I create a feature "Duplicate" with mode "speed" and I create a feature "Duplicate" with mode "stable" → both work items are created successfully and they have different modes
@@ -331,25 +364,143 @@ This documentation is derived from actual passing tests. It describes the verifi
331
364
 
332
365
  ## Detailed Feature Specifications
333
366
 
334
- ### Auto-generate production chores on external transition
367
+ ### Auto-Generate Production Chores at End of Stable Mode
335
368
 
336
- When transitioning to external, automatically create production chores for all stable features Approach: Silent Auto-Generation
369
+ When stable mode completes all scenarios for a feature, the skill analyzes the implementation with hot context and generates specific, actionable production chores. Chore visibility depends on project state (external vs internal). Epic: Production Mode Approach: Preview-and-Confirm (Transparent)
337
370
 
338
- #### User transitions project to external with stable features
371
+ #### Generate production chores after stable mode completes (external project)
339
372
 
340
373
  **Context:**
341
- - I have a project with 3 features in stable mode
374
+ - I have a feature with all stable mode scenarios passing
375
+ - the project state is "external"
376
+ - the stable mode skill has hot context from implementation
377
+
378
+ **Action:**
379
+ - the stable mode skill completes
380
+ - I confirm the production chores
381
+
382
+ **Expected outcome:**
383
+ - it analyzes the implementation files for production gaps
384
+ - it proposes specific production chores with file references
385
+ - it shows a preview of the production chores
386
+ - it asks for confirmation
387
+ - it creates the production chores in production mode
388
+ - the chores are visible in the backlog
389
+ - the feature transitions to production mode
390
+ - I see "✅ Created N production chores. Feature elevated to production mode."
391
+
392
+ #### User declines production chore creation
393
+
394
+ **Context:**
395
+ - I have a feature with all stable mode scenarios passing
396
+ - the project state is "external"
397
+ - the stable mode skill has hot context from implementation
398
+
399
+ **Action:**
400
+ - the stable mode skill completes
401
+ - it proposes production chores
402
+ - I decline the production chores
403
+
404
+ **Expected outcome:**
405
+ - no production chores are created
406
+ - the feature remains in stable mode
407
+ - I see "⏭️ Skipped production chore creation"
408
+
409
+ #### No implementation files found in git history
410
+
411
+ **Context:**
412
+ - I have a feature with all stable mode scenarios passing
413
+ - the feature has no git commits
414
+
415
+ **Action:**
416
+ - the stable mode skill completes
417
+
418
+ **Expected outcome:**
419
+ - it warns "No git commits found for this feature"
420
+ - it creates generic production chores
421
+ - the feature transitions to production mode
422
+
423
+ #### Internal project state (feature elevated to production mode)
424
+
425
+ **Context:**
426
+ - I have a feature with all stable mode scenarios passing
342
427
  - the project state is "internal"
343
428
 
344
429
  **Action:**
345
- - I transition the project to external
430
+ - the stable mode skill completes
431
+
432
+ **Expected outcome:**
433
+ - it creates production chores
434
+ - the feature transitions to production mode
435
+ - I see "Created 3 production chores. Feature elevated to production mode."
436
+
437
+ #### No production gaps found
438
+
439
+ **Context:**
440
+ - I have a feature with all stable mode scenarios passing
441
+ - the implementation has no security, scale, or compliance gaps
442
+
443
+ **Action:**
444
+ - the stable mode skill completes
445
+
446
+ **Expected outcome:**
447
+ - it creates generic production chores as placeholders
448
+ - the feature transitions to production mode
449
+
450
+ #### Feature already in production mode
451
+
452
+ **Context:**
453
+ - I have a feature already in production mode
454
+
455
+ **Action:**
456
+ - I try to complete a stable mode chore
457
+
458
+ **Expected outcome:**
459
+ - the system does not trigger production chore generation
460
+ - I see a warning "Feature is already in production mode"
461
+
462
+ ---
463
+
464
+ ### Backlog Command
465
+
466
+ Enhanced command to view work items with built-in filters Approach: Enhanced backlog with filters (backlog, backlog all, backlog completed)
467
+
468
+ #### User views active backlog items
469
+
470
+ **Context:**
471
+ - I have work items in various statuses
472
+
473
+ **Action:**
474
+ - I run "jettypod backlog"
475
+
476
+ **Expected outcome:**
477
+ - I see only active work items (backlog, todo, in_progress)
478
+ - I see the items in a tree hierarchy
479
+ - completed items are hidden
480
+
481
+ #### User views all work items including completed
482
+
483
+ **Context:**
484
+ - I have work items in various statuses
485
+
486
+ **Action:**
487
+ - I run "jettypod backlog all"
488
+
489
+ **Expected outcome:**
490
+ - I see all work items regardless of status
491
+ - I see the items in a tree hierarchy
492
+
493
+ #### User views only completed items
494
+
495
+ **Context:**
496
+ - I have work items in various statuses
497
+
498
+ **Action:**
499
+ - I run "jettypod backlog completed"
346
500
 
347
501
  **Expected outcome:**
348
- - the project state is set to "external"
349
- - a "Feature Production Readiness" epic is created
350
- - 3 production chores are created for each stable feature
351
- - the chores are grouped under the epic
352
- - I see a summary of created chores
502
+ - I see only completed work items (done, cancelled)
503
+ - I see the items in a tree hierarchy
353
504
 
354
505
  ---
355
506
 
@@ -947,7 +1098,7 @@ As a developer I want new work items to default to discovery mode So I can start
947
1098
  - I create a chore "Test Chore" without mode and parent epic
948
1099
 
949
1100
  **Action:**
950
- - I view the work tree
1101
+ - I view the backlog
951
1102
 
952
1103
  **Expected outcome:**
953
1104
  - I see the epic without mode indicator
@@ -9,8 +9,8 @@ Complete reference for all JettyPod commands as of 2025-10-31.
9
9
  1. [Initialization & Setup](#initialization--setup)
10
10
  2. [Project Discovery](#project-discovery)
11
11
  3. [Work Item Management](#work-item-management)
12
- 4. [Epic Discovery](#epic-discovery)
13
- 5. [Feature Discovery](#feature-discovery)
12
+ 4. [Epic Planning](#epic-planning)
13
+ 5. [Feature Planning](#feature-planning)
14
14
  6. [Work Status & Navigation](#work-status--navigation)
15
15
  7. [Mode Management](#mode-management)
16
16
  8. [Decisions](#decisions)
@@ -119,7 +119,7 @@ jettypod work create epic "Real-time Updates" "Live data sync" --needs-discovery
119
119
 
120
120
  **What it creates:**
121
121
  - Epic work item in database
122
- - Entry in work tree
122
+ - Entry in backlog
123
123
  - Triggers epic discovery prompt if `--needs-discovery` flag set
124
124
 
125
125
  ---
@@ -183,14 +183,14 @@ jettypod work create bug "Memory leak in dashboard" --parent=10
183
183
 
184
184
  ---
185
185
 
186
- ## Epic Discovery
186
+ ## Epic Planning
187
187
 
188
- ### `jettypod work epic-discover <epic-id>`
188
+ ### `jettypod work epic-planning <epic-id>`
189
189
 
190
- Start architectural discovery for an epic.
190
+ Start architectural planning for an epic.
191
191
 
192
192
  ```bash
193
- jettypod work epic-discover 5
193
+ jettypod work epic-planning 5
194
194
  ```
195
195
 
196
196
  **Prerequisites:**
@@ -198,7 +198,7 @@ jettypod work epic-discover 5
198
198
  - Epic must be in backlog/todo status
199
199
 
200
200
  **What it does:**
201
- - Activates epic-discover skill in Claude Code
201
+ - Activates epic-planning skill in Claude Code
202
202
  - Guides through architectural decision process
203
203
  - Helps identify key technical decisions needed
204
204
 
@@ -253,11 +253,11 @@ jettypod work epic-implement 5 \
253
253
 
254
254
  ---
255
255
 
256
- ## Feature Discovery
256
+ ## Feature Planning
257
257
 
258
258
  ### `jettypod work discover <feature-id>`
259
259
 
260
- Start UX discovery for a feature.
260
+ Start UX planning for a feature.
261
261
 
262
262
  ```bash
263
263
  jettypod work discover 12
@@ -268,7 +268,7 @@ jettypod work discover 12
268
268
  - Feature must be in "discovery" phase
269
269
 
270
270
  **What it does:**
271
- - Activates feature-discover skill
271
+ - Activates feature-planning skill
272
272
  - Guides through UX approach exploration
273
273
  - Generates BDD scenarios
274
274
  - Helps create discovery checkpoints
@@ -326,20 +326,20 @@ Focus: Happy path only, single file when possible
326
326
 
327
327
  ## Work Status & Navigation
328
328
 
329
- ### `jettypod work tree [flags]`
329
+ ### `jettypod backlog [flags]`
330
330
 
331
331
  Display hierarchical tree of all work items.
332
332
 
333
333
  ```bash
334
334
  # Collapsed view (default)
335
- jettypod work tree
335
+ jettypod backlog
336
336
 
337
337
  # Expand specific items
338
- jettypod work tree --expand=1
339
- jettypod work tree --expand=1,5,10
338
+ jettypod backlog --expand=1
339
+ jettypod backlog --expand=1,5,10
340
340
 
341
341
  # Expand all items
342
- jettypod work tree --expand-all
342
+ jettypod backlog --expand-all
343
343
  ```
344
344
 
345
345
  **Flags:**
@@ -773,9 +773,9 @@ JettyPod uses SQLite with the following main tables:
773
773
  ├── work.db # SQLite database
774
774
  ├── current-work.json # Active work item
775
775
  ├── config.json # Project configuration
776
- └── skills/ # Discovery skills for Claude Code
777
- ├── epic-discover/
778
- └── feature-discover/
776
+ └── skills/ # Planning skills for Claude Code
777
+ ├── epic-planning/
778
+ └── feature-planning/
779
779
 
780
780
  docs/
781
781
  └── DECISIONS.md # Auto-generated decision log
@@ -826,13 +826,13 @@ JettyPod is designed to work seamlessly with Claude Code:
826
826
  - Includes mode-specific guidance
827
827
  - Shows project state and decisions
828
828
 
829
- ### Discovery Skills
830
- - `epic-discover` - Guides architectural decisions
831
- - `feature-discover` - Guides UX exploration
829
+ ### Planning Skills
830
+ - `epic-planning` - Guides architectural decisions
831
+ - `feature-planning` - Guides UX exploration
832
832
 
833
833
  ### Automatic Triggers
834
- - Creating epic with `--needs-discovery` → prompts epic-discover
835
- - Creating feature → prompts feature-discover
834
+ - Creating epic with `--needs-discovery` → prompts epic-planning
835
+ - Creating feature → prompts feature-planning
836
836
  - Starting work → updates Claude context
837
837
 
838
838
  ---
@@ -864,8 +864,8 @@ JettyPod is designed to work seamlessly with Claude Code:
864
864
  - Mark winners with `--winner`
865
865
  - Reference in future decisions
866
866
 
867
- 6. **Use Work Tree**
868
- - `jettypod work tree` for overview
867
+ 6. **Use Backlog**
868
+ - `jettypod backlog` for overview
869
869
  - `--expand` to see details
870
870
  - Track progress visually
871
871
 
@@ -551,7 +551,7 @@ CREATE TABLE project_config (
551
551
  | `jettypod work create feature` | Create with any mode | Default to 'discovery' phase | 🟡 **HIGH** |
552
552
  | `jettypod work start <id>` | Set current + branch | Validate mode progression | 🟡 **HIGH** |
553
553
  | `jettypod init` | Initialize discovery mode | Initialize Internal project | 🟡 **HIGH** |
554
- | `jettypod work tree` | Show work items | Show phase + mode | 🟢 **MEDIUM** |
554
+ | `jettypod backlog` | Show work items | Show phase + mode | 🟢 **MEDIUM** |
555
555
 
556
556
  ### Commands to DEPRECATE
557
557
 
@@ -691,7 +691,7 @@ To reconcile current implementation with comprehensive methodology, execute thes
691
691
  - Chore: Default to 'implementation' for backwards compatibility
692
692
  - Chore: Create `jettypod work discover <id>` command (features only)
693
693
  - Chore: Create `jettypod work implement <id>` command (features only)
694
- - Chore: Update `work tree` to show phase
694
+ - Chore: Update `backlog` to show phase
695
695
 
696
696
  4. Feature: Multi-level prototype tracking
697
697
  - Chore: Add `prototype_files` JSON field to work_items
@@ -771,7 +771,7 @@ To reconcile current implementation with comprehensive methodology, execute thes
771
771
  2. Feature: Mode inheritance enforcement
772
772
  - Chore: Prevent direct mode assignment to chores
773
773
  - Chore: Inherit mode from parent feature
774
- - Chore: Update `work tree` to show inherited modes
774
+ - Chore: Update `backlog` to show inherited modes
775
775
  - Chore: Migrate existing chore modes
776
776
 
777
777
  3. Feature: Bug workflow definition
@@ -1,14 +1,65 @@
1
- Feature: Auto-generate production chores on external transition
2
- When transitioning to external, automatically create production chores for all stable features
1
+ Feature: Auto-Generate Production Chores at End of Stable Mode
2
+ When stable mode completes all scenarios for a feature, the skill analyzes the
3
+ implementation with hot context and generates specific, actionable production chores.
4
+ Chore visibility depends on project state (external vs internal).
3
5
 
4
- Approach: Silent Auto-Generation
6
+ Epic: Production Mode
7
+ Approach: Preview-and-Confirm (Transparent)
5
8
 
6
- Scenario: User transitions project to external with stable features
7
- Given I have a project with 3 features in stable mode
9
+ Scenario: Generate production chores after stable mode completes (external project)
10
+ Given I have a feature with all stable mode scenarios passing
11
+ And the project state is "external"
12
+ And the stable mode skill has hot context from implementation
13
+ When the stable mode skill completes
14
+ Then it analyzes the implementation files for production gaps
15
+ And it proposes specific production chores with file references
16
+ And it shows a preview of the production chores
17
+ And it asks for confirmation
18
+ When I confirm the production chores
19
+ Then it creates the production chores in production mode
20
+ And the chores are visible in the backlog
21
+ And the feature transitions to production mode
22
+ And I see "✅ Created N production chores. Feature elevated to production mode."
23
+
24
+ # SPEED MODE: Only happy path above
25
+ # STABLE MODE: Add error handling, edge cases, validation scenarios below
26
+
27
+ Scenario: User declines production chore creation
28
+ Given I have a feature with all stable mode scenarios passing
29
+ And the project state is "external"
30
+ And the stable mode skill has hot context from implementation
31
+ When the stable mode skill completes
32
+ And it proposes production chores
33
+ And I decline the production chores
34
+ Then no production chores are created
35
+ And the feature remains in stable mode
36
+ And I see "⏭️ Skipped production chore creation"
37
+
38
+ Scenario: No implementation files found in git history
39
+ Given I have a feature with all stable mode scenarios passing
40
+ And the feature has no git commits
41
+ When the stable mode skill completes
42
+ Then it warns "No git commits found for this feature"
43
+ And it creates generic production chores
44
+ And the feature transitions to production mode
45
+
46
+ Scenario: Internal project state (feature elevated to production mode)
47
+ Given I have a feature with all stable mode scenarios passing
8
48
  And the project state is "internal"
9
- When I transition the project to external
10
- Then the project state is set to "external"
11
- And a "Feature Production Readiness" epic is created
12
- And 3 production chores are created for each stable feature
13
- And the chores are grouped under the epic
14
- And I see a summary of created chores
49
+ When the stable mode skill completes
50
+ Then it creates production chores
51
+ And the feature transitions to production mode
52
+ And I see "Created 3 production chores. Feature elevated to production mode."
53
+
54
+ Scenario: No production gaps found
55
+ Given I have a feature with all stable mode scenarios passing
56
+ And the implementation has no security, scale, or compliance gaps
57
+ When the stable mode skill completes
58
+ Then it creates generic production chores as placeholders
59
+ And the feature transitions to production mode
60
+
61
+ Scenario: Feature already in production mode
62
+ Given I have a feature already in production mode
63
+ When I try to complete a stable mode chore
64
+ Then the system does not trigger production chore generation
65
+ And I see a warning "Feature is already in production mode"
@@ -0,0 +1,26 @@
1
+ Feature: Backlog Command
2
+ Enhanced command to view work items with built-in filters
3
+
4
+ Approach: Enhanced backlog with filters (backlog, backlog all, backlog completed)
5
+
6
+ Scenario: User views active backlog items
7
+ Given I have work items in various statuses
8
+ When I run "jettypod backlog"
9
+ Then I see only active work items (backlog, todo, in_progress)
10
+ And I see the items in a tree hierarchy
11
+ And completed items are hidden
12
+
13
+ Scenario: User views all work items including completed
14
+ Given I have work items in various statuses
15
+ When I run "jettypod backlog all"
16
+ Then I see all work items regardless of status
17
+ And I see the items in a tree hierarchy
18
+
19
+ Scenario: User views only completed items
20
+ Given I have work items in various statuses
21
+ When I run "jettypod backlog completed"
22
+ Then I see only completed work items (done, cancelled)
23
+ And I see the items in a tree hierarchy
24
+
25
+ # SPEED MODE: Only happy path scenarios above
26
+ # STABLE MODE: Will add error handling, edge cases, validation scenarios
@@ -35,7 +35,7 @@ Given('a JettyPod project with hook installed', function () {
35
35
  execSync('git init', { stdio: 'pipe' });
36
36
  execSync('git config user.email "test@test.com"', { stdio: 'pipe' });
37
37
  execSync('git config user.name "Test"', { stdio: 'pipe' });
38
- execSync(`node ${path.join(originalDir, 'jettypod.js')} init`, { stdio: 'pipe' });
38
+ execSync(`node ${path.join(originalDir, 'jettypod.js')} init`, { stdio: 'pipe', env: { ...process.env, NODE_ENV: 'test' } });
39
39
 
40
40
  // Verify hook was installed
41
41
  const hookPath = path.join(testDir, '.jettypod', 'hooks', 'protect-claude-md.js');
@@ -113,7 +113,7 @@ Given('a JettyPod project in discovery mode', function () {
113
113
  execSync('git init', { stdio: 'pipe' });
114
114
  execSync('git config user.email "test@test.com"', { stdio: 'pipe' });
115
115
  execSync('git config user.name "Test"', { stdio: 'pipe' });
116
- execSync(`node ${path.join(originalDir, 'jettypod.js')} init`, { stdio: 'pipe' });
116
+ execSync(`node ${path.join(originalDir, 'jettypod.js')} init`, { stdio: 'pipe', env: { ...process.env, NODE_ENV: 'test' } });
117
117
 
118
118
  // Mode is now managed by work items, not project-level config
119
119
  const config = JSON.parse(fs.readFileSync('.jettypod/config.json', 'utf-8'));
@@ -349,7 +349,8 @@ When('Claude Code attempts to Write a new CLAUDE.md file', function () {
349
349
  When('I run jettypod command {string}', function (command) {
350
350
  const result = execSync(`node ${path.join(originalDir, 'jettypod.js')} ${command.replace('jettypod ', '')}`, {
351
351
  stdio: 'pipe',
352
- encoding: 'utf-8'
352
+ encoding: 'utf-8',
353
+ env: { ...process.env, NODE_ENV: 'test' }
353
354
  });
354
355
  this.commandOutput = result;
355
356
  });
@@ -395,7 +396,8 @@ When('Claude Code tries to change mode to speed by editing CLAUDE.md', function
395
396
 
396
397
  When('I run jettypod command {string} instead', function (command) {
397
398
  execSync(`node ${path.join(originalDir, 'jettypod.js')} ${command.replace('jettypod ', '')}`, {
398
- stdio: 'pipe'
399
+ stdio: 'pipe',
400
+ env: { ...process.env, NODE_ENV: 'test' }
399
401
  });
400
402
  });
401
403
 
@@ -186,8 +186,8 @@ async function showAllDecisions() {
186
186
  } else {
187
187
  console.log('No epic decisions yet.');
188
188
  console.log('');
189
- console.log('💡 Tip: Make architectural decisions during epic discovery:');
190
- console.log(' jettypod work epic-discover <epic-id>');
189
+ console.log('💡 Tip: Make architectural decisions during epic planning:');
190
+ console.log(' jettypod work epic-planning <epic-id>');
191
191
  console.log('');
192
192
  }
193
193
 
@@ -288,8 +288,8 @@ async function showEpicDecisions() {
288
288
  } else {
289
289
  console.log('No epic decisions yet.');
290
290
  console.log('');
291
- console.log('💡 Tip: Make architectural decisions during epic discovery:');
292
- console.log(' jettypod work epic-discover <epic-id>');
291
+ console.log('💡 Tip: Make architectural decisions during epic planning:');
292
+ console.log(' jettypod work epic-planning <epic-id>');
293
293
  console.log('');
294
294
  }
295
295
 
@@ -319,7 +319,7 @@ async function promptForEpicId() {
319
319
  console.log('❌ No epic ID entered');
320
320
  console.log('Please run the command again and enter an epic ID');
321
321
  console.log('');
322
- console.log('💡 Tip: See your epics with: jettypod work tree');
322
+ console.log('💡 Tip: See your epics with: jettypod backlog');
323
323
  console.log('');
324
324
  process.exit(1);
325
325
  }
@@ -332,7 +332,7 @@ async function promptForEpicId() {
332
332
  console.log(`❌ Invalid epic ID: "${trimmed}"`);
333
333
  console.log('Please enter a numeric epic ID');
334
334
  console.log('');
335
- console.log('💡 Tip: See your epics with: jettypod work tree');
335
+ console.log('💡 Tip: See your epics with: jettypod backlog');
336
336
  console.log('');
337
337
  process.exit(1);
338
338
  }
@@ -386,7 +386,7 @@ async function showDecisionsForEpic(epicId) {
386
386
  console.log(` - Epic #${epicId} does not exist`);
387
387
  console.log(` - Work item #${epicId} is not an epic`);
388
388
  console.log('');
389
- console.log('💡 Tip: See your epics with: jettypod work tree');
389
+ console.log('💡 Tip: See your epics with: jettypod backlog');
390
390
  console.log('');
391
391
  return resolve();
392
392
  }
@@ -425,8 +425,8 @@ async function showDecisionsForEpic(epicId) {
425
425
  } else {
426
426
  console.log('No decisions for this epic yet.');
427
427
  console.log('');
428
- console.log('💡 Tip: Make architectural decisions during epic discovery:');
429
- console.log(` jettypod work epic-discover ${epicId}`);
428
+ console.log('💡 Tip: Make architectural decisions during epic planning:');
429
+ console.log(` jettypod work epic-planning ${epicId}`);
430
430
  console.log('');
431
431
  }
432
432
 
@@ -470,7 +470,7 @@ function viewDecisionsFile() {
470
470
  console.log(' - You make epic architectural decisions');
471
471
  console.log('');
472
472
  console.log('To make decisions:');
473
- console.log(' jettypod work epic-discover <epic-id>');
473
+ console.log(' jettypod work epic-planning <epic-id>');
474
474
  console.log('');
475
475
  }
476
476
  } catch (err) {
@@ -22,13 +22,13 @@ Given('I initialize a git repo with devpod', function () {
22
22
  execSync('git init', { stdio: 'pipe' });
23
23
  execSync('git config user.email "test@test.com"', { stdio: 'pipe' });
24
24
  execSync('git config user.name "Test"', { stdio: 'pipe' });
25
- execSync(`node ${path.join(originalDir, 'jettypod.js')} init`, { stdio: 'pipe' });
25
+ execSync(`node ${path.join(originalDir, 'jettypod.js')} init`, { stdio: 'pipe', env: { ...process.env, NODE_ENV: 'test' } });
26
26
  });
27
27
 
28
28
  Given('I create and start work on a todo item', function () {
29
- execSync(`node ${path.join(originalDir, 'jettypod.js')} work create feature "Test"`, { stdio: 'pipe' });
30
- execSync(`node ${path.join(originalDir, 'jettypod.js')} work status 1 todo`, { stdio: 'pipe' });
31
- execSync(`node ${path.join(originalDir, 'jettypod.js')} work start 1`, { stdio: 'pipe' });
29
+ execSync(`node ${path.join(originalDir, 'jettypod.js')} work create feature "Test"`, { stdio: 'pipe', env: { ...process.env, NODE_ENV: 'test' } });
30
+ execSync(`node ${path.join(originalDir, 'jettypod.js')} work status 1 todo`, { stdio: 'pipe', env: { ...process.env, NODE_ENV: 'test' } });
31
+ execSync(`node ${path.join(originalDir, 'jettypod.js')} work start 1`, { stdio: 'pipe', env: { ...process.env, NODE_ENV: 'test' } });
32
32
  workItemId = 1;
33
33
  });
34
34