jettypod 4.4.10 → 4.4.12

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 (32) hide show
  1. package/apps/dashboard/README.md +36 -0
  2. package/apps/dashboard/app/favicon.ico +0 -0
  3. package/apps/dashboard/app/globals.css +122 -0
  4. package/apps/dashboard/app/layout.tsx +34 -0
  5. package/apps/dashboard/app/page.tsx +25 -0
  6. package/apps/dashboard/app/work/[id]/page.tsx +193 -0
  7. package/apps/dashboard/components/KanbanBoard.tsx +201 -0
  8. package/apps/dashboard/components/WorkItemTree.tsx +116 -0
  9. package/apps/dashboard/components.json +22 -0
  10. package/apps/dashboard/eslint.config.mjs +18 -0
  11. package/apps/dashboard/lib/db.ts +270 -0
  12. package/apps/dashboard/lib/utils.ts +6 -0
  13. package/apps/dashboard/next.config.ts +7 -0
  14. package/apps/dashboard/package.json +33 -0
  15. package/apps/dashboard/postcss.config.mjs +7 -0
  16. package/apps/dashboard/public/file.svg +1 -0
  17. package/apps/dashboard/public/globe.svg +1 -0
  18. package/apps/dashboard/public/next.svg +1 -0
  19. package/apps/dashboard/public/vercel.svg +1 -0
  20. package/apps/dashboard/public/window.svg +1 -0
  21. package/apps/dashboard/tsconfig.json +34 -0
  22. package/jettypod.js +41 -0
  23. package/lib/current-work.js +10 -18
  24. package/lib/migrations/016-workflow-checkpoints-table.js +70 -0
  25. package/lib/migrations/017-backfill-epic-id.js +54 -0
  26. package/lib/workflow-checkpoint.js +204 -0
  27. package/package.json +7 -2
  28. package/skills-templates/chore-mode/SKILL.md +3 -0
  29. package/skills-templates/epic-planning/SKILL.md +225 -154
  30. package/skills-templates/feature-planning/SKILL.md +172 -87
  31. package/skills-templates/speed-mode/SKILL.md +161 -338
  32. package/skills-templates/stable-mode/SKILL.md +150 -176
@@ -11,30 +11,82 @@ Guides Claude through comprehensive epic planning including feature identificati
11
11
 
12
12
  When this skill is activated, you are helping plan an epic. Follow this structured approach:
13
13
 
14
- ### Step 1: Understand the Epic
14
+ ### Step 1: Determine Entry Point
15
15
 
16
- You'll receive context about the epic being planned. Review:
17
- - Epic title and description
18
- - Project context
19
- - Any parent context
16
+ **Check how this skill was triggered:**
20
17
 
21
- ### Step 2: Check Existing Features and Decisions
18
+ ---
22
19
 
23
- **CRITICAL:** Before suggesting features or approaches, check what already exists:
20
+ **Scenario A: Epic ID provided** (e.g., "plan epic #5", "help me with epic 42")
24
21
 
25
- **Check for existing features:**
22
+ Run this command to get epic context:
26
23
  ```bash
27
- jettypod backlog | grep -A 20 "Epic Name"
24
+ jettypod work status ${EPIC_ID}
25
+ ```
26
+
27
+ Capture the title, description, and any existing context. Proceed to Step 2.
28
+
29
+ ---
30
+
31
+ **Scenario B: Just an idea** (e.g., "I want to add real-time collab", "plan an epic for auth")
32
+
33
+ User has only provided a sentence or vague concept. **DO NOT suggest features yet.**
34
+
35
+ Gather context first. Ask 2-4 of the most relevant questions from:
36
+
28
37
  ```
38
+ I'd like to understand this epic better before suggesting features.
29
39
 
30
- If features already exist, acknowledge them and skip to Step 4 (Architectural Decision).
40
+ **User Experience:**
41
+ - What does the user journey look like? (How do users discover/use this?)
42
+ - What's the "aha moment" - when does the user feel value?
43
+
44
+ **Problem & Users:**
45
+ - What problem does this solve? (pain point or business need)
46
+ - Who are the primary users? (personas or roles)
47
+
48
+ **Scope & Constraints:**
49
+ - What's the scope? (MVP vs full vision)
50
+ - Any technical constraints? (must integrate with X, existing patterns to follow)
51
+ ```
31
52
 
32
- **Check for existing decisions:**
53
+ **WAIT for user answers.**
54
+
55
+ Then synthesize into an epic title + description and create:
33
56
  ```bash
34
- node -e "const { showDecisionsForEpic } = require('./features/decisions/index.js'); showDecisionsForEpic(epicId)"
57
+ jettypod work create epic "${EPIC_TITLE}" "${EPIC_DESCRIPTION}"
35
58
  ```
36
59
 
37
- If decisions exist, present them to the user:
60
+ Capture the new epic ID from output. Proceed to Step 3 (skip Step 2 since nothing exists yet).
61
+
62
+ ### Step 2: Check Existing State
63
+
64
+ **CRITICAL:** Before suggesting anything, check what already exists. Run BOTH commands using the epic ID from Step 1:
65
+
66
+ ```bash
67
+ jettypod decisions --epic=${EPIC_ID}
68
+ jettypod work children ${EPIC_ID}
69
+ ```
70
+
71
+ **Example** (if epic ID is 5):
72
+ ```bash
73
+ jettypod decisions --epic=5
74
+ jettypod work children 5
75
+ ```
76
+
77
+ Based on results, follow the appropriate path:
78
+
79
+ ---
80
+
81
+ **Path A: Nothing exists (no decisions AND no features)**
82
+
83
+ Fresh start. Proceed to Step 3 (Brainstorm Features).
84
+
85
+ ---
86
+
87
+ **Path B: Decisions exist but NO features**
88
+
89
+ Previous planning was started but not completed. Present existing decisions:
38
90
 
39
91
  ```
40
92
  🎯 **Existing Architectural Decisions for This Epic:**
@@ -42,20 +94,38 @@ If decisions exist, present them to the user:
42
94
  [For each decision:]
43
95
  - **[Aspect]:** [Decision]
44
96
  *Rationale:* [Why this was chosen]
45
- *Decided:* [Date]
46
97
 
47
- These decisions were made previously. Before we continue:
48
- 1. Do these decisions still apply?
49
- 2. Should we revisit any of them?
50
- 3. Are there additional aspects we need to decide?
98
+ These decisions were made previously. I'll use them to guide feature suggestions.
99
+ Do these still apply, or should we revisit any?
100
+ ```
101
+
102
+ **WAIT for confirmation**, then proceed to Step 3 (Brainstorm Features) using these decisions as context.
103
+
104
+ ---
105
+
106
+ **Path C: Features exist (with or without decisions)**
107
+
108
+ Planning was previously completed or partially completed. Present what exists:
109
+
51
110
  ```
111
+ 🎯 **This epic already has children:**
52
112
 
53
- Only proceed with suggesting new architectural options if:
54
- - No decisions exist yet, OR
55
- - User confirms decisions need to be revisited, OR
56
- - User identifies new aspects to decide
113
+ [List features/chores from children command]
114
+
115
+ **Options:**
116
+ 1. **Add more** - Brainstorm additional features
117
+ 2. **Continue planning** - Start feature-planning for one of these
118
+ 3. **Review decisions** - Check/update architectural decisions
119
+
120
+ What would you like to do?
121
+ ```
57
122
 
58
- ### Step 3: Brainstorm Features (Skip if Features Already Exist)
123
+ **Route based on response:**
124
+ - "Add more" → Step 3 (Brainstorm Features)
125
+ - "Continue planning" → Step 7B (skip 7A since you already have the children list)
126
+ - "Review decisions" → Step 4 (Architectural Decision)
127
+
128
+ ### Step 3: Brainstorm Features
59
129
 
60
130
  Based on the epic's purpose, suggest features that belong in this epic:
61
131
 
@@ -76,185 +146,184 @@ Based on [epic name], here are the features I recommend:
76
146
  What features should we include? What am I missing?
77
147
  ```
78
148
 
79
- ### Step 4: Architectural Decision (Optional)
80
-
81
- After features are defined, ask if this epic needs a shared technical approach:
82
-
83
- ```
84
- **Architectural question:** Does this epic need a shared technical decision?
85
-
86
- For example:
87
- - Which library/framework for this capability?
88
- - What data structure or protocol?
89
- - What architectural pattern?
90
-
91
- Examples where architectural decisions matter:
92
- - Real-time features: WebSockets vs SSE vs polling?
93
- - Auth system: Which auth library and token strategy?
94
- - Data sync: Optimistic vs pessimistic locking?
95
-
96
- Should we explore different architectural approaches?
97
- ```
98
-
99
- ### Step 5A: If Architectural Decision Needed
100
-
101
- If the epic needs architectural decision, suggest exactly 3 approaches:
102
-
103
- ```
104
- Here are 3 different architectural approaches for [epic name]:
105
-
106
- **Option 1: [Simple/Conservative approach name]**
107
- - **Pros**: ✅ [2-3 advantages - proven, reliable, fast to implement]
108
- - **Cons**: ❌ [2-3 trade-offs - limitations, constraints]
109
- - **Technical Impact**: [How this affects the features in this epic]
110
-
111
- **Option 2: [Balanced approach name]**
112
- - **Pros**: ✅ [2-3 advantages - good balance]
113
- - **Cons**: ❌ [2-3 trade-offs]
114
- - **Technical Impact**: [How this affects the features in this epic]
115
-
116
- **Option 3: [Advanced/Modern approach name]**
117
- - **Pros**: ✅ [2-3 advantages - powerful, flexible]
118
- - **Cons**: ❌ [2-3 trade-offs - complexity, learning curve]
119
- - **Technical Impact**: [How this affects the features in this epic]
149
+ **WAIT for user response.**
120
150
 
121
- **Additional approaches considered but not recommended:**
122
- - *[Alternative 1]*: [Brief] - Not selected because [reason]
123
- - *[Alternative 2]*: [Brief] - Not selected because [reason]
151
+ When user confirms features (says "looks good", "yes", lists modifications, etc.), finalize the feature list and proceed to Step 4.
124
152
 
125
- Would you like me to create working prototypes of these architectural approaches?
126
- ```
153
+ ### Step 4: Architectural Decision (Optional)
127
154
 
128
- ### Step 5B: If Prototyping Needed
155
+ After features are defined, ask if this epic needs a shared technical approach.
156
+
157
+ **Say to user:**
158
+ > **Architectural question:** Does this epic need a shared technical decision?
159
+ >
160
+ > For example:
161
+ > - Which library/framework for this capability?
162
+ > - What data structure or protocol?
163
+ > - What architectural pattern?
164
+ >
165
+ > Examples where architectural decisions matter:
166
+ > - Real-time features: WebSockets vs SSE vs polling?
167
+ > - Auth system: Which auth library and token strategy?
168
+ > - Data sync: Optimistic vs pessimistic locking?
169
+ >
170
+ > Should we explore different architectural approaches?
171
+
172
+ **Track the response:**
173
+ - If user says YES → Go to Step 5A
174
+ - If user says NO or "already know" → Go to Step 5C
175
+ - If unclear → Ask for clarification
176
+
177
+ ### Step 5A: Present Architectural Options
178
+
179
+ Present exactly 3 approaches. Fill in the bracketed parts with actual content based on the epic:
180
+
181
+ **Say to user:**
182
+ > Here are 3 different architectural approaches for **[fill in epic title]**:
183
+ >
184
+ > **Option 1: [Simple approach - you fill this in]**
185
+ > - **Pros**: ✅ [2-3 actual advantages]
186
+ > - **Cons**: ❌ [2-3 actual trade-offs]
187
+ > - **Technical Impact**: [How this affects the features]
188
+ >
189
+ > **Option 2: [Balanced approach - you fill this in]**
190
+ > - **Pros**: ✅ [2-3 actual advantages]
191
+ > - **Cons**: ❌ [2-3 actual trade-offs]
192
+ > - **Technical Impact**: [How this affects the features]
193
+ >
194
+ > **Option 3: [Advanced approach - you fill this in]**
195
+ > - **Pros**: ✅ [2-3 actual advantages]
196
+ > - **Cons**: ❌ [2-3 actual trade-offs]
197
+ > - **Technical Impact**: [How this affects the features]
198
+ >
199
+ > Would you like me to create working prototypes to compare these?
200
+
201
+ **Track the response:**
202
+ - If user wants prototypes → Go to Step 5B
203
+ - If user picks an option → Go to Step 6 (set `ARCH_DECISION_MADE = true`)
204
+ - If user skips → Go to Step 6 (set `ARCH_DECISION_MADE = false`)
205
+
206
+ ### Step 5B: Build Prototypes
129
207
 
130
208
  If user wants to prototype approaches:
131
209
 
132
- 1. Build 2-3 prototype approaches in `/prototypes/epic-[id]-[approach-name]/`
133
- 2. Each prototype should demonstrate the architectural difference
134
- 3. **Add prototype header**:
210
+ 1. Create prototype directory using the epic ID from Step 1:
211
+ ```bash
212
+ mkdir -p prototypes/epic-${EPIC_ID}-${APPROACH_NAME}
135
213
  ```
136
- // Prototype: Epic [epic-id] - [approach name]
137
- // Created: [date]
138
- // Purpose: Demonstrate [architectural aspect]
139
- // Decision: [to be filled after testing]
214
+
215
+ **Example** (if epic ID is 5, approach is "websockets"):
216
+ ```bash
217
+ mkdir -p prototypes/epic-5-websockets
140
218
  ```
141
- 4. After user tests, help them choose the winner
142
- 5. Document the decision and rationale
143
219
 
144
- ### Step 5C: If Approach Already Known
220
+ 2. Build 2-3 working prototypes demonstrating the architectural difference
145
221
 
146
- If user already knows the approach or skips prototyping:
222
+ 3. After user tests, ask which approach they prefer
147
223
 
148
- ```
149
- Which architectural approach works best for this epic?
150
- ```
224
+ 4. When user picks a winner → Go to Step 6 (set `ARCH_DECISION_MADE = true`)
151
225
 
152
- Then record their decision.
226
+ ### Step 5C: Skip Architecture (User Already Knows)
153
227
 
154
- ### Step 6: Create Features and Complete Discovery
228
+ If user says they already know the approach or don't need architectural decisions:
155
229
 
156
- Once features are defined and architectural decision is made (if needed):
230
+ **Say to user:**
231
+ > Got it. We'll skip architectural prototyping for this epic.
157
232
 
158
- **CRITICAL: You must EXECUTE commands using the Bash tool. Do NOT just display them as text.**
233
+ Set `ARCH_DECISION_MADE = false` and proceed directly to Step 6.
159
234
 
160
- #### Step 6A: Create Features
161
-
162
- **CRITICAL:** You MUST pass the `--parent=<epic-id>` flag with the actual numeric epic ID. Without this, features won't appear under the epic in the backlog tree.
235
+ ---
163
236
 
164
- Use the Bash tool to create each feature. Replace `<EPIC_ID>` with the actual epic ID number:
237
+ ### Step 6: Create Features
165
238
 
166
- ```javascript
167
- // CORRECT - uses actual numeric epic ID:
168
- jettypod work create feature "Live cursor tracking" "Track cursor positions in real-time" --parent=5
169
-
170
- // WRONG - missing parent flag (feature won't be under epic):
171
- jettypod work create feature "Live cursor tracking" "Track cursor positions in real-time"
172
- ```
239
+ **CRITICAL: Execute these commands with the Bash tool. Do NOT just display them.**
173
240
 
174
- For each feature, execute:
241
+ **Before you start:** Confirm you have the epic ID from Step 1. If you're unsure, run:
175
242
  ```bash
176
- jettypod work create feature "<Title>" "<Description>" --parent=<EPIC_ID>
243
+ jettypod backlog
177
244
  ```
178
245
 
179
- Display to user as you create each one:
180
- ```
181
- Creating features...
182
- ✅ Created Feature #123: [Feature 1]
183
- ✅ Created Feature #456: [Feature 2]
184
- ```
246
+ #### Step 6A: Create Each Feature
185
247
 
186
- #### Step 6B: Record Architectural Decision (if applicable)
248
+ For each feature the user agreed on, execute this command using the epic ID from Step 1:
187
249
 
188
- If an architectural decision was made, propose the rationale to the user:
250
+ ```bash
251
+ jettypod work create feature "${FEATURE_TITLE}" "${FEATURE_DESCRIPTION}" --parent=${EPIC_ID}
252
+ ```
189
253
 
254
+ **Example** (if epic ID is 5):
255
+ ```bash
256
+ jettypod work create feature "Live cursor tracking" "Track cursor positions in real-time" --parent=5
190
257
  ```
191
- I'm going to record this architectural decision:
192
258
 
193
- Aspect: Architecture
194
- Decision: [architectural approach chosen]
195
- Rationale: [why this approach was selected]
259
+ After each successful creation, tell the user:
260
+ > ✅ Created Feature #[id from output]: [title]
196
261
 
197
- Does this rationale capture why you chose this approach? (You can edit it if needed)
198
- ```
262
+ #### Step 6B: Record Architectural Decision (Conditional)
199
263
 
200
- **WAIT for user to confirm or provide edited rationale.**
264
+ **Check:** Did user select an architectural approach in Step 5A or 5B?
265
+ - If YES (user picked Option 1/2/3 or chose after prototyping) → Continue below
266
+ - If NO (user said "already know", skipped, declined, or Step 4 was answered "no") → Skip to Step 7
201
267
 
202
- **CRITICAL: After user confirms, use Bash tool to EXECUTE the epic-implement command:**
268
+ If an architectural decision was made:
203
269
 
204
- ```javascript
205
- // Use Bash tool to execute:
206
- jettypod work epic-implement [epic-id] \
207
- --aspect="Architecture" \
208
- --decision="[architectural approach chosen]" \
209
- --rationale="[user's confirmed/edited rationale]"
210
- ```
270
+ **Say to user:**
271
+ > I'm going to record this architectural decision:
272
+ >
273
+ > **Aspect:** Architecture
274
+ > **Decision:** [the approach they chose]
275
+ > **Rationale:** [why they chose it]
276
+ >
277
+ > Does this capture why you chose this approach? (You can edit it if needed)
211
278
 
212
- **DO NOT display this as example text. EXECUTE IT using the Bash tool.**
279
+ **WAIT for user confirmation.**
213
280
 
214
- After execution succeeds, display:
281
+ After user confirms, execute this command using the epic ID from Step 1 and the actual decision values:
215
282
 
216
- ```
217
- Architectural decision recorded
283
+ ```bash
284
+ jettypod work epic-implement ${EPIC_ID} --aspect="${ASPECT}" --decision="${DECISION}" --rationale="${RATIONALE}"
218
285
  ```
219
286
 
220
- Then proceed to Step 7.
287
+ **Example** (if epic ID is 5):
288
+ ```bash
289
+ jettypod work epic-implement 5 --aspect="Architecture" --decision="WebSockets with Socket.io" --rationale="Chosen for bi-directional real-time communication"
290
+ ```
221
291
 
222
- ### Step 7: Route to Next Planning Skill
292
+ After success, tell the user:
293
+ > ✅ Architectural decision recorded
223
294
 
224
- After features/chores are created (and architectural decision recorded if applicable), route to the appropriate planning skill.
295
+ ---
225
296
 
226
- #### Step 7A: Query Created Items
297
+ ### Step 7: Route to Next Planning Skill
227
298
 
228
- Query the database to find what was just created under this epic:
299
+ #### Step 7A: List Created Items
229
300
 
301
+ Run this command using the epic ID from Step 1:
230
302
  ```bash
231
- sqlite3 .jettypod/work.db "SELECT id, title, type FROM work_items WHERE parent_id = <EPIC_ID> ORDER BY id"
303
+ jettypod work children ${EPIC_ID}
232
304
  ```
233
305
 
234
- #### Step 7B: Display and Recommend
306
+ #### Step 7B: Recommend Next Item
235
307
 
236
- Display what was created and recommend which item to plan first:
308
+ Based on the output, recommend which item to plan first.
237
309
 
238
- ```
239
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
240
- 🎯 Epic Planning Complete!
241
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
242
-
243
- Created under this epic:
244
- Feature #[id]: [title]
245
- ✨ Feature #[id]: [title]
246
- 🔧 Chore #[id]: [title] (if any chores were created)
247
-
248
- 💡 Recommendation: Start with [Feature/Chore] #[id] ([title])
249
- [Reason - e.g., "It's foundational - other items may depend on it."]
250
-
251
- Plan this one now? [yes / pick different / done for now]
252
- ```
310
+ **Say to user:**
311
+ > ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
312
+ > 🎯 Epic Planning Complete!
313
+ > ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
314
+ >
315
+ > Created under this epic:
316
+ > [List the actual items from the children command output]
317
+ >
318
+ > 💡 Recommendation: Start with Feature #[actual id] ([actual title])
319
+ > [Your reasoning - e.g., "It's foundational - other features depend on it."]
320
+ >
321
+ > Plan this one now? [yes / pick different / done for now]
253
322
 
254
323
  **Recommendation logic:**
255
- - If features exist, recommend the first feature (features are typically foundational)
324
+ - Recommend the first feature (features are typically foundational)
256
325
  - If only chores exist, recommend the first chore
257
- - Provide brief reasoning for the recommendation
326
+ - Provide brief reasoning
258
327
 
259
328
  **WAIT for user response.**
260
329
 
@@ -268,7 +337,9 @@ Determine the skill to invoke based on item type:
268
337
  - **Feature** → invoke `feature-planning`
269
338
  - **Chore** → invoke `chore-planning`
270
339
 
271
- **IMMEDIATELY invoke the appropriate skill using the Skill tool:**
340
+ **Before invoking, state the item ID clearly in your response** (e.g., "I'll start planning Feature #42" or "Let's plan Chore #15"). This ensures the child skill has the ID in context.
341
+
342
+ **Then IMMEDIATELY invoke the appropriate skill using the Skill tool:**
272
343
 
273
344
  ```
274
345
  Use the Skill tool with skill: "feature-planning"