@hustle-together/api-dev-tools 3.12.3 → 4.5.1

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 (159) hide show
  1. package/.claude/adr-requests/.gitkeep +10 -0
  2. package/.claude/agents/adr-researcher.md +109 -0
  3. package/.claude/agents/visual-analyzer.md +183 -0
  4. package/.claude/api-dev-state.json +7 -463
  5. package/.claude/documentation-audit.json +114 -0
  6. package/.claude/registry.json +289 -0
  7. package/.claude/settings.json +45 -1
  8. package/.claude/workflow-logs/None.json +49 -0
  9. package/.claude/workflow-logs/session-20251230-143727.json +106 -0
  10. package/.skills/adr-deep-research/SKILL.md +351 -0
  11. package/.skills/api-create/SKILL.md +116 -17
  12. package/.skills/api-research/SKILL.md +130 -0
  13. package/.skills/docs-sync/SKILL.md +260 -0
  14. package/.skills/docs-update/SKILL.md +205 -0
  15. package/.skills/hustle-brand/SKILL.md +368 -0
  16. package/.skills/hustle-build/SKILL.md +786 -0
  17. package/.skills/hustle-build-review/SKILL.md +518 -0
  18. package/.skills/parallel-spawn/SKILL.md +212 -0
  19. package/.skills/ralph-continue/SKILL.md +151 -0
  20. package/.skills/ralph-loop/SKILL.md +341 -0
  21. package/.skills/ralph-status/SKILL.md +87 -0
  22. package/.skills/refactor/SKILL.md +59 -0
  23. package/.skills/shadcn/SKILL.md +522 -0
  24. package/.skills/test-all/SKILL.md +210 -0
  25. package/.skills/test-builds/SKILL.md +208 -0
  26. package/.skills/test-debug/SKILL.md +212 -0
  27. package/.skills/test-e2e/SKILL.md +168 -0
  28. package/.skills/test-review/SKILL.md +707 -0
  29. package/.skills/test-unit/SKILL.md +143 -0
  30. package/.skills/test-visual/SKILL.md +301 -0
  31. package/.skills/token-report/SKILL.md +132 -0
  32. package/CHANGELOG.md +575 -0
  33. package/README.md +426 -56
  34. package/bin/cli.js +1538 -88
  35. package/commands/hustle-api-create.md +22 -0
  36. package/commands/hustle-build.md +259 -0
  37. package/commands/hustle-combine.md +81 -2
  38. package/commands/hustle-ui-create-page.md +84 -2
  39. package/commands/hustle-ui-create.md +82 -2
  40. package/hooks/__pycache__/api-workflow-check.cpython-314.pyc +0 -0
  41. package/hooks/__pycache__/auto-answer.cpython-314.pyc +0 -0
  42. package/hooks/__pycache__/cache-research.cpython-314.pyc +0 -0
  43. package/hooks/__pycache__/check-api-routes.cpython-314.pyc +0 -0
  44. package/hooks/__pycache__/check-playwright-setup.cpython-314.pyc +0 -0
  45. package/hooks/__pycache__/check-storybook-setup.cpython-314.pyc +0 -0
  46. package/hooks/__pycache__/check-update.cpython-314.pyc +0 -0
  47. package/hooks/__pycache__/completion-promise-detector.cpython-314.pyc +0 -0
  48. package/hooks/__pycache__/context-capacity-warning.cpython-314.pyc +0 -0
  49. package/hooks/__pycache__/detect-interruption.cpython-314.pyc +0 -0
  50. package/hooks/__pycache__/docs-update-check.cpython-314.pyc +0 -0
  51. package/hooks/__pycache__/enforce-a11y-audit.cpython-314.pyc +0 -0
  52. package/hooks/__pycache__/enforce-brand-guide.cpython-314.pyc +0 -0
  53. package/hooks/__pycache__/enforce-component-type-confirm.cpython-314.pyc +0 -0
  54. package/hooks/__pycache__/enforce-deep-research.cpython-314.pyc +0 -0
  55. package/hooks/__pycache__/enforce-disambiguation.cpython-314.pyc +0 -0
  56. package/hooks/__pycache__/enforce-documentation.cpython-314.pyc +0 -0
  57. package/hooks/__pycache__/enforce-dry-run.cpython-314.pyc +0 -0
  58. package/hooks/__pycache__/enforce-environment.cpython-314.pyc +0 -0
  59. package/hooks/__pycache__/enforce-external-research.cpython-314.pyc +0 -0
  60. package/hooks/__pycache__/enforce-freshness.cpython-314.pyc +0 -0
  61. package/hooks/__pycache__/enforce-interview.cpython-314.pyc +0 -0
  62. package/hooks/__pycache__/enforce-page-components.cpython-314.pyc +0 -0
  63. package/hooks/__pycache__/enforce-page-data-schema.cpython-314.pyc +0 -0
  64. package/hooks/__pycache__/enforce-questions-sourced.cpython-314.pyc +0 -0
  65. package/hooks/__pycache__/enforce-refactor.cpython-314.pyc +0 -0
  66. package/hooks/__pycache__/enforce-research.cpython-314.pyc +0 -0
  67. package/hooks/__pycache__/enforce-schema-from-interview.cpython-314.pyc +0 -0
  68. package/hooks/__pycache__/enforce-schema.cpython-314.pyc +0 -0
  69. package/hooks/__pycache__/enforce-scope.cpython-314.pyc +0 -0
  70. package/hooks/__pycache__/enforce-tdd-red.cpython-314.pyc +0 -0
  71. package/hooks/__pycache__/enforce-ui-disambiguation.cpython-314.pyc +0 -0
  72. package/hooks/__pycache__/enforce-ui-interview.cpython-314.pyc +0 -0
  73. package/hooks/__pycache__/enforce-verify.cpython-314.pyc +0 -0
  74. package/hooks/__pycache__/generate-adr-options.cpython-314.pyc +0 -0
  75. package/hooks/__pycache__/generate-manifest-entry.cpython-314.pyc +0 -0
  76. package/hooks/__pycache__/hook_utils.cpython-314.pyc +0 -0
  77. package/hooks/__pycache__/notify-input-needed.cpython-314.pyc +0 -0
  78. package/hooks/__pycache__/notify-phase-complete.cpython-314.pyc +0 -0
  79. package/hooks/__pycache__/ntfy-on-question.cpython-314.pyc +0 -0
  80. package/hooks/__pycache__/orchestrator-completion.cpython-314.pyc +0 -0
  81. package/hooks/__pycache__/orchestrator-handoff.cpython-314.pyc +0 -0
  82. package/hooks/__pycache__/orchestrator-session-startup.cpython-314.pyc +0 -0
  83. package/hooks/__pycache__/parallel-orchestrator.cpython-314.pyc +0 -0
  84. package/hooks/__pycache__/periodic-reground.cpython-314.pyc +0 -0
  85. package/hooks/__pycache__/project-document-prompt.cpython-314.pyc +0 -0
  86. package/hooks/__pycache__/remote-question-proxy.cpython-314.pyc +0 -0
  87. package/hooks/__pycache__/remote-question-server.cpython-314.pyc +0 -0
  88. package/hooks/__pycache__/run-code-review.cpython-314.pyc +0 -0
  89. package/hooks/__pycache__/run-visual-qa.cpython-314.pyc +0 -0
  90. package/hooks/__pycache__/session-logger.cpython-314.pyc +0 -0
  91. package/hooks/__pycache__/session-startup.cpython-314.pyc +0 -0
  92. package/hooks/__pycache__/track-scope-coverage.cpython-314.pyc +0 -0
  93. package/hooks/__pycache__/track-token-usage.cpython-314.pyc +0 -0
  94. package/hooks/__pycache__/track-tool-use.cpython-314.pyc +0 -0
  95. package/hooks/__pycache__/update-adr-decision.cpython-314.pyc +0 -0
  96. package/hooks/__pycache__/update-api-showcase.cpython-314.pyc +0 -0
  97. package/hooks/__pycache__/update-registry.cpython-314.pyc +0 -0
  98. package/hooks/__pycache__/update-ui-showcase.cpython-314.pyc +0 -0
  99. package/hooks/__pycache__/verify-after-green.cpython-314.pyc +0 -0
  100. package/hooks/__pycache__/verify-implementation.cpython-314.pyc +0 -0
  101. package/hooks/api-workflow-check.py +34 -0
  102. package/hooks/auto-answer.py +305 -0
  103. package/hooks/check-update.py +132 -0
  104. package/hooks/completion-promise-detector.py +293 -0
  105. package/hooks/context-capacity-warning.py +171 -0
  106. package/hooks/docs-update-check.py +120 -0
  107. package/hooks/enforce-dry-run.py +134 -0
  108. package/hooks/enforce-external-research.py +25 -0
  109. package/hooks/enforce-interview.py +20 -0
  110. package/hooks/generate-adr-options.py +282 -0
  111. package/hooks/hook_utils.py +609 -0
  112. package/hooks/lib/__pycache__/__init__.cpython-314.pyc +0 -0
  113. package/hooks/lib/__pycache__/greptile.cpython-314.pyc +0 -0
  114. package/hooks/lib/__pycache__/ntfy.cpython-314.pyc +0 -0
  115. package/hooks/ntfy-on-question.py +240 -0
  116. package/hooks/orchestrator-completion.py +313 -0
  117. package/hooks/orchestrator-handoff.py +267 -0
  118. package/hooks/orchestrator-session-startup.py +146 -0
  119. package/hooks/parallel-orchestrator.py +451 -0
  120. package/hooks/periodic-reground.py +270 -67
  121. package/hooks/project-document-prompt.py +302 -0
  122. package/hooks/remote-question-proxy.py +284 -0
  123. package/hooks/remote-question-server.py +1224 -0
  124. package/hooks/run-code-review.py +176 -29
  125. package/hooks/run-visual-qa.py +338 -0
  126. package/hooks/session-logger.py +27 -1
  127. package/hooks/session-startup.py +113 -0
  128. package/hooks/update-adr-decision.py +236 -0
  129. package/hooks/update-api-showcase.py +13 -1
  130. package/hooks/update-testing-checklist.py +195 -0
  131. package/hooks/update-ui-showcase.py +13 -1
  132. package/package.json +7 -3
  133. package/scripts/extract-schema-docs.cjs +322 -0
  134. package/templates/.skills/hustle-interview/SKILL.md +174 -0
  135. package/templates/CLAUDE-SECTION.md +89 -64
  136. package/templates/adr-viewer/_components/ADRViewer.tsx +326 -0
  137. package/templates/api-dev-state.json +33 -1
  138. package/templates/api-showcase/_components/APIModal.tsx +100 -8
  139. package/templates/api-showcase/_components/APIShowcase.tsx +36 -4
  140. package/templates/api-showcase/_components/APITester.tsx +367 -58
  141. package/templates/brand-page/page.tsx +645 -0
  142. package/templates/component/Component.visual.spec.ts +30 -24
  143. package/templates/docs/page.tsx +230 -0
  144. package/templates/eslint-plugin-zod-schema/index.js +446 -0
  145. package/templates/eslint-plugin-zod-schema/package.json +26 -0
  146. package/templates/github-workflows/security.yml +274 -0
  147. package/templates/hustle-build-defaults.json +136 -0
  148. package/templates/hustle-dev-dashboard/page.tsx +365 -0
  149. package/templates/page/page.e2e.test.ts +30 -26
  150. package/templates/performance-budgets.json +63 -5
  151. package/templates/playwright-report/page.tsx +258 -0
  152. package/templates/registry.json +279 -3
  153. package/templates/review-dashboard/page.tsx +510 -0
  154. package/templates/settings.json +155 -7
  155. package/templates/test-results/page.tsx +237 -0
  156. package/templates/typedoc.json +19 -0
  157. package/templates/ui-showcase/_components/UIShowcase.tsx +48 -1
  158. package/templates/ui-showcase/_components/VisualTestingDashboard.tsx +579 -0
  159. package/templates/ui-showcase/page.tsx +1 -1
@@ -0,0 +1,518 @@
1
+ ---
2
+ name: hustle-build-review
3
+ description: Review auto-build results, decisions, and logs. Analyze what happened during a /hustle-build execution.
4
+ license: MIT
5
+ compatibility: Requires Claude Code with hooks configured
6
+ metadata:
7
+ version: "4.0.0"
8
+ category: "review"
9
+ tags: ["review", "audit", "analysis", "auto-mode"]
10
+ author: "Hustle Together"
11
+ allowed-tools: Read Glob Grep WebFetch AskUserQuestion TodoWrite
12
+ ---
13
+
14
+ # Hustle Build Review - Auto-Build Analysis
15
+
16
+ Review and analyze the results of a `/hustle-build` execution. Essential for understanding what decisions were made in auto-mode and identifying areas for improvement.
17
+
18
+ ## Usage
19
+
20
+ ```
21
+ /hustle-build-review [build-id]
22
+ /hustle-build-review --latest
23
+ /hustle-build-review --list
24
+ ```
25
+
26
+ ## Arguments
27
+
28
+ - `$ARGUMENTS` - Build ID to review (e.g., `build-2025-12-28-dashboard`)
29
+ - `--latest` - Review the most recent build
30
+ - `--list` - List all available build logs
31
+
32
+ ---
33
+
34
+ ## Phase 1: Load Build Data
35
+
36
+ ### 1.1 Find Build Log
37
+
38
+ If `--list`:
39
+ ```bash
40
+ ls -la .claude/workflow-logs/build-*.json
41
+ ```
42
+
43
+ Display table:
44
+ ```
45
+ Available Builds:
46
+ | Build ID | Date | Status | Elements |
47
+ |-----------------------------|------------|----------|----------|
48
+ | build-2025-12-28-dashboard | 2025-12-28 | complete | 8 |
49
+ | build-2025-12-27-checkout | 2025-12-27 | complete | 5 |
50
+ | build-2025-12-26-auth | 2025-12-26 | failed | 3 |
51
+ ```
52
+
53
+ If `--latest`:
54
+ - Find most recent `build-*.json` file
55
+ - Load that build ID
56
+
57
+ ### 1.2 Load Files
58
+
59
+ Load from `.claude/`:
60
+ - `hustle-build-state.json` - Orchestration state
61
+ - `workflow-logs/[build-id].json` - Detailed log
62
+ - `registry.json` - Created elements
63
+
64
+ ---
65
+
66
+ ## Phase 2: Executive Summary
67
+
68
+ Present high-level overview:
69
+
70
+ ```
71
+ BUILD REVIEW: [Build ID]
72
+ ============================================================
73
+
74
+ Status: [complete/failed/interrupted]
75
+ Duration: [X minutes]
76
+ Mode: [interactive/auto]
77
+
78
+ CREATED:
79
+ APIs: X new + Y combined
80
+ Components: X new
81
+ Pages: X new
82
+
83
+ TESTS:
84
+ Total: X tests
85
+ Passed: X (XX%)
86
+ Failed: X
87
+
88
+ DECISIONS:
89
+ Total Questions: X
90
+ Auto-Answered: X (if auto mode)
91
+ User-Answered: X
92
+
93
+ ============================================================
94
+ ```
95
+
96
+ ---
97
+
98
+ ## Phase 3: Decision Audit
99
+
100
+ ### 3.1 Orchestrator Decisions
101
+
102
+ Show high-level decisions from orchestrator interview:
103
+
104
+ ```
105
+ ORCHESTRATOR DECISIONS
106
+ ----------------------
107
+
108
+ Q1: Authentication
109
+ Answer: Protected (requires login)
110
+ Source: [user | auto-comprehensive | default]
111
+ Applied: All 8 elements
112
+
113
+ Q2: Error Handling
114
+ Answer: Partial success
115
+ Source: [user | auto-comprehensive | default]
116
+ Applied: Combined API, individual APIs
117
+
118
+ Q3: Brand Guide
119
+ Answer: Yes, use BRAND_GUIDE.md
120
+ Source: [user | auto-comprehensive | default]
121
+ Applied: All components, page
122
+
123
+ Q4: Testing Level
124
+ Answer: Full TDD (all 14 phases)
125
+ Source: [user | auto-comprehensive | default]
126
+ Applied: All elements
127
+ ```
128
+
129
+ ### 3.2 Per-Element Decisions
130
+
131
+ For each element, show workflow-specific decisions:
132
+
133
+ ```
134
+ ELEMENT: user-stats (API)
135
+ -------------------------
136
+
137
+ Interview Questions:
138
+ Q: "Which stats to include?"
139
+ Answer: Comprehensive (all available)
140
+ Source: auto-comprehensive
141
+ Reason: "Selected most comprehensive option"
142
+
143
+ Q: "Rate limiting?"
144
+ Answer: Yes, 100 req/min
145
+ Source: default (hustle-build-defaults.json)
146
+
147
+ Q: "Caching strategy?"
148
+ Answer: Individual (per-endpoint)
149
+ Source: shared_decisions (orchestrator)
150
+
151
+ Would you have answered differently? [View code to adjust]
152
+ ```
153
+
154
+ ### 3.3 Decision Summary Table
155
+
156
+ ```
157
+ DECISION SUMMARY
158
+ ----------------
159
+
160
+ | Element | Questions | Auto | User | Default | Shared |
161
+ |--------------|-----------|------|------|---------|--------|
162
+ | user-stats | 3 | 1 | 0 | 1 | 1 |
163
+ | chart-data | 3 | 2 | 0 | 0 | 1 |
164
+ | StatCard | 4 | 3 | 0 | 0 | 1 |
165
+ | Dashboard | 2 | 1 | 0 | 0 | 1 |
166
+ | TOTAL | 12 | 7 | 0 | 1 | 4 |
167
+ ```
168
+
169
+ ---
170
+
171
+ ## Phase 4: Workflow Analysis
172
+
173
+ ### 4.1 Execution Timeline
174
+
175
+ Show how workflows executed:
176
+
177
+ ```
178
+ EXECUTION TIMELINE
179
+ ------------------
180
+
181
+ 10:00:00 BUILD START
182
+ 10:00:15 Orchestrator interview complete (4 questions)
183
+
184
+ TIER 1 (APIs - parallel eligible):
185
+ 10:00:30 [api] user-stats START
186
+ 10:08:45 [api] user-stats COMPLETE (8m 15s, 4 tests)
187
+ 10:08:50 [api] chart-data START
188
+ 10:17:22 [api] chart-data COMPLETE (8m 32s, 4 tests)
189
+ 10:17:25 [api] dashboard-metrics START
190
+ 10:25:40 [api] dashboard-metrics COMPLETE (8m 15s, 4 tests)
191
+
192
+ TIER 2 (Combined API):
193
+ 10:25:45 [combined] dashboard-data START
194
+ 10:38:20 [combined] dashboard-data COMPLETE (12m 35s, 8 tests)
195
+
196
+ TIER 3 (Components):
197
+ 10:38:25 [component] StatCard START
198
+ 10:50:10 [component] StatCard COMPLETE (11m 45s, 5 tests)
199
+ 10:50:15 [component] ChartWidget START
200
+ 11:02:30 [component] ChartWidget COMPLETE (12m 15s, 5 tests)
201
+
202
+ TIER 4 (Page):
203
+ 11:02:35 [page] Dashboard START
204
+ 11:22:50 [page] Dashboard COMPLETE (20m 15s, 17 tests)
205
+
206
+ 11:23:00 Cross-workflow wiring
207
+ 11:25:00 Final verification (47 tests)
208
+ 11:26:30 Documentation rollup
209
+
210
+ 11:27:00 BUILD COMPLETE
211
+
212
+ Total Duration: 87 minutes
213
+ ```
214
+
215
+ ### 4.2 Per-Element Details
216
+
217
+ For each element, show:
218
+
219
+ ```
220
+ ELEMENT DETAIL: user-stats (API)
221
+ ================================
222
+
223
+ Phases Completed: 14/14
224
+ Duration: 8m 15s
225
+ Tests: 4 passed, 0 failed
226
+
227
+ Files Created:
228
+ - src/app/api/v2/user-stats/route.ts
229
+ - src/lib/schemas/user-stats.schema.ts
230
+ - src/app/api/v2/user-stats/__tests__/route.test.ts
231
+
232
+ Registry Entry:
233
+ {
234
+ "name": "user-stats",
235
+ "type": "api",
236
+ "path": "/api/v2/user-stats",
237
+ "schema": "src/lib/schemas/user-stats.schema.ts",
238
+ "exportedTypes": ["UserStatsResponse", "UserStatsParams"]
239
+ }
240
+
241
+ Research Sources:
242
+ - Context7: /supabase/supabase (user stats patterns)
243
+ - WebSearch: "user statistics API best practices 2025"
244
+ ```
245
+
246
+ ---
247
+
248
+ ## Phase 5: Issues & Resolutions
249
+
250
+ ### 5.1 Issues Encountered
251
+
252
+ ```
253
+ ISSUES ENCOUNTERED
254
+ ------------------
255
+
256
+ Issue #1:
257
+ Workflow: chart-data
258
+ Phase: TDD Green (Phase 9)
259
+ Problem: Test failed on first attempt
260
+ Error: "TypeError: chartType is not defined"
261
+
262
+ Resolution: Retried, passed on attempt 2
263
+ Auto-fix: Yes (retry logic)
264
+
265
+ Code diff:
266
+ - const type = chartType;
267
+ + const type = params.chartType ?? 'line';
268
+
269
+ Issue #2:
270
+ Workflow: Dashboard (page)
271
+ Phase: Verification (Phase 10)
272
+ Problem: Missing loading state
273
+
274
+ Resolution: Added Suspense boundary
275
+ Auto-fix: Yes (verification loop)
276
+
277
+ Code added:
278
+ + <Suspense fallback={<DashboardSkeleton />}>
279
+ ```
280
+
281
+ ### 5.2 Unresolved Issues
282
+
283
+ If any:
284
+
285
+ ```
286
+ UNRESOLVED ISSUES
287
+ -----------------
288
+
289
+ Issue #1:
290
+ Workflow: ChartWidget
291
+ Phase: Code Review (Phase 11)
292
+ Problem: "Consider adding aria-label for accessibility"
293
+ Status: Logged for future improvement
294
+
295
+ Recommended action:
296
+ Edit src/components/ChartWidget/ChartWidget.tsx
297
+ Add: aria-label={`${chartType} chart showing ${dataLabel}`}
298
+ ```
299
+
300
+ ---
301
+
302
+ ## Phase 6: Test Results
303
+
304
+ ### 6.1 Test Summary
305
+
306
+ ```
307
+ TEST RESULTS
308
+ ------------
309
+
310
+ Unit Tests:
311
+ src/app/api/v2/user-stats/__tests__/route.test.ts 4/4 PASS
312
+ src/app/api/v2/chart-data/__tests__/route.test.ts 4/4 PASS
313
+ src/app/api/v2/dashboard-data/__tests__/route.test.ts 8/8 PASS
314
+ src/components/StatCard/__tests__/StatCard.test.ts 5/5 PASS
315
+ src/components/ChartWidget/__tests__/ChartWidget.test.ts 5/5 PASS
316
+
317
+ E2E Tests:
318
+ e2e/dashboard.spec.ts 12/12 PASS
319
+
320
+ Integration Tests:
321
+ src/app/dashboard/__tests__/page.test.ts 9/9 PASS
322
+
323
+ TOTAL: 47/47 tests passing (100%)
324
+ Coverage: 94%
325
+ ```
326
+
327
+ ### 6.2 Coverage Breakdown
328
+
329
+ ```
330
+ COVERAGE BY ELEMENT
331
+ -------------------
332
+
333
+ | Element | Statements | Branches | Functions | Lines |
334
+ |------------------|------------|----------|-----------|-------|
335
+ | user-stats | 98% | 95% | 100% | 98% |
336
+ | chart-data | 96% | 92% | 100% | 96% |
337
+ | dashboard-data | 94% | 90% | 100% | 94% |
338
+ | StatCard | 100% | 100% | 100% | 100% |
339
+ | ChartWidget | 92% | 88% | 100% | 92% |
340
+ | Dashboard page | 89% | 85% | 100% | 89% |
341
+ ```
342
+
343
+ ---
344
+
345
+ ## Phase 7: Registry Impact
346
+
347
+ ### 7.1 Elements Added
348
+
349
+ ```
350
+ REGISTRY ADDITIONS
351
+ ------------------
352
+
353
+ APIs (3 new):
354
+ apis.user-stats
355
+ apis.chart-data
356
+ apis.dashboard-metrics
357
+
358
+ Combined APIs (1 new):
359
+ combined.dashboard-data
360
+ Sources: [user-stats, chart-data, dashboard-metrics]
361
+
362
+ Components (2 new):
363
+ components.StatCard
364
+ components.ChartWidget
365
+
366
+ Pages (1 new):
367
+ pages.Dashboard
368
+ Route: /dashboard
369
+ Components: [StatCard, ChartWidget]
370
+ Data: dashboard-data
371
+
372
+ Type Exports (8 new):
373
+ UserStatsResponse, UserStatsParams
374
+ ChartDataResponse, ChartDataParams
375
+ DashboardMetricsResponse
376
+ DashboardDataResponse
377
+ StatCardProps
378
+ ChartWidgetProps
379
+ ```
380
+
381
+ ### 7.2 Relationships
382
+
383
+ ```
384
+ DEPENDENCY GRAPH
385
+ ----------------
386
+
387
+ dashboard-data (combined)
388
+ ├── user-stats (api)
389
+ ├── chart-data (api)
390
+ └── dashboard-metrics (api)
391
+
392
+ Dashboard (page)
393
+ ├── StatCard (component)
394
+ │ └── uses: UserStatsResponse
395
+ ├── ChartWidget (component)
396
+ │ └── uses: ChartDataResponse
397
+ └── fetches: dashboard-data
398
+ ```
399
+
400
+ ---
401
+
402
+ ## Phase 8: Recommendations
403
+
404
+ Based on the build analysis:
405
+
406
+ ### 8.1 Auto-Mode Tuning
407
+
408
+ If decisions seem suboptimal:
409
+
410
+ ```
411
+ RECOMMENDED DEFAULT CHANGES
412
+ ---------------------------
413
+
414
+ Based on this build, consider updating .claude/hustle-build-defaults.json:
415
+
416
+ {
417
+ "component": {
418
+ - "all_variants": true,
419
+ + "all_variants": false, // Only 2 variants used in practice
420
+
421
+ - "animations": true,
422
+ + "animations": false, // Animations not used in dashboard
423
+ }
424
+ }
425
+ ```
426
+
427
+ ### 8.2 Future Improvements
428
+
429
+ ```
430
+ SUGGESTED IMPROVEMENTS
431
+ ----------------------
432
+
433
+ 1. StatCard could benefit from skeleton loading state
434
+ File: src/components/StatCard/StatCard.tsx
435
+
436
+ 2. ChartWidget accessibility could be improved
437
+ Add: aria-label, role="img"
438
+
439
+ 3. Dashboard page could use error boundary
440
+ Currently: No error boundary
441
+ Suggested: Add ErrorBoundary component
442
+ ```
443
+
444
+ ---
445
+
446
+ ## Phase 9: Actions
447
+
448
+ Offer next steps:
449
+
450
+ ```
451
+ AVAILABLE ACTIONS
452
+ -----------------
453
+
454
+ 1. View specific element details:
455
+ /hustle-build-review [build-id] --element user-stats
456
+
457
+ 2. Re-run with different decisions:
458
+ /hustle-build --resume [build-id] --interactive
459
+
460
+ 3. Apply recommended improvements:
461
+ /hustle-build-improve [build-id]
462
+
463
+ 4. Export review as markdown:
464
+ /hustle-build-review [build-id] --export
465
+
466
+ 5. Compare with previous build:
467
+ /hustle-build-review --compare [build-id-1] [build-id-2]
468
+ ```
469
+
470
+ Ask user:
471
+ ```
472
+ What would you like to do?
473
+ - View more details on a specific element
474
+ - Apply recommended changes
475
+ - Export this review
476
+ - Return to development
477
+ ```
478
+
479
+ ---
480
+
481
+ ## Output Format
482
+
483
+ Final summary displayed:
484
+
485
+ ```
486
+ ============================================================
487
+ BUILD REVIEW COMPLETE: [build-id]
488
+ ============================================================
489
+
490
+ Key Metrics:
491
+ - 8 elements created
492
+ - 47 tests passing (100%)
493
+ - 94% code coverage
494
+ - 87 minute build time
495
+
496
+ Decision Quality:
497
+ - 7/12 questions auto-answered
498
+ - 1 issue auto-resolved
499
+ - 0 unresolved issues
500
+
501
+ Recommendations:
502
+ - 2 optional improvements identified
503
+ - 1 default setting could be tuned
504
+
505
+ Review exported to: docs/reviews/[build-id].md
506
+ ============================================================
507
+ ```
508
+
509
+ ---
510
+
511
+ ## Integration with Other Skills
512
+
513
+ This skill integrates with:
514
+
515
+ - `/hustle-build --resume [id]` - Resume interrupted build
516
+ - `/api-create-review [id]` - Review single API workflow
517
+ - `/hustle-ui-create-review [id]` - Review single component workflow
518
+ - `/commit` - Commit after review approval
@@ -0,0 +1,212 @@
1
+ ---
2
+ name: parallel-spawn
3
+ description: Spawn multiple Task agents in parallel for concurrent workflow execution across git worktrees
4
+ license: MIT
5
+ compatibility: Requires Claude Code with Task tool, git worktrees support
6
+ metadata:
7
+ version: "4.5.0"
8
+ category: "workflow"
9
+ tags: ['parallel', 'concurrent', 'worktree', 'agents', 'orchestration']
10
+ author: "Hustle Together"
11
+ allowed-tools: Task Read Write Bash TodoWrite
12
+ model: sonnet
13
+ ---
14
+
15
+ # Parallel Spawn
16
+
17
+ Coordinate parallel agent execution across git worktrees for concurrent workflow processing.
18
+
19
+ ## Usage
20
+
21
+ ```
22
+ /parallel-spawn api:users api:products api:analytics
23
+ /parallel-spawn component:chart component:table page:dashboard
24
+ ```
25
+
26
+ Format: `type:name` where type is `api`, `component`, or `page`
27
+
28
+ ## How It Works
29
+
30
+ 1. **Interview Once** - Shared decisions are collected upfront
31
+ 2. **Create Worktrees** - Each workflow gets its own git worktree
32
+ 3. **Spawn Agents** - Background Task agents run in parallel
33
+ 4. **Monitor Progress** - Track completion with /parallel-status
34
+ 5. **Merge Results** - Combine all changes back to main branch
35
+
36
+ ## Example Session
37
+
38
+ ```
39
+ User: /parallel-spawn api:users api:products api:orders
40
+
41
+ AI: Setting up 3 parallel workflows...
42
+
43
+ ┌─────────────────────────────────────────────────────────────────┐
44
+ │ PARALLEL EXECUTION SETUP │
45
+ ├─────────────────────────────────────────────────────────────────┤
46
+ │ │
47
+ │ Workflows to spawn: │
48
+ │ └─ api:users │
49
+ │ └─ api:products │
50
+ │ └─ api:orders │
51
+ │ │
52
+ │ Shared interview required first! │
53
+ │ │
54
+ └─────────────────────────────────────────────────────────────────┘
55
+
56
+ Before spawning, I need to collect shared decisions that will apply
57
+ to ALL workflows:
58
+
59
+ 1. Authentication method?
60
+ [1] API Key
61
+ [2] Bearer Token
62
+ [3] OAuth 2.0
63
+
64
+ 2. Error handling strategy?
65
+ [1] Fail-fast
66
+ [2] Partial success
67
+ [3] Retry with backoff
68
+
69
+ ... (shared interview)
70
+
71
+ AI: Creating worktrees and spawning agents...
72
+
73
+ [Spawns 3 Task agents in parallel with run_in_background: true]
74
+
75
+ Parallel execution started! Monitor with /parallel-status
76
+ ```
77
+
78
+ ## Implementation
79
+
80
+ <claude-commands-template>
81
+ When /parallel-spawn is invoked:
82
+
83
+ ### 1. Parse Workflows
84
+
85
+ Extract workflow definitions from the command:
86
+ ```python
87
+ workflows = []
88
+ for match in re.findall(r'(api|component|page):(\w+)', args):
89
+ workflows.append({"type": match[0], "name": match[1]})
90
+ ```
91
+
92
+ ### 2. Collect Shared Decisions
93
+
94
+ Before spawning, conduct ONE shared interview:
95
+
96
+ ```
97
+ ┌─────────────────────────────────────────────────────────────────┐
98
+ │ SHARED INTERVIEW │
99
+ ├─────────────────────────────────────────────────────────────────┤
100
+ │ │
101
+ │ These decisions apply to ALL {len(workflows)} workflows: │
102
+ │ │
103
+ │ [Questions based on workflow types] │
104
+ │ │
105
+ └─────────────────────────────────────────────────────────────────┘
106
+ ```
107
+
108
+ Use AskUserQuestion with options based on hustle-build-defaults.json.
109
+
110
+ ### 3. Create Worktrees
111
+
112
+ For each workflow, create an isolated git worktree:
113
+
114
+ ```bash
115
+ # Create worktree with new branch
116
+ git worktree add ../parallel-users-0 -b parallel-users-0
117
+
118
+ # Copy shared decisions
119
+ cp .claude/shared-decisions.json ../parallel-users-0/.claude/
120
+ ```
121
+
122
+ ### 4. Update State
123
+
124
+ Save parallel execution state:
125
+ ```json
126
+ {
127
+ "parallel_execution": {
128
+ "enabled": true,
129
+ "worktrees": [
130
+ {"name": "parallel-users-0", "path": "../parallel-users-0", "status": "pending"},
131
+ {"name": "parallel-products-1", "path": "../parallel-products-1", "status": "pending"},
132
+ {"name": "parallel-orders-2", "path": "../parallel-orders-2", "status": "pending"}
133
+ ],
134
+ "shared_decisions": {
135
+ "auth_required": true,
136
+ "error_handling": "partial-success"
137
+ }
138
+ }
139
+ }
140
+ ```
141
+
142
+ ### 5. Spawn Task Agents
143
+
144
+ **CRITICAL: Spawn all agents in a SINGLE message with multiple Task tool calls!**
145
+
146
+ ```
147
+ Call Task tool 3 times in ONE message:
148
+
149
+ Task 1:
150
+ subagent_type: "general-purpose"
151
+ prompt: "Execute api-create users in worktree parallel-users-0..."
152
+ run_in_background: true
153
+
154
+ Task 2:
155
+ subagent_type: "general-purpose"
156
+ prompt: "Execute api-create products in worktree parallel-products-1..."
157
+ run_in_background: true
158
+
159
+ Task 3:
160
+ subagent_type: "general-purpose"
161
+ prompt: "Execute api-create orders in worktree parallel-orders-2..."
162
+ run_in_background: true
163
+ ```
164
+
165
+ ### 6. Monitor Completion
166
+
167
+ Use TaskOutput with block=false to check status:
168
+
169
+ ```
170
+ For each background agent ID:
171
+ TaskOutput(task_id=agent_id, block=false)
172
+
173
+ Update worktree status based on results.
174
+ ```
175
+
176
+ ### 7. Merge When Complete
177
+
178
+ When all agents complete:
179
+
180
+ ```bash
181
+ # Merge each worktree branch
182
+ git merge parallel-users-0 --no-ff -m "Merge parallel: users API"
183
+ git merge parallel-products-1 --no-ff -m "Merge parallel: products API"
184
+ git merge parallel-orders-2 --no-ff -m "Merge parallel: orders API"
185
+
186
+ # Clean up worktrees
187
+ git worktree remove ../parallel-users-0
188
+ git worktree remove ../parallel-products-1
189
+ git worktree remove ../parallel-orders-2
190
+ ```
191
+ </claude-commands-template>
192
+
193
+ ## Related Commands
194
+
195
+ - `/parallel-status` - Check parallel execution progress
196
+ - `/parallel-merge` - Merge all completed worktrees
197
+ - `/parallel-abort` - Cancel parallel execution and clean up
198
+ - `/ralph-status` - Check individual agent loop status
199
+
200
+ ## Configuration
201
+
202
+ In `hustle-build-defaults.json`:
203
+
204
+ ```json
205
+ {
206
+ "parallel": {
207
+ "max_worktrees": 5,
208
+ "auto_merge": false,
209
+ "cleanup_on_error": true
210
+ }
211
+ }
212
+ ```