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.
- package/apps/dashboard/README.md +36 -0
- package/apps/dashboard/app/favicon.ico +0 -0
- package/apps/dashboard/app/globals.css +122 -0
- package/apps/dashboard/app/layout.tsx +34 -0
- package/apps/dashboard/app/page.tsx +25 -0
- package/apps/dashboard/app/work/[id]/page.tsx +193 -0
- package/apps/dashboard/components/KanbanBoard.tsx +201 -0
- package/apps/dashboard/components/WorkItemTree.tsx +116 -0
- package/apps/dashboard/components.json +22 -0
- package/apps/dashboard/eslint.config.mjs +18 -0
- package/apps/dashboard/lib/db.ts +270 -0
- package/apps/dashboard/lib/utils.ts +6 -0
- package/apps/dashboard/next.config.ts +7 -0
- package/apps/dashboard/package.json +33 -0
- package/apps/dashboard/postcss.config.mjs +7 -0
- package/apps/dashboard/public/file.svg +1 -0
- package/apps/dashboard/public/globe.svg +1 -0
- package/apps/dashboard/public/next.svg +1 -0
- package/apps/dashboard/public/vercel.svg +1 -0
- package/apps/dashboard/public/window.svg +1 -0
- package/apps/dashboard/tsconfig.json +34 -0
- package/jettypod.js +41 -0
- package/lib/current-work.js +10 -18
- package/lib/migrations/016-workflow-checkpoints-table.js +70 -0
- package/lib/migrations/017-backfill-epic-id.js +54 -0
- package/lib/workflow-checkpoint.js +204 -0
- package/package.json +7 -2
- package/skills-templates/chore-mode/SKILL.md +3 -0
- package/skills-templates/epic-planning/SKILL.md +225 -154
- package/skills-templates/feature-planning/SKILL.md +172 -87
- package/skills-templates/speed-mode/SKILL.md +161 -338
- 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
|
-
|
|
9
|
-
|
|
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
|
-
**
|
|
23
|
+
**After completing ALL stable mode chores:**
|
|
12
24
|
|
|
13
|
-
**
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
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
|
-
|
|
|
135
|
-
|
|
136
|
-
| Step 3A | Before implementing (conditional) | User confirms implementation approach
|
|
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
|
-
-
|
|
140
|
-
- Step
|
|
141
|
-
-
|
|
142
|
-
- Step
|
|
143
|
-
- Step
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
246
|
-
- If
|
|
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
|
|
248
|
+
[If breadcrumbs exist:]
|
|
264
249
|
Implementation guidance:
|
|
265
250
|
• Files: [files to modify]
|
|
266
251
|
• Patterns: [patterns to follow]
|
|
267
|
-
• Functions: [
|
|
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
|
|
269
|
+
**Find speed mode files:**
|
|
285
270
|
|
|
286
271
|
```bash
|
|
287
|
-
#
|
|
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
|
-
|
|
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
|
-
#
|
|
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
|
-
|
|
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
|
-
**
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
502
|
+
---
|
|
523
503
|
|
|
524
|
-
|
|
504
|
+
**Route B: All stable chores complete → Transition to Step 7**
|
|
525
505
|
|
|
526
|
-
|
|
506
|
+
If the query returns no remaining chores, proceed to Step 7.
|
|
527
507
|
|
|
528
508
|
---
|
|
529
509
|
|
|
530
|
-
### Step
|
|
510
|
+
### Step 7: Complete Feature or Transition to Production Mode
|
|
531
511
|
|
|
532
|
-
|
|
512
|
+
**🛑 CRITICAL: This step ONLY runs after ALL stable chores are complete.**
|
|
533
513
|
|
|
534
|
-
**
|
|
514
|
+
**First, merge the final stable chore:**
|
|
535
515
|
|
|
536
516
|
```bash
|
|
537
|
-
|
|
538
|
-
|
|
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
|
-
|
|
541
|
-
|
|
523
|
+
```bash
|
|
524
|
+
sqlite3 .jettypod/work.db "SELECT project_state FROM project_config WHERE id = 1"
|
|
542
525
|
```
|
|
543
526
|
|
|
544
|
-
|
|
527
|
+
---
|
|
545
528
|
|
|
546
|
-
|
|
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
|
|
534
|
+
jettypod work status <feature-id> done
|
|
553
535
|
```
|
|
554
536
|
|
|
555
|
-
Display
|
|
537
|
+
**Display:**
|
|
538
|
+
|
|
556
539
|
```
|
|
557
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
🚀
|
|
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
|
-
|
|
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
|
-
|
|
623
|
-
|
|
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
|
-
|
|
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
|
-
|
|
611
|
+
## Validation Checklist
|
|
638
612
|
|
|
639
|
-
|
|
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
|
-
|
|
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
|
-
|
|
622
|
+
## Command Reference
|
|
648
623
|
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
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
|
-
**
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
629
|
+
**Start chores:**
|
|
630
|
+
```bash
|
|
631
|
+
jettypod work start <chore-id> # Create worktree and start chore
|
|
632
|
+
```
|
|
660
633
|
|
|
661
|
-
**
|
|
634
|
+
**Set feature status/mode:**
|
|
662
635
|
```bash
|
|
663
|
-
#
|
|
664
|
-
|
|
665
|
-
|
|
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
|
-
|
|
668
|
-
jettypod work
|
|
640
|
+
**❌ DO NOT use these to complete chores:**
|
|
641
|
+
- `jettypod work status <chore-id> done`
|
|
642
|
+
- `jettypod work complete <id>`
|
|
669
643
|
|
|
670
|
-
|
|
671
|
-
git add . && git commit -m "feat: [description]"
|
|
672
|
-
jettypod work merge # Automatically pushes, merges, and cleans up
|
|
644
|
+
---
|
|
673
645
|
|
|
674
|
-
|
|
675
|
-
jettypod work start 1856
|
|
676
|
-
```
|
|
646
|
+
## ⚠️ Important: Sequential Workflow
|
|
677
647
|
|
|
678
|
-
|
|
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
|
-
**
|
|
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.
|