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
@@ -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
@@ -11,7 +11,7 @@ Guides Claude through feature planning including UX approach exploration, option
11
11
 
12
12
  When this skill is activated, you are helping discover the best approach for a feature. Follow this structured approach:
13
13
 
14
- ## 🔑 Critical Command Distinction
14
+ ## Critical Command Distinction
15
15
 
16
16
  **Six commands in workflow order:**
17
17
 
@@ -32,9 +32,9 @@ When this skill is activated, you are helping discover the best approach for a f
32
32
  - `work tests merge` = Land BDD tests on main
33
33
  - `work start` = Creates worktree/branch for chore implementation
34
34
 
35
- **🛑 STOP GATE:** DO NOT run `work start` until Step 13. Tests must be merged to main first.
35
+ **STOP GATE:** DO NOT run `work start` until Step 13. Tests must be merged to main first.
36
36
 
37
- **🛑 HANDOFF REQUIREMENT:** After `work start`, you MUST invoke speed-mode using the Skill tool. See Step 13.
37
+ **HANDOFF REQUIREMENT:** After `work start`, you MUST invoke speed-mode using the Skill tool. See Step 13.
38
38
 
39
39
  ---
40
40
 
@@ -58,7 +58,7 @@ This returns: title, description, parent epic (if any), mode, phase, and any exi
58
58
 
59
59
  **If the feature is not found**, ask the user to verify the ID or run `jettypod backlog` to find it.
60
60
 
61
- **🔄 WORKFLOW INTEGRATION: Start workflow tracking**
61
+ **WORKFLOW INTEGRATION: Start workflow tracking**
62
62
 
63
63
  After getting the feature context, register this skill execution:
64
64
 
@@ -87,10 +87,10 @@ This outputs any architectural decisions recorded for the parent epic. If no dec
87
87
  Display the context with decisions:
88
88
 
89
89
  ```
90
- Planning Feature: [Feature Name]
90
+ Planning Feature: [Feature Name]
91
91
  Epic: [Epic Name]
92
92
 
93
- 🎯 **Epic Architectural Decisions:**
93
+ **Epic Architectural Decisions:**
94
94
  [If decisions exist:]
95
95
  - **[Aspect]:** [Decision]
96
96
  *Rationale:* [Why this was chosen]
@@ -114,25 +114,25 @@ Propose exactly 3 approaches with varying complexity/trade-offs:
114
114
  Here are 3 different approaches for [feature name]:
115
115
 
116
116
  **Option 1: [Simple/Minimal approach name]**
117
- - **Pros**: [2-3 advantages]
118
- - **Cons**: [2-3 trade-offs]
117
+ - **Pros**: [2-3 advantages]
118
+ - **Cons**: [2-3 trade-offs]
119
119
  - **Experience**: [What it feels like to use]
120
120
 
121
121
  **Option 2: [Balanced approach name]**
122
- - **Pros**: [2-3 advantages]
123
- - **Cons**: [2-3 trade-offs]
122
+ - **Pros**: [2-3 advantages]
123
+ - **Cons**: [2-3 trade-offs]
124
124
  - **Experience**: [What it feels like to use]
125
125
 
126
126
  **Option 3: [Advanced/Comprehensive approach name]**
127
- - **Pros**: [2-3 advantages]
128
- - **Cons**: [2-3 trade-offs]
127
+ - **Pros**: [2-3 advantages]
128
+ - **Cons**: [2-3 trade-offs]
129
129
  - **Experience**: [What it feels like to use]
130
130
 
131
131
  **Additional approaches considered but not recommended:**
132
132
  - *[Alternative 1]*: [Brief] - Not selected because [reason]
133
133
  - *[Alternative 2]*: [Brief] - Not selected because [reason]
134
134
 
135
- **💡 Recommendation:** [State which option you recommend and why - 2-3 sentences explaining the reasoning]
135
+ **Recommendation:** [State which option you recommend and why - 2-3 sentences explaining the reasoning]
136
136
 
137
137
  Would you like me to create working prototypes of these approaches?
138
138
  ```
@@ -140,7 +140,7 @@ Would you like me to create working prototypes of these approaches?
140
140
  **After presenting approaches, emit a question gate so the narrated UI can render an interactive choice card:**
141
141
 
142
142
  ```bash
143
- jettypod ui gate question --data='{"question":"Which approach should we take for [feature name]?","options":[{"id":"option-1","emoji":"🎯","label":"[Simple approach name]","description":"[1-line summary of what it does]"},{"id":"option-2","emoji":"⚖️","label":"[Balanced approach name]","description":"[1-line summary of what it does]"},{"id":"option-3","emoji":"🛡️","label":"[Advanced approach name]","description":"[1-line summary of what it does]"}]}'
143
+ jettypod ui gate question --data='{"question":"Which approach should we take for [feature name]?","options":[{"id":"option-1","emoji":"","label":"[Simple approach name]","description":"[1-line summary of what it does]"},{"id":"option-2","emoji":"","label":"[Balanced approach name]","description":"[1-line summary of what it does]"},{"id":"option-3","emoji":"","label":"[Advanced approach name]","description":"[1-line summary of what it does]"}]}'
144
144
  ```
145
145
 
146
146
  **WAIT for user response.**
@@ -165,7 +165,7 @@ jettypod work prototype start 42 simple-form
165
165
 
166
166
  This creates a worktree at `.jettypod-work/prototype-<id>-<slug>-<approach>/` where prototypes can be safely built and committed.
167
167
 
168
- **🛑 STOP AND CHECK:** Verify worktree was created successfully before proceeding.
168
+ **STOP AND CHECK:** Verify worktree was created successfully before proceeding.
169
169
 
170
170
  **Sub-step 2: Build prototypes in the worktree**
171
171
 
@@ -176,7 +176,7 @@ This creates a worktree at `.jettypod-work/prototype-<id>-<slug>-<approach>/` wh
176
176
  4. **Add visible banner header at TOP of page** (for HTML/web prototypes):
177
177
  ```html
178
178
  <div style="background: #f0f0f0; border: 2px solid #333; padding: 16px; margin-bottom: 24px; font-family: monospace;">
179
- <strong>🧪 PROTOTYPE</strong><br>
179
+ <strong>PROTOTYPE</strong><br>
180
180
  Feature: [feature name]<br>
181
181
  Option: [option number/name]<br>
182
182
  Created: [YYYY-MM-DD]<br>
@@ -208,7 +208,7 @@ jettypod work cleanup ${FEATURE_ID}
208
208
  This merges prototype files to main (in `/prototypes/` directory) and cleans up the worktree.
209
209
 
210
210
  <details>
211
- <summary><strong>📋 Prototyping Guidelines (click to expand)</strong></summary>
211
+ <summary><strong>Prototyping Guidelines (click to expand)</strong></summary>
212
212
 
213
213
  **Use fastest tech to demonstrate UX:**
214
214
  - Quick HTML+JS for web UX
@@ -241,7 +241,7 @@ Which approach works best?
241
241
 
242
242
  User picks winner. Note their choice - you'll record it formally in Step 11 when transitioning to implementation.
243
243
 
244
- **🔄 WORKFLOW CHECKPOINT: Winner chosen**
244
+ **WORKFLOW CHECKPOINT: Winner chosen**
245
245
 
246
246
  ```bash
247
247
  jettypod workflow checkpoint <feature-id> --step=5
@@ -274,7 +274,7 @@ jettypod workflow checkpoint <feature-id> --step=5
274
274
  **Display to user:**
275
275
 
276
276
  ```
277
- 📍 Integration Contract
277
+ Integration Contract
278
278
 
279
279
  **Entry Point:** [How users reach this feature]
280
280
  **Caller Code:** [What existing code invokes this]
@@ -297,11 +297,11 @@ Example:
297
297
  2. Claude has `WORKTREE_PATH` before being tempted to write files
298
298
  3. Writing to main is impossible because we're in worktree context
299
299
 
300
- **🚫 FORBIDDEN: Manual Git Worktree Commands**
300
+ **FORBIDDEN: Manual Git Worktree Commands**
301
301
  ```
302
- git worktree add ...
303
- git checkout -b tests/...
304
- git branch tests/...
302
+ git worktree add ...
303
+ git checkout -b tests/...
304
+ git branch tests/...
305
305
  ```
306
306
  **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.
307
307
 
@@ -315,14 +315,14 @@ This creates:
315
315
  - Worktree at `.jettypod-work/tests-<id>-<slug>/`
316
316
  - Branch `tests/feature-<id>-<slug>`
317
317
 
318
- **🛑 STOP AND CHECK:** Verify worktree was created successfully. If you see an error, investigate before continuing.
318
+ **STOP AND CHECK:** Verify worktree was created successfully. If you see an error, investigate before continuing.
319
319
 
320
320
  **Capture from output:**
321
321
  - `WORKTREE_PATH` - the absolute path to the worktree (e.g., `/path/to/.jettypod-work/tests-42-email-login`)
322
322
 
323
323
  Example output:
324
324
  ```
325
- Created test worktree: /path/to/.jettypod-work/tests-42-email-login
325
+ Created test worktree: /path/to/.jettypod-work/tests-42-email-login
326
326
  Branch: tests/feature-42-email-login
327
327
 
328
328
  Write your BDD files to:
@@ -333,13 +333,13 @@ Write your BDD files to:
333
333
  **Display:**
334
334
 
335
335
  ```
336
- 📁 Test worktree created: ${WORKTREE_PATH}
336
+ Test worktree created: ${WORKTREE_PATH}
337
337
  Branch: tests/feature-${FEATURE_ID}-${FEATURE_SLUG}
338
338
 
339
- 🔒 WORKTREE LOCK ACTIVE: All BDD file writes will use this path.
339
+ WORKTREE LOCK ACTIVE: All BDD file writes will use this path.
340
340
  ```
341
341
 
342
- **🔒 WORKTREE PATH LOCK**
342
+ **WORKTREE PATH LOCK**
343
343
 
344
344
  From this point forward, ALL file operations for BDD tests MUST use paths starting with:
345
345
  ```
@@ -350,13 +350,17 @@ ${WORKTREE_PATH}/features/
350
350
 
351
351
  **Proceed to Step 8.**
352
352
 
353
+ ### BDD Scenario Formulation Rules (ENFORCED)
354
+
355
+ Before proposing scenarios, read `templates/bdd-guidance.md`. Scenarios MUST be: declarative (describe intent, not UI clicks), one behavior per scenario, deterministic (factory data, not ambient), no implementation leakage ("Given a user with an unpaid invoice" not "Given the database has a row in invoices"). No UI specifics unless the feature IS a UI interaction.
356
+
353
357
  ### Step 8: Propose BDD Scenarios
354
358
 
355
- **🚫 FORBIDDEN: Writing Files at This Step**
359
+ **FORBIDDEN: Writing Files at This Step**
356
360
  ```
357
- Write tool to ${WORKTREE_PATH}/features/*.feature
358
- Write tool to ${WORKTREE_PATH}/features/step_definitions/*.js
359
- Any file creation (even in worktree)
361
+ Write tool to ${WORKTREE_PATH}/features/*.feature
362
+ Write tool to ${WORKTREE_PATH}/features/step_definitions/*.js
363
+ Any file creation (even in worktree)
360
364
  ```
361
365
  **Files are written in Step 9** after user confirms the scenarios. At this step, you are ONLY displaying proposed scenarios to the user for confirmation.
362
366
 
@@ -369,7 +373,7 @@ ${WORKTREE_PATH}/features/
369
373
  Based on chosen approach, **display** the proposed scenarios to the user:
370
374
 
371
375
  ```
372
- 📋 Proposed BDD Scenarios
376
+ Proposed BDD Scenarios
373
377
 
374
378
  **Feature file:** ${WORKTREE_PATH}/features/[feature-slug].feature
375
379
  **Step definitions:** ${WORKTREE_PATH}/features/step_definitions/[feature-slug].steps.js
@@ -438,7 +442,7 @@ Does this capture the feature correctly? Any scenarios to add/change?
438
442
  - If user requests changes → Revise scenarios and display again
439
443
  - **Store the confirmed scenarios in memory** - you'll write them in Step 9
440
444
 
441
- **🔄 WORKFLOW CHECKPOINT: BDD scenarios confirmed**
445
+ **WORKFLOW CHECKPOINT: BDD scenarios confirmed**
442
446
 
443
447
  ```bash
444
448
  jettypod workflow checkpoint <feature-id> --step=8
@@ -520,7 +524,7 @@ Scenario: User logs in with "Remember me" option (optional feature)
520
524
  ```
521
525
 
522
526
  <details>
523
- <summary><strong>📋 BDD Scenario Guidelines (click to expand)</strong></summary>
527
+ <summary><strong>BDD Scenario Guidelines (click to expand)</strong></summary>
524
528
 
525
529
  **Scenario naming:**
526
530
  - Use present tense
@@ -573,7 +577,7 @@ Scenario: Prevent unauthorized access
573
577
 
574
578
  **NOW you may write files** - the worktree exists (from Step 7) and scenarios are confirmed (from Step 8).
575
579
 
576
- **🔒 WORKTREE PATH REQUIRED:** All file writes MUST use the `WORKTREE_PATH` captured in Step 7.
580
+ **WORKTREE PATH REQUIRED:** All file writes MUST use the `WORKTREE_PATH` captured in Step 7.
577
581
 
578
582
  Using the scenarios confirmed in Step 8, write the files using **absolute paths to the worktree**:
579
583
 
@@ -605,14 +609,14 @@ cd ${WORKTREE_PATH} && npx cucumber-js --dry-run features/${FEATURE_SLUG}.featur
605
609
 
606
610
  **What the output means:**
607
611
 
608
- **Success** - No errors, all steps have definitions:
612
+ **Success** - No errors, all steps have definitions:
609
613
  ```
610
614
  0 scenarios
611
615
  0 steps
612
616
  ```
613
617
  (Dry-run doesn't execute, so 0 is correct)
614
618
 
615
- **Undefined steps** - Missing step definitions:
619
+ **Undefined steps** - Missing step definitions:
616
620
  ```
617
621
  Undefined. Implement with the following snippet:
618
622
  Given('I am on the login page', function () {
@@ -621,13 +625,13 @@ Undefined. Implement with the following snippet:
621
625
  ```
622
626
  → Add the missing step definition to your `.steps.js` file
623
627
 
624
- **Syntax error** - Invalid Gherkin:
628
+ **Syntax error** - Invalid Gherkin:
625
629
  ```
626
630
  Parse error in features/foo.feature
627
631
  ```
628
632
  → Fix the feature file syntax
629
633
 
630
- **Duplicate steps** - Multiple definitions match:
634
+ **Duplicate steps** - Multiple definitions match:
631
635
  ```
632
636
  Multiple step definitions match
633
637
  ```
@@ -640,7 +644,7 @@ Multiple step definitions match
640
644
  4. **Loop until validation passes** - do NOT proceed until green
641
645
 
642
646
  **If validation succeeds:**
643
- Display: "BDD infrastructure validated - all steps have definitions"
647
+ Display: "BDD infrastructure validated - all steps have definitions"
644
648
 
645
649
  **Update database with scenario file path:**
646
650
 
@@ -677,7 +681,7 @@ Now let me analyze the codebase and propose implementation chores for speed mode
677
681
 
678
682
  Based on the scenario and my understanding of the codebase, here are the chores I recommend for speed mode:
679
683
 
680
- **Chore 1: [Integration chore - wire feature into app]** INTEGRATION
684
+ **Chore 1: [Integration chore - wire feature into app]** INTEGRATION
681
685
  - Why: Makes the feature reachable from [entry point]
682
686
  - Integration Contract:
683
687
  • Entry point: [from Step 6]
@@ -739,17 +743,23 @@ Does this rationale capture why you chose this approach? (You can edit it if nee
739
743
 
740
744
  **CRITICAL: Create chores BEFORE running `work implement`.** The system validates that chores exist before allowing the transition.
741
745
 
742
- For each chore that the user confirmed in Step 10, use the Bash tool to create it:
743
-
744
- ```bash
745
- jettypod work create chore "[Chore title]" "[Chore description]" --parent=${FEATURE_ID}
746
+ For each chore that the user confirmed in Step 10, use the **Write** tool to create `/tmp/jettypod-create.json`:
747
+ ```json
748
+ {
749
+ "type": "chore",
750
+ "title": "[Chore title]",
751
+ "description": "[Chore description]",
752
+ "parent": ${FEATURE_ID}
753
+ }
746
754
  ```
747
755
 
748
- Replace `${FEATURE_ID}` with actual ID. Example:
756
+ Then run via **Bash**:
749
757
  ```bash
750
- jettypod work create chore "Set up auth routes" "Create login/logout endpoints..." --parent=42
758
+ jettypod work create --from=/tmp/jettypod-create.json
751
759
  ```
752
760
 
761
+ Replace `${FEATURE_ID}` with actual ID. Example: Write `{"type":"chore","title":"Set up auth routes","description":"Create login/logout endpoints...","parent":42}` to `/tmp/jettypod-create.json`, then run `jettypod work create --from=/tmp/jettypod-create.json`.
762
+
753
763
  **CRITICAL: Copy the EXACT proposal from Step 10 into each chore description.** Do not paraphrase or summarize - the implementation guidance must be preserved verbatim:
754
764
 
755
765
  ```
@@ -792,13 +802,13 @@ jettypod work implement 42 --winner="Simple inline form" --rationale="Fastest UX
792
802
  After successful transition, display:
793
803
 
794
804
  ```
795
- Feature transitioned to implementation phase
796
- Created X chores for speed mode
805
+ Feature transitioned to implementation phase
806
+ Created X chores for speed mode
797
807
 
798
808
  Now I'll merge the BDD tests to main...
799
809
  ```
800
810
 
801
- **🔄 WORKFLOW CHECKPOINT: Implementation transition complete**
811
+ **WORKFLOW CHECKPOINT: Implementation transition complete**
802
812
 
803
813
  ```bash
804
814
  jettypod workflow checkpoint <feature-id> --step=11
@@ -834,33 +844,33 @@ This will:
834
844
  - Push to remote
835
845
  - Mark worktree as merged (cleanup is separate)
836
846
 
837
- **🛑 STOP AND CHECK:** Verify merge succeeded:
838
- - "Tests merged to main" → Proceed to Step 13
839
- - Error → Investigate, worktree still exists for debugging
847
+ **STOP AND CHECK:** Verify merge succeeded:
848
+ - "Tests merged to main" → Proceed to Step 13
849
+ - Error → Investigate, worktree still exists for debugging
840
850
 
841
851
  **After successful merge, display:**
842
852
 
843
853
  ```
844
- Feature transitioned to implementation phase
845
- Created X chores for speed mode
846
- BDD tests merged to main
854
+ Feature transitioned to implementation phase
855
+ Created X chores for speed mode
856
+ BDD tests merged to main
847
857
 
848
858
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
849
- 🎯 Feature Planning Complete!
859
+ Feature Planning Complete!
850
860
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
851
861
 
852
- 📋 BDD scenarios: features/[feature-slug].feature
853
- 🧪 Step definitions: features/step_definitions/[feature-slug].steps.js
854
- Feature phase: Implementation
855
- 🚀 Feature mode: Speed
862
+ BDD scenarios: features/[feature-slug].feature
863
+ Step definitions: features/step_definitions/[feature-slug].steps.js
864
+ Feature phase: Implementation
865
+ Feature mode: Speed
856
866
 
857
- 💡 Recommendation: Start with Chore #[first-chore-id] ([chore-title])
867
+ Recommendation: Start with Chore #[first-chore-id] ([chore-title])
858
868
  [Brief reasoning - e.g., "It sets up the foundation the other chores depend on."]
859
869
 
860
870
  Start this one? [yes / pick different / done for now]
861
871
  ```
862
872
 
863
- **🔄 WORKFLOW INTEGRATION: Complete workflow**
873
+ **WORKFLOW INTEGRATION: Complete workflow**
864
874
 
865
875
  ```bash
866
876
  jettypod workflow complete feature-planning <feature-id>
@@ -897,11 +907,11 @@ End feature-planning skill without starting a chore. Do NOT invoke speed-mode.
897
907
 
898
908
  **After user picks a chore, execute these steps IN ORDER:**
899
909
 
900
- **🚫 FORBIDDEN: Manual Git Worktree Commands**
910
+ **FORBIDDEN: Manual Git Worktree Commands**
901
911
  ```
902
- git worktree add ...
903
- git checkout -b feature/...
904
- git branch feature/...
912
+ git worktree add ...
913
+ git checkout -b feature/...
914
+ git branch feature/...
905
915
  ```
906
916
  **ALWAYS use `jettypod work start`** - it handles branch naming, path conventions, database tracking, and cleanup. Manual git commands will create orphaned worktrees that break the merge workflow.
907
917
 
@@ -910,17 +920,17 @@ End feature-planning skill without starting a chore. Do NOT invoke speed-mode.
910
920
  jettypod work start [chore-id]
911
921
  ```
912
922
 
913
- **🛑 STOP AND CHECK:** Look at the output of `work start`. You should see:
923
+ **STOP AND CHECK:** Look at the output of `work start`. You should see:
914
924
  ```
915
- Created worktree: /path/to/.jettypod-work/[id]-[title-slug]
925
+ Created worktree: /path/to/.jettypod-work/[id]-[title-slug]
916
926
  Branch: feature/work-[id]-[title-slug]
917
927
  ```
918
928
 
919
- **If you see `⚠️ Working in main repository (worktree creation failed)`:**
929
+ **If you see `Working in main repository (worktree creation failed)`:**
920
930
  - **DO NOT proceed to speed-mode**
921
931
  - Investigate why worktree failed (uncommitted changes? branch conflict?)
922
932
  - Fix the issue and re-run `work start`
923
- - Only continue after seeing `✅ Created worktree`
933
+ - Only continue after seeing `Created worktree`
924
934
 
925
935
  **Step 2: Verify worktree exists before invoking speed-mode:**
926
936
  ```bash
@@ -937,7 +947,7 @@ If this returns empty/no rows, **STOP** - the worktree wasn't created properly.
937
947
  Use the Skill tool with skill: "speed-mode"
938
948
  ```
939
949
 
940
- **🛑 CRITICAL:** You MUST:
950
+ **CRITICAL:** You MUST:
941
951
  1. Run `work start` first
942
952
  2. Verify the worktree was created (not fallback to main)
943
953
  3. THEN invoke speed-mode using the Skill tool