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.
Files changed (162) hide show
  1. package/.env +7 -0
  2. package/apps/dashboard/app/api/claude/[workItemId]/message/route.ts +124 -48
  3. package/apps/dashboard/app/api/claude/[workItemId]/route.ts +171 -58
  4. package/apps/dashboard/app/api/claude/sessions/[sessionId]/message/route.ts +161 -10
  5. package/apps/dashboard/app/api/tests/run/stream/route.ts +13 -1
  6. package/apps/dashboard/app/api/usage/route.ts +17 -0
  7. package/apps/dashboard/app/api/work/[id]/route.ts +35 -0
  8. package/apps/dashboard/app/api/work/[id]/status/route.ts +43 -1
  9. package/apps/dashboard/app/connect-claude/page.tsx +24 -0
  10. package/apps/dashboard/app/decision/[id]/page.tsx +14 -14
  11. package/apps/dashboard/app/demo/gates/page.tsx +42 -42
  12. package/apps/dashboard/app/design-system/page.tsx +868 -0
  13. package/apps/dashboard/app/globals.css +6 -2
  14. package/apps/dashboard/app/install-claude/page.tsx +9 -7
  15. package/apps/dashboard/app/layout.tsx +17 -5
  16. package/apps/dashboard/app/login/page.tsx +250 -0
  17. package/apps/dashboard/app/page.tsx +11 -9
  18. package/apps/dashboard/app/settings/page.tsx +4 -2
  19. package/apps/dashboard/app/signup/page.tsx +245 -0
  20. package/apps/dashboard/app/subscribe/page.tsx +11 -0
  21. package/apps/dashboard/app/welcome/page.tsx +24 -1
  22. package/apps/dashboard/app/work/[id]/page.tsx +34 -50
  23. package/apps/dashboard/components/AppShell.tsx +95 -55
  24. package/apps/dashboard/components/CardMenu.tsx +56 -13
  25. package/apps/dashboard/components/ClaudePanel.tsx +301 -582
  26. package/apps/dashboard/components/ClaudePanelInput.tsx +23 -14
  27. package/apps/dashboard/components/ConnectClaudeScreen.tsx +210 -0
  28. package/apps/dashboard/components/CopyableId.tsx +3 -3
  29. package/apps/dashboard/components/DetailReviewActions.tsx +109 -0
  30. package/apps/dashboard/components/DragContext.tsx +75 -65
  31. package/apps/dashboard/components/DraggableCard.tsx +6 -46
  32. package/apps/dashboard/components/DropZone.tsx +2 -2
  33. package/apps/dashboard/components/EditableDetailDescription.tsx +1 -1
  34. package/apps/dashboard/components/EditableTitle.tsx +26 -6
  35. package/apps/dashboard/components/ElapsedTimer.tsx +54 -0
  36. package/apps/dashboard/components/EpicGroup.tsx +329 -0
  37. package/apps/dashboard/components/GateCard.tsx +100 -16
  38. package/apps/dashboard/components/GateChoiceCard.tsx +15 -17
  39. package/apps/dashboard/components/InstallClaudeScreen.tsx +140 -51
  40. package/apps/dashboard/components/JettyLoader.tsx +38 -0
  41. package/apps/dashboard/components/KanbanBoard.tsx +147 -766
  42. package/apps/dashboard/components/KanbanCard.tsx +506 -0
  43. package/apps/dashboard/components/LazyMarkdown.tsx +12 -0
  44. package/apps/dashboard/components/MainNav.tsx +20 -54
  45. package/apps/dashboard/components/MessageBlock.tsx +391 -0
  46. package/apps/dashboard/components/ModeStartCard.tsx +15 -15
  47. package/apps/dashboard/components/OnboardingWelcome.tsx +214 -0
  48. package/apps/dashboard/components/PlaceholderCard.tsx +11 -21
  49. package/apps/dashboard/components/ProjectSwitcher.tsx +36 -8
  50. package/apps/dashboard/components/PrototypeTimeline.tsx +25 -25
  51. package/apps/dashboard/components/RealTimeKanbanWrapper.tsx +265 -301
  52. package/apps/dashboard/components/RealTimeTestsWrapper.tsx +97 -74
  53. package/apps/dashboard/components/ReviewFooter.tsx +141 -0
  54. package/apps/dashboard/components/SessionList.tsx +19 -18
  55. package/apps/dashboard/components/SubscribeContent.tsx +206 -0
  56. package/apps/dashboard/components/TestTree.tsx +15 -14
  57. package/apps/dashboard/components/TipCard.tsx +177 -0
  58. package/apps/dashboard/components/Toast.tsx +5 -5
  59. package/apps/dashboard/components/TypeIcon.tsx +56 -0
  60. package/apps/dashboard/components/UpgradeBanner.tsx +30 -0
  61. package/apps/dashboard/components/WaveCompletionAnimation.tsx +61 -62
  62. package/apps/dashboard/components/WelcomeScreen.tsx +25 -27
  63. package/apps/dashboard/components/WorkItemHeader.tsx +4 -4
  64. package/apps/dashboard/components/WorkItemTree.tsx +9 -28
  65. package/apps/dashboard/components/settings/AccountSection.tsx +169 -0
  66. package/apps/dashboard/components/settings/EnvVarsSection.tsx +54 -79
  67. package/apps/dashboard/components/settings/GeneralSection.tsx +26 -31
  68. package/apps/dashboard/components/settings/SettingsLayout.tsx +4 -4
  69. package/apps/dashboard/components/ui/Button.tsx +104 -0
  70. package/apps/dashboard/components/ui/Input.tsx +78 -0
  71. package/apps/dashboard/contexts/ClaudeSessionContext.tsx +408 -105
  72. package/apps/dashboard/contexts/ConnectionStatusContext.tsx +25 -4
  73. package/apps/dashboard/contexts/UsageContext.tsx +155 -0
  74. package/apps/dashboard/contexts/usageHelpers.js +9 -0
  75. package/apps/dashboard/electron/ipc-handlers.js +281 -88
  76. package/apps/dashboard/electron/main.js +691 -131
  77. package/apps/dashboard/electron/preload.js +25 -4
  78. package/apps/dashboard/electron/session-manager.js +163 -0
  79. package/apps/dashboard/electron-builder.config.js +3 -5
  80. package/apps/dashboard/hooks/useKanbanAnimation.ts +29 -0
  81. package/apps/dashboard/hooks/useKanbanUndo.ts +83 -0
  82. package/apps/dashboard/lib/backlog-parser.ts +50 -0
  83. package/apps/dashboard/lib/claude-process-manager.ts +50 -11
  84. package/apps/dashboard/lib/constants.ts +43 -0
  85. package/apps/dashboard/lib/db-bridge.ts +33 -0
  86. package/apps/dashboard/lib/db.ts +136 -20
  87. package/apps/dashboard/lib/kanban-utils.ts +70 -0
  88. package/apps/dashboard/lib/run-migrations.js +27 -2
  89. package/apps/dashboard/lib/session-state-machine.ts +3 -0
  90. package/apps/dashboard/lib/session-stream-manager.ts +144 -38
  91. package/apps/dashboard/lib/shadows.ts +7 -0
  92. package/apps/dashboard/lib/tests.ts +3 -1
  93. package/apps/dashboard/lib/utils.ts +6 -0
  94. package/apps/dashboard/next.config.js +35 -14
  95. package/apps/dashboard/package.json +6 -3
  96. package/apps/dashboard/public/bug-icon.svg +9 -0
  97. package/apps/dashboard/public/buoy-icon.svg +9 -0
  98. package/apps/dashboard/public/fonts/Satoshi-Variable.woff2 +0 -0
  99. package/apps/dashboard/public/fonts/Satoshi-VariableItalic.woff2 +0 -0
  100. package/apps/dashboard/public/in-flight-seagull.svg +9 -0
  101. package/apps/dashboard/public/jetty-icon-loading-alt.svg +11 -0
  102. package/apps/dashboard/public/jetty-icon-loading.svg +11 -0
  103. package/apps/dashboard/public/jettypod_logo.png +0 -0
  104. package/apps/dashboard/public/pier-icon.svg +14 -0
  105. package/apps/dashboard/public/star-icon.svg +9 -0
  106. package/apps/dashboard/public/wrench-icon.svg +9 -0
  107. package/apps/dashboard/scripts/upload-to-r2.js +89 -0
  108. package/apps/dashboard/scripts/ws-server.js +191 -0
  109. package/apps/dashboard/tsconfig.tsbuildinfo +1 -0
  110. package/apps/update-server/package.json +16 -0
  111. package/apps/update-server/schema.sql +31 -0
  112. package/apps/update-server/src/index.ts +1085 -0
  113. package/apps/update-server/tsconfig.json +16 -0
  114. package/apps/update-server/wrangler.toml +35 -0
  115. package/cucumber.js +9 -3
  116. package/docs/COMMAND_REFERENCE.md +34 -0
  117. package/hooks/post-checkout +32 -75
  118. package/hooks/post-merge +111 -10
  119. package/jest.setup.js +1 -0
  120. package/jettypod.js +54 -116
  121. package/lib/chore-taxonomy.js +33 -10
  122. package/lib/database.js +36 -16
  123. package/lib/db-watcher.js +1 -1
  124. package/lib/git-hooks/pre-commit +1 -1
  125. package/lib/jettypod-backup.js +27 -4
  126. package/lib/migrations/027-plan-at-creation-column.js +33 -0
  127. package/lib/migrations/028-ready-for-review-column.js +27 -0
  128. package/lib/migrations/029-remove-autoincrement.js +307 -0
  129. package/lib/migrations/029-rename-corrupted-to-cleaned.js +149 -0
  130. package/lib/migrations/index.js +47 -4
  131. package/lib/schema.js +13 -6
  132. package/lib/seed-onboarding.js +101 -69
  133. package/lib/update-command/index.js +9 -175
  134. package/lib/work-commands/index.js +129 -16
  135. package/lib/work-tracking/index.js +86 -46
  136. package/lib/worktree-diagnostics.js +16 -16
  137. package/lib/worktree-facade.js +1 -1
  138. package/lib/worktree-manager.js +8 -8
  139. package/lib/worktree-reconciler.js +5 -5
  140. package/package.json +9 -2
  141. package/scripts/ndjson-to-cucumber-json.js +152 -0
  142. package/scripts/postinstall.js +25 -0
  143. package/skills-templates/bug-mode/SKILL.md +39 -28
  144. package/skills-templates/bug-planning/SKILL.md +25 -29
  145. package/skills-templates/chore-mode/SKILL.md +131 -68
  146. package/skills-templates/chore-mode/verification.js +51 -10
  147. package/skills-templates/chore-planning/SKILL.md +47 -18
  148. package/skills-templates/epic-planning/SKILL.md +68 -48
  149. package/skills-templates/external-transition/SKILL.md +47 -47
  150. package/skills-templates/feature-planning/SKILL.md +83 -73
  151. package/skills-templates/production-mode/SKILL.md +49 -49
  152. package/skills-templates/request-routing/SKILL.md +27 -14
  153. package/skills-templates/simple-improvement/SKILL.md +68 -44
  154. package/skills-templates/speed-mode/SKILL.md +209 -128
  155. package/skills-templates/stable-mode/SKILL.md +105 -94
  156. package/templates/bdd-guidance.md +139 -0
  157. package/templates/bdd-scaffolding/wait.js +18 -0
  158. package/templates/bdd-scaffolding/world.js +19 -0
  159. package/.jettypod-backup/work.db +0 -0
  160. package/apps/dashboard/app/access-code/page.tsx +0 -110
  161. package/lib/discovery-checkpoint.js +0 -123
  162. package/skills-templates/project-discovery/SKILL.md +0 -372
@@ -18,7 +18,7 @@ You'll receive context about:
18
18
  - Project context
19
19
  - No parent feature (standalone chores don't have features)
20
20
 
21
- **⚡ FIRST: Detect Technical Epic Ancestry**
21
+ **FIRST: Detect Technical Epic Ancestry**
22
22
 
23
23
  Check if this chore belongs to a **technical epic** (an epic that creates chores directly without features):
24
24
 
@@ -27,7 +27,7 @@ Check if this chore belongs to a **technical epic** (an epic that creates chores
27
27
 
28
28
  **If chore belongs to a technical epic:**
29
29
  - Set `IS_TECHNICAL_EPIC = true`
30
- - Display: `⚡ Technical Epic Chore - no mode progression`
30
+ - Display: `Technical Epic Chore - no mode progression`
31
31
  - This context will be passed to chore-mode
32
32
 
33
33
  **If chore is standalone or under a regular epic:**
@@ -38,7 +38,7 @@ Display:
38
38
 
39
39
  ```
40
40
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
41
- 🔧 Planning Standalone Chore
41
+ Planning Standalone Chore
42
42
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
43
43
 
44
44
  **Chore:** [Title]
@@ -47,7 +47,7 @@ Display:
47
47
  Analyzing chore type...
48
48
  ```
49
49
 
50
- **🔄 WORKFLOW INTEGRATION: Start workflow tracking**
50
+ **WORKFLOW INTEGRATION: Start workflow tracking**
51
51
 
52
52
  After understanding the chore context, register this skill execution:
53
53
 
@@ -71,9 +71,13 @@ Classify the chore by matching keywords in the title and description against the
71
71
  **Classification rules:**
72
72
  - Count keyword matches (exact word boundary matches = 2 points, partial = 1 point)
73
73
  - Highest score wins
74
- - Default to **refactor** if no matches
74
+ - Default to **enhancement** if no matches (behavior-adding is the catch-all)
75
75
  - Confidence: high (4+ points), medium (2-3 points), low (0-1 points)
76
76
 
77
+ **Category distinction:**
78
+ - **Behavior-preserving** (refactor, dependency, cleanup, tooling): Has specific keywords. Runs existing affected tests only. Never writes new tests.
79
+ - **Behavior-adding** (enhancement): The default when no behavior-preserving keywords match. Uses TDD red-green-refactor to write tests first, then implement.
80
+
77
81
  Display:
78
82
 
79
83
  ```
@@ -82,7 +86,7 @@ Display:
82
86
 
83
87
  **If confidence is low:**
84
88
  ```
85
- ⚠️ Low confidence classification. The chore might be:
89
+ Low confidence classification. The chore might be:
86
90
  - [type] - because [reason based on keywords found]
87
91
  - [alternative type] - if [alternative interpretation]
88
92
 
@@ -104,12 +108,12 @@ Based on the classified type, apply this guidance:
104
108
  - Consider breaking into smaller refactors if scope is large
105
109
 
106
110
  *Verification Criteria:*
107
- - All existing tests pass without modification
111
+ - Affected tests pass without modification
108
112
  - No new functionality added (that requires new tests)
109
113
  - Code review confirms behavior preservation
110
114
  - Performance is not degraded
111
115
 
112
- *Test Handling:* Tests required. Run all tests for affected modules before and after. Update test file paths/imports if moved. Do NOT change test assertions - if tests fail, the refactor broke behavior.
116
+ *Test Handling:* Tests required. Run tests for affected and potentially impacted modules. Update test file paths/imports if moved. Do NOT change test assertions - if tests fail, the refactor broke behavior.
113
117
 
114
118
  ---
115
119
 
@@ -122,12 +126,12 @@ Based on the classified type, apply this guidance:
122
126
  - Consider update strategy: one at a time vs batch
123
127
 
124
128
  *Verification Criteria:*
125
- - All tests pass after update
129
+ - Affected and potentially impacted tests pass after update
126
130
  - Application builds successfully
127
131
  - No new deprecation warnings (or documented)
128
132
  - Security vulnerabilities addressed (if security update)
129
133
 
130
- *Test Handling:* Tests not required. Run full test suite to catch regressions. No new tests needed unless migrating to new API patterns. Document any test changes needed due to library API changes.
134
+ *Test Handling:* Tests not required. Run tests for affected and potentially impacted modules to catch regressions. No new tests needed unless migrating to new API patterns. Document any test changes needed due to library API changes.
131
135
 
132
136
  ---
133
137
 
@@ -140,12 +144,12 @@ Based on the classified type, apply this guidance:
140
144
  - Consider impact on git history/blame
141
145
 
142
146
  *Verification Criteria:*
143
- - All tests still pass
147
+ - Affected tests still pass
144
148
  - No broken imports or references
145
149
  - Application runs correctly
146
150
  - Removed code was actually unused
147
151
 
148
- *Test Handling:* Tests not required. Run existing tests to ensure nothing breaks. Remove tests only if they test deleted code. No new tests needed for cleanup work.
152
+ *Test Handling:* Tests not required. Run tests for affected modules to ensure nothing breaks. Remove tests only if they test deleted code. No new tests needed for cleanup work.
149
153
 
150
154
  ---
151
155
 
@@ -167,11 +171,29 @@ Based on the classified type, apply this guidance:
167
171
 
168
172
  ---
169
173
 
174
+ **ENHANCEMENT Guidance:**
175
+
176
+ *Scope Considerations:*
177
+ - Define what new behavior is being added
178
+ - Identify where the behavior integrates with existing code
179
+ - Plan test cases BEFORE writing implementation (TDD)
180
+ - Keep scope focused - one behavior per chore
181
+
182
+ *Verification Criteria:*
183
+ - New tests written BEFORE implementation (TDD red phase)
184
+ - All new tests pass (TDD green phase)
185
+ - Code is clean and well-structured (TDD refactor phase)
186
+ - Existing affected tests still pass
187
+
188
+ *Test Handling:* Tests required - TDD mandatory. Write failing tests first that define the new behavior (RED), then implement minimum code to pass (GREEN), then refactor for cleanliness (REFACTOR). Run affected tests to ensure no regressions.
189
+
190
+ ---
191
+
170
192
  Display the relevant guidance:
171
193
 
172
194
  ```
173
195
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
174
- 📋 [Type] Chore Guidance
196
+ [Type] Chore Guidance
175
197
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
176
198
 
177
199
  **Scope Considerations:**
@@ -243,11 +265,17 @@ Based on the chore type and guidance, analyze what needs to be done:
243
265
  - Identify affected workflows
244
266
  - Review CI/CD impacts
245
267
 
268
+ **For ENHANCEMENT chores:**
269
+ - Identify what new behavior is being added
270
+ - Find integration points with existing code
271
+ - Plan test cases that define the new behavior
272
+ - List affected existing test files
273
+
246
274
  Display analysis:
247
275
 
248
276
  ```
249
277
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
250
- 🔍 Impact Analysis
278
+ Impact Analysis
251
279
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
252
280
 
253
281
  **Files to modify:**
@@ -266,7 +294,7 @@ Based on the analysis, create a focused plan:
266
294
 
267
295
  ```
268
296
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
269
- 📝 Implementation Plan
297
+ Implementation Plan
270
298
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
271
299
 
272
300
  **Step 1:** [First action]
@@ -308,7 +336,7 @@ The chore-mode skill will:
308
336
  3. Run verification steps
309
337
  4. Merge when complete
310
338
 
311
- **🔄 WORKFLOW INTEGRATION: Complete workflow**
339
+ **WORKFLOW INTEGRATION: Complete workflow**
312
340
 
313
341
  Before invoking chore-mode:
314
342
 
@@ -340,10 +368,11 @@ This marks the `chore_planning_complete` gate as passed, enabling chore-mode to
340
368
 
341
369
  | Type | Keywords | Test Handling |
342
370
  |------|----------|---------------|
343
- | refactor | refactor, restructure, extract, rename | Run all tests, don't modify assertions |
344
- | dependency | update, upgrade, bump, migrate | Run full suite, check for deprecations |
371
+ | refactor | refactor, restructure, extract, rename | Run affected tests, don't modify assertions |
372
+ | dependency | update, upgrade, bump, migrate | Run affected + impacted tests, check for deprecations |
345
373
  | cleanup | remove, delete, unused, legacy | Verify no references, run affected tests |
346
374
  | tooling | ci, build, lint, config | Run affected pipelines |
375
+ | enhancement | *(default - no keyword match)* | TDD: write tests first, then implement |
347
376
 
348
377
  ## Validation
349
378
 
@@ -17,7 +17,7 @@ When this skill is activated, you are helping plan an epic. Follow this structur
17
17
 
18
18
  ---
19
19
 
20
- **⚡ FIRST: Detect Technical Epic**
20
+ **FIRST: Detect Technical Epic**
21
21
 
22
22
  Before proceeding, check if this is a **technical epic** by looking for these signals in the request or context passed from request-routing:
23
23
 
@@ -50,7 +50,7 @@ jettypod work status ${EPIC_ID}
50
50
 
51
51
  Capture the title, description, and any existing context.
52
52
 
53
- **🔄 WORKFLOW INTEGRATION: Start workflow tracking**
53
+ **WORKFLOW INTEGRATION: Start workflow tracking**
54
54
 
55
55
  After getting the epic context, register this skill execution:
56
56
 
@@ -109,14 +109,23 @@ I'd like to understand this epic better before suggesting features.
109
109
 
110
110
  **WAIT for user answers.**
111
111
 
112
- Then synthesize into an epic title + description and create:
112
+ Then synthesize into an epic title + description. Use the **Write** tool to create `/tmp/jettypod-create.json`:
113
+ ```json
114
+ {
115
+ "type": "epic",
116
+ "title": "${EPIC_TITLE}",
117
+ "description": "${EPIC_DESCRIPTION}"
118
+ }
119
+ ```
120
+
121
+ Then run via **Bash**:
113
122
  ```bash
114
- jettypod work create epic "${EPIC_TITLE}" "${EPIC_DESCRIPTION}"
123
+ jettypod work create --from=/tmp/jettypod-create.json
115
124
  ```
116
125
 
117
126
  Capture the new epic ID from output.
118
127
 
119
- **🔄 WORKFLOW INTEGRATION: Start workflow tracking**
128
+ **WORKFLOW INTEGRATION: Start workflow tracking**
120
129
 
121
130
  After creating the epic, register this skill execution:
122
131
 
@@ -162,7 +171,7 @@ Fresh start.
162
171
  Previous planning was started but not completed. Present existing decisions:
163
172
 
164
173
  ```
165
- 🎯 **Existing Architectural Decisions for This Epic:**
174
+ **Existing Architectural Decisions for This Epic:**
166
175
 
167
176
  [For each decision:]
168
177
  - **[Aspect]:** [Decision]
@@ -181,7 +190,7 @@ Do these still apply, or should we revisit any?
181
190
  Planning was previously completed or partially completed. Present what exists:
182
191
 
183
192
  ```
184
- 🎯 **This epic already has children:**
193
+ **This epic already has children:**
185
194
 
186
195
  [List features/chores from children command]
187
196
 
@@ -252,7 +261,7 @@ When user confirms chores (says "looks good", "yes", lists modifications, etc.),
252
261
 
253
262
  ### Step 4: Architectural Decision (Optional)
254
263
 
255
- **⚠️ SKIP THIS STEP if `IS_TECHNICAL_EPIC = true`** - Technical epics don't need architectural decisions. Go directly to Step 6.
264
+ **SKIP THIS STEP if `IS_TECHNICAL_EPIC = true`** - Technical epics don't need architectural decisions. Go directly to Step 6.
256
265
 
257
266
  After features are defined, ask if this epic needs a shared technical approach.
258
267
 
@@ -284,18 +293,18 @@ Present exactly 3 approaches. Fill in the bracketed parts with actual content ba
284
293
  > Here are 3 different architectural approaches for **[fill in epic title]**:
285
294
  >
286
295
  > **Option 1: [Simple approach - you fill this in]**
287
- > - **Pros**: [2-3 actual advantages]
288
- > - **Cons**: [2-3 actual trade-offs]
296
+ > - **Pros**: [2-3 actual advantages]
297
+ > - **Cons**: [2-3 actual trade-offs]
289
298
  > - **Technical Impact**: [How this affects the features]
290
299
  >
291
300
  > **Option 2: [Balanced approach - you fill this in]**
292
- > - **Pros**: [2-3 actual advantages]
293
- > - **Cons**: [2-3 actual trade-offs]
301
+ > - **Pros**: [2-3 actual advantages]
302
+ > - **Cons**: [2-3 actual trade-offs]
294
303
  > - **Technical Impact**: [How this affects the features]
295
304
  >
296
305
  > **Option 3: [Advanced approach - you fill this in]**
297
- > - **Pros**: [2-3 actual advantages]
298
- > - **Cons**: [2-3 actual trade-offs]
306
+ > - **Pros**: [2-3 actual advantages]
307
+ > - **Cons**: [2-3 actual trade-offs]
299
308
  > - **Technical Impact**: [How this affects the features]
300
309
  >
301
310
  > Would you like me to create working prototypes to compare these?
@@ -322,7 +331,7 @@ jettypod work prototype start 5 websockets
322
331
 
323
332
  This creates a worktree at `.jettypod-work/prototype-<id>-<slug>-<approach>/` where prototypes can be safely built and committed.
324
333
 
325
- **🛑 STOP AND CHECK:** Verify worktree was created successfully before proceeding.
334
+ **STOP AND CHECK:** Verify worktree was created successfully before proceeding.
326
335
 
327
336
  **Sub-step 2: Build prototypes in the worktree**
328
337
 
@@ -380,24 +389,30 @@ jettypod backlog
380
389
 
381
390
  **If `IS_TECHNICAL_EPIC = true`:** Create chores
382
391
 
383
- For each chore the user agreed on, execute this command:
384
-
385
- ```bash
386
- jettypod work create chore "${CHORE_TITLE}" "${CHORE_DESCRIPTION}" --parent=${EPIC_ID}
392
+ For each chore the user agreed on, use the **Write** tool to create `/tmp/jettypod-create.json`:
393
+ ```json
394
+ {
395
+ "type": "chore",
396
+ "title": "${CHORE_TITLE}",
397
+ "description": "${CHORE_DESCRIPTION}",
398
+ "parent": ${EPIC_ID}
399
+ }
387
400
  ```
388
401
 
389
- **Example** (if epic ID is 5):
402
+ Then run via **Bash**:
390
403
  ```bash
391
- jettypod work create chore "Migrate auth module to ESM" "Convert require() to import in auth/" --parent=5
404
+ jettypod work create --from=/tmp/jettypod-create.json
392
405
  ```
393
406
 
407
+ **Example** (if epic ID is 5): Write `{"type":"chore","title":"Migrate auth module to ESM","description":"Convert require() to import in auth/","parent":5}` to `/tmp/jettypod-create.json`, then run `jettypod work create --from=/tmp/jettypod-create.json`.
408
+
394
409
  After each successful creation, emit gate signal and tell the user:
395
410
 
396
411
  ```bash
397
412
  jettypod ui gate work-created --data='{"id":[id],"title":"[chore title]"}'
398
413
  ```
399
414
 
400
- > Created Chore #[id from output]: [title]
415
+ > Created Chore #[id from output]: [title]
401
416
 
402
417
  **Then skip to Step 7** (no architectural decision for technical epics).
403
418
 
@@ -405,24 +420,30 @@ jettypod ui gate work-created --data='{"id":[id],"title":"[chore title]"}'
405
420
 
406
421
  **If `IS_TECHNICAL_EPIC = false`:** Create features
407
422
 
408
- For each feature the user agreed on, execute this command using the epic ID from Step 1:
409
-
410
- ```bash
411
- jettypod work create feature "${FEATURE_TITLE}" "${FEATURE_DESCRIPTION}" --parent=${EPIC_ID}
423
+ For each feature the user agreed on, use the **Write** tool to create `/tmp/jettypod-create.json`:
424
+ ```json
425
+ {
426
+ "type": "feature",
427
+ "title": "${FEATURE_TITLE}",
428
+ "description": "${FEATURE_DESCRIPTION}",
429
+ "parent": ${EPIC_ID}
430
+ }
412
431
  ```
413
432
 
414
- **Example** (if epic ID is 5):
433
+ Then run via **Bash**:
415
434
  ```bash
416
- jettypod work create feature "Live cursor tracking" "Track cursor positions in real-time" --parent=5
435
+ jettypod work create --from=/tmp/jettypod-create.json
417
436
  ```
418
437
 
438
+ **Example** (if epic ID is 5): Write `{"type":"feature","title":"Live cursor tracking","description":"Track cursor positions in real-time","parent":5}` to `/tmp/jettypod-create.json`, then run `jettypod work create --from=/tmp/jettypod-create.json`.
439
+
419
440
  After each successful creation, emit gate signal and tell the user:
420
441
 
421
442
  ```bash
422
443
  jettypod ui gate work-created --data='{"id":[id],"title":"[feature title]"}'
423
444
  ```
424
445
 
425
- > Created Feature #[id from output]: [title]
446
+ > Created Feature #[id from output]: [title]
426
447
 
427
448
  #### Step 6B: Record Architectural Decision (Conditional)
428
449
 
@@ -455,7 +476,7 @@ jettypod work epic-implement 5 --aspect="Architecture" --decision="WebSockets wi
455
476
  ```
456
477
 
457
478
  After success, tell the user:
458
- > Architectural decision recorded
479
+ > Architectural decision recorded
459
480
 
460
481
  ---
461
482
 
@@ -474,13 +495,13 @@ Based on the output, recommend which item to plan first.
474
495
 
475
496
  **Say to user:**
476
497
  > ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
477
- > 🎯 Epic Planning Complete!
498
+ > Epic Planning Complete!
478
499
  > ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
479
500
  >
480
501
  > Created under this epic:
481
502
  > [List the actual items from the children command output]
482
503
  >
483
- > 💡 Recommendation: Start with Feature #[actual id] ([actual title])
504
+ > Recommendation: Start with Feature #[actual id] ([actual title])
484
505
  > [Your reasoning - e.g., "It's foundational - other features depend on it."]
485
506
  >
486
507
  > Plan this one now? [yes / pick different / done for now]
@@ -526,9 +547,9 @@ Display a numbered list of all created items:
526
547
  ```
527
548
  Which item would you like to plan?
528
549
 
529
- 1. Feature #[id]: [title]
530
- 2. Feature #[id]: [title]
531
- 3. 🔧 Chore #[id]: [title]
550
+ 1. Feature #[id]: [title]
551
+ 2. Feature #[id]: [title]
552
+ 3. Chore #[id]: [title]
532
553
 
533
554
  Enter the number of your choice:
534
555
  ```
@@ -558,7 +579,7 @@ Chores:
558
579
  Or run: jettypod backlog to see all items.
559
580
  ```
560
581
 
561
- **🔄 WORKFLOW INTEGRATION: Complete workflow**
582
+ **WORKFLOW INTEGRATION: Complete workflow**
562
583
 
563
584
  ```bash
564
585
  jettypod workflow complete epic-planning <epic-id>
@@ -593,18 +614,18 @@ Epic: "Real-time Collaboration"
593
614
  **Architectural approaches suggested:**
594
615
 
595
616
  **Option 1: Long Polling (REST)**
596
- - **Pros**: Simple, works with all proxies, uses existing HTTP infrastructure
597
- - **Cons**: Higher latency (1-2s), more server load, inefficient for high-frequency updates
617
+ - **Pros**: Simple, works with all proxies, uses existing HTTP infrastructure
618
+ - **Cons**: Higher latency (1-2s), more server load, inefficient for high-frequency updates
598
619
  - **Technical Impact**: Each feature polls independently, easy to implement per feature
599
620
 
600
621
  **Option 2: Server-Sent Events (SSE)**
601
- - **Pros**: Lightweight, auto-reconnection, efficient one-way streaming
602
- - **Cons**: One-direction only (server→client), limited browser connections (6 per domain)
622
+ - **Pros**: Lightweight, auto-reconnection, efficient one-way streaming
623
+ - **Cons**: One-direction only (server→client), limited browser connections (6 per domain)
603
624
  - **Technical Impact**: Good for cursor/presence, requires separate POST for edits
604
625
 
605
626
  **Option 3: WebSockets (Socket.io)**
606
- - **Pros**: Bidirectional, low latency (<100ms), perfect for real-time, fallback support
607
- - **Cons**: More complex infrastructure, requires sticky sessions, WebSocket proxies needed
627
+ - **Pros**: Bidirectional, low latency (<100ms), perfect for real-time, fallback support
628
+ - **Cons**: More complex infrastructure, requires sticky sessions, WebSocket proxies needed
608
629
  - **Technical Impact**: All features use unified connection, best UX but infrastructure complexity
609
630
 
610
631
  **Additional approaches considered:**
@@ -657,13 +678,12 @@ Epic: "Migrate Codebase from CommonJS to ESM"
657
678
 
658
679
  **Architectural decision:** Skipped (not needed for technical work)
659
680
 
660
- **Commands run:**
681
+ **Commands run (Write tool + Bash for each):**
661
682
  ```bash
662
- jettypod work create chore "Migrate utility modules" "Convert src/utils/ from require() to import" --parent=42
663
- jettypod work create chore "Migrate lib modules" "Convert lib/ from require() to import" --parent=42
664
- jettypod work create chore "Migrate core business logic" "Convert src/core/ from require() to import" --parent=42
665
- jettypod work create chore "Update build configuration" "Update webpack/rollup for ESM output" --parent=42
666
- jettypod work create chore "Update test configuration" "Update Jest config for ESM" --parent=42
683
+ # For each chore: Write JSON to /tmp/jettypod-create.json, then:
684
+ jettypod work create --from=/tmp/jettypod-create.json
685
+ # Repeated for: Migrate utility modules, Migrate lib modules,
686
+ # Migrate core business logic, Update build configuration, Update test configuration
667
687
  ```
668
688
 
669
689
  **Routing:** All chores route to `chore-planning` → `chore-mode` (no mode progression)