jettypod 4.4.118 → 4.4.121

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 (240) hide show
  1. package/.env +4 -3
  2. package/Cargo.lock +6450 -0
  3. package/Cargo.toml +35 -0
  4. package/README.md +5 -1
  5. package/TAURI-MIGRATION-PLAN.md +840 -0
  6. package/apps/dashboard/app/connect-claude/page.tsx +5 -6
  7. package/apps/dashboard/app/decision/[id]/page.tsx +63 -58
  8. package/apps/dashboard/app/demo/gates/page.tsx +43 -45
  9. package/apps/dashboard/app/design-system/page.tsx +868 -0
  10. package/apps/dashboard/app/globals.css +80 -4
  11. package/apps/dashboard/app/install-claude/page.tsx +4 -6
  12. package/apps/dashboard/app/login/page.tsx +72 -54
  13. package/apps/dashboard/app/page.tsx +101 -48
  14. package/apps/dashboard/app/settings/page.tsx +61 -13
  15. package/apps/dashboard/app/signup/page.tsx +242 -0
  16. package/apps/dashboard/app/subscribe/page.tsx +0 -2
  17. package/apps/dashboard/app/tests/page.tsx +37 -4
  18. package/apps/dashboard/app/welcome/page.tsx +13 -16
  19. package/apps/dashboard/app/work/[id]/page.tsx +117 -118
  20. package/apps/dashboard/app/work/[id]/proof/page.tsx +1489 -0
  21. package/apps/dashboard/components/AppShell.tsx +92 -85
  22. package/apps/dashboard/components/CardMenu.tsx +45 -12
  23. package/apps/dashboard/components/ClaudePanel.tsx +771 -850
  24. package/apps/dashboard/components/ClaudePanelInput.tsx +43 -15
  25. package/apps/dashboard/components/ConnectClaudeScreen.tsx +17 -34
  26. package/apps/dashboard/components/CopyableId.tsx +3 -4
  27. package/apps/dashboard/components/DetailReviewActions.tsx +100 -0
  28. package/apps/dashboard/components/DragContext.tsx +134 -63
  29. package/apps/dashboard/components/DraggableCard.tsx +3 -5
  30. package/apps/dashboard/components/DropZone.tsx +6 -7
  31. package/apps/dashboard/components/EditableDetailDescription.tsx +7 -13
  32. package/apps/dashboard/components/EditableDetailTitle.tsx +6 -13
  33. package/apps/dashboard/components/EditableTitle.tsx +26 -7
  34. package/apps/dashboard/components/ElapsedTimer.tsx +66 -0
  35. package/apps/dashboard/components/EpicGroup.tsx +359 -0
  36. package/apps/dashboard/components/GateCard.tsx +79 -17
  37. package/apps/dashboard/components/GateChoiceCard.tsx +15 -18
  38. package/apps/dashboard/components/InstallClaudeScreen.tsx +15 -32
  39. package/apps/dashboard/components/JettyLoader.tsx +37 -0
  40. package/apps/dashboard/components/KanbanBoard.tsx +368 -958
  41. package/apps/dashboard/components/KanbanCard.tsx +740 -0
  42. package/apps/dashboard/components/LazyCard.tsx +62 -0
  43. package/apps/dashboard/components/LazyMarkdown.tsx +11 -0
  44. package/apps/dashboard/components/MainNav.tsx +38 -73
  45. package/apps/dashboard/components/MessageBlock.tsx +468 -0
  46. package/apps/dashboard/components/ModeStartCard.tsx +15 -16
  47. package/apps/dashboard/components/OnboardingWelcome.tsx +213 -0
  48. package/apps/dashboard/components/PlaceholderCard.tsx +3 -4
  49. package/apps/dashboard/components/ProjectSwitcher.tsx +30 -30
  50. package/apps/dashboard/components/PrototypeTimeline.tsx +72 -51
  51. package/apps/dashboard/components/RealTimeKanbanWrapper.tsx +406 -388
  52. package/apps/dashboard/components/RealTimeTestsWrapper.tsx +373 -235
  53. package/apps/dashboard/components/ReviewFooter.tsx +139 -0
  54. package/apps/dashboard/components/SessionList.tsx +19 -19
  55. package/apps/dashboard/components/SubscribeContent.tsx +91 -47
  56. package/apps/dashboard/components/TestTree.tsx +16 -16
  57. package/apps/dashboard/components/TipCard.tsx +16 -17
  58. package/apps/dashboard/components/Toast.tsx +5 -6
  59. package/apps/dashboard/components/TypeIcon.tsx +55 -0
  60. package/apps/dashboard/components/ViewModeToolbar.tsx +104 -0
  61. package/apps/dashboard/components/WaveCompletionAnimation.tsx +52 -65
  62. package/apps/dashboard/components/WelcomeScreen.tsx +19 -35
  63. package/apps/dashboard/components/WorkItemHeader.tsx +4 -5
  64. package/apps/dashboard/components/WorkItemTree.tsx +11 -32
  65. package/apps/dashboard/components/settings/AccountSection.tsx +55 -35
  66. package/apps/dashboard/components/settings/AiContextSection.tsx +89 -0
  67. package/apps/dashboard/components/settings/ContextDocumentsSection.tsx +317 -0
  68. package/apps/dashboard/components/settings/EnvVarsSection.tsx +74 -152
  69. package/apps/dashboard/components/settings/GeneralSection.tsx +162 -56
  70. package/apps/dashboard/components/settings/ProjectStackSection.tsx +948 -0
  71. package/apps/dashboard/components/settings/SettingsLayout.tsx +4 -5
  72. package/apps/dashboard/components/ui/Button.tsx +104 -0
  73. package/apps/dashboard/components/ui/Input.tsx +78 -0
  74. package/apps/dashboard/components.json +1 -1
  75. package/apps/dashboard/contexts/ClaudeSessionContext.tsx +711 -418
  76. package/apps/dashboard/contexts/ConnectionStatusContext.tsx +25 -5
  77. package/apps/dashboard/contexts/UsageContext.tsx +87 -32
  78. package/apps/dashboard/dev.sh +35 -0
  79. package/apps/dashboard/eslint.config.mjs +9 -9
  80. package/apps/dashboard/hooks/useKanbanAnimation.ts +29 -0
  81. package/apps/dashboard/hooks/useKanbanUndo.ts +83 -0
  82. package/apps/dashboard/hooks/useWebSocket.ts +138 -83
  83. package/apps/dashboard/index.html +73 -0
  84. package/apps/dashboard/lib/constants.ts +43 -0
  85. package/apps/dashboard/lib/data-bridge.ts +722 -0
  86. package/apps/dashboard/lib/db.ts +69 -1265
  87. package/apps/dashboard/lib/environment-config.ts +173 -0
  88. package/apps/dashboard/lib/environment-verification.ts +119 -0
  89. package/apps/dashboard/lib/kanban-utils.ts +270 -0
  90. package/apps/dashboard/lib/proof-run.ts +495 -0
  91. package/apps/dashboard/lib/proof-scenario-runner.ts +346 -0
  92. package/apps/dashboard/lib/run-migrations.js +27 -2
  93. package/apps/dashboard/lib/service-recovery.ts +326 -0
  94. package/apps/dashboard/lib/session-state-machine.ts +1 -0
  95. package/apps/dashboard/lib/session-state-utils.ts +0 -164
  96. package/apps/dashboard/lib/session-stream-manager.ts +308 -134
  97. package/apps/dashboard/lib/shadows.ts +7 -0
  98. package/apps/dashboard/lib/stream-manager-registry.ts +46 -6
  99. package/apps/dashboard/lib/tauri-bridge.ts +102 -0
  100. package/apps/dashboard/lib/tauri.ts +106 -0
  101. package/apps/dashboard/lib/utils.ts +6 -0
  102. package/apps/dashboard/next-env.d.ts +1 -1
  103. package/apps/dashboard/package.json +21 -32
  104. package/apps/dashboard/public/bug-icon.png +0 -0
  105. package/apps/dashboard/public/buoy-icon.png +0 -0
  106. package/apps/dashboard/public/fonts/Satoshi-Variable.woff2 +0 -0
  107. package/apps/dashboard/public/fonts/Satoshi-VariableItalic.woff2 +0 -0
  108. package/apps/dashboard/public/in-flight-seagull.png +0 -0
  109. package/apps/dashboard/public/jetty-icon-loading-alt.svg +11 -0
  110. package/apps/dashboard/public/jetty-icon-loading.svg +11 -0
  111. package/apps/dashboard/public/jettypod_logo.png +0 -0
  112. package/apps/dashboard/public/pier-icon.png +0 -0
  113. package/apps/dashboard/public/star-icon.png +0 -0
  114. package/apps/dashboard/public/wrench-icon.png +0 -0
  115. package/apps/dashboard/scripts/tauri-build.js +228 -0
  116. package/apps/dashboard/scripts/upload-tauri-to-r2.js +125 -0
  117. package/apps/dashboard/scripts/ws-server.js +191 -0
  118. package/apps/dashboard/src/main.tsx +12 -0
  119. package/apps/dashboard/src/router.tsx +107 -0
  120. package/apps/dashboard/src/vite-env.d.ts +1 -0
  121. package/apps/dashboard/tsconfig.json +7 -12
  122. package/apps/dashboard/tsconfig.tsbuildinfo +1 -1
  123. package/apps/dashboard/vite.config.ts +33 -0
  124. package/apps/update-server/src/index.ts +228 -80
  125. package/claude-hooks/global-guardrails.js +14 -13
  126. package/crates/jettypod-cli/Cargo.toml +19 -0
  127. package/crates/jettypod-cli/src/commands.rs +1249 -0
  128. package/crates/jettypod-cli/src/main.rs +595 -0
  129. package/crates/jettypod-core/Cargo.toml +26 -0
  130. package/crates/jettypod-core/build.rs +98 -0
  131. package/crates/jettypod-core/migrations/V1__baseline.sql +197 -0
  132. package/crates/jettypod-core/migrations/V2__work_items_indexes.sql +6 -0
  133. package/crates/jettypod-core/migrations/V3__qa_steps.sql +2 -0
  134. package/crates/jettypod-core/src/auth.rs +294 -0
  135. package/crates/jettypod-core/src/config.rs +397 -0
  136. package/crates/jettypod-core/src/db/mod.rs +507 -0
  137. package/crates/jettypod-core/src/db/recovery.rs +114 -0
  138. package/crates/jettypod-core/src/db/startup.rs +101 -0
  139. package/crates/jettypod-core/src/db/validate.rs +149 -0
  140. package/crates/jettypod-core/src/error.rs +76 -0
  141. package/crates/jettypod-core/src/git.rs +458 -0
  142. package/crates/jettypod-core/src/lib.rs +20 -0
  143. package/crates/jettypod-core/src/sessions.rs +625 -0
  144. package/crates/jettypod-core/src/skills.rs +556 -0
  145. package/crates/jettypod-core/src/work.rs +1086 -0
  146. package/crates/jettypod-core/src/worktree.rs +628 -0
  147. package/crates/jettypod-core/src/ws.rs +767 -0
  148. package/cucumber-test.cjs +6 -0
  149. package/cucumber.js +9 -3
  150. package/docs/COMMAND_REFERENCE.md +34 -0
  151. package/hooks/post-checkout +32 -75
  152. package/hooks/post-merge +111 -10
  153. package/jest.setup.js +1 -0
  154. package/jettypod.js +145 -116
  155. package/lib/bdd-preflight.js +96 -0
  156. package/lib/chore-taxonomy.js +33 -10
  157. package/lib/database.js +36 -16
  158. package/lib/db-watcher.js +1 -1
  159. package/lib/git-hooks/pre-commit +1 -1
  160. package/lib/jettypod-backup.js +27 -4
  161. package/lib/merge-lock.js +111 -253
  162. package/lib/migrations/027-plan-at-creation-column.js +3 -1
  163. package/lib/migrations/029-remove-autoincrement.js +307 -0
  164. package/lib/migrations/029-rename-corrupted-to-cleaned.js +149 -0
  165. package/lib/migrations/030-rejection-round-columns.js +54 -0
  166. package/lib/migrations/031-session-isolation-index.js +17 -0
  167. package/lib/migrations/index.js +47 -4
  168. package/lib/schema.js +10 -5
  169. package/lib/seed-onboarding.js +1 -1
  170. package/lib/update-command/index.js +9 -175
  171. package/lib/work-commands/index.js +144 -19
  172. package/lib/work-tracking/index.js +148 -27
  173. package/lib/worktree-diagnostics.js +16 -16
  174. package/lib/worktree-facade.js +1 -1
  175. package/lib/worktree-manager.js +8 -8
  176. package/lib/worktree-reconciler.js +5 -5
  177. package/package.json +9 -2
  178. package/scripts/ndjson-to-cucumber-json.js +152 -0
  179. package/scripts/postinstall.js +25 -0
  180. package/skills-templates/bug-mode/SKILL.md +79 -20
  181. package/skills-templates/bug-planning/SKILL.md +25 -29
  182. package/skills-templates/chore-mode/SKILL.md +171 -69
  183. package/skills-templates/chore-mode/verification.js +51 -10
  184. package/skills-templates/chore-planning/SKILL.md +47 -18
  185. package/skills-templates/design-system-selection/SKILL.md +273 -0
  186. package/skills-templates/epic-planning/SKILL.md +82 -48
  187. package/skills-templates/external-transition/SKILL.md +47 -47
  188. package/skills-templates/feature-planning/SKILL.md +173 -74
  189. package/skills-templates/production-mode/SKILL.md +69 -49
  190. package/skills-templates/request-routing/SKILL.md +4 -4
  191. package/skills-templates/simple-improvement/SKILL.md +74 -29
  192. package/skills-templates/speed-mode/SKILL.md +217 -141
  193. package/skills-templates/stable-mode/SKILL.md +148 -89
  194. package/apps/dashboard/README.md +0 -36
  195. package/apps/dashboard/app/api/claude/[workItemId]/message/route.ts +0 -386
  196. package/apps/dashboard/app/api/claude/[workItemId]/pin/route.ts +0 -24
  197. package/apps/dashboard/app/api/claude/[workItemId]/route.ts +0 -167
  198. package/apps/dashboard/app/api/claude/sessions/[sessionId]/content/route.ts +0 -52
  199. package/apps/dashboard/app/api/claude/sessions/[sessionId]/message/route.ts +0 -378
  200. package/apps/dashboard/app/api/claude/sessions/[sessionId]/pin/route.ts +0 -24
  201. package/apps/dashboard/app/api/claude/sessions/cleanup/route.ts +0 -34
  202. package/apps/dashboard/app/api/claude/sessions/route.ts +0 -184
  203. package/apps/dashboard/app/api/decisions/[id]/route.ts +0 -25
  204. package/apps/dashboard/app/api/internal/set-project/route.ts +0 -17
  205. package/apps/dashboard/app/api/kanban/route.ts +0 -15
  206. package/apps/dashboard/app/api/settings/env-vars/route.ts +0 -125
  207. package/apps/dashboard/app/api/settings/general/route.ts +0 -21
  208. package/apps/dashboard/app/api/tests/route.ts +0 -9
  209. package/apps/dashboard/app/api/tests/run/route.ts +0 -82
  210. package/apps/dashboard/app/api/tests/run/stream/route.ts +0 -71
  211. package/apps/dashboard/app/api/tests/undefined/route.ts +0 -9
  212. package/apps/dashboard/app/api/usage/route.ts +0 -17
  213. package/apps/dashboard/app/api/work/[id]/description/route.ts +0 -21
  214. package/apps/dashboard/app/api/work/[id]/epic/route.ts +0 -21
  215. package/apps/dashboard/app/api/work/[id]/order/route.ts +0 -21
  216. package/apps/dashboard/app/api/work/[id]/status/route.ts +0 -21
  217. package/apps/dashboard/app/api/work/[id]/title/route.ts +0 -21
  218. package/apps/dashboard/app/layout.tsx +0 -43
  219. package/apps/dashboard/components/UpgradeBanner.tsx +0 -29
  220. package/apps/dashboard/electron/ipc-handlers.js +0 -1028
  221. package/apps/dashboard/electron/main.js +0 -2124
  222. package/apps/dashboard/electron/preload.js +0 -123
  223. package/apps/dashboard/electron/session-manager.js +0 -141
  224. package/apps/dashboard/electron-builder.config.js +0 -357
  225. package/apps/dashboard/hooks/useClaudeSessions.ts +0 -299
  226. package/apps/dashboard/lib/claude-process-manager.ts +0 -492
  227. package/apps/dashboard/lib/db-bridge.ts +0 -282
  228. package/apps/dashboard/lib/prototypes.ts +0 -202
  229. package/apps/dashboard/lib/test-results-db.ts +0 -307
  230. package/apps/dashboard/lib/tests.ts +0 -282
  231. package/apps/dashboard/next.config.js +0 -50
  232. package/apps/dashboard/postcss.config.mjs +0 -7
  233. package/apps/dashboard/public/file.svg +0 -1
  234. package/apps/dashboard/public/globe.svg +0 -1
  235. package/apps/dashboard/public/next.svg +0 -1
  236. package/apps/dashboard/public/vercel.svg +0 -1
  237. package/apps/dashboard/public/window.svg +0 -1
  238. package/apps/dashboard/scripts/download-node.js +0 -104
  239. package/apps/dashboard/scripts/upload-to-r2.js +0 -89
  240. package/docs/bdd-guidance.md +0 -390
@@ -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
 
@@ -212,6 +221,14 @@ Based on [epic name], here are the features I recommend:
212
221
  **Feature 3: [Name]** - [Brief description]
213
222
  ...
214
223
 
224
+ **UX Completeness Check:**
225
+ For each feature above, I've considered:
226
+ - How users discover/reach it (entry point)
227
+ - What they see while waiting (loading states)
228
+ - What they see when there's no data (empty states)
229
+ - What feedback they get after actions (success/error)
230
+ - How screens transition between states
231
+
215
232
  **Questions:**
216
233
  - [Any clarifying questions about scope]
217
234
  - [Missing features to consider]
@@ -252,7 +269,7 @@ When user confirms chores (says "looks good", "yes", lists modifications, etc.),
252
269
 
253
270
  ### Step 4: Architectural Decision (Optional)
254
271
 
255
- **⚠️ SKIP THIS STEP if `IS_TECHNICAL_EPIC = true`** - Technical epics don't need architectural decisions. Go directly to Step 6.
272
+ **SKIP THIS STEP if `IS_TECHNICAL_EPIC = true`** - Technical epics don't need architectural decisions. Go directly to Step 6.
256
273
 
257
274
  After features are defined, ask if this epic needs a shared technical approach.
258
275
 
@@ -284,18 +301,18 @@ Present exactly 3 approaches. Fill in the bracketed parts with actual content ba
284
301
  > Here are 3 different architectural approaches for **[fill in epic title]**:
285
302
  >
286
303
  > **Option 1: [Simple approach - you fill this in]**
287
- > - **Pros**: [2-3 actual advantages]
288
- > - **Cons**: [2-3 actual trade-offs]
304
+ > - **Pros**: [2-3 actual advantages]
305
+ > - **Cons**: [2-3 actual trade-offs]
289
306
  > - **Technical Impact**: [How this affects the features]
290
307
  >
291
308
  > **Option 2: [Balanced approach - you fill this in]**
292
- > - **Pros**: [2-3 actual advantages]
293
- > - **Cons**: [2-3 actual trade-offs]
309
+ > - **Pros**: [2-3 actual advantages]
310
+ > - **Cons**: [2-3 actual trade-offs]
294
311
  > - **Technical Impact**: [How this affects the features]
295
312
  >
296
313
  > **Option 3: [Advanced approach - you fill this in]**
297
- > - **Pros**: [2-3 actual advantages]
298
- > - **Cons**: [2-3 actual trade-offs]
314
+ > - **Pros**: [2-3 actual advantages]
315
+ > - **Cons**: [2-3 actual trade-offs]
299
316
  > - **Technical Impact**: [How this affects the features]
300
317
  >
301
318
  > Would you like me to create working prototypes to compare these?
@@ -322,10 +339,16 @@ jettypod work prototype start 5 websockets
322
339
 
323
340
  This creates a worktree at `.jettypod-work/prototype-<id>-<slug>-<approach>/` where prototypes can be safely built and committed.
324
341
 
325
- **🛑 STOP AND CHECK:** Verify worktree was created successfully before proceeding.
342
+ **STOP AND CHECK:** Verify worktree was created successfully before proceeding.
326
343
 
327
344
  **Sub-step 2: Build prototypes in the worktree**
328
345
 
346
+ **Design system check:** Before building, check if a design system directory is configured:
347
+ ```bash
348
+ node -e "const c=JSON.parse(require('fs').readFileSync('.jettypod/config.json','utf-8')); c.designSystemDir && console.log(c.designSystemDir)"
349
+ ```
350
+ If a path is returned, read the files in that directory and apply the project's design tokens (colors, typography, spacing, border radii, component patterns) to all prototypes.
351
+
329
352
  1. Build prototypes using **absolute paths** to the worktree:
330
353
  - `<worktree_path>/prototypes/epic-${EPIC_ID}-${APPROACH_NAME}/`
331
354
  2. Build 2-3 working prototypes demonstrating the architectural difference
@@ -380,24 +403,30 @@ jettypod backlog
380
403
 
381
404
  **If `IS_TECHNICAL_EPIC = true`:** Create chores
382
405
 
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}
406
+ For each chore the user agreed on, use the **Write** tool to create `/tmp/jettypod-create.json`:
407
+ ```json
408
+ {
409
+ "type": "chore",
410
+ "title": "${CHORE_TITLE}",
411
+ "description": "${CHORE_DESCRIPTION}",
412
+ "parent": ${EPIC_ID}
413
+ }
387
414
  ```
388
415
 
389
- **Example** (if epic ID is 5):
416
+ Then run via **Bash**:
390
417
  ```bash
391
- jettypod work create chore "Migrate auth module to ESM" "Convert require() to import in auth/" --parent=5
418
+ jettypod work create --from=/tmp/jettypod-create.json
392
419
  ```
393
420
 
421
+ **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`.
422
+
394
423
  After each successful creation, emit gate signal and tell the user:
395
424
 
396
425
  ```bash
397
426
  jettypod ui gate work-created --data='{"id":[id],"title":"[chore title]"}'
398
427
  ```
399
428
 
400
- > Created Chore #[id from output]: [title]
429
+ > Created Chore #[id from output]: [title]
401
430
 
402
431
  **Then skip to Step 7** (no architectural decision for technical epics).
403
432
 
@@ -405,24 +434,30 @@ jettypod ui gate work-created --data='{"id":[id],"title":"[chore title]"}'
405
434
 
406
435
  **If `IS_TECHNICAL_EPIC = false`:** Create features
407
436
 
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}
437
+ For each feature the user agreed on, use the **Write** tool to create `/tmp/jettypod-create.json`:
438
+ ```json
439
+ {
440
+ "type": "feature",
441
+ "title": "${FEATURE_TITLE}",
442
+ "description": "${FEATURE_DESCRIPTION}",
443
+ "parent": ${EPIC_ID}
444
+ }
412
445
  ```
413
446
 
414
- **Example** (if epic ID is 5):
447
+ Then run via **Bash**:
415
448
  ```bash
416
- jettypod work create feature "Live cursor tracking" "Track cursor positions in real-time" --parent=5
449
+ jettypod work create --from=/tmp/jettypod-create.json
417
450
  ```
418
451
 
452
+ **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`.
453
+
419
454
  After each successful creation, emit gate signal and tell the user:
420
455
 
421
456
  ```bash
422
457
  jettypod ui gate work-created --data='{"id":[id],"title":"[feature title]"}'
423
458
  ```
424
459
 
425
- > Created Feature #[id from output]: [title]
460
+ > Created Feature #[id from output]: [title]
426
461
 
427
462
  #### Step 6B: Record Architectural Decision (Conditional)
428
463
 
@@ -455,7 +490,7 @@ jettypod work epic-implement 5 --aspect="Architecture" --decision="WebSockets wi
455
490
  ```
456
491
 
457
492
  After success, tell the user:
458
- > Architectural decision recorded
493
+ > Architectural decision recorded
459
494
 
460
495
  ---
461
496
 
@@ -474,13 +509,13 @@ Based on the output, recommend which item to plan first.
474
509
 
475
510
  **Say to user:**
476
511
  > ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
477
- > 🎯 Epic Planning Complete!
512
+ > Epic Planning Complete!
478
513
  > ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
479
514
  >
480
515
  > Created under this epic:
481
516
  > [List the actual items from the children command output]
482
517
  >
483
- > 💡 Recommendation: Start with Feature #[actual id] ([actual title])
518
+ > Recommendation: Start with Feature #[actual id] ([actual title])
484
519
  > [Your reasoning - e.g., "It's foundational - other features depend on it."]
485
520
  >
486
521
  > Plan this one now? [yes / pick different / done for now]
@@ -526,9 +561,9 @@ Display a numbered list of all created items:
526
561
  ```
527
562
  Which item would you like to plan?
528
563
 
529
- 1. Feature #[id]: [title]
530
- 2. Feature #[id]: [title]
531
- 3. 🔧 Chore #[id]: [title]
564
+ 1. Feature #[id]: [title]
565
+ 2. Feature #[id]: [title]
566
+ 3. Chore #[id]: [title]
532
567
 
533
568
  Enter the number of your choice:
534
569
  ```
@@ -558,7 +593,7 @@ Chores:
558
593
  Or run: jettypod backlog to see all items.
559
594
  ```
560
595
 
561
- **🔄 WORKFLOW INTEGRATION: Complete workflow**
596
+ **WORKFLOW INTEGRATION: Complete workflow**
562
597
 
563
598
  ```bash
564
599
  jettypod workflow complete epic-planning <epic-id>
@@ -593,18 +628,18 @@ Epic: "Real-time Collaboration"
593
628
  **Architectural approaches suggested:**
594
629
 
595
630
  **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
631
+ - **Pros**: Simple, works with all proxies, uses existing HTTP infrastructure
632
+ - **Cons**: Higher latency (1-2s), more server load, inefficient for high-frequency updates
598
633
  - **Technical Impact**: Each feature polls independently, easy to implement per feature
599
634
 
600
635
  **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)
636
+ - **Pros**: Lightweight, auto-reconnection, efficient one-way streaming
637
+ - **Cons**: One-direction only (server→client), limited browser connections (6 per domain)
603
638
  - **Technical Impact**: Good for cursor/presence, requires separate POST for edits
604
639
 
605
640
  **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
641
+ - **Pros**: Bidirectional, low latency (<100ms), perfect for real-time, fallback support
642
+ - **Cons**: More complex infrastructure, requires sticky sessions, WebSocket proxies needed
608
643
  - **Technical Impact**: All features use unified connection, best UX but infrastructure complexity
609
644
 
610
645
  **Additional approaches considered:**
@@ -657,13 +692,12 @@ Epic: "Migrate Codebase from CommonJS to ESM"
657
692
 
658
693
  **Architectural decision:** Skipped (not needed for technical work)
659
694
 
660
- **Commands run:**
695
+ **Commands run (Write tool + Bash for each):**
661
696
  ```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
697
+ # For each chore: Write JSON to /tmp/jettypod-create.json, then:
698
+ jettypod work create --from=/tmp/jettypod-create.json
699
+ # Repeated for: Migrate utility modules, Migrate lib modules,
700
+ # Migrate core business logic, Update build configuration, Update test configuration
667
701
  ```
668
702
 
669
703
  **Routing:** All chores route to `chore-planning` → `chore-mode` (no mode progression)
@@ -31,7 +31,7 @@ Say to the user:
31
31
  ```
32
32
  You're ready to transition to external state. Here's what that means:
33
33
 
34
- 🏗️ **Infrastructure Work Items Will Be Created:**
34
+ **Infrastructure Work Items Will Be Created:**
35
35
 
36
36
  I'll create an "Infrastructure Readiness" epic with 15 work items across 4 categories:
37
37
 
@@ -58,7 +58,7 @@ I'll create an "Infrastructure Readiness" epic with 15 work items across 4 categ
58
58
  - Data retention policy
59
59
  - Security headers implemented
60
60
 
61
- 📦 **Production Chores Will Be Generated:**
61
+ **Production Chores Will Be Generated:**
62
62
 
63
63
  For each feature currently in stable mode, I'll:
64
64
  • Generate production scenarios from your chosen standards
@@ -68,7 +68,7 @@ For each feature currently in stable mode, I'll:
68
68
 
69
69
  This uses your feature's BDD scenarios as context for what needs hardening.
70
70
 
71
- ⚠️ **Mode Requirement Changes:**
71
+ **Mode Requirement Changes:**
72
72
 
73
73
  After this transition, ALL customer-facing features MUST be built through Production mode (not Stable).
74
74
 
@@ -83,7 +83,7 @@ Ready to proceed? (yes/no)
83
83
 
84
84
  Wait for the user to respond with "yes" or similar affirmative response.
85
85
 
86
- **🔄 WORKFLOW INTEGRATION: Start workflow tracking**
86
+ **WORKFLOW INTEGRATION: Start workflow tracking**
87
87
 
88
88
  After receiving initial confirmation, register this skill execution:
89
89
 
@@ -103,67 +103,67 @@ After user confirms, explain production standards and show preset options:
103
103
  Before we transition, let's establish your production standards. These define what "production-ready" means for your project and will guide all future production work.
104
104
 
105
105
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
106
- 📋 Choose Your Production Standards Preset
106
+ Choose Your Production Standards Preset
107
107
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
108
108
 
109
- 🚀 **Startup MVP**
109
+ **Startup MVP**
110
110
  Early-stage products, internal tools going external, prototypes with first users
111
111
 
112
112
  Examples: Beta SaaS with first 20 customers, internal tool opened to partners, developer tool in early access, side project gaining traction
113
113
 
114
114
  What you get:
115
- HTTPS/TLS, basic auth, structured logging
116
- Health checks, daily backups (24h RPO)
117
- Single region, 2 instances, 99.0% SLO
118
- No 24/7 on-call, no multi-region
115
+ HTTPS/TLS, basic auth, structured logging
116
+ Health checks, daily backups (24h RPO)
117
+ Single region, 2 instances, 99.0% SLO
118
+ No 24/7 on-call, no multi-region
119
119
 
120
120
  Cost: $200–$500/mo | Time: 1–2 weeks
121
121
 
122
122
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
123
123
 
124
- 🏢 **Production SaaS**
124
+ **Production SaaS**
125
125
  Established SaaS with paying customers, revenue dependency, uptime expectations
126
126
 
127
127
  Examples: B2B SaaS with annual contracts, consumer app with 5k DAU, API service with enterprise customers, e-commerce platform
128
128
 
129
129
  What you get:
130
- WAF + rate limiting, OAuth/OIDC
131
- APM with SLO dashboards, PII sanitization
132
- Zero-downtime deployments, 15min backups
133
- Multi-AZ, on-call rotation, 99.9% SLO
134
- ⚠️ Single region (multi-region optional)
130
+ WAF + rate limiting, OAuth/OIDC
131
+ APM with SLO dashboards, PII sanitization
132
+ Zero-downtime deployments, 15min backups
133
+ Multi-AZ, on-call rotation, 99.9% SLO
134
+ Single region (multi-region optional)
135
135
 
136
136
  Cost: $1.5k–$4k/mo infra + $2k–$3k/mo ops | Time: 4–6 weeks
137
137
 
138
138
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
139
139
 
140
- 🏛️ **Enterprise**
140
+ **Enterprise**
141
141
  Mission-critical systems, large customer base with strict SLAs, Fortune 500 customers
142
142
 
143
143
  Examples: Enterprise SaaS for F500, financial services platform, infrastructure/DevOps tooling, global marketplace
144
144
 
145
145
  What you get:
146
- Everything in Production SaaS, plus:
147
- Multi-region active-passive or active-active
148
- Advanced DDoS, mTLS, per-tenant encryption
149
- SOC2 Type II ready, chaos engineering
150
- PITR backups (1min RPO), 99.95% SLO
146
+ Everything in Production SaaS, plus:
147
+ Multi-region active-passive or active-active
148
+ Advanced DDoS, mTLS, per-tenant encryption
149
+ SOC2 Type II ready, chaos engineering
150
+ PITR backups (1min RPO), 99.95% SLO
151
151
 
152
152
  Cost: $5k–$15k/mo infra + $4k–$8k/mo ops | Time: 8–12 weeks
153
153
 
154
154
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
155
155
 
156
- 🏥 **Regulated (Healthcare, Finance, Gov)**
156
+ **Regulated (Healthcare, Finance, Gov)**
157
157
  Products handling PHI, PCI, FedRAMP - strict compliance mandates, legal liability
158
158
 
159
159
  Examples: Healthcare app (HIPAA), fintech/payments (PCI), government contractor (FedRAMP), legal tech, HR platform
160
160
 
161
161
  What you get:
162
- Everything in Enterprise, plus:
163
- HIPAA/PCI/FedRAMP compliance controls
164
- Encryption at rest/in transit, MFA, PAM
165
- Quarterly pentesting, annual audits
166
- Real-time replication, 99.99% SLO
162
+ Everything in Enterprise, plus:
163
+ HIPAA/PCI/FedRAMP compliance controls
164
+ Encryption at rest/in transit, MFA, PAM
165
+ Quarterly pentesting, annual audits
166
+ Real-time replication, 99.99% SLO
167
167
 
168
168
  Cost: $10k–$30k/mo infra + $6k–$12k/mo ops + $20k–$50k/yr audits | Time: 12–24 weeks
169
169
 
@@ -236,7 +236,7 @@ Then show recommendations to the user:
236
236
 
237
237
  ```
238
238
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
239
- 📋 Recommended Production Standards
239
+ Recommended Production Standards
240
240
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
241
241
 
242
242
  Based on:
@@ -250,33 +250,33 @@ Based on:
250
250
 
251
251
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
252
252
 
253
- SECURITY ([X] standards)
253
+ SECURITY ([X] standards)
254
254
 
255
- [] TLS/HTTPS enforcement
255
+ [] TLS/HTTPS enforcement
256
256
  Why: [reasoning]
257
257
  Test: [acceptance criteria]
258
258
 
259
- [] [Other security standards...]
259
+ [] [Other security standards...]
260
260
 
261
- PERFORMANCE & SCALE ([X] standards)
261
+ PERFORMANCE & SCALE ([X] standards)
262
262
 
263
- [] Performance budgets
263
+ [] Performance budgets
264
264
  Why: [reasoning]
265
265
  Test: [acceptance criteria]
266
266
 
267
- [] [Other scale standards...]
267
+ [] [Other scale standards...]
268
268
 
269
- COMPLIANCE ([X] standards)
269
+ COMPLIANCE ([X] standards)
270
270
 
271
- [] [Compliance standards if applicable]
271
+ [] [Compliance standards if applicable]
272
272
 
273
- INFRASTRUCTURE ([X] standards)
273
+ INFRASTRUCTURE ([X] standards)
274
274
 
275
- [] [Infrastructure standards]
275
+ [] [Infrastructure standards]
276
276
 
277
277
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
278
278
 
279
- 💰 Estimated Cost: $[X]–$[Y]/mo
279
+ Estimated Cost: $[X]–$[Y]/mo
280
280
 
281
281
  Infrastructure: $[range]
282
282
  Operations: $[range]
@@ -284,7 +284,7 @@ Based on:
284
284
 
285
285
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
286
286
 
287
- ⚠️ Warnings (if any)
287
+ Warnings (if any)
288
288
 
289
289
  • [Warning messages for edge cases]
290
290
 
@@ -325,12 +325,12 @@ saveStandards(generatedStandards);
325
325
  Then confirm to user:
326
326
 
327
327
  ```
328
- Production standards saved to .jettypod/production-standards.json
328
+ Production standards saved to .jettypod/production-standards.json
329
329
 
330
330
  These standards will guide all production mode work going forward.
331
331
  ```
332
332
 
333
- **🔄 WORKFLOW CHECKPOINT: Standards saved**
333
+ **WORKFLOW CHECKPOINT: Standards saved**
334
334
 
335
335
  ```bash
336
336
  jettypod workflow checkpoint --step=7
@@ -359,15 +359,15 @@ jettypod project external
359
359
  After the command completes successfully, relay the results to the user:
360
360
 
361
361
  ```
362
- **Transition Complete!**
362
+ **Transition Complete!**
363
363
 
364
364
  Your project is now in external state.
365
365
 
366
- 📦 Created Infrastructure Readiness epic with:
366
+ Created Infrastructure Readiness epic with:
367
367
  • 4 features (Security, Monitoring, Infrastructure, Compliance)
368
368
  • 15 chores across those features
369
369
 
370
- 🔍 Production mode work items are now visible in your backlog.
370
+ Production mode work items are now visible in your backlog.
371
371
 
372
372
  **Next Steps:**
373
373
 
@@ -378,7 +378,7 @@ Your project is now in external state.
378
378
  **Want to start on infrastructure work now?**
379
379
  ```
380
380
 
381
- **🔄 WORKFLOW INTEGRATION: Complete workflow**
381
+ **WORKFLOW INTEGRATION: Complete workflow**
382
382
 
383
383
  ```bash
384
384
  jettypod workflow complete external-transition