jettypod 4.4.116 → 4.4.120
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env +7 -0
- package/apps/dashboard/app/api/claude/[workItemId]/message/route.ts +124 -48
- package/apps/dashboard/app/api/claude/[workItemId]/route.ts +171 -58
- package/apps/dashboard/app/api/claude/sessions/[sessionId]/message/route.ts +161 -10
- package/apps/dashboard/app/api/tests/run/stream/route.ts +13 -1
- package/apps/dashboard/app/api/usage/route.ts +17 -0
- package/apps/dashboard/app/api/work/[id]/route.ts +35 -0
- package/apps/dashboard/app/api/work/[id]/status/route.ts +43 -1
- package/apps/dashboard/app/connect-claude/page.tsx +24 -0
- package/apps/dashboard/app/decision/[id]/page.tsx +14 -14
- package/apps/dashboard/app/demo/gates/page.tsx +42 -42
- package/apps/dashboard/app/design-system/page.tsx +868 -0
- package/apps/dashboard/app/globals.css +6 -2
- package/apps/dashboard/app/install-claude/page.tsx +9 -7
- package/apps/dashboard/app/layout.tsx +17 -5
- package/apps/dashboard/app/login/page.tsx +250 -0
- package/apps/dashboard/app/page.tsx +11 -9
- package/apps/dashboard/app/settings/page.tsx +4 -2
- package/apps/dashboard/app/signup/page.tsx +245 -0
- package/apps/dashboard/app/subscribe/page.tsx +11 -0
- package/apps/dashboard/app/welcome/page.tsx +24 -1
- package/apps/dashboard/app/work/[id]/page.tsx +34 -50
- package/apps/dashboard/components/AppShell.tsx +95 -55
- package/apps/dashboard/components/CardMenu.tsx +56 -13
- package/apps/dashboard/components/ClaudePanel.tsx +301 -582
- package/apps/dashboard/components/ClaudePanelInput.tsx +23 -14
- package/apps/dashboard/components/ConnectClaudeScreen.tsx +210 -0
- package/apps/dashboard/components/CopyableId.tsx +3 -3
- package/apps/dashboard/components/DetailReviewActions.tsx +109 -0
- package/apps/dashboard/components/DragContext.tsx +75 -65
- package/apps/dashboard/components/DraggableCard.tsx +6 -46
- package/apps/dashboard/components/DropZone.tsx +2 -2
- package/apps/dashboard/components/EditableDetailDescription.tsx +1 -1
- package/apps/dashboard/components/EditableTitle.tsx +26 -6
- package/apps/dashboard/components/ElapsedTimer.tsx +54 -0
- package/apps/dashboard/components/EpicGroup.tsx +329 -0
- package/apps/dashboard/components/GateCard.tsx +100 -16
- package/apps/dashboard/components/GateChoiceCard.tsx +15 -17
- package/apps/dashboard/components/InstallClaudeScreen.tsx +140 -51
- package/apps/dashboard/components/JettyLoader.tsx +38 -0
- package/apps/dashboard/components/KanbanBoard.tsx +147 -766
- package/apps/dashboard/components/KanbanCard.tsx +506 -0
- package/apps/dashboard/components/LazyMarkdown.tsx +12 -0
- package/apps/dashboard/components/MainNav.tsx +20 -54
- package/apps/dashboard/components/MessageBlock.tsx +391 -0
- package/apps/dashboard/components/ModeStartCard.tsx +15 -15
- package/apps/dashboard/components/OnboardingWelcome.tsx +214 -0
- package/apps/dashboard/components/PlaceholderCard.tsx +11 -21
- package/apps/dashboard/components/ProjectSwitcher.tsx +36 -8
- package/apps/dashboard/components/PrototypeTimeline.tsx +25 -25
- package/apps/dashboard/components/RealTimeKanbanWrapper.tsx +265 -301
- package/apps/dashboard/components/RealTimeTestsWrapper.tsx +97 -74
- package/apps/dashboard/components/ReviewFooter.tsx +141 -0
- package/apps/dashboard/components/SessionList.tsx +19 -18
- package/apps/dashboard/components/SubscribeContent.tsx +206 -0
- package/apps/dashboard/components/TestTree.tsx +15 -14
- package/apps/dashboard/components/TipCard.tsx +177 -0
- package/apps/dashboard/components/Toast.tsx +5 -5
- package/apps/dashboard/components/TypeIcon.tsx +56 -0
- package/apps/dashboard/components/UpgradeBanner.tsx +30 -0
- package/apps/dashboard/components/WaveCompletionAnimation.tsx +61 -62
- package/apps/dashboard/components/WelcomeScreen.tsx +25 -27
- package/apps/dashboard/components/WorkItemHeader.tsx +4 -4
- package/apps/dashboard/components/WorkItemTree.tsx +9 -28
- package/apps/dashboard/components/settings/AccountSection.tsx +169 -0
- package/apps/dashboard/components/settings/EnvVarsSection.tsx +54 -79
- package/apps/dashboard/components/settings/GeneralSection.tsx +26 -31
- package/apps/dashboard/components/settings/SettingsLayout.tsx +4 -4
- package/apps/dashboard/components/ui/Button.tsx +104 -0
- package/apps/dashboard/components/ui/Input.tsx +78 -0
- package/apps/dashboard/contexts/ClaudeSessionContext.tsx +408 -105
- package/apps/dashboard/contexts/ConnectionStatusContext.tsx +25 -4
- package/apps/dashboard/contexts/UsageContext.tsx +155 -0
- package/apps/dashboard/contexts/usageHelpers.js +9 -0
- package/apps/dashboard/electron/ipc-handlers.js +281 -88
- package/apps/dashboard/electron/main.js +691 -131
- package/apps/dashboard/electron/preload.js +25 -4
- package/apps/dashboard/electron/session-manager.js +163 -0
- package/apps/dashboard/electron-builder.config.js +3 -5
- package/apps/dashboard/hooks/useKanbanAnimation.ts +29 -0
- package/apps/dashboard/hooks/useKanbanUndo.ts +83 -0
- package/apps/dashboard/lib/backlog-parser.ts +50 -0
- package/apps/dashboard/lib/claude-process-manager.ts +50 -11
- package/apps/dashboard/lib/constants.ts +43 -0
- package/apps/dashboard/lib/db-bridge.ts +33 -0
- package/apps/dashboard/lib/db.ts +136 -20
- package/apps/dashboard/lib/kanban-utils.ts +70 -0
- package/apps/dashboard/lib/run-migrations.js +27 -2
- package/apps/dashboard/lib/session-state-machine.ts +3 -0
- package/apps/dashboard/lib/session-stream-manager.ts +144 -38
- package/apps/dashboard/lib/shadows.ts +7 -0
- package/apps/dashboard/lib/tests.ts +3 -1
- package/apps/dashboard/lib/utils.ts +6 -0
- package/apps/dashboard/next.config.js +35 -14
- package/apps/dashboard/package.json +6 -3
- package/apps/dashboard/public/bug-icon.svg +9 -0
- package/apps/dashboard/public/buoy-icon.svg +9 -0
- package/apps/dashboard/public/fonts/Satoshi-Variable.woff2 +0 -0
- package/apps/dashboard/public/fonts/Satoshi-VariableItalic.woff2 +0 -0
- package/apps/dashboard/public/in-flight-seagull.svg +9 -0
- package/apps/dashboard/public/jetty-icon-loading-alt.svg +11 -0
- package/apps/dashboard/public/jetty-icon-loading.svg +11 -0
- package/apps/dashboard/public/jettypod_logo.png +0 -0
- package/apps/dashboard/public/pier-icon.svg +14 -0
- package/apps/dashboard/public/star-icon.svg +9 -0
- package/apps/dashboard/public/wrench-icon.svg +9 -0
- package/apps/dashboard/scripts/upload-to-r2.js +89 -0
- package/apps/dashboard/scripts/ws-server.js +191 -0
- package/apps/dashboard/tsconfig.tsbuildinfo +1 -0
- package/apps/update-server/package.json +16 -0
- package/apps/update-server/schema.sql +31 -0
- package/apps/update-server/src/index.ts +1085 -0
- package/apps/update-server/tsconfig.json +16 -0
- package/apps/update-server/wrangler.toml +35 -0
- package/cucumber.js +9 -3
- package/docs/COMMAND_REFERENCE.md +34 -0
- package/hooks/post-checkout +32 -75
- package/hooks/post-merge +111 -10
- package/jest.setup.js +1 -0
- package/jettypod.js +54 -116
- package/lib/chore-taxonomy.js +33 -10
- package/lib/database.js +36 -16
- package/lib/db-watcher.js +1 -1
- package/lib/git-hooks/pre-commit +1 -1
- package/lib/jettypod-backup.js +27 -4
- package/lib/migrations/027-plan-at-creation-column.js +33 -0
- package/lib/migrations/028-ready-for-review-column.js +27 -0
- package/lib/migrations/029-remove-autoincrement.js +307 -0
- package/lib/migrations/029-rename-corrupted-to-cleaned.js +149 -0
- package/lib/migrations/index.js +47 -4
- package/lib/schema.js +13 -6
- package/lib/seed-onboarding.js +101 -69
- package/lib/update-command/index.js +9 -175
- package/lib/work-commands/index.js +129 -16
- package/lib/work-tracking/index.js +86 -46
- package/lib/worktree-diagnostics.js +16 -16
- package/lib/worktree-facade.js +1 -1
- package/lib/worktree-manager.js +8 -8
- package/lib/worktree-reconciler.js +5 -5
- package/package.json +9 -2
- package/scripts/ndjson-to-cucumber-json.js +152 -0
- package/scripts/postinstall.js +25 -0
- package/skills-templates/bug-mode/SKILL.md +39 -28
- package/skills-templates/bug-planning/SKILL.md +25 -29
- package/skills-templates/chore-mode/SKILL.md +131 -68
- package/skills-templates/chore-mode/verification.js +51 -10
- package/skills-templates/chore-planning/SKILL.md +47 -18
- package/skills-templates/epic-planning/SKILL.md +68 -48
- package/skills-templates/external-transition/SKILL.md +47 -47
- package/skills-templates/feature-planning/SKILL.md +83 -73
- package/skills-templates/production-mode/SKILL.md +49 -49
- package/skills-templates/request-routing/SKILL.md +27 -14
- package/skills-templates/simple-improvement/SKILL.md +68 -44
- package/skills-templates/speed-mode/SKILL.md +209 -128
- package/skills-templates/stable-mode/SKILL.md +105 -94
- package/templates/bdd-guidance.md +139 -0
- package/templates/bdd-scaffolding/wait.js +18 -0
- package/templates/bdd-scaffolding/world.js +19 -0
- package/.jettypod-backup/work.db +0 -0
- package/apps/dashboard/app/access-code/page.tsx +0 -110
- package/lib/discovery-checkpoint.js +0 -123
- package/skills-templates/project-discovery/SKILL.md +0 -372
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
106
|
+
Choose Your Production Standards Preset
|
|
107
107
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
108
108
|
|
|
109
|
-
|
|
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
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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
|
-
|
|
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
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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
|
-
|
|
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
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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
|
-
|
|
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
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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
|
-
|
|
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
|
-
|
|
253
|
+
SECURITY ([X] standards)
|
|
254
254
|
|
|
255
|
-
[
|
|
255
|
+
[] TLS/HTTPS enforcement
|
|
256
256
|
Why: [reasoning]
|
|
257
257
|
Test: [acceptance criteria]
|
|
258
258
|
|
|
259
|
-
[
|
|
259
|
+
[] [Other security standards...]
|
|
260
260
|
|
|
261
|
-
|
|
261
|
+
PERFORMANCE & SCALE ([X] standards)
|
|
262
262
|
|
|
263
|
-
[
|
|
263
|
+
[] Performance budgets
|
|
264
264
|
Why: [reasoning]
|
|
265
265
|
Test: [acceptance criteria]
|
|
266
266
|
|
|
267
|
-
[
|
|
267
|
+
[] [Other scale standards...]
|
|
268
268
|
|
|
269
|
-
|
|
269
|
+
COMPLIANCE ([X] standards)
|
|
270
270
|
|
|
271
|
-
[
|
|
271
|
+
[] [Compliance standards if applicable]
|
|
272
272
|
|
|
273
|
-
|
|
273
|
+
INFRASTRUCTURE ([X] standards)
|
|
274
274
|
|
|
275
|
-
[
|
|
275
|
+
[] [Infrastructure standards]
|
|
276
276
|
|
|
277
277
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
278
278
|
|
|
279
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
362
|
+
**Transition Complete!**
|
|
363
363
|
|
|
364
364
|
Your project is now in external state.
|
|
365
365
|
|
|
366
|
-
|
|
366
|
+
Created Infrastructure Readiness epic with:
|
|
367
367
|
• 4 features (Security, Monitoring, Infrastructure, Compliance)
|
|
368
368
|
• 15 chores across those features
|
|
369
369
|
|
|
370
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
35
|
+
**STOP GATE:** DO NOT run `work start` until Step 13. Tests must be merged to main first.
|
|
36
36
|
|
|
37
|
-
|
|
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
|
-
|
|
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
|
-
|
|
90
|
+
Planning Feature: [Feature Name]
|
|
91
91
|
Epic: [Epic Name]
|
|
92
92
|
|
|
93
|
-
|
|
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**:
|
|
118
|
-
- **Cons**:
|
|
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**:
|
|
123
|
-
- **Cons**:
|
|
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**:
|
|
128
|
-
- **Cons**:
|
|
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
|
-
|
|
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":"
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
300
|
+
**FORBIDDEN: Manual Git Worktree Commands**
|
|
301
301
|
```
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
336
|
+
Test worktree created: ${WORKTREE_PATH}
|
|
337
337
|
Branch: tests/feature-${FEATURE_ID}-${FEATURE_SLUG}
|
|
338
338
|
|
|
339
|
-
|
|
339
|
+
WORKTREE LOCK ACTIVE: All BDD file writes will use this path.
|
|
340
340
|
```
|
|
341
341
|
|
|
342
|
-
|
|
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
|
-
|
|
359
|
+
**FORBIDDEN: Writing Files at This Step**
|
|
356
360
|
```
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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: "
|
|
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]**
|
|
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
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
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
|
-
|
|
756
|
+
Then run via **Bash**:
|
|
749
757
|
```bash
|
|
750
|
-
jettypod work create
|
|
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
|
-
|
|
796
|
-
|
|
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
|
-
|
|
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
|
-
|
|
838
|
-
-
|
|
839
|
-
-
|
|
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
|
-
|
|
845
|
-
|
|
846
|
-
|
|
854
|
+
Feature transitioned to implementation phase
|
|
855
|
+
Created X chores for speed mode
|
|
856
|
+
BDD tests merged to main
|
|
847
857
|
|
|
848
858
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
849
|
-
|
|
859
|
+
Feature Planning Complete!
|
|
850
860
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
851
861
|
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
910
|
+
**FORBIDDEN: Manual Git Worktree Commands**
|
|
901
911
|
```
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
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
|
-
|
|
923
|
+
**STOP AND CHECK:** Look at the output of `work start`. You should see:
|
|
914
924
|
```
|
|
915
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|