jettypod 4.4.118 → 4.4.121
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env +4 -3
- package/Cargo.lock +6450 -0
- package/Cargo.toml +35 -0
- package/README.md +5 -1
- package/TAURI-MIGRATION-PLAN.md +840 -0
- package/apps/dashboard/app/connect-claude/page.tsx +5 -6
- package/apps/dashboard/app/decision/[id]/page.tsx +63 -58
- package/apps/dashboard/app/demo/gates/page.tsx +43 -45
- package/apps/dashboard/app/design-system/page.tsx +868 -0
- package/apps/dashboard/app/globals.css +80 -4
- package/apps/dashboard/app/install-claude/page.tsx +4 -6
- package/apps/dashboard/app/login/page.tsx +72 -54
- package/apps/dashboard/app/page.tsx +101 -48
- package/apps/dashboard/app/settings/page.tsx +61 -13
- package/apps/dashboard/app/signup/page.tsx +242 -0
- package/apps/dashboard/app/subscribe/page.tsx +0 -2
- package/apps/dashboard/app/tests/page.tsx +37 -4
- package/apps/dashboard/app/welcome/page.tsx +13 -16
- package/apps/dashboard/app/work/[id]/page.tsx +117 -118
- package/apps/dashboard/app/work/[id]/proof/page.tsx +1489 -0
- package/apps/dashboard/components/AppShell.tsx +92 -85
- package/apps/dashboard/components/CardMenu.tsx +45 -12
- package/apps/dashboard/components/ClaudePanel.tsx +771 -850
- package/apps/dashboard/components/ClaudePanelInput.tsx +43 -15
- package/apps/dashboard/components/ConnectClaudeScreen.tsx +17 -34
- package/apps/dashboard/components/CopyableId.tsx +3 -4
- package/apps/dashboard/components/DetailReviewActions.tsx +100 -0
- package/apps/dashboard/components/DragContext.tsx +134 -63
- package/apps/dashboard/components/DraggableCard.tsx +3 -5
- package/apps/dashboard/components/DropZone.tsx +6 -7
- package/apps/dashboard/components/EditableDetailDescription.tsx +7 -13
- package/apps/dashboard/components/EditableDetailTitle.tsx +6 -13
- package/apps/dashboard/components/EditableTitle.tsx +26 -7
- package/apps/dashboard/components/ElapsedTimer.tsx +66 -0
- package/apps/dashboard/components/EpicGroup.tsx +359 -0
- package/apps/dashboard/components/GateCard.tsx +79 -17
- package/apps/dashboard/components/GateChoiceCard.tsx +15 -18
- package/apps/dashboard/components/InstallClaudeScreen.tsx +15 -32
- package/apps/dashboard/components/JettyLoader.tsx +37 -0
- package/apps/dashboard/components/KanbanBoard.tsx +368 -958
- package/apps/dashboard/components/KanbanCard.tsx +740 -0
- package/apps/dashboard/components/LazyCard.tsx +62 -0
- package/apps/dashboard/components/LazyMarkdown.tsx +11 -0
- package/apps/dashboard/components/MainNav.tsx +38 -73
- package/apps/dashboard/components/MessageBlock.tsx +468 -0
- package/apps/dashboard/components/ModeStartCard.tsx +15 -16
- package/apps/dashboard/components/OnboardingWelcome.tsx +213 -0
- package/apps/dashboard/components/PlaceholderCard.tsx +3 -4
- package/apps/dashboard/components/ProjectSwitcher.tsx +30 -30
- package/apps/dashboard/components/PrototypeTimeline.tsx +72 -51
- package/apps/dashboard/components/RealTimeKanbanWrapper.tsx +406 -388
- package/apps/dashboard/components/RealTimeTestsWrapper.tsx +373 -235
- package/apps/dashboard/components/ReviewFooter.tsx +139 -0
- package/apps/dashboard/components/SessionList.tsx +19 -19
- package/apps/dashboard/components/SubscribeContent.tsx +91 -47
- package/apps/dashboard/components/TestTree.tsx +16 -16
- package/apps/dashboard/components/TipCard.tsx +16 -17
- package/apps/dashboard/components/Toast.tsx +5 -6
- package/apps/dashboard/components/TypeIcon.tsx +55 -0
- package/apps/dashboard/components/ViewModeToolbar.tsx +104 -0
- package/apps/dashboard/components/WaveCompletionAnimation.tsx +52 -65
- package/apps/dashboard/components/WelcomeScreen.tsx +19 -35
- package/apps/dashboard/components/WorkItemHeader.tsx +4 -5
- package/apps/dashboard/components/WorkItemTree.tsx +11 -32
- package/apps/dashboard/components/settings/AccountSection.tsx +55 -35
- package/apps/dashboard/components/settings/AiContextSection.tsx +89 -0
- package/apps/dashboard/components/settings/ContextDocumentsSection.tsx +317 -0
- package/apps/dashboard/components/settings/EnvVarsSection.tsx +74 -152
- package/apps/dashboard/components/settings/GeneralSection.tsx +162 -56
- package/apps/dashboard/components/settings/ProjectStackSection.tsx +948 -0
- package/apps/dashboard/components/settings/SettingsLayout.tsx +4 -5
- package/apps/dashboard/components/ui/Button.tsx +104 -0
- package/apps/dashboard/components/ui/Input.tsx +78 -0
- package/apps/dashboard/components.json +1 -1
- package/apps/dashboard/contexts/ClaudeSessionContext.tsx +711 -418
- package/apps/dashboard/contexts/ConnectionStatusContext.tsx +25 -5
- package/apps/dashboard/contexts/UsageContext.tsx +87 -32
- package/apps/dashboard/dev.sh +35 -0
- package/apps/dashboard/eslint.config.mjs +9 -9
- package/apps/dashboard/hooks/useKanbanAnimation.ts +29 -0
- package/apps/dashboard/hooks/useKanbanUndo.ts +83 -0
- package/apps/dashboard/hooks/useWebSocket.ts +138 -83
- package/apps/dashboard/index.html +73 -0
- package/apps/dashboard/lib/constants.ts +43 -0
- package/apps/dashboard/lib/data-bridge.ts +722 -0
- package/apps/dashboard/lib/db.ts +69 -1265
- package/apps/dashboard/lib/environment-config.ts +173 -0
- package/apps/dashboard/lib/environment-verification.ts +119 -0
- package/apps/dashboard/lib/kanban-utils.ts +270 -0
- package/apps/dashboard/lib/proof-run.ts +495 -0
- package/apps/dashboard/lib/proof-scenario-runner.ts +346 -0
- package/apps/dashboard/lib/run-migrations.js +27 -2
- package/apps/dashboard/lib/service-recovery.ts +326 -0
- package/apps/dashboard/lib/session-state-machine.ts +1 -0
- package/apps/dashboard/lib/session-state-utils.ts +0 -164
- package/apps/dashboard/lib/session-stream-manager.ts +308 -134
- package/apps/dashboard/lib/shadows.ts +7 -0
- package/apps/dashboard/lib/stream-manager-registry.ts +46 -6
- package/apps/dashboard/lib/tauri-bridge.ts +102 -0
- package/apps/dashboard/lib/tauri.ts +106 -0
- package/apps/dashboard/lib/utils.ts +6 -0
- package/apps/dashboard/next-env.d.ts +1 -1
- package/apps/dashboard/package.json +21 -32
- package/apps/dashboard/public/bug-icon.png +0 -0
- package/apps/dashboard/public/buoy-icon.png +0 -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.png +0 -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.png +0 -0
- package/apps/dashboard/public/star-icon.png +0 -0
- package/apps/dashboard/public/wrench-icon.png +0 -0
- package/apps/dashboard/scripts/tauri-build.js +228 -0
- package/apps/dashboard/scripts/upload-tauri-to-r2.js +125 -0
- package/apps/dashboard/scripts/ws-server.js +191 -0
- package/apps/dashboard/src/main.tsx +12 -0
- package/apps/dashboard/src/router.tsx +107 -0
- package/apps/dashboard/src/vite-env.d.ts +1 -0
- package/apps/dashboard/tsconfig.json +7 -12
- package/apps/dashboard/tsconfig.tsbuildinfo +1 -1
- package/apps/dashboard/vite.config.ts +33 -0
- package/apps/update-server/src/index.ts +228 -80
- package/claude-hooks/global-guardrails.js +14 -13
- package/crates/jettypod-cli/Cargo.toml +19 -0
- package/crates/jettypod-cli/src/commands.rs +1249 -0
- package/crates/jettypod-cli/src/main.rs +595 -0
- package/crates/jettypod-core/Cargo.toml +26 -0
- package/crates/jettypod-core/build.rs +98 -0
- package/crates/jettypod-core/migrations/V1__baseline.sql +197 -0
- package/crates/jettypod-core/migrations/V2__work_items_indexes.sql +6 -0
- package/crates/jettypod-core/migrations/V3__qa_steps.sql +2 -0
- package/crates/jettypod-core/src/auth.rs +294 -0
- package/crates/jettypod-core/src/config.rs +397 -0
- package/crates/jettypod-core/src/db/mod.rs +507 -0
- package/crates/jettypod-core/src/db/recovery.rs +114 -0
- package/crates/jettypod-core/src/db/startup.rs +101 -0
- package/crates/jettypod-core/src/db/validate.rs +149 -0
- package/crates/jettypod-core/src/error.rs +76 -0
- package/crates/jettypod-core/src/git.rs +458 -0
- package/crates/jettypod-core/src/lib.rs +20 -0
- package/crates/jettypod-core/src/sessions.rs +625 -0
- package/crates/jettypod-core/src/skills.rs +556 -0
- package/crates/jettypod-core/src/work.rs +1086 -0
- package/crates/jettypod-core/src/worktree.rs +628 -0
- package/crates/jettypod-core/src/ws.rs +767 -0
- package/cucumber-test.cjs +6 -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 +145 -116
- package/lib/bdd-preflight.js +96 -0
- 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/merge-lock.js +111 -253
- package/lib/migrations/027-plan-at-creation-column.js +3 -1
- package/lib/migrations/029-remove-autoincrement.js +307 -0
- package/lib/migrations/029-rename-corrupted-to-cleaned.js +149 -0
- package/lib/migrations/030-rejection-round-columns.js +54 -0
- package/lib/migrations/031-session-isolation-index.js +17 -0
- package/lib/migrations/index.js +47 -4
- package/lib/schema.js +10 -5
- package/lib/seed-onboarding.js +1 -1
- package/lib/update-command/index.js +9 -175
- package/lib/work-commands/index.js +144 -19
- package/lib/work-tracking/index.js +148 -27
- 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 +79 -20
- package/skills-templates/bug-planning/SKILL.md +25 -29
- package/skills-templates/chore-mode/SKILL.md +171 -69
- package/skills-templates/chore-mode/verification.js +51 -10
- package/skills-templates/chore-planning/SKILL.md +47 -18
- package/skills-templates/design-system-selection/SKILL.md +273 -0
- package/skills-templates/epic-planning/SKILL.md +82 -48
- package/skills-templates/external-transition/SKILL.md +47 -47
- package/skills-templates/feature-planning/SKILL.md +173 -74
- package/skills-templates/production-mode/SKILL.md +69 -49
- package/skills-templates/request-routing/SKILL.md +4 -4
- package/skills-templates/simple-improvement/SKILL.md +74 -29
- package/skills-templates/speed-mode/SKILL.md +217 -141
- package/skills-templates/stable-mode/SKILL.md +148 -89
- package/apps/dashboard/README.md +0 -36
- package/apps/dashboard/app/api/claude/[workItemId]/message/route.ts +0 -386
- package/apps/dashboard/app/api/claude/[workItemId]/pin/route.ts +0 -24
- package/apps/dashboard/app/api/claude/[workItemId]/route.ts +0 -167
- package/apps/dashboard/app/api/claude/sessions/[sessionId]/content/route.ts +0 -52
- package/apps/dashboard/app/api/claude/sessions/[sessionId]/message/route.ts +0 -378
- package/apps/dashboard/app/api/claude/sessions/[sessionId]/pin/route.ts +0 -24
- package/apps/dashboard/app/api/claude/sessions/cleanup/route.ts +0 -34
- package/apps/dashboard/app/api/claude/sessions/route.ts +0 -184
- package/apps/dashboard/app/api/decisions/[id]/route.ts +0 -25
- package/apps/dashboard/app/api/internal/set-project/route.ts +0 -17
- package/apps/dashboard/app/api/kanban/route.ts +0 -15
- package/apps/dashboard/app/api/settings/env-vars/route.ts +0 -125
- package/apps/dashboard/app/api/settings/general/route.ts +0 -21
- package/apps/dashboard/app/api/tests/route.ts +0 -9
- package/apps/dashboard/app/api/tests/run/route.ts +0 -82
- package/apps/dashboard/app/api/tests/run/stream/route.ts +0 -71
- package/apps/dashboard/app/api/tests/undefined/route.ts +0 -9
- package/apps/dashboard/app/api/usage/route.ts +0 -17
- package/apps/dashboard/app/api/work/[id]/description/route.ts +0 -21
- package/apps/dashboard/app/api/work/[id]/epic/route.ts +0 -21
- package/apps/dashboard/app/api/work/[id]/order/route.ts +0 -21
- package/apps/dashboard/app/api/work/[id]/status/route.ts +0 -21
- package/apps/dashboard/app/api/work/[id]/title/route.ts +0 -21
- package/apps/dashboard/app/layout.tsx +0 -43
- package/apps/dashboard/components/UpgradeBanner.tsx +0 -29
- package/apps/dashboard/electron/ipc-handlers.js +0 -1028
- package/apps/dashboard/electron/main.js +0 -2124
- package/apps/dashboard/electron/preload.js +0 -123
- package/apps/dashboard/electron/session-manager.js +0 -141
- package/apps/dashboard/electron-builder.config.js +0 -357
- package/apps/dashboard/hooks/useClaudeSessions.ts +0 -299
- package/apps/dashboard/lib/claude-process-manager.ts +0 -492
- package/apps/dashboard/lib/db-bridge.ts +0 -282
- package/apps/dashboard/lib/prototypes.ts +0 -202
- package/apps/dashboard/lib/test-results-db.ts +0 -307
- package/apps/dashboard/lib/tests.ts +0 -282
- package/apps/dashboard/next.config.js +0 -50
- package/apps/dashboard/postcss.config.mjs +0 -7
- package/apps/dashboard/public/file.svg +0 -1
- package/apps/dashboard/public/globe.svg +0 -1
- package/apps/dashboard/public/next.svg +0 -1
- package/apps/dashboard/public/vercel.svg +0 -1
- package/apps/dashboard/public/window.svg +0 -1
- package/apps/dashboard/scripts/download-node.js +0 -104
- package/apps/dashboard/scripts/upload-to-r2.js +0 -89
- package/docs/bdd-guidance.md +0 -390
|
@@ -17,7 +17,7 @@ When this skill is activated, you are helping plan an epic. Follow this structur
|
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
20
|
-
|
|
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
|
|
|
@@ -212,6 +221,14 @@ Based on [epic name], here are the features I recommend:
|
|
|
212
221
|
**Feature 3: [Name]** - [Brief description]
|
|
213
222
|
...
|
|
214
223
|
|
|
224
|
+
**UX Completeness Check:**
|
|
225
|
+
For each feature above, I've considered:
|
|
226
|
+
- How users discover/reach it (entry point)
|
|
227
|
+
- What they see while waiting (loading states)
|
|
228
|
+
- What they see when there's no data (empty states)
|
|
229
|
+
- What feedback they get after actions (success/error)
|
|
230
|
+
- How screens transition between states
|
|
231
|
+
|
|
215
232
|
**Questions:**
|
|
216
233
|
- [Any clarifying questions about scope]
|
|
217
234
|
- [Missing features to consider]
|
|
@@ -252,7 +269,7 @@ When user confirms chores (says "looks good", "yes", lists modifications, etc.),
|
|
|
252
269
|
|
|
253
270
|
### Step 4: Architectural Decision (Optional)
|
|
254
271
|
|
|
255
|
-
|
|
272
|
+
**SKIP THIS STEP if `IS_TECHNICAL_EPIC = true`** - Technical epics don't need architectural decisions. Go directly to Step 6.
|
|
256
273
|
|
|
257
274
|
After features are defined, ask if this epic needs a shared technical approach.
|
|
258
275
|
|
|
@@ -284,18 +301,18 @@ Present exactly 3 approaches. Fill in the bracketed parts with actual content ba
|
|
|
284
301
|
> Here are 3 different architectural approaches for **[fill in epic title]**:
|
|
285
302
|
>
|
|
286
303
|
> **Option 1: [Simple approach - you fill this in]**
|
|
287
|
-
> - **Pros**:
|
|
288
|
-
> - **Cons**:
|
|
304
|
+
> - **Pros**: [2-3 actual advantages]
|
|
305
|
+
> - **Cons**: [2-3 actual trade-offs]
|
|
289
306
|
> - **Technical Impact**: [How this affects the features]
|
|
290
307
|
>
|
|
291
308
|
> **Option 2: [Balanced approach - you fill this in]**
|
|
292
|
-
> - **Pros**:
|
|
293
|
-
> - **Cons**:
|
|
309
|
+
> - **Pros**: [2-3 actual advantages]
|
|
310
|
+
> - **Cons**: [2-3 actual trade-offs]
|
|
294
311
|
> - **Technical Impact**: [How this affects the features]
|
|
295
312
|
>
|
|
296
313
|
> **Option 3: [Advanced approach - you fill this in]**
|
|
297
|
-
> - **Pros**:
|
|
298
|
-
> - **Cons**:
|
|
314
|
+
> - **Pros**: [2-3 actual advantages]
|
|
315
|
+
> - **Cons**: [2-3 actual trade-offs]
|
|
299
316
|
> - **Technical Impact**: [How this affects the features]
|
|
300
317
|
>
|
|
301
318
|
> Would you like me to create working prototypes to compare these?
|
|
@@ -322,10 +339,16 @@ jettypod work prototype start 5 websockets
|
|
|
322
339
|
|
|
323
340
|
This creates a worktree at `.jettypod-work/prototype-<id>-<slug>-<approach>/` where prototypes can be safely built and committed.
|
|
324
341
|
|
|
325
|
-
|
|
342
|
+
**STOP AND CHECK:** Verify worktree was created successfully before proceeding.
|
|
326
343
|
|
|
327
344
|
**Sub-step 2: Build prototypes in the worktree**
|
|
328
345
|
|
|
346
|
+
**Design system check:** Before building, check if a design system directory is configured:
|
|
347
|
+
```bash
|
|
348
|
+
node -e "const c=JSON.parse(require('fs').readFileSync('.jettypod/config.json','utf-8')); c.designSystemDir && console.log(c.designSystemDir)"
|
|
349
|
+
```
|
|
350
|
+
If a path is returned, read the files in that directory and apply the project's design tokens (colors, typography, spacing, border radii, component patterns) to all prototypes.
|
|
351
|
+
|
|
329
352
|
1. Build prototypes using **absolute paths** to the worktree:
|
|
330
353
|
- `<worktree_path>/prototypes/epic-${EPIC_ID}-${APPROACH_NAME}/`
|
|
331
354
|
2. Build 2-3 working prototypes demonstrating the architectural difference
|
|
@@ -380,24 +403,30 @@ jettypod backlog
|
|
|
380
403
|
|
|
381
404
|
**If `IS_TECHNICAL_EPIC = true`:** Create chores
|
|
382
405
|
|
|
383
|
-
For each chore the user agreed on,
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
406
|
+
For each chore the user agreed on, use the **Write** tool to create `/tmp/jettypod-create.json`:
|
|
407
|
+
```json
|
|
408
|
+
{
|
|
409
|
+
"type": "chore",
|
|
410
|
+
"title": "${CHORE_TITLE}",
|
|
411
|
+
"description": "${CHORE_DESCRIPTION}",
|
|
412
|
+
"parent": ${EPIC_ID}
|
|
413
|
+
}
|
|
387
414
|
```
|
|
388
415
|
|
|
389
|
-
|
|
416
|
+
Then run via **Bash**:
|
|
390
417
|
```bash
|
|
391
|
-
jettypod work create
|
|
418
|
+
jettypod work create --from=/tmp/jettypod-create.json
|
|
392
419
|
```
|
|
393
420
|
|
|
421
|
+
**Example** (if epic ID is 5): Write `{"type":"chore","title":"Migrate auth module to ESM","description":"Convert require() to import in auth/","parent":5}` to `/tmp/jettypod-create.json`, then run `jettypod work create --from=/tmp/jettypod-create.json`.
|
|
422
|
+
|
|
394
423
|
After each successful creation, emit gate signal and tell the user:
|
|
395
424
|
|
|
396
425
|
```bash
|
|
397
426
|
jettypod ui gate work-created --data='{"id":[id],"title":"[chore title]"}'
|
|
398
427
|
```
|
|
399
428
|
|
|
400
|
-
>
|
|
429
|
+
> Created Chore #[id from output]: [title]
|
|
401
430
|
|
|
402
431
|
**Then skip to Step 7** (no architectural decision for technical epics).
|
|
403
432
|
|
|
@@ -405,24 +434,30 @@ jettypod ui gate work-created --data='{"id":[id],"title":"[chore title]"}'
|
|
|
405
434
|
|
|
406
435
|
**If `IS_TECHNICAL_EPIC = false`:** Create features
|
|
407
436
|
|
|
408
|
-
For each feature the user agreed on,
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
437
|
+
For each feature the user agreed on, use the **Write** tool to create `/tmp/jettypod-create.json`:
|
|
438
|
+
```json
|
|
439
|
+
{
|
|
440
|
+
"type": "feature",
|
|
441
|
+
"title": "${FEATURE_TITLE}",
|
|
442
|
+
"description": "${FEATURE_DESCRIPTION}",
|
|
443
|
+
"parent": ${EPIC_ID}
|
|
444
|
+
}
|
|
412
445
|
```
|
|
413
446
|
|
|
414
|
-
|
|
447
|
+
Then run via **Bash**:
|
|
415
448
|
```bash
|
|
416
|
-
jettypod work create
|
|
449
|
+
jettypod work create --from=/tmp/jettypod-create.json
|
|
417
450
|
```
|
|
418
451
|
|
|
452
|
+
**Example** (if epic ID is 5): Write `{"type":"feature","title":"Live cursor tracking","description":"Track cursor positions in real-time","parent":5}` to `/tmp/jettypod-create.json`, then run `jettypod work create --from=/tmp/jettypod-create.json`.
|
|
453
|
+
|
|
419
454
|
After each successful creation, emit gate signal and tell the user:
|
|
420
455
|
|
|
421
456
|
```bash
|
|
422
457
|
jettypod ui gate work-created --data='{"id":[id],"title":"[feature title]"}'
|
|
423
458
|
```
|
|
424
459
|
|
|
425
|
-
>
|
|
460
|
+
> Created Feature #[id from output]: [title]
|
|
426
461
|
|
|
427
462
|
#### Step 6B: Record Architectural Decision (Conditional)
|
|
428
463
|
|
|
@@ -455,7 +490,7 @@ jettypod work epic-implement 5 --aspect="Architecture" --decision="WebSockets wi
|
|
|
455
490
|
```
|
|
456
491
|
|
|
457
492
|
After success, tell the user:
|
|
458
|
-
>
|
|
493
|
+
> Architectural decision recorded
|
|
459
494
|
|
|
460
495
|
---
|
|
461
496
|
|
|
@@ -474,13 +509,13 @@ Based on the output, recommend which item to plan first.
|
|
|
474
509
|
|
|
475
510
|
**Say to user:**
|
|
476
511
|
> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
477
|
-
>
|
|
512
|
+
> Epic Planning Complete!
|
|
478
513
|
> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
479
514
|
>
|
|
480
515
|
> Created under this epic:
|
|
481
516
|
> [List the actual items from the children command output]
|
|
482
517
|
>
|
|
483
|
-
>
|
|
518
|
+
> Recommendation: Start with Feature #[actual id] ([actual title])
|
|
484
519
|
> [Your reasoning - e.g., "It's foundational - other features depend on it."]
|
|
485
520
|
>
|
|
486
521
|
> Plan this one now? [yes / pick different / done for now]
|
|
@@ -526,9 +561,9 @@ Display a numbered list of all created items:
|
|
|
526
561
|
```
|
|
527
562
|
Which item would you like to plan?
|
|
528
563
|
|
|
529
|
-
1.
|
|
530
|
-
2.
|
|
531
|
-
3.
|
|
564
|
+
1. Feature #[id]: [title]
|
|
565
|
+
2. Feature #[id]: [title]
|
|
566
|
+
3. Chore #[id]: [title]
|
|
532
567
|
|
|
533
568
|
Enter the number of your choice:
|
|
534
569
|
```
|
|
@@ -558,7 +593,7 @@ Chores:
|
|
|
558
593
|
Or run: jettypod backlog to see all items.
|
|
559
594
|
```
|
|
560
595
|
|
|
561
|
-
|
|
596
|
+
**WORKFLOW INTEGRATION: Complete workflow**
|
|
562
597
|
|
|
563
598
|
```bash
|
|
564
599
|
jettypod workflow complete epic-planning <epic-id>
|
|
@@ -593,18 +628,18 @@ Epic: "Real-time Collaboration"
|
|
|
593
628
|
**Architectural approaches suggested:**
|
|
594
629
|
|
|
595
630
|
**Option 1: Long Polling (REST)**
|
|
596
|
-
- **Pros**:
|
|
597
|
-
- **Cons**:
|
|
631
|
+
- **Pros**: Simple, works with all proxies, uses existing HTTP infrastructure
|
|
632
|
+
- **Cons**: Higher latency (1-2s), more server load, inefficient for high-frequency updates
|
|
598
633
|
- **Technical Impact**: Each feature polls independently, easy to implement per feature
|
|
599
634
|
|
|
600
635
|
**Option 2: Server-Sent Events (SSE)**
|
|
601
|
-
- **Pros**:
|
|
602
|
-
- **Cons**:
|
|
636
|
+
- **Pros**: Lightweight, auto-reconnection, efficient one-way streaming
|
|
637
|
+
- **Cons**: One-direction only (server→client), limited browser connections (6 per domain)
|
|
603
638
|
- **Technical Impact**: Good for cursor/presence, requires separate POST for edits
|
|
604
639
|
|
|
605
640
|
**Option 3: WebSockets (Socket.io)**
|
|
606
|
-
- **Pros**:
|
|
607
|
-
- **Cons**:
|
|
641
|
+
- **Pros**: Bidirectional, low latency (<100ms), perfect for real-time, fallback support
|
|
642
|
+
- **Cons**: More complex infrastructure, requires sticky sessions, WebSocket proxies needed
|
|
608
643
|
- **Technical Impact**: All features use unified connection, best UX but infrastructure complexity
|
|
609
644
|
|
|
610
645
|
**Additional approaches considered:**
|
|
@@ -657,13 +692,12 @@ Epic: "Migrate Codebase from CommonJS to ESM"
|
|
|
657
692
|
|
|
658
693
|
**Architectural decision:** Skipped (not needed for technical work)
|
|
659
694
|
|
|
660
|
-
**Commands run:**
|
|
695
|
+
**Commands run (Write tool + Bash for each):**
|
|
661
696
|
```bash
|
|
662
|
-
|
|
663
|
-
jettypod work create
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
jettypod work create chore "Update test configuration" "Update Jest config for ESM" --parent=42
|
|
697
|
+
# For each chore: Write JSON to /tmp/jettypod-create.json, then:
|
|
698
|
+
jettypod work create --from=/tmp/jettypod-create.json
|
|
699
|
+
# Repeated for: Migrate utility modules, Migrate lib modules,
|
|
700
|
+
# Migrate core business logic, Update build configuration, Update test configuration
|
|
667
701
|
```
|
|
668
702
|
|
|
669
703
|
**Routing:** All chores route to `chore-planning` → `chore-mode` (no mode progression)
|
|
@@ -31,7 +31,7 @@ Say to the user:
|
|
|
31
31
|
```
|
|
32
32
|
You're ready to transition to external state. Here's what that means:
|
|
33
33
|
|
|
34
|
-
|
|
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
|