jettypod 4.4.116 → 4.4.120

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/.env +7 -0
  2. package/apps/dashboard/app/api/claude/[workItemId]/message/route.ts +124 -48
  3. package/apps/dashboard/app/api/claude/[workItemId]/route.ts +171 -58
  4. package/apps/dashboard/app/api/claude/sessions/[sessionId]/message/route.ts +161 -10
  5. package/apps/dashboard/app/api/tests/run/stream/route.ts +13 -1
  6. package/apps/dashboard/app/api/usage/route.ts +17 -0
  7. package/apps/dashboard/app/api/work/[id]/route.ts +35 -0
  8. package/apps/dashboard/app/api/work/[id]/status/route.ts +43 -1
  9. package/apps/dashboard/app/connect-claude/page.tsx +24 -0
  10. package/apps/dashboard/app/decision/[id]/page.tsx +14 -14
  11. package/apps/dashboard/app/demo/gates/page.tsx +42 -42
  12. package/apps/dashboard/app/design-system/page.tsx +868 -0
  13. package/apps/dashboard/app/globals.css +6 -2
  14. package/apps/dashboard/app/install-claude/page.tsx +9 -7
  15. package/apps/dashboard/app/layout.tsx +17 -5
  16. package/apps/dashboard/app/login/page.tsx +250 -0
  17. package/apps/dashboard/app/page.tsx +11 -9
  18. package/apps/dashboard/app/settings/page.tsx +4 -2
  19. package/apps/dashboard/app/signup/page.tsx +245 -0
  20. package/apps/dashboard/app/subscribe/page.tsx +11 -0
  21. package/apps/dashboard/app/welcome/page.tsx +24 -1
  22. package/apps/dashboard/app/work/[id]/page.tsx +34 -50
  23. package/apps/dashboard/components/AppShell.tsx +95 -55
  24. package/apps/dashboard/components/CardMenu.tsx +56 -13
  25. package/apps/dashboard/components/ClaudePanel.tsx +301 -582
  26. package/apps/dashboard/components/ClaudePanelInput.tsx +23 -14
  27. package/apps/dashboard/components/ConnectClaudeScreen.tsx +210 -0
  28. package/apps/dashboard/components/CopyableId.tsx +3 -3
  29. package/apps/dashboard/components/DetailReviewActions.tsx +109 -0
  30. package/apps/dashboard/components/DragContext.tsx +75 -65
  31. package/apps/dashboard/components/DraggableCard.tsx +6 -46
  32. package/apps/dashboard/components/DropZone.tsx +2 -2
  33. package/apps/dashboard/components/EditableDetailDescription.tsx +1 -1
  34. package/apps/dashboard/components/EditableTitle.tsx +26 -6
  35. package/apps/dashboard/components/ElapsedTimer.tsx +54 -0
  36. package/apps/dashboard/components/EpicGroup.tsx +329 -0
  37. package/apps/dashboard/components/GateCard.tsx +100 -16
  38. package/apps/dashboard/components/GateChoiceCard.tsx +15 -17
  39. package/apps/dashboard/components/InstallClaudeScreen.tsx +140 -51
  40. package/apps/dashboard/components/JettyLoader.tsx +38 -0
  41. package/apps/dashboard/components/KanbanBoard.tsx +147 -766
  42. package/apps/dashboard/components/KanbanCard.tsx +506 -0
  43. package/apps/dashboard/components/LazyMarkdown.tsx +12 -0
  44. package/apps/dashboard/components/MainNav.tsx +20 -54
  45. package/apps/dashboard/components/MessageBlock.tsx +391 -0
  46. package/apps/dashboard/components/ModeStartCard.tsx +15 -15
  47. package/apps/dashboard/components/OnboardingWelcome.tsx +214 -0
  48. package/apps/dashboard/components/PlaceholderCard.tsx +11 -21
  49. package/apps/dashboard/components/ProjectSwitcher.tsx +36 -8
  50. package/apps/dashboard/components/PrototypeTimeline.tsx +25 -25
  51. package/apps/dashboard/components/RealTimeKanbanWrapper.tsx +265 -301
  52. package/apps/dashboard/components/RealTimeTestsWrapper.tsx +97 -74
  53. package/apps/dashboard/components/ReviewFooter.tsx +141 -0
  54. package/apps/dashboard/components/SessionList.tsx +19 -18
  55. package/apps/dashboard/components/SubscribeContent.tsx +206 -0
  56. package/apps/dashboard/components/TestTree.tsx +15 -14
  57. package/apps/dashboard/components/TipCard.tsx +177 -0
  58. package/apps/dashboard/components/Toast.tsx +5 -5
  59. package/apps/dashboard/components/TypeIcon.tsx +56 -0
  60. package/apps/dashboard/components/UpgradeBanner.tsx +30 -0
  61. package/apps/dashboard/components/WaveCompletionAnimation.tsx +61 -62
  62. package/apps/dashboard/components/WelcomeScreen.tsx +25 -27
  63. package/apps/dashboard/components/WorkItemHeader.tsx +4 -4
  64. package/apps/dashboard/components/WorkItemTree.tsx +9 -28
  65. package/apps/dashboard/components/settings/AccountSection.tsx +169 -0
  66. package/apps/dashboard/components/settings/EnvVarsSection.tsx +54 -79
  67. package/apps/dashboard/components/settings/GeneralSection.tsx +26 -31
  68. package/apps/dashboard/components/settings/SettingsLayout.tsx +4 -4
  69. package/apps/dashboard/components/ui/Button.tsx +104 -0
  70. package/apps/dashboard/components/ui/Input.tsx +78 -0
  71. package/apps/dashboard/contexts/ClaudeSessionContext.tsx +408 -105
  72. package/apps/dashboard/contexts/ConnectionStatusContext.tsx +25 -4
  73. package/apps/dashboard/contexts/UsageContext.tsx +155 -0
  74. package/apps/dashboard/contexts/usageHelpers.js +9 -0
  75. package/apps/dashboard/electron/ipc-handlers.js +281 -88
  76. package/apps/dashboard/electron/main.js +691 -131
  77. package/apps/dashboard/electron/preload.js +25 -4
  78. package/apps/dashboard/electron/session-manager.js +163 -0
  79. package/apps/dashboard/electron-builder.config.js +3 -5
  80. package/apps/dashboard/hooks/useKanbanAnimation.ts +29 -0
  81. package/apps/dashboard/hooks/useKanbanUndo.ts +83 -0
  82. package/apps/dashboard/lib/backlog-parser.ts +50 -0
  83. package/apps/dashboard/lib/claude-process-manager.ts +50 -11
  84. package/apps/dashboard/lib/constants.ts +43 -0
  85. package/apps/dashboard/lib/db-bridge.ts +33 -0
  86. package/apps/dashboard/lib/db.ts +136 -20
  87. package/apps/dashboard/lib/kanban-utils.ts +70 -0
  88. package/apps/dashboard/lib/run-migrations.js +27 -2
  89. package/apps/dashboard/lib/session-state-machine.ts +3 -0
  90. package/apps/dashboard/lib/session-stream-manager.ts +144 -38
  91. package/apps/dashboard/lib/shadows.ts +7 -0
  92. package/apps/dashboard/lib/tests.ts +3 -1
  93. package/apps/dashboard/lib/utils.ts +6 -0
  94. package/apps/dashboard/next.config.js +35 -14
  95. package/apps/dashboard/package.json +6 -3
  96. package/apps/dashboard/public/bug-icon.svg +9 -0
  97. package/apps/dashboard/public/buoy-icon.svg +9 -0
  98. package/apps/dashboard/public/fonts/Satoshi-Variable.woff2 +0 -0
  99. package/apps/dashboard/public/fonts/Satoshi-VariableItalic.woff2 +0 -0
  100. package/apps/dashboard/public/in-flight-seagull.svg +9 -0
  101. package/apps/dashboard/public/jetty-icon-loading-alt.svg +11 -0
  102. package/apps/dashboard/public/jetty-icon-loading.svg +11 -0
  103. package/apps/dashboard/public/jettypod_logo.png +0 -0
  104. package/apps/dashboard/public/pier-icon.svg +14 -0
  105. package/apps/dashboard/public/star-icon.svg +9 -0
  106. package/apps/dashboard/public/wrench-icon.svg +9 -0
  107. package/apps/dashboard/scripts/upload-to-r2.js +89 -0
  108. package/apps/dashboard/scripts/ws-server.js +191 -0
  109. package/apps/dashboard/tsconfig.tsbuildinfo +1 -0
  110. package/apps/update-server/package.json +16 -0
  111. package/apps/update-server/schema.sql +31 -0
  112. package/apps/update-server/src/index.ts +1085 -0
  113. package/apps/update-server/tsconfig.json +16 -0
  114. package/apps/update-server/wrangler.toml +35 -0
  115. package/cucumber.js +9 -3
  116. package/docs/COMMAND_REFERENCE.md +34 -0
  117. package/hooks/post-checkout +32 -75
  118. package/hooks/post-merge +111 -10
  119. package/jest.setup.js +1 -0
  120. package/jettypod.js +54 -116
  121. package/lib/chore-taxonomy.js +33 -10
  122. package/lib/database.js +36 -16
  123. package/lib/db-watcher.js +1 -1
  124. package/lib/git-hooks/pre-commit +1 -1
  125. package/lib/jettypod-backup.js +27 -4
  126. package/lib/migrations/027-plan-at-creation-column.js +33 -0
  127. package/lib/migrations/028-ready-for-review-column.js +27 -0
  128. package/lib/migrations/029-remove-autoincrement.js +307 -0
  129. package/lib/migrations/029-rename-corrupted-to-cleaned.js +149 -0
  130. package/lib/migrations/index.js +47 -4
  131. package/lib/schema.js +13 -6
  132. package/lib/seed-onboarding.js +101 -69
  133. package/lib/update-command/index.js +9 -175
  134. package/lib/work-commands/index.js +129 -16
  135. package/lib/work-tracking/index.js +86 -46
  136. package/lib/worktree-diagnostics.js +16 -16
  137. package/lib/worktree-facade.js +1 -1
  138. package/lib/worktree-manager.js +8 -8
  139. package/lib/worktree-reconciler.js +5 -5
  140. package/package.json +9 -2
  141. package/scripts/ndjson-to-cucumber-json.js +152 -0
  142. package/scripts/postinstall.js +25 -0
  143. package/skills-templates/bug-mode/SKILL.md +39 -28
  144. package/skills-templates/bug-planning/SKILL.md +25 -29
  145. package/skills-templates/chore-mode/SKILL.md +131 -68
  146. package/skills-templates/chore-mode/verification.js +51 -10
  147. package/skills-templates/chore-planning/SKILL.md +47 -18
  148. package/skills-templates/epic-planning/SKILL.md +68 -48
  149. package/skills-templates/external-transition/SKILL.md +47 -47
  150. package/skills-templates/feature-planning/SKILL.md +83 -73
  151. package/skills-templates/production-mode/SKILL.md +49 -49
  152. package/skills-templates/request-routing/SKILL.md +27 -14
  153. package/skills-templates/simple-improvement/SKILL.md +68 -44
  154. package/skills-templates/speed-mode/SKILL.md +209 -128
  155. package/skills-templates/stable-mode/SKILL.md +105 -94
  156. package/templates/bdd-guidance.md +139 -0
  157. package/templates/bdd-scaffolding/wait.js +18 -0
  158. package/templates/bdd-scaffolding/world.js +19 -0
  159. package/.jettypod-backup/work.db +0 -0
  160. package/apps/dashboard/app/access-code/page.tsx +0 -110
  161. package/lib/discovery-checkpoint.js +0 -123
  162. package/skills-templates/project-discovery/SKILL.md +0 -372
@@ -30,7 +30,7 @@ When this skill is activated, you are helping implement a production mode chore
30
30
 
31
31
  ---
32
32
 
33
- ## 🛑 PRE-FLIGHT VALIDATION (REQUIRED)
33
+ ## PRE-FLIGHT VALIDATION (REQUIRED)
34
34
 
35
35
  **Before proceeding with ANY implementation, you MUST validate the worktree exists.**
36
36
 
@@ -44,23 +44,23 @@ sqlite3 .jettypod/work.db "SELECT wi.id, wi.title, wi.status, wt.worktree_path,
44
44
 
45
45
  | worktree_path | What it means | Action |
46
46
  |---------------|---------------|--------|
47
- | **Has a path** (e.g., `/path/to/.jettypod-work/...`) | Worktree exists, ready to proceed | Continue to Step 0 |
48
- | **NULL or empty** | `work start` was not called | **STOP - run `jettypod work start [chore-id]` first** |
49
- | **No rows returned** | No chore is in progress | **STOP - verify the chore exists and run `work start`** |
47
+ | **Has a path** (e.g., `/path/to/.jettypod-work/...`) | Worktree exists, ready to proceed | Continue to Step 0 |
48
+ | **NULL or empty** | `work start` was not called | **STOP - run `jettypod work start [chore-id]` first** |
49
+ | **No rows returned** | No chore is in progress | **STOP - verify the chore exists and run `work start`** |
50
50
 
51
- **🛑 STOP GATE:** If `worktree_path` is NULL or no rows returned, you MUST run `jettypod work start [chore-id]` before continuing. DO NOT proceed without a valid worktree.
51
+ **STOP GATE:** If `worktree_path` is NULL or no rows returned, you MUST run `jettypod work start [chore-id]` before continuing. DO NOT proceed without a valid worktree.
52
52
 
53
- **🚫 FORBIDDEN: Manual Git Worktree Commands**
53
+ **FORBIDDEN: Manual Git Worktree Commands**
54
54
  ```
55
- git worktree add ...
56
- git checkout -b feature/...
57
- git branch feature/...
55
+ git worktree add ...
56
+ git checkout -b feature/...
57
+ git branch feature/...
58
58
  ```
59
59
  **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.
60
60
 
61
61
  ---
62
62
 
63
- ## 🔒 WORKTREE PATH LOCK
63
+ ## WORKTREE PATH LOCK
64
64
 
65
65
  **After pre-flight validation passes, capture and lock the worktree path:**
66
66
 
@@ -70,7 +70,7 @@ From the pre-flight query output, extract and store:
70
70
  **Display:**
71
71
 
72
72
  ```
73
- 🔒 WORKTREE LOCK ACTIVE
73
+ WORKTREE LOCK ACTIVE
74
74
  Path: ${WORKTREE_PATH}
75
75
 
76
76
  All file writes will use this path.
@@ -94,11 +94,11 @@ jettypod ui gate worktree-started --data='{"path":"${WORKTREE_PATH}"}'
94
94
 
95
95
  **MUST RUN FIRST:** Detect which scenario applies to this feature.
96
96
 
97
- **🚫 FORBIDDEN: Writing Files at This Step**
97
+ **FORBIDDEN: Writing Files at This Step**
98
98
  ```
99
- Write tool to any path
100
- Edit tool to any path
101
- Any file creation or modification
99
+ Write tool to any path
100
+ Edit tool to any path
101
+ Any file creation or modification
102
102
  ```
103
103
  **This is a DETECTION step.** File writes happen in Step 3.
104
104
 
@@ -120,7 +120,7 @@ sqlite3 .jettypod/work.db "SELECT completed_at FROM work_items WHERE parent_id =
120
120
 
121
121
  Based on these checks, determine which scenario applies.
122
122
 
123
- **🔄 WORKFLOW INTEGRATION: Start workflow tracking**
123
+ **WORKFLOW INTEGRATION: Start workflow tracking**
124
124
 
125
125
  After detecting context, register this skill execution:
126
126
 
@@ -155,11 +155,11 @@ This validates that `stable_mode_complete` gate is passed and creates an executi
155
155
 
156
156
  **For all scenarios:** Read production standards file.
157
157
 
158
- **🚫 FORBIDDEN: Writing Files at This Step**
158
+ **FORBIDDEN: Writing Files at This Step**
159
159
  ```
160
- Write tool to any path
161
- Edit tool to any path
162
- Any file creation or modification
160
+ Write tool to any path
161
+ Edit tool to any path
162
+ Any file creation or modification
163
163
  ```
164
164
  **This is a READ step.** File writes happen in Step 3.
165
165
 
@@ -173,7 +173,7 @@ cat .jettypod/production-standards.json
173
173
 
174
174
  If the file doesn't exist, run external-transition first to generate production standards.
175
175
 
176
- **🔄 WORKFLOW CHECKPOINT: Standards read**
176
+ **WORKFLOW CHECKPOINT: Standards read**
177
177
 
178
178
  ```bash
179
179
  jettypod workflow checkpoint <feature-id> --step=1
@@ -185,11 +185,11 @@ jettypod workflow checkpoint <feature-id> --step=1
185
185
 
186
186
  **For Scenario A only:** Quick validation of existing scenarios.
187
187
 
188
- **🚫 FORBIDDEN: Writing Files at This Step**
188
+ **FORBIDDEN: Writing Files at This Step**
189
189
  ```
190
- Write tool to any path
191
- Edit tool to any path
192
- Any file creation or modification
190
+ Write tool to any path
191
+ Edit tool to any path
192
+ Any file creation or modification
193
193
  ```
194
194
  **This is a VALIDATION step.** File writes happen in Step 3.
195
195
 
@@ -208,19 +208,19 @@ try {
208
208
  });
209
209
 
210
210
  if (!feature.scenario_file) {
211
- console.error('Feature has no scenario file.');
211
+ console.error('Feature has no scenario file.');
212
212
  return;
213
213
  }
214
214
 
215
215
  // Validate scenarios against standards
216
216
  const validation = await validateScenarios(feature.scenario_file, standards);
217
217
 
218
- console.log(`✅ Validation complete:`);
218
+ console.log(`Validation complete:`);
219
219
  console.log(` - Covered: ${validation.covered}/${validation.total} standards`);
220
220
  console.log(` - Gaps: ${validation.gaps.length}`);
221
221
 
222
222
  if (validation.hasGaps) {
223
- console.log('\n⚠️ Missing scenarios for:');
223
+ console.log('\n Missing scenarios for:');
224
224
  validation.gaps.forEach(gap => {
225
225
  console.log(` - ${gap.domain}: ${gap.standardId}`);
226
226
  console.log(` ${gap.reasoning}`);
@@ -234,12 +234,12 @@ try {
234
234
  const newScenarios = await generateScenariosFromStandards(missingStandards);
235
235
 
236
236
  await appendScenarios(feature.scenario_file, newScenarios);
237
- console.log(`✅ Added ${newScenarios.length} missing scenarios`);
237
+ console.log(`Added ${newScenarios.length} missing scenarios`);
238
238
  } else {
239
- console.log('All standards are covered by existing scenarios');
239
+ console.log('All standards are covered by existing scenarios');
240
240
  }
241
241
  } catch (err) {
242
- console.error('Validation failed:', err.message);
242
+ console.error('Validation failed:', err.message);
243
243
  return;
244
244
  }
245
245
  ```
@@ -250,11 +250,11 @@ try {
250
250
 
251
251
  **For Scenario B only:** Re-validate with current standards.
252
252
 
253
- **🚫 FORBIDDEN: Writing Files at This Step**
253
+ **FORBIDDEN: Writing Files at This Step**
254
254
  ```
255
- Write tool to any path
256
- Edit tool to any path
257
- Any file creation or modification
255
+ Write tool to any path
256
+ Edit tool to any path
257
+ Any file creation or modification
258
258
  ```
259
259
  **This is a VALIDATION step.** File writes happen in Step 3.
260
260
 
@@ -263,7 +263,7 @@ const { validateScenarios } = require('../../lib/production-scenario-validator')
263
263
  const config = require('../../lib/config');
264
264
 
265
265
  try {
266
- console.log('🔄 Re-validating scenarios against current standards...');
266
+ console.log('Re-validating scenarios against current standards...');
267
267
 
268
268
  // Check if project state changed
269
269
  const projectConfig = config.read();
@@ -281,12 +281,12 @@ try {
281
281
  // Validate scenarios
282
282
  const validation = await validateScenarios(feature.scenario_file, standards);
283
283
 
284
- console.log(`✅ Re-validation complete:`);
284
+ console.log(`Re-validation complete:`);
285
285
  console.log(` - Covered: ${validation.covered}/${validation.total} standards`);
286
286
  console.log(` - New gaps: ${validation.gaps.length}`);
287
287
 
288
288
  if (validation.hasGaps) {
289
- console.log('\n⚠️ Standards added/changed since last run:');
289
+ console.log('\n Standards added/changed since last run:');
290
290
  validation.gaps.forEach(gap => {
291
291
  console.log(` - ${gap.domain}: ${gap.standardId}`);
292
292
  });
@@ -299,10 +299,10 @@ try {
299
299
  const newScenarios = await generateScenariosFromStandards(missingStandards);
300
300
 
301
301
  await appendScenarios(feature.scenario_file, newScenarios);
302
- console.log(`✅ Updated with ${newScenarios.length} new scenarios`);
302
+ console.log(`Updated with ${newScenarios.length} new scenarios`);
303
303
  }
304
304
  } catch (err) {
305
- console.error('Re-validation failed:', err.message);
305
+ console.error('Re-validation failed:', err.message);
306
306
  return;
307
307
  }
308
308
  ```
@@ -313,11 +313,11 @@ try {
313
313
 
314
314
  **For Scenario C only:** Generate production scenarios from standards.
315
315
 
316
- **🚫 FORBIDDEN: Writing Files at This Step**
316
+ **FORBIDDEN: Writing Files at This Step**
317
317
  ```
318
- Write tool to any path
319
- Edit tool to any path
320
- Any file creation or modification
318
+ Write tool to any path
319
+ Edit tool to any path
320
+ Any file creation or modification
321
321
  ```
322
322
  **This is a GENERATION step (via jettypod commands, not direct file writes).** File writes happen in Step 3.
323
323
 
@@ -335,7 +335,7 @@ This will:
335
335
  3. Append scenarios to the feature file
336
336
  4. Create production chores
337
337
 
338
- **🔄 WORKFLOW CHECKPOINT: Scenarios validated/generated** (after any Step 2 variant)
338
+ **WORKFLOW CHECKPOINT: Scenarios validated/generated** (after any Step 2 variant)
339
339
 
340
340
  ```bash
341
341
  jettypod workflow checkpoint <feature-id> --step=2
@@ -345,9 +345,9 @@ jettypod workflow checkpoint <feature-id> --step=2
345
345
 
346
346
  ### Step 3: Implement Production Chore
347
347
 
348
- **🔒 WORKTREE PATH REQUIRED:** All file writes MUST use the `WORKTREE_PATH` captured after pre-flight validation.
348
+ **WORKTREE PATH REQUIRED:** All file writes MUST use the `WORKTREE_PATH` captured after pre-flight validation.
349
349
 
350
- **✅ NOW you may write files** - worktree is locked, context is detected.
350
+ **NOW you may write files** - worktree is locked, context is detected.
351
351
 
352
352
  **Emit gate signal:**
353
353
 
@@ -373,7 +373,7 @@ Parse the chore description to find which scenario it addresses (look for "Scena
373
373
  npx cucumber-js <scenario-file> --name "<scenario-name>"
374
374
  ```
375
375
 
376
- **🔄 WORKFLOW CHECKPOINT: RED baseline established**
376
+ **WORKFLOW CHECKPOINT: RED baseline established**
377
377
 
378
378
  ```bash
379
379
  jettypod workflow checkpoint <feature-id> --step=3
@@ -444,7 +444,7 @@ Once all production chores complete:
444
444
  2. Can be deployed to external environment
445
445
  3. Meets all standards for scale, security, compliance
446
446
 
447
- **🔄 WORKFLOW INTEGRATION: Complete workflow**
447
+ **WORKFLOW INTEGRATION: Complete workflow**
448
448
 
449
449
  When all production chores are complete:
450
450
 
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: request-routing
3
- description: "ENTRY POINT FOR ALL WORK REQUESTS. Invoke this skill FIRST when user describes ANY work - 'build X', 'fix Y', 'add Z', 'create feature', 'implement'. Do NOT create work items or invoke other planning skills directly. This skill analyzes intent and routes to the correct workflow. (project)"
3
+ description: "ENTRY POINT FOR ALL WORK REQUESTS. Invoke this skill FIRST when user describes ANY work - 'build X', 'fix Y', 'add Z', 'create feature', 'implement'. Do NOT create work items or invoke other planning skills directly. This skill analyzes intent and routes to the correct workflow. (project)"
4
4
  ---
5
5
 
6
6
  # Request Routing Skill
7
7
 
8
- **⚡ UNIVERSAL ENTRY POINT** - This skill MUST be invoked FIRST when a user describes work they want done.
8
+ **UNIVERSAL ENTRY POINT** - This skill MUST be invoked FIRST when a user describes work they want done.
9
9
 
10
10
  **DO NOT:**
11
11
  - Create work items (`jettypod work create`) before invoking this skill
@@ -35,7 +35,7 @@ From the user's request, identify work type and complexity signals:
35
35
  | refactor, rename, move, clean up, upgrade, migrate, infrastructure | chore-planning |
36
36
  | add, build, create, implement, new feature, capability, workflow | feature-planning |
37
37
  | epic, initiative, project, roadmap, multi-feature | epic-planning |
38
- | tweak, change, update, adjust + small scope | simple-improvement |
38
+ | tweak, change, update, adjust + PURELY COSMETIC (text, color, spacing, copy only) | simple-improvement |
39
39
 
40
40
  **Complexity signals:**
41
41
  | Signal | Indicates |
@@ -46,6 +46,8 @@ From the user's request, identify work type and complexity signals:
46
46
  | Has edge cases to consider (validation, failures, states) | Higher complexity |
47
47
  | Could fail in interesting ways | Higher complexity |
48
48
  | Needs error handling design | Higher complexity |
49
+ | Adds or changes behavior (tracking, counting, filtering, sorting, state) | Higher complexity — NOT simple-improvement |
50
+ | Creates new capabilities (even small ones) | Higher complexity — NOT simple-improvement |
49
51
 
50
52
  ### Step 2: Gather Context (Silent - No Questions)
51
53
 
@@ -101,14 +103,14 @@ Are there edge cases to consider?
101
103
  │ (The speed→stable split helps: make it work, then handle edge cases)
102
104
 
103
105
 
104
- Is this substantial technical work?
105
- (Refactoring, infrastructure, migrations, multi-file changes)
106
- ├─► Yes chore-planning
106
+ Is this PURELY COSMETIC?
107
+ (Only changes text, copy, color, spacing, or static visual appearance?)
108
+ (Does NOT add/change any behavior, logic, tracking, data, or capabilities?)
109
+ ├─► Yes → simple-improvement
107
110
 
108
111
 
109
- Is this truly atomic?
110
- (No edge cases. Happy path IS the complete implementation.)
111
- └─► Yes → simple-improvement
112
+ Default chore-planning
113
+ (When in doubt, route to chore-planning, NEVER to simple-improvement)
112
114
  ```
113
115
 
114
116
  ## Route Definitions
@@ -119,8 +121,8 @@ Is this truly atomic?
119
121
  | **epic-planning (technical)** | Large technical initiative (refactor, migration, infrastructure) with no user-facing features | Break down → chores directly (no features, no modes) |
120
122
  | **epic-planning** | Large initiative spanning multiple features | Break down → plan features |
121
123
  | **feature-planning** | New behavior needing UX exploration OR has edge cases worth sequencing | UX exploration → BDD → speed → stable → production |
122
- | **chore-planning** | Substantial technical work, clear implementation | speedstable production |
123
- | **simple-improvement** | Atomic change where happy path IS the complete implementation | Direct implementation |
124
+ | **chore-planning** | Substantial technical work OR behavior-adding without edge cases | Type-specific verification done (enhancement type uses TDD) |
125
+ | **simple-improvement** | PURELY COSMETIC: text, copy, color, spacing changes only. No behavior change. | Direct implementation |
124
126
 
125
127
  ## Routing Examples
126
128
 
@@ -170,11 +172,22 @@ Is this truly atomic?
170
172
  **→ simple-improvement**
171
173
  - "Change the button text from 'Submit' to 'Save'"
172
174
  - "Make the error message more descriptive"
173
- - "Add a loading spinner to the save button"
174
175
  - "Change the header color to blue"
175
- - "Add a tooltip to the settings icon"
176
+ - "Update the placeholder text in the search box"
177
+ - "Increase the font size of the title"
176
178
 
177
- *(Truly atomic: no edge cases, no error states to design, happy path IS the complete implementation)*
179
+ *(PURELY COSMETIC: only text, copy, color, spacing, or static visual changes. Zero behavior change.)*
180
+
181
+ **NOT simple-improvement (common mistakes):**
182
+ - "Add a loading spinner to the save button" → **chore-planning** (adds behavior: state tracking, show/hide logic)
183
+ - "Add a tooltip to the settings icon" → **chore-planning** (adds behavior: hover state, positioning)
184
+ - "Track work item counts" → **feature-planning** (adds behavior: counting, state, display logic)
185
+ - "Add sorting to the list" → **feature-planning** (adds behavior: sort logic, state, UI interaction)
186
+ - "Show a count next to the tab" → **chore-planning** (adds behavior: data fetching, count computation)
187
+ - "Add a confirmation dialog" → **feature-planning** (adds behavior: modal state, user interaction, edge cases)
188
+ - "Make the sidebar collapsible" → **feature-planning** (adds behavior: toggle state, animation, persistence)
189
+
190
+ *(If it adds ANY new behavior — even "small" behavior — it is NOT a simple improvement.)*
178
191
 
179
192
  ## Stating Your Routing Decision
180
193
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: simple-improvement
3
- description: Guide implementation of simple improvements to existing functionality. Invoked by request-routing for straightforward changes like copy changes, styling tweaks, or minor behavior adjustments where the implementation is obvious. (project)
3
+ description: Guide implementation of PURELY COSMETIC changes. Invoked by request-routing ONLY for text, copy, color, and spacing changes that add zero new behavior. (project)
4
4
  ---
5
5
 
6
6
  # Simple Improvement Skill
@@ -18,24 +18,39 @@ description: Guide implementation of simple improvements to existing functionali
18
18
  └─────────────────────────────────────────────────────────────────────┘
19
19
  ```
20
20
 
21
- Lightweight workflow for basic enhancements to existing functionality. Bypasses the full speed/stable mode progression for simple changes.
21
+ Lightweight workflow for PURELY COSMETIC changes. Bypasses the full speed/stable mode progression because these changes have zero behavior impact.
22
22
 
23
23
  ## When to Use
24
24
 
25
- This skill is invoked by request-routing when work is identified as a **simple improvement**:
26
- - Copy/text changes
27
- - Styling tweaks
28
- - Minor behavior adjustments
29
- - Small bug fixes to existing functionality
25
+ This skill is invoked by request-routing ONLY for **purely cosmetic changes**:
26
+ - Text/copy changes (button labels, headings, descriptions, placeholder text)
27
+ - Color changes (background, text color, border color)
28
+ - Spacing/sizing changes (padding, margin, font size, width)
29
+ - Static visual appearance (border radius, opacity, font weight)
30
+
31
+ **The litmus test:** Could a non-developer make this change with a find-and-replace in a design tool? If yes, it's simple. If no, it's not.
30
32
 
31
33
  ## When NOT to Use
32
34
 
33
- Route back to request-routing for:
34
- - New functionality (even if small)
35
+ **If it adds or changes ANY behavior, it is NOT a simple improvement.** Route back to request-routing for:
36
+
37
+ - Adding interactive elements (tooltips, spinners, modals, collapsibles)
38
+ - Adding tracking/counting/state (counters, badges, progress indicators)
39
+ - Adding data fetching or computation
40
+ - Adding conditional logic (show/hide, enable/disable)
41
+ - Adding user interactions (hover effects with logic, drag-and-drop, sorting)
42
+ - New functionality of ANY size
35
43
  - Changes requiring new data models
36
44
  - Complex logic changes
37
45
  - Features needing error handling design
38
46
 
47
+ **Common misroutes — these are NOT simple improvements:**
48
+ - "Add a loading spinner" → has state (loading/not loading), show/hide logic
49
+ - "Show item count" → needs data query, computation, display logic
50
+ - "Add a tooltip" → hover detection, positioning, content logic
51
+ - "Make sidebar collapsible" → toggle state, persistence, animation
52
+ - "Add sorting" → sort logic, state management, UI interaction
53
+
39
54
  ---
40
55
 
41
56
  ## Instructions
@@ -58,7 +73,7 @@ Use the description from the user's initial request (passed through request-rout
58
73
  I need more details. What specifically needs to change?
59
74
  ```
60
75
 
61
- **⚡ WAIT for user to clarify, then proceed.**
76
+ **WAIT for user to clarify, then proceed.**
62
77
 
63
78
  **Otherwise, proceed directly with the clear description you already have.**
64
79
 
@@ -71,29 +86,34 @@ Scan the user's description for these patterns:
71
86
 
72
87
  | Signal | Keywords/Patterns |
73
88
  |--------|-------------------|
89
+ | New behavior | "add", "track", "count", "show", "display", "when", "toggle", "sort", "filter" |
90
+ | State management | "loading", "spinner", "collapse", "expand", "hover", "active", "selected" |
74
91
  | New data models | "new table", "add column", "database", "schema" |
75
92
  | New API | "new endpoint", "API", "new route" |
76
93
  | Complex logic | "if/else", "conditional", "depends on", multiple "and" clauses |
77
94
  | Multiple components | mentions 3+ different files/areas, "also need to" |
78
95
  | Architectural changes | "refactor", "restructure", "new system" |
79
96
 
80
- **Route back to request-routing if ANY complexity signal detected:**
97
+ **Route back to request-routing if ANY complexity signal detected:**
98
+ - Any new behavior (even "small" behavior like a spinner or tooltip)
99
+ - Any state management (loading, toggle, hover, selection)
81
100
  - New database tables/columns needed
82
101
  - New API endpoints required
83
102
  - Complex conditional logic
84
103
  - Multiple interconnected changes
85
104
  - Need for error handling design
86
105
 
87
- **Continue if the change is:**
106
+ **Continue ONLY if the change is:**
107
+ - Purely cosmetic (text, color, spacing, static visual appearance)
88
108
  - Single file or 2-3 related files
89
- - Modifying existing code (not creating new features)
90
- - Clear, specific scope
109
+ - Modifying existing static values (not adding logic)
110
+ - Zero new behavior, zero new state
91
111
  - No architectural decisions needed
92
112
 
93
113
  **If too complex:**
94
114
 
95
115
  ```
96
- ⚠️ This change appears to require new data models or architectural changes. This is more than a simple improvement.
116
+ This change appears to require new data models or architectural changes. This is more than a simple improvement.
97
117
 
98
118
  I'm routing you back to request-routing for proper planning.
99
119
  ```
@@ -105,7 +125,7 @@ I'm routing you back to request-routing for proper planning.
105
125
  **If confirmed simple:**
106
126
 
107
127
  ```
108
- Confirmed: This is a simple improvement.
128
+ Confirmed: This is a simple improvement.
109
129
 
110
130
  Change: [summarize the specific change]
111
131
  Scope: [list files likely affected]
@@ -127,14 +147,22 @@ jettypod ui gate route-decided --data='{"route":"simple-improvement","title":"[b
127
147
 
128
148
  **Create a single chore with NO mode assigned.**
129
149
 
150
+ Use the **Write** tool to create `/tmp/jettypod-create.json`:
151
+ ```json
152
+ {
153
+ "type": "chore",
154
+ "title": "[Brief description of the change]",
155
+ "description": "[Detailed description including:\n- What to change\n- Where to change it\n- Expected outcome]",
156
+ "parent": <feature-id>
157
+ }
158
+ ```
159
+
160
+ Then run via **Bash**:
130
161
  ```bash
131
- jettypod work create chore "[Brief description of the change]" "[Detailed description including:
132
- - What to change
133
- - Where to change it
134
- - Expected outcome]" --parent=<feature-id>
162
+ jettypod work create --from=/tmp/jettypod-create.json
135
163
  ```
136
164
 
137
- **IMPORTANT:** Do NOT use `--mode` flag. Simple improvements don't use speed/stable modes.
165
+ **IMPORTANT:** Do NOT add a `mode` field. Simple improvements don't use speed/stable modes.
138
166
 
139
167
  **Emit gate signal:**
140
168
 
@@ -145,7 +173,7 @@ jettypod ui gate work-created --data='{"id":[chore-id],"title":"[title]"}'
145
173
  **Display to user:**
146
174
 
147
175
  ```
148
- Created Chore #[id]: [title]
176
+ Created Chore #[id]: [title]
149
177
 
150
178
  Ready to implement. Starting chore...
151
179
  ```
@@ -155,7 +183,7 @@ Ready to implement. Starting chore...
155
183
  When the `jettypod work create` command fails, display error details and suggest recovery:
156
184
 
157
185
  ```
158
- Failed to create chore: [error message] ([error code if available])
186
+ Failed to create chore: [error message] ([error code if available])
159
187
 
160
188
  This could be caused by:
161
189
  • Database is locked by another process
@@ -169,7 +197,7 @@ Suggested actions:
169
197
  4. If persistent, try: jettypod work cleanup --all
170
198
  ```
171
199
 
172
- **⚡ WAIT for user to acknowledge before retrying or investigating further.**
200
+ **WAIT for user to acknowledge before retrying or investigating further.**
173
201
 
174
202
  Do NOT proceed to Step 3 until chore is successfully created.
175
203
 
@@ -185,7 +213,7 @@ Do NOT proceed to Step 3 until chore is successfully created.
185
213
  jettypod work start <chore-id>
186
214
  ```
187
215
 
188
- **🛑 STOP AND CHECK:** Verify worktree was created successfully before proceeding.
216
+ **STOP AND CHECK:** Verify worktree was created successfully before proceeding.
189
217
 
190
218
  ```bash
191
219
  sqlite3 .jettypod/work.db "SELECT worktree_path FROM worktrees WHERE work_item_id = <chore-id> AND status = 'active'"
@@ -205,13 +233,13 @@ jettypod ui gate worktree-started --data='{"path":"${WORKTREE_PATH}"}'
205
233
  **Display confirmation:**
206
234
 
207
235
  ```
208
- 📁 Worktree created: ${WORKTREE_PATH}
236
+ Worktree created: ${WORKTREE_PATH}
209
237
 
210
238
  From this point forward, ALL file operations MUST use paths starting with:
211
239
  ${WORKTREE_PATH}/
212
240
  ```
213
241
 
214
- **🔒 WORKTREE PATH LOCK:** Store `WORKTREE_PATH` - all file operations in this skill MUST use this path prefix.
242
+ **WORKTREE PATH LOCK:** Store `WORKTREE_PATH` - all file operations in this skill MUST use this path prefix.
215
243
 
216
244
  ---
217
245
 
@@ -230,7 +258,7 @@ jettypod ui gate implementing --data='{"description":"[what is being changed]","
230
258
  **Display progress:**
231
259
 
232
260
  ```
233
- 📝 Implementing change...
261
+ Implementing change...
234
262
 
235
263
  Modified: ${WORKTREE_PATH}/[relative path]
236
264
  Change: [what was changed]
@@ -253,7 +281,7 @@ Verifying...
253
281
 
254
282
  **If verification passes:**
255
283
 
256
- **🔒 WORKTREE PATH REQUIRED:** Use the `WORKTREE_PATH` captured in Step 3.
284
+ **WORKTREE PATH REQUIRED:** Use the `WORKTREE_PATH` captured in Step 3.
257
285
 
258
286
  ```bash
259
287
  # Commit the change
@@ -261,14 +289,14 @@ cd ${WORKTREE_PATH}
261
289
  git add .
262
290
  git commit -m "fix: [brief description]
263
291
 
264
- 🤖 Generated with [Claude Code](https://claude.com/claude-code)
292
+ Generated with [Claude Code](https://claude.com/claude-code)
265
293
 
266
294
  Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>"
267
295
  ```
268
296
 
269
297
  **Then merge (CRITICAL: run as separate Bash calls):**
270
298
 
271
- ⚠️ Shell CWD persists. You MUST run `cd` as a SEPARATE Bash tool call before merge.
299
+ Shell CWD persists. You MUST run `cd` as a SEPARATE Bash tool call before merge.
272
300
 
273
301
  ```bash
274
302
  # Bash call 1: Change to main repo
@@ -286,12 +314,12 @@ jettypod work cleanup <chore-id>
286
314
  When `jettypod work merge` encounters an error (e.g., merge conflicts), the worktree is preserved for debugging.
287
315
 
288
316
  ```
289
- Merge failed: [error message from git]
317
+ Merge failed: [error message from git]
290
318
 
291
319
  Conflicting files:
292
320
  • [list conflicting files if available]
293
321
 
294
- ⚠️ IMPORTANT: The worktree has been PRESERVED for debugging at:
322
+ IMPORTANT: The worktree has been PRESERVED for debugging at:
295
323
  [worktree-path]
296
324
 
297
325
  Resolution steps:
@@ -305,15 +333,12 @@ Resolution steps:
305
333
  Need help? Run: git status (in worktree) to see conflict status
306
334
  ```
307
335
 
308
- **⚡ WAIT for user to resolve conflicts before retrying.**
336
+ **WAIT for user to resolve conflicts before retrying.**
309
337
 
310
338
  Do NOT attempt to auto-resolve conflicts - let the user handle them manually.
311
339
 
312
- **Mark feature as done:**
313
-
314
- ```bash
315
- jettypod work status <feature-id> done
316
- ```
340
+ **The merge command automatically sets the feature as ready for review.**
341
+ It will appear with accept/reject buttons on the kanban board. Do NOT call `jettypod work status <feature-id> done` — that bypasses the review gate.
317
342
 
318
343
  **Emit gate signal:**
319
344
 
@@ -325,7 +350,7 @@ jettypod ui gate complete --data='{"summary":"[what was changed]","files":["[fil
325
350
 
326
351
  ```
327
352
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
328
- Simple Improvement Complete!
353
+ Simple Improvement Complete!
329
354
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
330
355
 
331
356
  Change: [what was changed]
@@ -354,8 +379,8 @@ No further action needed.
354
379
  ## Command Reference
355
380
 
356
381
  ```bash
357
- # Create chore (no mode)
358
- jettypod work create chore "<title>" "<description>" --parent=<feature-id>
382
+ # Create chore (no mode) - use Write tool for JSON, then:
383
+ jettypod work create --from=/tmp/jettypod-create.json
359
384
 
360
385
  # Start chore
361
386
  jettypod work start <chore-id>
@@ -367,6 +392,5 @@ jettypod work merge <chore-id> # Bash call 2
367
392
  # Cleanup
368
393
  jettypod work cleanup <chore-id>
369
394
 
370
- # Mark feature done
371
- jettypod work status <feature-id> done
395
+ # Do NOT mark feature done manually — merge sets the review gate automatically
372
396
  ```