jettypod 4.4.11 → 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/package.json +1 -1
- package/skills-templates/stable-mode/SKILL.md +150 -182
package/package.json
CHANGED
|
@@ -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,66 +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
|
-
#
|
|
510
|
-
cd $(git rev-parse --git-common-dir)/..
|
|
511
|
-
|
|
512
|
-
# Merge current chore - this automatically marks it as done
|
|
493
|
+
# Merge current chore (handles push, merge, cleanup)
|
|
513
494
|
jettypod work merge
|
|
514
495
|
|
|
515
496
|
# Start next stable chore
|
|
516
497
|
jettypod work start [next-chore-id]
|
|
517
498
|
```
|
|
518
499
|
|
|
519
|
-
|
|
520
|
-
- ❌ DO NOT use `jettypod work status <id> done`
|
|
521
|
-
- ❌ DO NOT use `jettypod work complete <id>`
|
|
522
|
-
- ❌ DO NOT use `jettypod work set-mode <id> done`
|
|
523
|
-
- ✅ ONLY use `jettypod work merge` (from main repo, not worktree)
|
|
500
|
+
The stable-mode skill will automatically re-invoke for the next chore.
|
|
524
501
|
|
|
525
|
-
|
|
502
|
+
---
|
|
526
503
|
|
|
527
|
-
|
|
504
|
+
**Route B: All stable chores complete → Transition to Step 7**
|
|
528
505
|
|
|
529
|
-
|
|
506
|
+
If the query returns no remaining chores, proceed to Step 7.
|
|
530
507
|
|
|
531
508
|
---
|
|
532
509
|
|
|
533
|
-
### Step
|
|
510
|
+
### Step 7: Complete Feature or Transition to Production Mode
|
|
534
511
|
|
|
535
|
-
|
|
512
|
+
**🛑 CRITICAL: This step ONLY runs after ALL stable chores are complete.**
|
|
536
513
|
|
|
537
|
-
**
|
|
514
|
+
**First, merge the final stable chore:**
|
|
538
515
|
|
|
539
516
|
```bash
|
|
540
|
-
|
|
541
|
-
|
|
517
|
+
git add . && git commit -m "feat: [brief description of error handling added]"
|
|
518
|
+
jettypod work merge
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
**Then check project state:**
|
|
542
522
|
|
|
543
|
-
|
|
544
|
-
|
|
523
|
+
```bash
|
|
524
|
+
sqlite3 .jettypod/work.db "SELECT project_state FROM project_config WHERE id = 1"
|
|
545
525
|
```
|
|
546
526
|
|
|
547
|
-
|
|
527
|
+
---
|
|
548
528
|
|
|
549
|
-
|
|
529
|
+
#### Step 7A: INTERNAL Project → Feature Complete
|
|
550
530
|
|
|
551
531
|
**If project_state = 'internal':**
|
|
552
532
|
|
|
553
|
-
Mark the feature as done:
|
|
554
533
|
```bash
|
|
555
|
-
jettypod work status
|
|
534
|
+
jettypod work status <feature-id> done
|
|
556
535
|
```
|
|
557
536
|
|
|
558
|
-
Display
|
|
537
|
+
**Display:**
|
|
538
|
+
|
|
559
539
|
```
|
|
560
|
-
|
|
540
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
541
|
+
✅ FEATURE COMPLETE!
|
|
542
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
561
543
|
|
|
562
|
-
Feature: [Feature Title]
|
|
544
|
+
Feature: #[id] [Feature Title]
|
|
563
545
|
Status: ✅ DONE
|
|
564
546
|
|
|
565
547
|
What we accomplished:
|
|
@@ -581,112 +563,98 @@ run the external-transition skill to generate production chores.
|
|
|
581
563
|
|
|
582
564
|
---
|
|
583
565
|
|
|
566
|
+
#### Step 7B: EXTERNAL Project → Invoke Production Mode
|
|
567
|
+
|
|
584
568
|
**If project_state = 'external':**
|
|
585
569
|
|
|
586
|
-
|
|
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:**
|
|
587
579
|
|
|
588
|
-
Display:
|
|
589
580
|
```
|
|
590
|
-
|
|
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.
|
|
591
587
|
|
|
592
588
|
What we accomplished:
|
|
593
589
|
✅ All BDD scenarios passing (success + error handling + edge cases)
|
|
594
590
|
✅ Comprehensive error handling and validation
|
|
595
591
|
✅ Feature stable and ready for production hardening
|
|
596
592
|
|
|
597
|
-
🚀
|
|
598
|
-
|
|
599
|
-
This project is external - invoking production-mode skill to:
|
|
600
|
-
• Detect feature context (authentication/data/general)
|
|
601
|
-
• Generate production scenarios from standards
|
|
602
|
-
• Create production chores with proper scope
|
|
593
|
+
🚀 Now invoking production-mode skill...
|
|
603
594
|
```
|
|
604
595
|
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
---
|
|
608
|
-
|
|
609
|
-
⚠️ **CRITICAL: Exclude CLAUDE.md from commits in worktrees**
|
|
596
|
+
**Invoke production-mode:**
|
|
610
597
|
|
|
611
|
-
CLAUDE.md contains work tracking metadata that changes frequently and causes merge conflicts. When committing in a worktree, **always reset CLAUDE.md** before committing:
|
|
612
|
-
|
|
613
|
-
```bash
|
|
614
|
-
git checkout HEAD -- CLAUDE.md # Reset CLAUDE.md to avoid merge conflicts
|
|
615
|
-
git add . # Stage other changes
|
|
616
|
-
git commit -m "feat: [brief description of what was implemented]"
|
|
617
|
-
git push
|
|
618
598
|
```
|
|
619
|
-
|
|
620
|
-
Then switch to main repo and use the merge command (which auto-marks chore as done):
|
|
621
|
-
```bash
|
|
622
|
-
cd $(git rev-parse --git-common-dir)/.. # Switch to main repo
|
|
623
|
-
jettypod work merge
|
|
599
|
+
Use the Skill tool with skill: "production-mode"
|
|
624
600
|
```
|
|
625
601
|
|
|
626
|
-
|
|
627
|
-
|
|
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
|
|
628
606
|
|
|
629
|
-
|
|
630
|
-
- First instance acquires lock → merges → releases lock
|
|
631
|
-
- Second instance waits → then acquires lock → merges
|
|
632
|
-
- No manual coordination needed - happens automatically
|
|
633
|
-
|
|
634
|
-
If you see "Acquiring merge lock..." message, another instance is merging. Wait 30-60 seconds.
|
|
635
|
-
</details>
|
|
636
|
-
|
|
637
|
-
The post-merge hook will automatically mark the chore as done when merged to main.
|
|
607
|
+
**End stable-mode skill.**
|
|
638
608
|
|
|
639
609
|
---
|
|
640
610
|
|
|
641
|
-
|
|
611
|
+
## Validation Checklist
|
|
642
612
|
|
|
643
|
-
|
|
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
|
|
644
619
|
|
|
645
|
-
|
|
646
|
-
- Multiple chores modify the same files (e.g., lib/merge-lock.js, step definitions)
|
|
647
|
-
- Later chores build on earlier implementations
|
|
648
|
-
- Tests and BDD scenarios depend on cumulative changes
|
|
649
|
-
- Parallel worktrees branch from main independently, missing each other's changes
|
|
620
|
+
---
|
|
650
621
|
|
|
651
|
-
|
|
622
|
+
## Command Reference
|
|
652
623
|
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
4. ✅ **Push main**
|
|
658
|
-
5. ✅ ONLY THEN start the next stable chore
|
|
624
|
+
**Complete chores:**
|
|
625
|
+
```bash
|
|
626
|
+
jettypod work merge # Merge current chore to main
|
|
627
|
+
```
|
|
659
628
|
|
|
660
|
-
**
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
629
|
+
**Start chores:**
|
|
630
|
+
```bash
|
|
631
|
+
jettypod work start <chore-id> # Create worktree and start chore
|
|
632
|
+
```
|
|
664
633
|
|
|
665
|
-
**
|
|
634
|
+
**Set feature status/mode:**
|
|
666
635
|
```bash
|
|
667
|
-
#
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
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
|
+
```
|
|
671
639
|
|
|
672
|
-
|
|
673
|
-
jettypod work
|
|
640
|
+
**❌ DO NOT use these to complete chores:**
|
|
641
|
+
- `jettypod work status <chore-id> done`
|
|
642
|
+
- `jettypod work complete <id>`
|
|
674
643
|
|
|
675
|
-
|
|
676
|
-
git add . && git commit -m "feat: [description]"
|
|
677
|
-
cd $(git rev-parse --git-common-dir)/.. # Switch to main repo
|
|
678
|
-
jettypod work merge # Automatically pushes, merges, and cleans up
|
|
644
|
+
---
|
|
679
645
|
|
|
680
|
-
|
|
681
|
-
jettypod work start 1856
|
|
682
|
-
```
|
|
646
|
+
## ⚠️ Important: Sequential Workflow
|
|
683
647
|
|
|
684
|
-
|
|
685
|
-
- Missing functions/exports
|
|
686
|
-
- Incomplete test coverage
|
|
687
|
-
- Step definition errors
|
|
688
|
-
- Duplicate work
|
|
648
|
+
**Stable mode chores MUST be completed sequentially, not in parallel.**
|
|
689
649
|
|
|
690
|
-
**
|
|
650
|
+
**Why?**
|
|
651
|
+
- Multiple chores may modify the same files
|
|
652
|
+
- Later chores build on earlier implementations
|
|
653
|
+
- Parallel worktrees branch from main independently
|
|
691
654
|
|
|
655
|
+
**Process:**
|
|
656
|
+
1. Complete chore → `jettypod work merge`
|
|
657
|
+
2. Start next chore → `jettypod work start <next-id>`
|
|
658
|
+
3. Repeat
|
|
692
659
|
|
|
660
|
+
The merge command handles everything: pushes branch, merges to main, marks chore done, cleans up worktree.
|