jettypod 4.4.10 → 4.4.12

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 (32) hide show
  1. package/apps/dashboard/README.md +36 -0
  2. package/apps/dashboard/app/favicon.ico +0 -0
  3. package/apps/dashboard/app/globals.css +122 -0
  4. package/apps/dashboard/app/layout.tsx +34 -0
  5. package/apps/dashboard/app/page.tsx +25 -0
  6. package/apps/dashboard/app/work/[id]/page.tsx +193 -0
  7. package/apps/dashboard/components/KanbanBoard.tsx +201 -0
  8. package/apps/dashboard/components/WorkItemTree.tsx +116 -0
  9. package/apps/dashboard/components.json +22 -0
  10. package/apps/dashboard/eslint.config.mjs +18 -0
  11. package/apps/dashboard/lib/db.ts +270 -0
  12. package/apps/dashboard/lib/utils.ts +6 -0
  13. package/apps/dashboard/next.config.ts +7 -0
  14. package/apps/dashboard/package.json +33 -0
  15. package/apps/dashboard/postcss.config.mjs +7 -0
  16. package/apps/dashboard/public/file.svg +1 -0
  17. package/apps/dashboard/public/globe.svg +1 -0
  18. package/apps/dashboard/public/next.svg +1 -0
  19. package/apps/dashboard/public/vercel.svg +1 -0
  20. package/apps/dashboard/public/window.svg +1 -0
  21. package/apps/dashboard/tsconfig.json +34 -0
  22. package/jettypod.js +41 -0
  23. package/lib/current-work.js +10 -18
  24. package/lib/migrations/016-workflow-checkpoints-table.js +70 -0
  25. package/lib/migrations/017-backfill-epic-id.js +54 -0
  26. package/lib/workflow-checkpoint.js +204 -0
  27. package/package.json +7 -2
  28. package/skills-templates/chore-mode/SKILL.md +3 -0
  29. package/skills-templates/epic-planning/SKILL.md +225 -154
  30. package/skills-templates/feature-planning/SKILL.md +172 -87
  31. package/skills-templates/speed-mode/SKILL.md +161 -338
  32. package/skills-templates/stable-mode/SKILL.md +150 -176
@@ -5,14 +5,34 @@ description: Guide implementation of stable mode chores with comprehensive testi
5
5
 
6
6
  # Stable Mode Skill
7
7
 
8
- **Mode Progression:**
9
- Feature Planning → Speed Mode → **[STABLE MODE]** → Done (Internal) OR Production Mode (External)
8
+ ```
9
+ ┌─────────────────────────────────────────────────────────────────────┐
10
+ │ Mode Progression Flow │
11
+ │ │
12
+ │ Feature Planning → Speed Mode → [STABLE MODE] → Production Mode │
13
+ │ ▲▲▲▲▲▲▲▲▲▲▲▲ │
14
+ │ YOU ARE HERE │
15
+ │ │
16
+ │ Next: INTERNAL projects → Feature DONE │
17
+ │ EXTERNAL projects → Invoke production-mode skill │
18
+ └─────────────────────────────────────────────────────────────────────┘
19
+ ```
20
+
21
+ ## 🛑 CRITICAL HANDOFF REQUIREMENT
10
22
 
11
- **You are here:** Adding error handling, validation, and edge cases to speed mode implementation.
23
+ **After completing ALL stable mode chores:**
12
24
 
13
- **Next steps:**
14
- - INTERNAL projects: Feature complete after stable mode (no production mode needed)
15
- - EXTERNAL projects: Continue to production mode for security/scale/monitoring
25
+ **INTERNAL projects (project_state = 'internal'):**
26
+ 1. Mark feature as done
27
+ 2. **End skill** - Feature is complete!
28
+
29
+ **EXTERNAL projects (project_state = 'external'):**
30
+ 1. Set feature mode to production
31
+ 2. **IMMEDIATELY invoke production-mode using the Skill tool**
32
+
33
+ **🛑 STOP GATE:** For external projects, DO NOT end this skill without invoking production-mode. Stable mode makes it robust - production mode makes it ready for real users at scale.
34
+
35
+ ---
16
36
 
17
37
  Guides Claude Code through stable mode implementation with comprehensive testing focus. Users confirm approach but Claude Code writes the code.
18
38
 
@@ -45,6 +65,8 @@ When this skill is activated, you are helping implement a stable mode chore to a
45
65
  - **Autonomous execution** - Claude Code writes code, user confirms approach
46
66
  - **Quality focus** - code should be stable, maintainable, and reliable (ready for internal use)
47
67
 
68
+ **User Profile:** May not know how to code - Claude Code does the implementation autonomously.
69
+
48
70
  <details>
49
71
  <summary><strong>📋 What Stable Mode Includes (click to expand)</strong></summary>
50
72
 
@@ -84,8 +106,6 @@ When this skill is activated, you are helping implement a stable mode chore to a
84
106
 
85
107
  </details>
86
108
 
87
- **User Profile:** May not know how to code - Claude Code does the implementation autonomously.
88
-
89
109
  ---
90
110
 
91
111
  ## 🧪 Unit Testing in Stable Mode - True TDD
@@ -107,7 +127,9 @@ When this skill is activated, you are helping implement a stable mode chore to a
107
127
  - Edge case handling (empty arrays, boundary values)
108
128
  - State consistency (transaction rollback, cleanup on failure)
109
129
 
110
- **Unit test scope in stable mode:**
130
+ <details>
131
+ <summary><strong>📋 Unit Test Examples (click to expand)</strong></summary>
132
+
111
133
  ```javascript
112
134
  // ✅ Stable mode unit tests (error paths and edge cases)
113
135
  test('createUser throws ValidationError for null email', () => {
@@ -125,53 +147,24 @@ test('getUserById returns null for non-existent user', () => {
125
147
  });
126
148
  ```
127
149
 
150
+ </details>
151
+
128
152
  ---
129
153
 
130
154
  ## Quick Reference: Async Boundaries
131
155
 
132
156
  **Where Claude Code MUST wait for user confirmation:**
133
157
 
134
- | Phase | Location | Why | Condition |
135
- |-------|----------|-----|-----------|
136
- | Step 3A | Before implementing (conditional) | User confirms implementation approach | Only if approach is ambiguous or multiple valid paths |
158
+ | Step | Location | Why |
159
+ |------|----------|-----|
160
+ | Step 3A | Before implementing (conditional) | User confirms implementation approach - only if ambiguous |
137
161
 
138
162
  **Where Claude Code executes autonomously:**
139
- - Step 0: Initialize context
140
- - Step 1: Scenario analysis
141
- - Step 2: Speed mode implementation review
142
- - Step 3: Decision to skip/ask for confirmation
143
- - Step 4: Establish RED baseline
144
- - Step 5: RED→GREEN→REFACTOR loop (true TDD)
145
- - Step 6: Check progress and route to next chore or completion
146
-
147
- ---
148
-
149
- ## ⚠️ CRITICAL: Stable Mode Workflow Requirements for External Products
150
-
151
- **If the product is EXTERNAL (project_state: 'external'), DO NOT mark features as complete after stable mode.**
152
-
153
- For external products accepting real users, stable mode is NOT the final step. Production mode is REQUIRED for:
154
- - Performance optimization and load testing
155
- - Security hardening (rate limiting, input sanitization, authentication)
156
- - Monitoring and observability
157
- - Operational readiness (logging, metrics, alerting)
158
-
159
- **Required workflow for EXTERNAL products after stable mode implementation:**
160
-
161
- 1. ✅ **Complete ALL stable mode chores** - Add error handling and edge cases
162
- 2. ✅ **Set feature to production mode** - Use `jettypod work set-mode <feature-id> production`
163
- 3. ✅ **Implement production mode chores** - Add performance, security, monitoring
164
- 4. ❌ **NEVER mark feature complete in stable mode for external products** - This bypasses critical production hardening
165
-
166
- **For INTERNAL products (staging/preview only), stable mode IS the final step.**
167
-
168
- **If you attempt to mark an external product feature complete while in stable mode, the system will block you with an error.**
169
-
170
- The validation will require you to either:
171
- - Set feature to production mode: `jettypod work set-mode <feature-id> production`
172
- - Or explicitly force skip (not recommended): `jettypod work set-mode <feature-id> production --force`
173
-
174
- **Remember:** Stable mode makes it robust. Production mode makes it ready for real users at scale.
163
+ - Steps 0-2: Initialize, analyze scenarios, review speed implementation
164
+ - Step 3: Decision to skip/ask confirmation
165
+ - Steps 4-5: RED baseline, RED→GREEN→REFACTOR loop
166
+ - Step 6: Route to next chore OR transition to Step 7
167
+ - Step 7: Complete feature (internal) or invoke production-mode (external)
175
168
 
176
169
  ---
177
170
 
@@ -215,37 +208,29 @@ Analyzing stable mode BDD scenarios to determine what error handling and validat
215
208
  2. Read the full scenario file (should have success scenarios + stable mode error/edge case scenarios)
216
209
  3. Identify which scenario this chore addresses
217
210
  4. Extract requirements from the scenario's Given/When/Then steps
218
- 5. Check chore description for breadcrumbs (implementation guidance from feature-planning)
211
+ 5. Check chore description for breadcrumbs (implementation guidance from speed-mode transition)
219
212
 
220
- **NOTE:** Scenarios and step definitions already exist, created by the speed-mode skill during transition to stable mode. Chore descriptions may contain breadcrumbs with implementation guidance (files to modify, patterns to follow, functions to add validation to).
213
+ **NOTE:** Scenarios and step definitions already exist, created by the speed-mode skill during transition to stable mode. Chore descriptions may contain breadcrumbs with implementation guidance.
221
214
 
222
- **To get scenario information, use these commands:**
215
+ **To get scenario information:**
223
216
 
224
217
  ```bash
225
- # Get current work (chore) and its parent feature with scenario_file
226
218
  sqlite3 .jettypod/work.db "SELECT wi.id, wi.title, wi.description, wi.parent_id, parent.title as parent_title, parent.scenario_file, parent.mode FROM work_items wi LEFT JOIN work_items parent ON wi.parent_id = parent.id WHERE wi.status = 'in_progress'"
227
219
  ```
228
220
 
229
221
  **Then read the scenario file** using the Read tool on the path returned by `scenario_file`.
230
222
 
231
223
  **Identify target scenario:**
232
-
233
- After reading the scenario file content, parse it to find the scenario this chore addresses:
234
-
235
224
  1. Split the file by `Scenario:` to get individual scenarios
236
225
  2. Extract scenario titles from each block
237
- 3. Match the chore description to a scenario by:
238
- - Looking for scenario numbers in the chore description (e.g., "Scenario 2")
239
- - Matching keywords from the chore description to scenario titles
226
+ 3. Match the chore description to a scenario by keywords or scenario numbers
240
227
  4. If no match found, list available scenarios and ask which one to implement
241
228
 
242
229
  **Handle errors gracefully:**
243
230
  - If no current work: "❌ No current work found. Run: jettypod work start <chore-id>"
244
231
  - If no parent feature: "❌ Current work has no parent feature."
245
- - If no scenario_file: "❌ Feature has no scenario_file. Create a scenario file and update the feature."
246
- - If scenario file not found: "❌ Scenario file not found at [path]"
247
- - If no scenarios in file: "❌ No scenarios found in scenario file."
248
- - If can't match chore to scenario: List available scenarios and ask user which one
232
+ - If no scenario_file: "❌ Feature has no scenario_file."
233
+ - If can't match chore to scenario: List available scenarios and ask user
249
234
 
250
235
  **Display to user:**
251
236
 
@@ -260,11 +245,11 @@ What needs to happen:
260
245
  • [When] Action/condition: [requirement]
261
246
  • [Then] Expected behavior: [requirement]
262
247
 
263
- [If breadcrumbs exist in chore description:]
248
+ [If breadcrumbs exist:]
264
249
  Implementation guidance:
265
250
  • Files: [files to modify]
266
251
  • Patterns: [patterns to follow]
267
- • Functions: [specific functions to add validation to]
252
+ • Functions: [functions to add validation to]
268
253
 
269
254
  Now reviewing speed mode implementation...
270
255
  ```
@@ -281,17 +266,14 @@ Now reviewing speed mode implementation...
281
266
  3. Identify what's missing for this scenario
282
267
  4. Understand current code structure
283
268
 
284
- **Find speed mode files using git:**
269
+ **Find speed mode files:**
285
270
 
286
271
  ```bash
287
- # Search git history for commits related to this feature
288
- git log --oneline --all --grep="<feature-name>" -10
289
-
290
- # Get files changed in those commits
291
- git diff-tree --no-commit-id --name-only -r <commit-hash>
292
-
293
- # Or find files by looking at the feature's chores
272
+ # Find files by looking at the feature's speed chores
294
273
  sqlite3 .jettypod/work.db "SELECT id, title FROM work_items WHERE parent_id = <feature-id> AND type = 'chore' AND mode = 'speed'"
274
+
275
+ # Or search git history
276
+ git log --oneline --all --grep="<feature-name>" -10
295
277
  ```
296
278
 
297
279
  Then use the Read tool to examine the implementation files.
@@ -357,6 +339,7 @@ I see multiple ways to approach this error handling. Here's what I'm thinking:
357
339
  **Alternative considered:**
358
340
  • [Brief description] - not choosing because [reason]
359
341
 
342
+ Sound good, or would you prefer a different approach?
360
343
  ```
361
344
 
362
345
  **⚡ WAIT for user confirmation or adjustments.**
@@ -376,7 +359,6 @@ Before writing any implementation code, run tests to establish the RED state:
376
359
  ```bash
377
360
  # Get current work and parent feature's scenario file
378
361
  sqlite3 .jettypod/work.db "SELECT wi.id, wi.parent_id, parent.scenario_file FROM work_items wi LEFT JOIN work_items parent ON wi.parent_id = parent.id WHERE wi.status = 'in_progress'"
379
- # This gives you the chore ID, parent feature ID, and path to the .feature file
380
362
 
381
363
  # Run BDD tests to establish RED baseline
382
364
  npx cucumber-js <scenario-file-path> --format progress
@@ -387,8 +369,6 @@ Parse the output to identify:
387
369
  - Which specific stable mode steps are failing (error/edge case scenarios)
388
370
  - The first error message
389
371
 
390
- This establishes your RED baseline - stable mode scenarios should be failing initially.
391
-
392
372
  **Display RED baseline:**
393
373
  ```
394
374
  🔴 Establishing RED baseline...
@@ -475,19 +455,23 @@ Now implementing...
475
455
 
476
456
  ---
477
457
 
478
- **CRITICAL: Check if ALL stable mode chores are complete. Route to next chore if any remain.**
458
+ ### Step 6: Route After Chore Completion
459
+
460
+ **CRITICAL: After GREEN, check if more stable chores remain.**
479
461
 
480
462
  **Check for incomplete stable chores:**
481
463
 
482
464
  ```bash
483
- # Get current work to find parent feature ID
484
- sqlite3 .jettypod/work.db "SELECT wi.parent_id FROM work_items wi WHERE wi.status = 'in_progress'"
465
+ # Get current work to find parent feature ID and current chore ID
466
+ sqlite3 .jettypod/work.db "SELECT wi.id, wi.parent_id FROM work_items wi WHERE wi.status = 'in_progress'"
485
467
 
486
- # Get list of remaining stable chores (excluding current chore)
468
+ # Count remaining stable chores (excluding current)
487
469
  sqlite3 .jettypod/work.db "SELECT id, title FROM work_items WHERE parent_id = <feature-id> AND type = 'chore' AND mode = 'stable' AND status != 'done' AND id != <current-chore-id> ORDER BY created_at LIMIT 1"
488
470
  ```
489
471
 
490
- **If stable chores remain, display and start next chore:**
472
+ ---
473
+
474
+ **Route A: More stable chores remain → Start next chore**
491
475
 
492
476
  ```
493
477
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
@@ -500,63 +484,64 @@ More stable mode chores remain. Starting next chore:
500
484
  #[next-chore-id]: [next-chore-title]
501
485
  ```
502
486
 
503
- **Then immediately merge current chore and start next:**
487
+ **Merge and start next:**
504
488
 
505
489
  ```bash
506
490
  # Commit changes in the worktree
507
491
  git add . && git commit -m "feat: [brief description of error handling added]"
508
492
 
509
- # Merge current chore - this automatically marks it as done
493
+ # Merge current chore (handles push, merge, cleanup)
510
494
  jettypod work merge
511
495
 
512
496
  # Start next stable chore
513
497
  jettypod work start [next-chore-id]
514
498
  ```
515
499
 
516
- **CRITICAL: Use ONLY `jettypod work merge` to complete chores.**
517
- - ❌ DO NOT use `jettypod work status <id> done`
518
- - ❌ DO NOT use `jettypod work complete <id>`
519
- - ❌ DO NOT use `jettypod work set-mode <id> done`
520
- - ✅ ONLY use `jettypod work merge`
500
+ The stable-mode skill will automatically re-invoke for the next chore.
521
501
 
522
- The merge command handles everything: pushes branch, merges to main, marks chore done, cleans up worktree.
502
+ ---
523
503
 
524
- The stable-mode skill will automatically re-invoke for the next chore.
504
+ **Route B: All stable chores complete Transition to Step 7**
525
505
 
526
- **If all stable chores are done (count = 0), continue to Step 6 below.**
506
+ If the query returns no remaining chores, proceed to Step 7.
527
507
 
528
508
  ---
529
509
 
530
- ### Step 6: Route to Completion (After All Stable Chores Complete)
510
+ ### Step 7: Complete Feature or Transition to Production Mode
531
511
 
532
- **CRITICAL: This step ONLY happens when ALL stable chores for the feature are complete.**
512
+ **🛑 CRITICAL: This step ONLY runs after ALL stable chores are complete.**
533
513
 
534
- **Check project state:**
514
+ **First, merge the final stable chore:**
535
515
 
536
516
  ```bash
537
- # Check project_state in database (RECOMMENDED - always up to date)
538
- sqlite3 .jettypod/work.db "SELECT project_state FROM project_config WHERE id = 1"
517
+ git add . && git commit -m "feat: [brief description of error handling added]"
518
+ jettypod work merge
519
+ ```
520
+
521
+ **Then check project state:**
539
522
 
540
- # OR read CLAUDE.md from git root (NOT from CWD - worktrees may have stale copies)
541
- grep -A1 "<project_state>" "$(git rev-parse --show-toplevel)/CLAUDE.md" | tail -1
523
+ ```bash
524
+ sqlite3 .jettypod/work.db "SELECT project_state FROM project_config WHERE id = 1"
542
525
  ```
543
526
 
544
- ⚠️ **CRITICAL:** If reading CLAUDE.md, always read from git root using `$(git rev-parse --show-toplevel)/CLAUDE.md`, NOT from current directory. Worktrees branch from main and may have stale project_state values.
527
+ ---
545
528
 
546
- **Route based on project state:**
529
+ #### Step 7A: INTERNAL Project → Feature Complete
547
530
 
548
531
  **If project_state = 'internal':**
549
532
 
550
- Mark the feature as done:
551
533
  ```bash
552
- jettypod work status [feature-id] done
534
+ jettypod work status <feature-id> done
553
535
  ```
554
536
 
555
- Display:
537
+ **Display:**
538
+
556
539
  ```
557
- ✅ FEATURE #[id] COMPLETE!
540
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
541
+ ✅ FEATURE COMPLETE!
542
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
558
543
 
559
- Feature: [Feature Title]
544
+ Feature: #[id] [Feature Title]
560
545
  Status: ✅ DONE
561
546
 
562
547
  What we accomplished:
@@ -578,109 +563,98 @@ run the external-transition skill to generate production chores.
578
563
 
579
564
  ---
580
565
 
566
+ #### Step 7B: EXTERNAL Project → Invoke Production Mode
567
+
581
568
  **If project_state = 'external':**
582
569
 
583
- Use Skill tool to invoke production-mode:
570
+ **🛑 CRITICAL HANDOFF - You MUST invoke production-mode using the Skill tool.**
571
+
572
+ **Set feature mode to production:**
573
+
574
+ ```bash
575
+ jettypod work set-mode <feature-id> production
576
+ ```
577
+
578
+ **Display:**
584
579
 
585
- Display:
586
580
  ```
587
- ✅ ALL STABLE MODE CHORES COMPLETE!
581
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
582
+ 🎯 Stable Mode Complete! Transitioning to Production Mode
583
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
584
+
585
+ ⚠️ CRITICAL: This is an EXTERNAL project.
586
+ Stable mode makes it robust - production mode makes it ready for real users.
588
587
 
589
588
  What we accomplished:
590
589
  ✅ All BDD scenarios passing (success + error handling + edge cases)
591
590
  ✅ Comprehensive error handling and validation
592
591
  ✅ Feature stable and ready for production hardening
593
592
 
594
- 🚀 AUTO-GENERATING PRODUCTION CHORES
595
-
596
- This project is external - invoking production-mode skill to:
597
- • Detect feature context (authentication/data/general)
598
- • Generate production scenarios from standards
599
- • Create production chores with proper scope
593
+ 🚀 Now invoking production-mode skill...
600
594
  ```
601
595
 
602
- Then invoke production-mode skill. **End skill.**
603
-
604
- ---
605
-
606
- ⚠️ **CRITICAL: Exclude CLAUDE.md from commits in worktrees**
607
-
608
- CLAUDE.md contains work tracking metadata that changes frequently and causes merge conflicts. When committing in a worktree, **always reset CLAUDE.md** before committing:
596
+ **Invoke production-mode:**
609
597
 
610
- ```bash
611
- git checkout HEAD -- CLAUDE.md # Reset CLAUDE.md to avoid merge conflicts
612
- git add . # Stage other changes
613
- git commit -m "feat: [brief description of what was implemented]"
614
- git push
615
598
  ```
616
-
617
- Then use the merge command to merge to main (which auto-marks chore as done via post-merge hook):
618
- ```bash
619
- jettypod work merge
599
+ Use the Skill tool with skill: "production-mode"
620
600
  ```
621
601
 
622
- <details>
623
- <summary>💡 Multi-instance coordination (click to expand)</summary>
602
+ The production-mode skill will:
603
+ 1. Detect feature context (authentication/data/general)
604
+ 2. Generate production scenarios from standards
605
+ 3. Create production chores with proper scope
624
606
 
625
- The merge command uses a merge lock to prevent conflicts when multiple instances complete work simultaneously:
626
- - First instance acquires lock → merges → releases lock
627
- - Second instance waits → then acquires lock → merges
628
- - No manual coordination needed - happens automatically
629
-
630
- If you see "Acquiring merge lock..." message, another instance is merging. Wait 30-60 seconds.
631
- </details>
632
-
633
- The post-merge hook will automatically mark the chore as done when merged to main.
607
+ **End stable-mode skill.**
634
608
 
635
609
  ---
636
610
 
637
- ⚠️ **CRITICAL: SEQUENTIAL WORKFLOW FOR STABLE MODE CHORES**
611
+ ## Validation Checklist
638
612
 
639
- **Stable mode chores MUST be completed sequentially, not in parallel.**
613
+ Before ending stable-mode skill, ensure:
614
+ - [ ] All stable mode chores complete (GREEN on all error/edge case scenarios)
615
+ - [ ] Final chore merged to main
616
+ - [ ] Project state checked (internal vs external)
617
+ - [ ] **INTERNAL:** Feature marked as done
618
+ - [ ] **EXTERNAL:** Feature mode set to production AND production-mode skill invoked
640
619
 
641
- **Why Sequential?**
642
- - Multiple chores modify the same files (e.g., lib/merge-lock.js, step definitions)
643
- - Later chores build on earlier implementations
644
- - Tests and BDD scenarios depend on cumulative changes
645
- - Parallel worktrees branch from main independently, missing each other's changes
620
+ ---
646
621
 
647
- **MANDATORY PROCESS:**
622
+ ## Command Reference
648
623
 
649
- After completing EACH stable chore:
650
- 1. ✅ Commit changes in worktree (excluding CLAUDE.md)
651
- 2. Push worktree branch
652
- 3. ✅ **Merge to main immediately**
653
- 4. ✅ **Push main**
654
- 5. ✅ ONLY THEN start the next stable chore
624
+ **Complete chores:**
625
+ ```bash
626
+ jettypod work merge # Merge current chore to main
627
+ ```
655
628
 
656
- **DO NOT:**
657
- ❌ Start multiple stable chores without merging previous ones
658
- Leave stable chores unmerged "for later"
659
- ❌ Assume worktrees will have each other's changes
629
+ **Start chores:**
630
+ ```bash
631
+ jettypod work start <chore-id> # Create worktree and start chore
632
+ ```
660
633
 
661
- **Example correct flow:**
634
+ **Set feature status/mode:**
662
635
  ```bash
663
- # Complete chore #1854
664
- git add . && git commit -m "feat: [description]"
665
- jettypod work merge # Automatically pushes, merges, and cleans up
636
+ jettypod work status <feature-id> done # Mark feature complete (internal only)
637
+ jettypod work set-mode <feature-id> production # Set feature to production mode
638
+ ```
666
639
 
667
- # NOW start chore #1855 (main has #1854's changes)
668
- jettypod work start 1855
640
+ **❌ DO NOT use these to complete chores:**
641
+ - `jettypod work status <chore-id> done`
642
+ - `jettypod work complete <id>`
669
643
 
670
- # Complete chore #1855
671
- git add . && git commit -m "feat: [description]"
672
- jettypod work merge # Automatically pushes, merges, and cleans up
644
+ ---
673
645
 
674
- # NOW start chore #1856 (main has #1854 + #1855's changes)
675
- jettypod work start 1856
676
- ```
646
+ ## ⚠️ Important: Sequential Workflow
677
647
 
678
- If you fail to follow this sequential process, later worktrees will be missing earlier implementations, causing:
679
- - Missing functions/exports
680
- - Incomplete test coverage
681
- - Step definition errors
682
- - Duplicate work
648
+ **Stable mode chores MUST be completed sequentially, not in parallel.**
683
649
 
684
- **End skill.**
650
+ **Why?**
651
+ - Multiple chores may modify the same files
652
+ - Later chores build on earlier implementations
653
+ - Parallel worktrees branch from main independently
685
654
 
655
+ **Process:**
656
+ 1. Complete chore → `jettypod work merge`
657
+ 2. Start next chore → `jettypod work start <next-id>`
658
+ 3. Repeat
686
659
 
660
+ The merge command handles everything: pushes branch, merges to main, marks chore done, cleans up worktree.