jettypod 4.4.116 → 4.4.120
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/.env +7 -0
- package/apps/dashboard/app/api/claude/[workItemId]/message/route.ts +124 -48
- package/apps/dashboard/app/api/claude/[workItemId]/route.ts +171 -58
- package/apps/dashboard/app/api/claude/sessions/[sessionId]/message/route.ts +161 -10
- package/apps/dashboard/app/api/tests/run/stream/route.ts +13 -1
- package/apps/dashboard/app/api/usage/route.ts +17 -0
- package/apps/dashboard/app/api/work/[id]/route.ts +35 -0
- package/apps/dashboard/app/api/work/[id]/status/route.ts +43 -1
- package/apps/dashboard/app/connect-claude/page.tsx +24 -0
- package/apps/dashboard/app/decision/[id]/page.tsx +14 -14
- package/apps/dashboard/app/demo/gates/page.tsx +42 -42
- package/apps/dashboard/app/design-system/page.tsx +868 -0
- package/apps/dashboard/app/globals.css +6 -2
- package/apps/dashboard/app/install-claude/page.tsx +9 -7
- package/apps/dashboard/app/layout.tsx +17 -5
- package/apps/dashboard/app/login/page.tsx +250 -0
- package/apps/dashboard/app/page.tsx +11 -9
- package/apps/dashboard/app/settings/page.tsx +4 -2
- package/apps/dashboard/app/signup/page.tsx +245 -0
- package/apps/dashboard/app/subscribe/page.tsx +11 -0
- package/apps/dashboard/app/welcome/page.tsx +24 -1
- package/apps/dashboard/app/work/[id]/page.tsx +34 -50
- package/apps/dashboard/components/AppShell.tsx +95 -55
- package/apps/dashboard/components/CardMenu.tsx +56 -13
- package/apps/dashboard/components/ClaudePanel.tsx +301 -582
- package/apps/dashboard/components/ClaudePanelInput.tsx +23 -14
- package/apps/dashboard/components/ConnectClaudeScreen.tsx +210 -0
- package/apps/dashboard/components/CopyableId.tsx +3 -3
- package/apps/dashboard/components/DetailReviewActions.tsx +109 -0
- package/apps/dashboard/components/DragContext.tsx +75 -65
- package/apps/dashboard/components/DraggableCard.tsx +6 -46
- package/apps/dashboard/components/DropZone.tsx +2 -2
- package/apps/dashboard/components/EditableDetailDescription.tsx +1 -1
- package/apps/dashboard/components/EditableTitle.tsx +26 -6
- package/apps/dashboard/components/ElapsedTimer.tsx +54 -0
- package/apps/dashboard/components/EpicGroup.tsx +329 -0
- package/apps/dashboard/components/GateCard.tsx +100 -16
- package/apps/dashboard/components/GateChoiceCard.tsx +15 -17
- package/apps/dashboard/components/InstallClaudeScreen.tsx +140 -51
- package/apps/dashboard/components/JettyLoader.tsx +38 -0
- package/apps/dashboard/components/KanbanBoard.tsx +147 -766
- package/apps/dashboard/components/KanbanCard.tsx +506 -0
- package/apps/dashboard/components/LazyMarkdown.tsx +12 -0
- package/apps/dashboard/components/MainNav.tsx +20 -54
- package/apps/dashboard/components/MessageBlock.tsx +391 -0
- package/apps/dashboard/components/ModeStartCard.tsx +15 -15
- package/apps/dashboard/components/OnboardingWelcome.tsx +214 -0
- package/apps/dashboard/components/PlaceholderCard.tsx +11 -21
- package/apps/dashboard/components/ProjectSwitcher.tsx +36 -8
- package/apps/dashboard/components/PrototypeTimeline.tsx +25 -25
- package/apps/dashboard/components/RealTimeKanbanWrapper.tsx +265 -301
- package/apps/dashboard/components/RealTimeTestsWrapper.tsx +97 -74
- package/apps/dashboard/components/ReviewFooter.tsx +141 -0
- package/apps/dashboard/components/SessionList.tsx +19 -18
- package/apps/dashboard/components/SubscribeContent.tsx +206 -0
- package/apps/dashboard/components/TestTree.tsx +15 -14
- package/apps/dashboard/components/TipCard.tsx +177 -0
- package/apps/dashboard/components/Toast.tsx +5 -5
- package/apps/dashboard/components/TypeIcon.tsx +56 -0
- package/apps/dashboard/components/UpgradeBanner.tsx +30 -0
- package/apps/dashboard/components/WaveCompletionAnimation.tsx +61 -62
- package/apps/dashboard/components/WelcomeScreen.tsx +25 -27
- package/apps/dashboard/components/WorkItemHeader.tsx +4 -4
- package/apps/dashboard/components/WorkItemTree.tsx +9 -28
- package/apps/dashboard/components/settings/AccountSection.tsx +169 -0
- package/apps/dashboard/components/settings/EnvVarsSection.tsx +54 -79
- package/apps/dashboard/components/settings/GeneralSection.tsx +26 -31
- package/apps/dashboard/components/settings/SettingsLayout.tsx +4 -4
- package/apps/dashboard/components/ui/Button.tsx +104 -0
- package/apps/dashboard/components/ui/Input.tsx +78 -0
- package/apps/dashboard/contexts/ClaudeSessionContext.tsx +408 -105
- package/apps/dashboard/contexts/ConnectionStatusContext.tsx +25 -4
- package/apps/dashboard/contexts/UsageContext.tsx +155 -0
- package/apps/dashboard/contexts/usageHelpers.js +9 -0
- package/apps/dashboard/electron/ipc-handlers.js +281 -88
- package/apps/dashboard/electron/main.js +691 -131
- package/apps/dashboard/electron/preload.js +25 -4
- package/apps/dashboard/electron/session-manager.js +163 -0
- package/apps/dashboard/electron-builder.config.js +3 -5
- package/apps/dashboard/hooks/useKanbanAnimation.ts +29 -0
- package/apps/dashboard/hooks/useKanbanUndo.ts +83 -0
- package/apps/dashboard/lib/backlog-parser.ts +50 -0
- package/apps/dashboard/lib/claude-process-manager.ts +50 -11
- package/apps/dashboard/lib/constants.ts +43 -0
- package/apps/dashboard/lib/db-bridge.ts +33 -0
- package/apps/dashboard/lib/db.ts +136 -20
- package/apps/dashboard/lib/kanban-utils.ts +70 -0
- package/apps/dashboard/lib/run-migrations.js +27 -2
- package/apps/dashboard/lib/session-state-machine.ts +3 -0
- package/apps/dashboard/lib/session-stream-manager.ts +144 -38
- package/apps/dashboard/lib/shadows.ts +7 -0
- package/apps/dashboard/lib/tests.ts +3 -1
- package/apps/dashboard/lib/utils.ts +6 -0
- package/apps/dashboard/next.config.js +35 -14
- package/apps/dashboard/package.json +6 -3
- package/apps/dashboard/public/bug-icon.svg +9 -0
- package/apps/dashboard/public/buoy-icon.svg +9 -0
- package/apps/dashboard/public/fonts/Satoshi-Variable.woff2 +0 -0
- package/apps/dashboard/public/fonts/Satoshi-VariableItalic.woff2 +0 -0
- package/apps/dashboard/public/in-flight-seagull.svg +9 -0
- package/apps/dashboard/public/jetty-icon-loading-alt.svg +11 -0
- package/apps/dashboard/public/jetty-icon-loading.svg +11 -0
- package/apps/dashboard/public/jettypod_logo.png +0 -0
- package/apps/dashboard/public/pier-icon.svg +14 -0
- package/apps/dashboard/public/star-icon.svg +9 -0
- package/apps/dashboard/public/wrench-icon.svg +9 -0
- package/apps/dashboard/scripts/upload-to-r2.js +89 -0
- package/apps/dashboard/scripts/ws-server.js +191 -0
- package/apps/dashboard/tsconfig.tsbuildinfo +1 -0
- package/apps/update-server/package.json +16 -0
- package/apps/update-server/schema.sql +31 -0
- package/apps/update-server/src/index.ts +1085 -0
- package/apps/update-server/tsconfig.json +16 -0
- package/apps/update-server/wrangler.toml +35 -0
- package/cucumber.js +9 -3
- package/docs/COMMAND_REFERENCE.md +34 -0
- package/hooks/post-checkout +32 -75
- package/hooks/post-merge +111 -10
- package/jest.setup.js +1 -0
- package/jettypod.js +54 -116
- package/lib/chore-taxonomy.js +33 -10
- package/lib/database.js +36 -16
- package/lib/db-watcher.js +1 -1
- package/lib/git-hooks/pre-commit +1 -1
- package/lib/jettypod-backup.js +27 -4
- package/lib/migrations/027-plan-at-creation-column.js +33 -0
- package/lib/migrations/028-ready-for-review-column.js +27 -0
- package/lib/migrations/029-remove-autoincrement.js +307 -0
- package/lib/migrations/029-rename-corrupted-to-cleaned.js +149 -0
- package/lib/migrations/index.js +47 -4
- package/lib/schema.js +13 -6
- package/lib/seed-onboarding.js +101 -69
- package/lib/update-command/index.js +9 -175
- package/lib/work-commands/index.js +129 -16
- package/lib/work-tracking/index.js +86 -46
- package/lib/worktree-diagnostics.js +16 -16
- package/lib/worktree-facade.js +1 -1
- package/lib/worktree-manager.js +8 -8
- package/lib/worktree-reconciler.js +5 -5
- package/package.json +9 -2
- package/scripts/ndjson-to-cucumber-json.js +152 -0
- package/scripts/postinstall.js +25 -0
- package/skills-templates/bug-mode/SKILL.md +39 -28
- package/skills-templates/bug-planning/SKILL.md +25 -29
- package/skills-templates/chore-mode/SKILL.md +131 -68
- package/skills-templates/chore-mode/verification.js +51 -10
- package/skills-templates/chore-planning/SKILL.md +47 -18
- package/skills-templates/epic-planning/SKILL.md +68 -48
- package/skills-templates/external-transition/SKILL.md +47 -47
- package/skills-templates/feature-planning/SKILL.md +83 -73
- package/skills-templates/production-mode/SKILL.md +49 -49
- package/skills-templates/request-routing/SKILL.md +27 -14
- package/skills-templates/simple-improvement/SKILL.md +68 -44
- package/skills-templates/speed-mode/SKILL.md +209 -128
- package/skills-templates/stable-mode/SKILL.md +105 -94
- package/templates/bdd-guidance.md +139 -0
- package/templates/bdd-scaffolding/wait.js +18 -0
- package/templates/bdd-scaffolding/world.js +19 -0
- package/.jettypod-backup/work.db +0 -0
- package/apps/dashboard/app/access-code/page.tsx +0 -110
- package/lib/discovery-checkpoint.js +0 -123
- package/skills-templates/project-discovery/SKILL.md +0 -372
|
@@ -18,7 +18,7 @@ description: Guide implementation of speed mode chores with autonomous code anal
|
|
|
18
18
|
└─────────────────────────────────────────────────────────────────────┘
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
##
|
|
21
|
+
## CRITICAL HANDOFF REQUIREMENT
|
|
22
22
|
|
|
23
23
|
**After completing ALL speed mode chores, you MUST:**
|
|
24
24
|
1. Generate stable mode BDD scenarios and step definitions
|
|
@@ -26,18 +26,18 @@ description: Guide implementation of speed mode chores with autonomous code anal
|
|
|
26
26
|
3. Set feature mode to stable
|
|
27
27
|
4. **IMMEDIATELY invoke stable-mode using the Skill tool**
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
**STOP GATE:** DO NOT end this skill without invoking stable-mode. Speed mode is ONLY a checkpoint - features are INCOMPLETE without stable mode.
|
|
30
30
|
|
|
31
31
|
---
|
|
32
32
|
|
|
33
|
-
##
|
|
33
|
+
## FORBIDDEN: Skipping Stable Mode
|
|
34
34
|
|
|
35
35
|
```
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
Ending speed-mode skill without invoking stable-mode skill
|
|
37
|
+
Using `jettypod work status <feature-id> done` to mark feature complete
|
|
38
|
+
Telling user "feature is complete" after speed mode
|
|
39
|
+
Skipping Step 7 (Transition to Stable Mode)
|
|
40
|
+
Any action that bypasses the speed→stable progression
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
**What "Feature Complete" Actually Means:**
|
|
@@ -60,7 +60,7 @@ Guides Claude Code through speed mode implementation with autonomous analysis an
|
|
|
60
60
|
|
|
61
61
|
When this skill is activated, you are helping implement a speed mode chore to make all success scenarios pass. Follow this structured approach:
|
|
62
62
|
|
|
63
|
-
##
|
|
63
|
+
## Critical Context
|
|
64
64
|
|
|
65
65
|
**You are working in an isolated git worktree:**
|
|
66
66
|
- `work start [chore-id]` created a dedicated worktree for this chore
|
|
@@ -72,7 +72,7 @@ When this skill is activated, you are helping implement a speed mode chore to ma
|
|
|
72
72
|
|
|
73
73
|
---
|
|
74
74
|
|
|
75
|
-
##
|
|
75
|
+
## SHELL CWD RECOVERY
|
|
76
76
|
|
|
77
77
|
**If ALL bash commands start failing with "Error: Exit code 1" and no output:**
|
|
78
78
|
|
|
@@ -93,7 +93,7 @@ cd /Users/erikspangenberg/personal-assistant && pwd
|
|
|
93
93
|
|
|
94
94
|
---
|
|
95
95
|
|
|
96
|
-
##
|
|
96
|
+
## PRE-FLIGHT VALIDATION (REQUIRED)
|
|
97
97
|
|
|
98
98
|
**Before proceeding with ANY implementation, you MUST validate the worktree exists.**
|
|
99
99
|
|
|
@@ -107,11 +107,11 @@ sqlite3 .jettypod/work.db "SELECT wi.id, wi.title, wi.status, wt.worktree_path,
|
|
|
107
107
|
|
|
108
108
|
| worktree_path | What it means | Action |
|
|
109
109
|
|---------------|---------------|--------|
|
|
110
|
-
| **Has a path** (e.g., `/path/to/.jettypod-work/...`) |
|
|
111
|
-
| **NULL or empty** |
|
|
112
|
-
| **No rows returned** |
|
|
110
|
+
| **Has a path** (e.g., `/path/to/.jettypod-work/...`) | Worktree exists, ready to proceed | Continue to Step 0 |
|
|
111
|
+
| **NULL or empty** | `work start` was not called | **STOP - run `jettypod work start [chore-id]` first** |
|
|
112
|
+
| **No rows returned** | No chore is in progress | **STOP - verify the chore exists and run `work start`** |
|
|
113
113
|
|
|
114
|
-
|
|
114
|
+
**STOP GATE:** If `worktree_path` is NULL or no rows returned, you MUST run `jettypod work start [chore-id]` before continuing. DO NOT proceed without a valid worktree.
|
|
115
115
|
|
|
116
116
|
**Example of valid output:**
|
|
117
117
|
```
|
|
@@ -126,7 +126,7 @@ sqlite3 .jettypod/work.db "SELECT wi.id, wi.title, wi.status, wt.worktree_path,
|
|
|
126
126
|
|
|
127
127
|
---
|
|
128
128
|
|
|
129
|
-
##
|
|
129
|
+
## WORKTREE PATH LOCK
|
|
130
130
|
|
|
131
131
|
**After pre-flight validation passes, capture and lock the worktree path:**
|
|
132
132
|
|
|
@@ -135,7 +135,7 @@ From the pre-flight query output, extract and store:
|
|
|
135
135
|
|
|
136
136
|
**Display:**
|
|
137
137
|
```
|
|
138
|
-
|
|
138
|
+
WORKTREE LOCK ACTIVE
|
|
139
139
|
Path: ${WORKTREE_PATH}
|
|
140
140
|
|
|
141
141
|
All file writes will use this path.
|
|
@@ -171,7 +171,7 @@ jettypod ui gate worktree-started --data='{"path":"${WORKTREE_PATH}"}'
|
|
|
171
171
|
**User Profile:** May not know how to code - Claude Code does the implementation autonomously.
|
|
172
172
|
|
|
173
173
|
<details>
|
|
174
|
-
<summary><strong
|
|
174
|
+
<summary><strong>Speed Mode Constraints (click to expand)</strong></summary>
|
|
175
175
|
|
|
176
176
|
**What to implement:**
|
|
177
177
|
- **Integration** - wire feature into the app so it's reachable (Integration Scenario)
|
|
@@ -180,10 +180,10 @@ jettypod ui gate worktree-started --data='{"path":"${WORKTREE_PATH}"}'
|
|
|
180
180
|
- Success variations (different outcomes that are all correct)
|
|
181
181
|
|
|
182
182
|
**What NOT to implement:**
|
|
183
|
-
-
|
|
184
|
-
-
|
|
185
|
-
-
|
|
186
|
-
-
|
|
183
|
+
- Error handling (try/catch, validation, edge cases)
|
|
184
|
+
- Input validation (null checks, type checks, range validation)
|
|
185
|
+
- Error messages for failures
|
|
186
|
+
- Edge case handling (empty arrays, boundary values, race conditions)
|
|
187
187
|
|
|
188
188
|
**Code organization:**
|
|
189
189
|
- Single file when possible - keep it simple
|
|
@@ -195,7 +195,7 @@ jettypod ui gate worktree-started --data='{"path":"${WORKTREE_PATH}"}'
|
|
|
195
195
|
|
|
196
196
|
---
|
|
197
197
|
|
|
198
|
-
##
|
|
198
|
+
## Unit Testing in Speed Mode - True TDD
|
|
199
199
|
|
|
200
200
|
**Unit tests are written DURING the RED→GREEN loop, not after.**
|
|
201
201
|
|
|
@@ -218,7 +218,7 @@ jettypod ui gate worktree-started --data='{"path":"${WORKTREE_PATH}"}'
|
|
|
218
218
|
- Check existing test files for patterns
|
|
219
219
|
|
|
220
220
|
<details>
|
|
221
|
-
<summary><strong
|
|
221
|
+
<summary><strong>TDD Example (click to expand)</strong></summary>
|
|
222
222
|
|
|
223
223
|
```javascript
|
|
224
224
|
// Iteration 1: BDD step "Given a user exists" is failing
|
|
@@ -243,14 +243,14 @@ function createUser(name, email) {
|
|
|
243
243
|
|
|
244
244
|
**Unit test scope in speed mode:**
|
|
245
245
|
```javascript
|
|
246
|
-
//
|
|
246
|
+
// Speed mode unit tests (success paths)
|
|
247
247
|
test('createUser creates user with valid data', () => {
|
|
248
248
|
const user = createUser('John', 'john@example.com');
|
|
249
249
|
expect(user.name).toBe('John');
|
|
250
250
|
expect(user.email).toBe('john@example.com');
|
|
251
251
|
});
|
|
252
252
|
|
|
253
|
-
//
|
|
253
|
+
// NOT in speed mode (stable mode adds these)
|
|
254
254
|
test('createUser throws error for invalid email', () => {
|
|
255
255
|
expect(() => createUser('John', 'invalid')).toThrow();
|
|
256
256
|
});
|
|
@@ -267,14 +267,17 @@ test('createUser throws error for invalid email', () => {
|
|
|
267
267
|
| Step | Location | Why |
|
|
268
268
|
|------|----------|-----|
|
|
269
269
|
| Step 3A | Before implementing (conditional) | User confirms implementation approach - only if ambiguous |
|
|
270
|
-
| Step
|
|
270
|
+
| Step 7C | Before writing stable scenarios | User confirms stable mode BDD scenarios - always |
|
|
271
|
+
| Step 7E | Before creating stable chores | User confirms proposed stable mode chores - always |
|
|
271
272
|
|
|
272
273
|
**Where Claude Code executes autonomously:**
|
|
273
274
|
- Steps 0-2: Initialize, analyze scenarios, analyze codebase
|
|
274
275
|
- Step 3: Decision to skip/ask confirmation
|
|
275
276
|
- Steps 4-5: RED baseline, RED→GREEN→REFACTOR loop
|
|
276
277
|
- Step 6: Route to next chore OR transition to Step 7
|
|
277
|
-
- Step
|
|
278
|
+
- Step 7A-7B: Validate BDD, merge final speed chore
|
|
279
|
+
- Step 7D: Write and merge confirmed stable scenarios
|
|
280
|
+
- Step 7F-7G (after chore confirmation): Create chores, set mode, invoke stable-mode
|
|
278
281
|
|
|
279
282
|
---
|
|
280
283
|
|
|
@@ -290,7 +293,7 @@ test('createUser throws error for invalid email', () => {
|
|
|
290
293
|
sqlite3 .jettypod/work.db "SELECT wi.id, wi.title, wi.parent_id, parent.title as parent_title, parent.scenario_file, wt.worktree_path, wt.branch_name FROM work_items wi LEFT JOIN work_items parent ON wi.parent_id = parent.id LEFT JOIN worktrees wt ON wi.id = wt.work_item_id WHERE wi.status = 'in_progress' AND wi.type = 'chore'"
|
|
291
294
|
```
|
|
292
295
|
|
|
293
|
-
|
|
296
|
+
**WORKFLOW INTEGRATION: Start workflow tracking**
|
|
294
297
|
|
|
295
298
|
After getting the work context, register this skill execution:
|
|
296
299
|
|
|
@@ -304,7 +307,7 @@ This validates that `feature_planning_complete` gate is passed and creates an ex
|
|
|
304
307
|
|
|
305
308
|
```
|
|
306
309
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
307
|
-
|
|
310
|
+
SPEED MODE: Implementing Chore #[id]
|
|
308
311
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
309
312
|
|
|
310
313
|
Chore: [title]
|
|
@@ -321,11 +324,11 @@ Analyzing BDD scenarios to determine implementation approach...
|
|
|
321
324
|
|
|
322
325
|
### Step 1: Check for Breadcrumbs and Analyze Scenario
|
|
323
326
|
|
|
324
|
-
|
|
327
|
+
**FORBIDDEN: Writing Files at This Step**
|
|
325
328
|
```
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
+
Write tool to any path
|
|
330
|
+
Edit tool to any path
|
|
331
|
+
Any file creation or modification
|
|
329
332
|
```
|
|
330
333
|
**This is an ANALYSIS step.** File writes happen in Step 5.
|
|
331
334
|
|
|
@@ -365,7 +368,7 @@ If all three sections exist, use them. Otherwise, fall back to autonomous analys
|
|
|
365
368
|
**Display to user (with breadcrumbs):**
|
|
366
369
|
|
|
367
370
|
```
|
|
368
|
-
|
|
371
|
+
Speed Mode: [Chore Title]
|
|
369
372
|
|
|
370
373
|
Scenario steps addressed:
|
|
371
374
|
[Steps from breadcrumbs]
|
|
@@ -382,7 +385,7 @@ Now analyzing codebase to finalize implementation approach...
|
|
|
382
385
|
**Display to user (without breadcrumbs):**
|
|
383
386
|
|
|
384
387
|
```
|
|
385
|
-
|
|
388
|
+
Speed Mode: [Feature Name]
|
|
386
389
|
|
|
387
390
|
Happy Path Scenario:
|
|
388
391
|
[Scenario title]
|
|
@@ -400,11 +403,11 @@ Now analyzing codebase to propose implementation...
|
|
|
400
403
|
|
|
401
404
|
### Step 2: Autonomous Codebase Analysis
|
|
402
405
|
|
|
403
|
-
|
|
406
|
+
**FORBIDDEN: Writing Files at This Step**
|
|
404
407
|
```
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
+
Write tool to any path
|
|
409
|
+
Edit tool to any path
|
|
410
|
+
Any file creation or modification
|
|
408
411
|
```
|
|
409
412
|
**This is an ANALYSIS step.** File writes happen in Step 5.
|
|
410
413
|
|
|
@@ -458,7 +461,7 @@ Decisions constrain your implementation approach - use them to guide technology
|
|
|
458
461
|
**Display analysis results:**
|
|
459
462
|
|
|
460
463
|
```
|
|
461
|
-
|
|
464
|
+
Codebase Analysis Complete
|
|
462
465
|
|
|
463
466
|
Architectural Constraints:
|
|
464
467
|
[List any epic decisions that apply]
|
|
@@ -476,7 +479,7 @@ Integration Points:
|
|
|
476
479
|
Now proposing implementation approach...
|
|
477
480
|
```
|
|
478
481
|
|
|
479
|
-
|
|
482
|
+
**WORKFLOW CHECKPOINT: Codebase analysis complete**
|
|
480
483
|
|
|
481
484
|
```bash
|
|
482
485
|
jettypod workflow checkpoint <feature-id> --step=2
|
|
@@ -484,11 +487,11 @@ jettypod workflow checkpoint <feature-id> --step=2
|
|
|
484
487
|
|
|
485
488
|
### Step 3: Decide if Confirmation Needed
|
|
486
489
|
|
|
487
|
-
|
|
490
|
+
**FORBIDDEN: Writing Files at This Step**
|
|
488
491
|
```
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
+
Write tool to any path
|
|
493
|
+
Edit tool to any path
|
|
494
|
+
Any file creation or modification
|
|
492
495
|
```
|
|
493
496
|
**This is a DECISION step.** File writes happen in Step 5.
|
|
494
497
|
|
|
@@ -508,20 +511,20 @@ jettypod workflow checkpoint <feature-id> --step=2
|
|
|
508
511
|
|
|
509
512
|
### Step 3A: Propose Implementation Approach (Conditional)
|
|
510
513
|
|
|
511
|
-
|
|
514
|
+
**FORBIDDEN: Writing Files at This Step**
|
|
512
515
|
```
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
+
Write tool to any path
|
|
517
|
+
Edit tool to any path
|
|
518
|
+
Any file creation or modification
|
|
516
519
|
```
|
|
517
520
|
**This is a PROPOSAL step.** File writes happen in Step 5.
|
|
518
521
|
|
|
519
|
-
|
|
522
|
+
**ASYNC BOUNDARY - Only execute this if confirmation needed**
|
|
520
523
|
|
|
521
524
|
**Present your analysis and proposal to the user:**
|
|
522
525
|
|
|
523
526
|
```
|
|
524
|
-
|
|
527
|
+
Implementation Proposal
|
|
525
528
|
|
|
526
529
|
I see multiple ways to approach this. Here's what I'm thinking:
|
|
527
530
|
|
|
@@ -536,7 +539,7 @@ I see multiple ways to approach this. Here's what I'm thinking:
|
|
|
536
539
|
Sound good, or would you prefer a different approach?
|
|
537
540
|
```
|
|
538
541
|
|
|
539
|
-
|
|
542
|
+
**WAIT for user confirmation or adjustments.**
|
|
540
543
|
|
|
541
544
|
If user adjusts: revise proposal and confirm again before proceeding.
|
|
542
545
|
|
|
@@ -544,6 +547,16 @@ If user adjusts: revise proposal and confirm again before proceeding.
|
|
|
544
547
|
|
|
545
548
|
---
|
|
546
549
|
|
|
550
|
+
### BDD Step Definition Constraints (ENFORCED)
|
|
551
|
+
|
|
552
|
+
Before writing any step definitions, read `templates/bdd-guidance.md`. BANNED in step defs: `setTimeout`/`sleep`, module-level `let`/`var`, raw SQL, assertions in Given/When, loops/branching, self-fulfilling mocks (setting state then asserting it). Steps must be 1-5 lines calling one helper via Cucumber World (`this`). Read `features/support/helpers/` and reuse before creating.
|
|
553
|
+
|
|
554
|
+
**Scaffolding:** If `features/support/helpers/` does not exist in the project, scaffold it before writing step definitions. Copy `templates/bdd-scaffolding/wait.js` to `features/support/helpers/wait.js` and `templates/bdd-scaffolding/world.js` to `features/support/world.js`.
|
|
555
|
+
|
|
556
|
+
**Helper Reuse:** Before writing step definitions, glob `features/support/helpers/**/*.js` and read each file. Import and call existing helpers in your steps — never duplicate functionality that already exists.
|
|
557
|
+
|
|
558
|
+
---
|
|
559
|
+
|
|
547
560
|
### Step 4: Establish RED Baseline
|
|
548
561
|
|
|
549
562
|
**CRITICAL:** After user confirms, execute autonomously - no permission needed for code changes.
|
|
@@ -568,27 +581,27 @@ This establishes your RED baseline - all or most steps should be failing initial
|
|
|
568
581
|
|
|
569
582
|
**Display RED baseline:**
|
|
570
583
|
```
|
|
571
|
-
|
|
584
|
+
Establishing RED baseline...
|
|
572
585
|
|
|
573
586
|
RED Baseline: 5 of 8 steps failing
|
|
574
587
|
|
|
575
588
|
Failing steps:
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
589
|
+
Given a user is logged in
|
|
590
|
+
When they click the dashboard button
|
|
591
|
+
Then they should see their dashboard
|
|
592
|
+
And the dashboard should show their username
|
|
593
|
+
And the dashboard should show their recent activity
|
|
581
594
|
|
|
582
595
|
First error:
|
|
583
596
|
Step: Given a user is logged in
|
|
584
597
|
Error: Error: login function is not defined
|
|
585
598
|
|
|
586
|
-
|
|
599
|
+
Goal: Make all steps pass
|
|
587
600
|
|
|
588
601
|
Now implementing...
|
|
589
602
|
```
|
|
590
603
|
|
|
591
|
-
|
|
604
|
+
**WORKFLOW CHECKPOINT: RED baseline established**
|
|
592
605
|
|
|
593
606
|
```bash
|
|
594
607
|
jettypod workflow checkpoint <feature-id> --step=4
|
|
@@ -598,9 +611,9 @@ jettypod workflow checkpoint <feature-id> --step=4
|
|
|
598
611
|
|
|
599
612
|
### Step 5: RED→GREEN→REFACTOR Loop
|
|
600
613
|
|
|
601
|
-
|
|
614
|
+
**WORKTREE PATH REQUIRED:** All file writes MUST use the `WORKTREE_PATH` captured after pre-flight validation.
|
|
602
615
|
|
|
603
|
-
|
|
616
|
+
**NOW you may write files** - worktree is locked, approach is confirmed.
|
|
604
617
|
|
|
605
618
|
**Emit gate signal:**
|
|
606
619
|
|
|
@@ -623,23 +636,23 @@ jettypod ui gate implementing --data='{"description":"[speed mode implementation
|
|
|
623
636
|
**Show progress each iteration:**
|
|
624
637
|
```
|
|
625
638
|
━━━ Iteration 3/10 ━━━
|
|
626
|
-
|
|
639
|
+
Unit test: test/dashboard.test.js - sortActivityByDate()
|
|
627
640
|
RED: Test fails - function doesn't exist yet
|
|
628
|
-
|
|
641
|
+
Implementation: src/dashboard.js - added sortActivityByDate()
|
|
629
642
|
GREEN: Unit test passes
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
643
|
+
Running BDD scenarios...
|
|
644
|
+
Progress: 7/8 BDD steps passing
|
|
645
|
+
Newly passing: And activity should be sorted by date
|
|
646
|
+
Next failure: And activity should be filterable
|
|
634
647
|
BDD step: When I filter by category "work"
|
|
635
648
|
```
|
|
636
649
|
|
|
637
650
|
**When GREEN achieved:**
|
|
638
651
|
```
|
|
639
|
-
|
|
652
|
+
GREEN: All success scenarios passing!
|
|
640
653
|
```
|
|
641
654
|
|
|
642
|
-
|
|
655
|
+
**WORKFLOW CHECKPOINT: GREEN achieved**
|
|
643
656
|
|
|
644
657
|
```bash
|
|
645
658
|
jettypod workflow checkpoint <feature-id> --step=5
|
|
@@ -654,7 +667,7 @@ jettypod workflow checkpoint <feature-id> --step=5
|
|
|
654
667
|
**Re-run tests after refactor** to ensure nothing broke.
|
|
655
668
|
|
|
656
669
|
<details>
|
|
657
|
-
<summary><strong
|
|
670
|
+
<summary><strong>TDD Loop Guidelines (click to expand)</strong></summary>
|
|
658
671
|
|
|
659
672
|
**Iteration strategy:**
|
|
660
673
|
- Start with first failing step
|
|
@@ -674,6 +687,8 @@ jettypod workflow checkpoint <feature-id> --step=5
|
|
|
674
687
|
|
|
675
688
|
</details>
|
|
676
689
|
|
|
690
|
+
**Quality Gate:** Before committing, review every `.steps.js` file you wrote or modified. Check for banlist violations: `setTimeout`/`sleep`, module-level `let`/`var`, raw SQL, assertions in Given/When, self-fulfilling mocks, steps longer than 5 lines. Fix violations before proceeding.
|
|
691
|
+
|
|
677
692
|
---
|
|
678
693
|
|
|
679
694
|
### Step 6: Route After Chore Completion
|
|
@@ -696,10 +711,10 @@ sqlite3 .jettypod/work.db "SELECT id, title FROM work_items WHERE parent_id = <f
|
|
|
696
711
|
|
|
697
712
|
```
|
|
698
713
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
699
|
-
|
|
714
|
+
Speed Mode Chore Complete
|
|
700
715
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
701
716
|
|
|
702
|
-
|
|
717
|
+
Success scenarios pass for this chore
|
|
703
718
|
|
|
704
719
|
More speed mode chores remain. Starting next chore:
|
|
705
720
|
#[next-chore-id]: [next-chore-title]
|
|
@@ -741,7 +756,7 @@ If the query returns no remaining chores, proceed to Step 7.
|
|
|
741
756
|
|
|
742
757
|
### Step 7: Transition to Stable Mode
|
|
743
758
|
|
|
744
|
-
|
|
759
|
+
**CRITICAL: This step ONLY runs after ALL speed chores are complete.**
|
|
745
760
|
|
|
746
761
|
This is the transition from speed mode to stable mode. Follow these phases in order.
|
|
747
762
|
|
|
@@ -821,42 +836,95 @@ jettypod work cleanup [current-chore-id]
|
|
|
821
836
|
|
|
822
837
|
After cleanup, you are on main branch. Ready to generate stable mode scenarios.
|
|
823
838
|
|
|
824
|
-
#### Step 7C:
|
|
839
|
+
#### Step 7C: Present Stable Mode Scenarios for Review
|
|
840
|
+
|
|
841
|
+
**FORBIDDEN: Writing Files at This Step**
|
|
842
|
+
```
|
|
843
|
+
Write tool to any path
|
|
844
|
+
Edit tool to any path
|
|
845
|
+
Any file creation or modification
|
|
846
|
+
```
|
|
847
|
+
**This is a PROPOSAL step.** File writes happen in Step 7D after user confirmation.
|
|
825
848
|
|
|
826
|
-
|
|
849
|
+
**ASYNC BOUNDARY - Must wait for user confirmation**
|
|
827
850
|
|
|
828
|
-
**1.
|
|
851
|
+
**1. Read the feature's scenario file and analyze for stable mode needs:**
|
|
829
852
|
|
|
830
|
-
|
|
853
|
+
```bash
|
|
854
|
+
sqlite3 .jettypod/work.db "SELECT id, title, scenario_file FROM work_items WHERE id = <feature-id>"
|
|
831
855
|
```
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
856
|
+
|
|
857
|
+
**2. Generate stable mode BDD scenarios** covering:
|
|
858
|
+
- **Error scenarios** - Invalid input, missing params, system errors, permission failures
|
|
859
|
+
- **Edge cases** - Empty inputs, boundary values, special characters
|
|
860
|
+
- **State consistency** - Concurrent ops, partial failures, invalid state transitions
|
|
861
|
+
|
|
862
|
+
**3. Present proposed scenarios to user for review:**
|
|
863
|
+
|
|
835
864
|
```
|
|
836
|
-
|
|
865
|
+
Stable Mode Scenarios
|
|
866
|
+
|
|
867
|
+
I've drafted [N] stable mode scenarios covering error handling and edge cases.
|
|
868
|
+
Please review — these are the contract for what stable mode will implement.
|
|
869
|
+
|
|
870
|
+
**Error Handling:**
|
|
871
|
+
|
|
872
|
+
Scenario: [Error scenario title]
|
|
873
|
+
Given [context]
|
|
874
|
+
When [error condition]
|
|
875
|
+
Then [expected error handling]
|
|
876
|
+
|
|
877
|
+
Scenario: [Error scenario title]
|
|
878
|
+
Given [context]
|
|
879
|
+
When [error condition]
|
|
880
|
+
Then [expected error handling]
|
|
881
|
+
|
|
882
|
+
**Edge Cases:**
|
|
883
|
+
|
|
884
|
+
Scenario: [Edge case title]
|
|
885
|
+
Given [context]
|
|
886
|
+
When [edge case input]
|
|
887
|
+
Then [expected behavior]
|
|
888
|
+
|
|
889
|
+
Does this capture the error handling and edge cases correctly?
|
|
890
|
+
Any scenarios to add, change, or remove?
|
|
891
|
+
```
|
|
892
|
+
|
|
893
|
+
**WAIT for user confirmation or adjustments.**
|
|
894
|
+
|
|
895
|
+
If user requests changes, revise the scenarios and re-present until confirmed.
|
|
896
|
+
|
|
897
|
+
**WORKFLOW CHECKPOINT: Stable mode scenarios confirmed**
|
|
837
898
|
|
|
838
899
|
```bash
|
|
839
|
-
jettypod
|
|
900
|
+
jettypod workflow checkpoint <feature-id> --step=7C
|
|
840
901
|
```
|
|
841
902
|
|
|
842
|
-
|
|
903
|
+
#### Step 7D: Write and Merge Stable Mode Scenarios
|
|
843
904
|
|
|
844
|
-
|
|
845
|
-
- ✅ `/path/to/.jettypod-work/tests-42-login/features/login.feature`
|
|
846
|
-
- ❌ `features/login.feature` (this would write to main repo!)
|
|
905
|
+
**After user confirms scenarios, execute autonomously.**
|
|
847
906
|
|
|
848
|
-
**
|
|
907
|
+
**1. Create a test worktree for writing stable mode scenarios:**
|
|
908
|
+
|
|
909
|
+
**FORBIDDEN: Manual Git Worktree Commands**
|
|
910
|
+
```
|
|
911
|
+
git worktree add ...
|
|
912
|
+
git checkout -b tests/...
|
|
913
|
+
git branch tests/...
|
|
914
|
+
```
|
|
915
|
+
**ALWAYS use jettypod commands** - they handle branch naming, path conventions, database tracking, and cleanup. Manual git commands will create orphaned worktrees that break the merge workflow.
|
|
849
916
|
|
|
850
917
|
```bash
|
|
851
|
-
|
|
918
|
+
jettypod work tests <feature-id>
|
|
852
919
|
```
|
|
853
920
|
|
|
854
|
-
|
|
855
|
-
- **Error scenarios** - Invalid input, missing params, system errors, permission failures
|
|
856
|
-
- **Edge cases** - Empty inputs, boundary values, special characters
|
|
857
|
-
- **State consistency** - Concurrent ops, partial failures, invalid state transitions
|
|
921
|
+
This creates an isolated worktree at `.jettypod-work/tests-<id>-<slug>` with branch `tests/feature-<id>-<slug>`.
|
|
858
922
|
|
|
859
|
-
**
|
|
923
|
+
**CRITICAL:** All BDD file operations MUST use absolute paths in the test worktree:
|
|
924
|
+
- `/path/to/.jettypod-work/tests-42-login/features/login.feature`
|
|
925
|
+
- `features/login.feature` (this would write to main repo!)
|
|
926
|
+
|
|
927
|
+
**2. Append confirmed scenarios to the feature file IN THE TEST WORKTREE:**
|
|
860
928
|
|
|
861
929
|
Use the Edit tool to append to `<worktree-path>/features/<feature-file>`:
|
|
862
930
|
|
|
@@ -874,11 +942,11 @@ Scenario: [Edge case title]
|
|
|
874
942
|
Then [expected behavior]
|
|
875
943
|
```
|
|
876
944
|
|
|
877
|
-
**
|
|
945
|
+
**3. Create step definitions IN THE TEST WORKTREE** at `<worktree-path>/features/step_definitions/<feature-slug>-stable.steps.js`
|
|
878
946
|
|
|
879
|
-
**
|
|
947
|
+
**4. Commit and merge the test worktree:**
|
|
880
948
|
|
|
881
|
-
|
|
949
|
+
**CRITICAL: Shell CWD Corruption Prevention**
|
|
882
950
|
|
|
883
951
|
The merge will delete the test worktree. If your shell is inside that worktree, ALL subsequent commands will fail. You MUST:
|
|
884
952
|
1. Chain the cd and merge in a SINGLE bash command
|
|
@@ -911,14 +979,16 @@ pwd && ls .jettypod # verify
|
|
|
911
979
|
jettypod work cleanup <feature-id>
|
|
912
980
|
```
|
|
913
981
|
|
|
914
|
-
|
|
982
|
+
#### Step 7E: Propose Stable Mode Chores
|
|
915
983
|
|
|
916
|
-
|
|
917
|
-
📋 Stable Mode Transition
|
|
984
|
+
**ASYNC BOUNDARY - Must wait for user confirmation**
|
|
918
985
|
|
|
919
|
-
|
|
986
|
+
**Present chore proposals to user:**
|
|
987
|
+
|
|
988
|
+
```
|
|
989
|
+
Stable Mode Chores
|
|
920
990
|
|
|
921
|
-
Here are the chores needed to make
|
|
991
|
+
Scenarios are committed. Here are the chores needed to make them pass:
|
|
922
992
|
|
|
923
993
|
**Chore 1: [Title]**
|
|
924
994
|
- Why: [What gap this fills]
|
|
@@ -933,9 +1003,9 @@ Here are the chores needed to make these scenarios pass:
|
|
|
933
1003
|
Sound good? I'll create these chores once you confirm.
|
|
934
1004
|
```
|
|
935
1005
|
|
|
936
|
-
|
|
1006
|
+
**WAIT for user confirmation or adjustments.**
|
|
937
1007
|
|
|
938
|
-
#### Step
|
|
1008
|
+
#### Step 7F: Create Chores and Complete Transition
|
|
939
1009
|
|
|
940
1010
|
**After user confirms, execute autonomously:**
|
|
941
1011
|
|
|
@@ -945,15 +1015,26 @@ Sound good? I'll create these chores once you confirm.
|
|
|
945
1015
|
jettypod work set-mode <feature-id> stable
|
|
946
1016
|
```
|
|
947
1017
|
|
|
948
|
-
|
|
1018
|
+
**CRITICAL:** You MUST set mode to stable BEFORE creating chores. The system blocks chore creation while feature is in speed mode.
|
|
949
1019
|
|
|
950
1020
|
**2. Create stable mode chores:**
|
|
951
1021
|
|
|
1022
|
+
For each confirmed chore, use the **Write** tool to create `/tmp/jettypod-create.json`:
|
|
1023
|
+
```json
|
|
1024
|
+
{
|
|
1025
|
+
"type": "chore",
|
|
1026
|
+
"title": "[Chore title]",
|
|
1027
|
+
"description": "[Description with scenarios addressed]",
|
|
1028
|
+
"parent": <feature-id>
|
|
1029
|
+
}
|
|
1030
|
+
```
|
|
1031
|
+
|
|
1032
|
+
Then run via **Bash**:
|
|
952
1033
|
```bash
|
|
953
|
-
jettypod work create
|
|
1034
|
+
jettypod work create --from=/tmp/jettypod-create.json
|
|
954
1035
|
```
|
|
955
1036
|
|
|
956
|
-
Repeat for each confirmed chore. **Do NOT
|
|
1037
|
+
Repeat for each confirmed chore. **Do NOT add a `mode` field** - chores inherit mode from their parent feature.
|
|
957
1038
|
|
|
958
1039
|
**3. Release merge lock (CRITICAL: separate Bash calls):**
|
|
959
1040
|
|
|
@@ -965,7 +1046,7 @@ cd <main-repo> # Bash call 1
|
|
|
965
1046
|
jettypod work merge <last-chore-id> --release-lock # Bash call 2
|
|
966
1047
|
```
|
|
967
1048
|
|
|
968
|
-
|
|
1049
|
+
**WORKFLOW COMPLETE: Speed mode finished**
|
|
969
1050
|
|
|
970
1051
|
Mark speed mode as complete (this passes the `speed_mode_complete` gate, enabling stable-mode):
|
|
971
1052
|
|
|
@@ -979,9 +1060,9 @@ jettypod workflow complete speed-mode <feature-id>
|
|
|
979
1060
|
jettypod ui gate complete --data='{"summary":"Speed mode complete - transitioning to stable mode","files":["[files implemented]"]}'
|
|
980
1061
|
```
|
|
981
1062
|
|
|
982
|
-
#### Step
|
|
1063
|
+
#### Step 7G: Start First Stable Chore and Invoke Stable Mode Skill
|
|
983
1064
|
|
|
984
|
-
|
|
1065
|
+
**CRITICAL HANDOFF - You MUST start the first chore BEFORE invoking stable-mode.**
|
|
985
1066
|
|
|
986
1067
|
**1. Get the first stable chore:**
|
|
987
1068
|
|
|
@@ -997,12 +1078,12 @@ Note: Chores don't have a `mode` column - they inherit context from their parent
|
|
|
997
1078
|
jettypod work start <first-stable-chore-id>
|
|
998
1079
|
```
|
|
999
1080
|
|
|
1000
|
-
|
|
1081
|
+
**STOP AND CHECK:** Look at the output. You should see:
|
|
1001
1082
|
```
|
|
1002
|
-
|
|
1083
|
+
Created worktree: /path/to/.jettypod-work/[id]-[title-slug]
|
|
1003
1084
|
```
|
|
1004
1085
|
|
|
1005
|
-
If you see
|
|
1086
|
+
If you see `Working in main repository (worktree creation failed)`, fix the issue before continuing.
|
|
1006
1087
|
|
|
1007
1088
|
**3. Verify worktree exists:**
|
|
1008
1089
|
|
|
@@ -1016,21 +1097,21 @@ If empty, **STOP** - worktree wasn't created properly.
|
|
|
1016
1097
|
|
|
1017
1098
|
```
|
|
1018
1099
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1019
|
-
|
|
1100
|
+
Speed Mode Complete! Transitioning to Stable Mode
|
|
1020
1101
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
1021
1102
|
|
|
1022
|
-
|
|
1103
|
+
CRITICAL: Speed mode is ONLY a checkpoint.
|
|
1023
1104
|
The feature is INCOMPLETE without stable mode.
|
|
1024
1105
|
|
|
1025
1106
|
What we accomplished:
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1107
|
+
All speed mode chores complete
|
|
1108
|
+
Generated [N] stable mode BDD scenarios
|
|
1109
|
+
Created step definitions for stable scenarios
|
|
1110
|
+
Created [N] stable mode chores
|
|
1111
|
+
Feature mode set to stable
|
|
1112
|
+
Started first stable chore #[id]
|
|
1032
1113
|
|
|
1033
|
-
|
|
1114
|
+
Now invoking stable-mode skill...
|
|
1034
1115
|
```
|
|
1035
1116
|
|
|
1036
1117
|
**5. Invoke stable-mode:**
|
|
@@ -1039,7 +1120,7 @@ What we accomplished:
|
|
|
1039
1120
|
Use the Skill tool with skill: "stable-mode"
|
|
1040
1121
|
```
|
|
1041
1122
|
|
|
1042
|
-
|
|
1123
|
+
**CRITICAL:** You MUST:
|
|
1043
1124
|
1. Run `work start` for the first stable chore
|
|
1044
1125
|
2. Verify the worktree was created
|
|
1045
1126
|
3. THEN invoke stable-mode using the Skill tool
|
|
@@ -1097,12 +1178,12 @@ jettypod work cleanup <feature-id> # Clean up worktree
|
|
|
1097
1178
|
jettypod work set-mode <feature-id> stable
|
|
1098
1179
|
```
|
|
1099
1180
|
|
|
1100
|
-
**Create chores (AFTER setting mode):**
|
|
1181
|
+
**Create chores (AFTER setting mode) — use Write tool for JSON, then:**
|
|
1101
1182
|
```bash
|
|
1102
|
-
jettypod work create
|
|
1183
|
+
jettypod work create --from=/tmp/jettypod-create.json
|
|
1103
1184
|
```
|
|
1104
|
-
Note: Do NOT
|
|
1185
|
+
Note: Do NOT add `mode` field in JSON - chores inherit mode from parent feature.
|
|
1105
1186
|
|
|
1106
|
-
|
|
1187
|
+
**DO NOT use these to complete chores:**
|
|
1107
1188
|
- `jettypod work status <id> done`
|
|
1108
1189
|
- `jettypod work complete <id>`
|