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