@hustle-together/api-dev-tools 3.11.1 → 3.12.2
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/.claude/agents/code-reviewer.md +170 -0
- package/.claude/agents/docs-generator.md +80 -0
- package/.claude/agents/implementation-reviewer.md +119 -0
- package/.claude/agents/parallel-researcher.md +52 -0
- package/.claude/agents/research-validator.md +116 -0
- package/.claude/agents/schema-generator.md +70 -0
- package/.claude/agents/test-writer.md +104 -0
- package/.claude/api-dev-state.json +305 -56
- package/.claude/commands/README.md +21 -10
- package/.claude/commands/add-command.md +8 -5
- package/.claude/commands/api-create.md +36 -25
- package/.claude/commands/api-env.md +1 -0
- package/.claude/commands/api-interview.md +32 -19
- package/.claude/commands/api-research.md +47 -21
- package/.claude/commands/api-status.md +21 -1
- package/.claude/commands/api-verify.md +14 -13
- package/.claude/commands/beepboop.md +4 -5
- package/.claude/commands/busycommit.md +2 -3
- package/.claude/commands/commit.md +2 -3
- package/.claude/commands/cycle.md +2 -7
- package/.claude/commands/gap.md +2 -3
- package/.claude/commands/green.md +2 -7
- package/.claude/commands/issue.md +3 -8
- package/.claude/commands/ntfy-setup.md +91 -0
- package/.claude/commands/ntfy-test.md +74 -0
- package/.claude/commands/plan.md +2 -3
- package/.claude/commands/pr.md +2 -3
- package/.claude/commands/publish.md +40 -0
- package/.claude/commands/red.md +2 -7
- package/.claude/commands/refactor.md +2 -7
- package/.claude/commands/spike.md +2 -7
- package/.claude/commands/summarize.md +2 -3
- package/.claude/commands/tdd.md +2 -7
- package/.claude/commands/worktree-add.md +208 -216
- package/.claude/commands/worktree-cleanup.md +172 -178
- package/.claude/settings.json +63 -12
- package/.claude/settings.local.json +2 -1
- package/.claude-plugin/marketplace.json +2 -11
- package/.skills/README.md +55 -53
- package/.skills/_shared/settings.json +1 -1
- package/.skills/add-command/SKILL.md +10 -5
- package/.skills/api-create/SKILL.md +146 -35
- package/.skills/api-env/SKILL.md +1 -0
- package/.skills/api-interview/SKILL.md +32 -19
- package/.skills/api-research/SKILL.md +47 -21
- package/.skills/api-status/SKILL.md +21 -1
- package/.skills/api-verify/SKILL.md +14 -13
- package/.skills/beepboop/SKILL.md +6 -5
- package/.skills/busycommit/SKILL.md +4 -3
- package/.skills/commit/SKILL.md +4 -3
- package/.skills/cycle/SKILL.md +4 -7
- package/.skills/gap/SKILL.md +4 -3
- package/.skills/green/SKILL.md +4 -7
- package/.skills/issue/SKILL.md +5 -8
- package/.skills/plan/SKILL.md +4 -3
- package/.skills/pr/SKILL.md +4 -3
- package/.skills/publish/SKILL.md +160 -0
- package/.skills/red/SKILL.md +4 -7
- package/.skills/refactor/SKILL.md +4 -7
- package/.skills/spike/SKILL.md +4 -7
- package/.skills/summarize/SKILL.md +4 -3
- package/.skills/tdd/SKILL.md +4 -7
- package/.skills/update-todos/SKILL.md +22 -0
- package/.skills/worktree-add/SKILL.md +210 -216
- package/.skills/worktree-cleanup/SKILL.md +183 -187
- package/CHANGELOG.md +97 -79
- package/README.md +161 -7142
- package/bin/cli.js +448 -805
- package/commands/README.md +66 -31
- package/commands/add-command.md +8 -5
- package/commands/beepboop.md +4 -5
- package/commands/busycommit.md +2 -3
- package/commands/commit.md +2 -3
- package/commands/cycle.md +2 -7
- package/commands/gap.md +2 -3
- package/commands/green.md +2 -7
- package/commands/hustle-api-continue.md +8 -5
- package/commands/hustle-api-create.md +70 -29
- package/commands/hustle-api-env.md +1 -0
- package/commands/hustle-api-interview.md +32 -19
- package/commands/hustle-api-research.md +47 -21
- package/commands/hustle-api-sessions.md +8 -7
- package/commands/hustle-api-status.md +21 -1
- package/commands/hustle-api-verify.md +14 -13
- package/commands/hustle-combine.md +488 -241
- package/commands/hustle-ui-create-page.md +113 -50
- package/commands/hustle-ui-create.md +179 -26
- package/commands/issue.md +3 -8
- package/commands/plan.md +2 -3
- package/commands/pr.md +2 -3
- package/commands/red.md +2 -7
- package/commands/refactor.md +2 -7
- package/commands/spike.md +2 -7
- package/commands/summarize.md +2 -3
- package/commands/tdd.md +2 -7
- package/commands/worktree-add.md +208 -216
- package/commands/worktree-cleanup.md +172 -178
- package/hooks/api-workflow-check.py +5 -3
- package/hooks/enforce-component-type-confirm.py +97 -0
- package/hooks/lib/__init__.py +1 -0
- package/hooks/lib/greptile.py +355 -0
- package/hooks/lib/ntfy.py +209 -0
- package/hooks/notify-input-needed.py +73 -0
- package/hooks/notify-phase-complete.py +90 -0
- package/hooks/run-code-review.py +246 -0
- package/hooks/track-token-usage.py +121 -0
- package/package.json +13 -3
- package/scripts/collect-test-results.ts +102 -77
- package/scripts/extract-parameters.ts +112 -70
- package/scripts/generate-test-manifest.ts +118 -77
- package/templates/.env.example +57 -0
- package/templates/BRAND_GUIDE.md +92 -52
- package/templates/CLAUDE-SECTION.md +40 -37
- package/templates/SPEC.json +186 -38
- package/templates/api-dev-state.json +33 -4
- package/templates/api-showcase/_components/APICard.tsx +22 -18
- package/templates/api-showcase/_components/APIModal.tsx +110 -64
- package/templates/api-showcase/_components/APIShowcase.tsx +53 -35
- package/templates/api-showcase/_components/APITester.tsx +128 -67
- package/templates/api-showcase/page.tsx +4 -4
- package/templates/api-test/page.tsx +51 -30
- package/templates/api-test/test-structure/route.ts +43 -34
- package/templates/component/Component.stories.tsx +41 -39
- package/templates/component/Component.test.tsx +96 -78
- package/templates/component/Component.tsx +63 -52
- package/templates/component/Component.types.ts +10 -6
- package/templates/component/Component.visual.spec.ts +170 -0
- package/templates/component/index.ts +2 -2
- package/templates/dev-tools/_components/DevToolsLanding.tsx +8 -8
- package/templates/dev-tools/page.tsx +4 -3
- package/templates/mcp-servers.json +30 -2
- package/templates/page/page.e2e.test.ts +56 -48
- package/templates/page/page.tsx +3 -3
- package/templates/shared/HeroHeader.tsx +16 -15
- package/templates/shared/index.ts +1 -1
- package/templates/ui-showcase/_components/PreviewCard.tsx +20 -20
- package/templates/ui-showcase/_components/PreviewModal.tsx +149 -108
- package/templates/ui-showcase/_components/UIShowcase.tsx +43 -35
- package/templates/ui-showcase/page.tsx +4 -4
package/templates/BRAND_GUIDE.md
CHANGED
|
@@ -6,53 +6,61 @@
|
|
|
6
6
|
## Core Colors
|
|
7
7
|
|
|
8
8
|
### Hustle Brand Colors
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
|
12
|
-
| **Hustle Red
|
|
13
|
-
| **Hustle Red
|
|
9
|
+
|
|
10
|
+
| Name | Hex | RGB | Usage |
|
|
11
|
+
| -------------------- | ---------------------- | ---------------- | ------------------------------------------- |
|
|
12
|
+
| **Hustle Red** | #BA0C2F | rgb(186, 12, 47) | Primary accent, buttons, links, focus rings |
|
|
13
|
+
| **Hustle Red Hover** | #8A0923 | rgb(138, 9, 35) | Hover states |
|
|
14
|
+
| **Hustle Red Light** | rgba(186, 12, 47, 0.1) | - | Backgrounds, badges |
|
|
14
15
|
|
|
15
16
|
### Light Mode
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
|
19
|
-
| **Background
|
|
20
|
-
| **Background
|
|
21
|
-
| **
|
|
22
|
-
| **Text
|
|
23
|
-
| **
|
|
24
|
-
| **Border
|
|
17
|
+
|
|
18
|
+
| Name | Hex | Usage |
|
|
19
|
+
| ------------------------ | ------- | ----------------- |
|
|
20
|
+
| **Background** | #FFFFFF | Main background |
|
|
21
|
+
| **Background Secondary** | #F8F8F8 | Cards, sections |
|
|
22
|
+
| **Background Tertiary** | #F0F0F0 | Nested elements |
|
|
23
|
+
| **Text** | #1A1A1A | Primary text |
|
|
24
|
+
| **Text Muted** | #666666 | Secondary text |
|
|
25
|
+
| **Border** | #E5E5E5 | Light borders |
|
|
26
|
+
| **Border Strong** | #000000 | Boxy card borders |
|
|
25
27
|
|
|
26
28
|
### Dark Mode
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
|
29
|
+
|
|
30
|
+
| Name | Hex | Usage |
|
|
31
|
+
| ------------------------ | ------- | --------------- |
|
|
32
|
+
| **Background** | #050505 | Main background |
|
|
30
33
|
| **Background Secondary** | #111111 | Cards, sections |
|
|
31
|
-
| **Background Tertiary**
|
|
32
|
-
| **Text**
|
|
33
|
-
| **Text Muted**
|
|
34
|
-
| **Border**
|
|
34
|
+
| **Background Tertiary** | #1A1A1A | Nested elements |
|
|
35
|
+
| **Text** | #F0F0F0 | Primary text |
|
|
36
|
+
| **Text Muted** | #888888 | Secondary text |
|
|
37
|
+
| **Border** | #333333 | Dark borders |
|
|
35
38
|
|
|
36
39
|
### Status Colors
|
|
37
|
-
|
|
38
|
-
|
|
40
|
+
|
|
41
|
+
| Name | Hex | Usage |
|
|
42
|
+
| ----------- | ------- | --------------------------- |
|
|
39
43
|
| **Success** | #22C55E | Completed, passed, positive |
|
|
40
|
-
| **Warning** | #EAB308 | Caution, pending
|
|
41
|
-
| **Error**
|
|
42
|
-
| **Info**
|
|
44
|
+
| **Warning** | #EAB308 | Caution, pending |
|
|
45
|
+
| **Error** | #EF4444 | Failed, errors, destructive |
|
|
46
|
+
| **Info** | #3B82F6 | Informational |
|
|
43
47
|
|
|
44
48
|
## Typography
|
|
45
49
|
|
|
46
50
|
### Font Stack
|
|
51
|
+
|
|
47
52
|
```css
|
|
48
53
|
/* Main font */
|
|
49
|
-
--font-main:
|
|
54
|
+
--font-main:
|
|
55
|
+
-apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", Roboto,
|
|
56
|
+
sans-serif;
|
|
50
57
|
|
|
51
58
|
/* Monospace */
|
|
52
|
-
--font-mono:
|
|
59
|
+
--font-mono: "SF Mono", Monaco, Inconsolata, "Fira Code", monospace;
|
|
53
60
|
```
|
|
54
61
|
|
|
55
62
|
### Font Sizes
|
|
63
|
+
|
|
56
64
|
- **xs:** 0.75rem (12px)
|
|
57
65
|
- **sm:** 0.875rem (14px)
|
|
58
66
|
- **base:** 1rem (16px)
|
|
@@ -65,6 +73,7 @@
|
|
|
65
73
|
- **6xl:** 4rem (64px)
|
|
66
74
|
|
|
67
75
|
### Font Weights
|
|
76
|
+
|
|
68
77
|
- **Normal:** 400
|
|
69
78
|
- **Medium:** 500
|
|
70
79
|
- **Semibold:** 600
|
|
@@ -72,6 +81,7 @@
|
|
|
72
81
|
- **Extrabold:** 800
|
|
73
82
|
|
|
74
83
|
### Line Heights
|
|
84
|
+
|
|
75
85
|
- **Tight:** 1.1 (headings)
|
|
76
86
|
- **Normal:** 1.5 (body)
|
|
77
87
|
- **Relaxed:** 1.6 (paragraphs)
|
|
@@ -79,24 +89,27 @@
|
|
|
79
89
|
## Spacing
|
|
80
90
|
|
|
81
91
|
### Base Unit
|
|
92
|
+
|
|
82
93
|
- **Base:** 4px (0.25rem)
|
|
83
94
|
|
|
84
95
|
### Scale
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
|
88
|
-
|
|
|
89
|
-
|
|
|
90
|
-
|
|
|
91
|
-
|
|
|
92
|
-
|
|
|
93
|
-
|
|
|
94
|
-
|
|
|
95
|
-
|
|
|
96
|
-
|
|
|
97
|
-
|
|
|
96
|
+
|
|
97
|
+
| Token | Value | Pixels |
|
|
98
|
+
| ----- | ------- | ------ |
|
|
99
|
+
| 0 | 0 | 0 |
|
|
100
|
+
| 1 | 0.25rem | 4px |
|
|
101
|
+
| 2 | 0.5rem | 8px |
|
|
102
|
+
| 3 | 0.75rem | 12px |
|
|
103
|
+
| 4 | 1rem | 16px |
|
|
104
|
+
| 5 | 1.25rem | 20px |
|
|
105
|
+
| 6 | 1.5rem | 24px |
|
|
106
|
+
| 8 | 2rem | 32px |
|
|
107
|
+
| 10 | 2.5rem | 40px |
|
|
108
|
+
| 12 | 3rem | 48px |
|
|
109
|
+
| 16 | 4rem | 64px |
|
|
98
110
|
|
|
99
111
|
### Common Usage
|
|
112
|
+
|
|
100
113
|
- **Component Padding:** 16px (1rem)
|
|
101
114
|
- **Card Padding:** 24px (1.5rem)
|
|
102
115
|
- **Section Margin:** 32px (2rem)
|
|
@@ -105,19 +118,23 @@
|
|
|
105
118
|
## Component Styling
|
|
106
119
|
|
|
107
120
|
### Design Philosophy
|
|
121
|
+
|
|
108
122
|
**90s Boxy Style** - Clean, minimal, sharp edges with solid borders.
|
|
109
123
|
|
|
110
124
|
### Border Radius
|
|
125
|
+
|
|
111
126
|
- **Default:** 0 (boxy, no rounding)
|
|
112
127
|
- **Soft:** 4px (subtle rounding for inputs only)
|
|
113
128
|
- **Full:** 9999px (pills, avatars)
|
|
114
129
|
|
|
115
130
|
### Border Width
|
|
131
|
+
|
|
116
132
|
- **Cards:** 2px solid
|
|
117
133
|
- **Inputs:** 2px solid (focus: Hustle Red)
|
|
118
134
|
- **Subtle:** 1px solid
|
|
119
135
|
|
|
120
136
|
### Shadows
|
|
137
|
+
|
|
121
138
|
```css
|
|
122
139
|
/* Float effect for cards */
|
|
123
140
|
--shadow-float: 0 10px 30px -10px rgba(0, 0, 0, 0.1);
|
|
@@ -130,32 +147,37 @@
|
|
|
130
147
|
```
|
|
131
148
|
|
|
132
149
|
### Focus Ring
|
|
150
|
+
|
|
133
151
|
```css
|
|
134
152
|
/* Hustle Red focus ring */
|
|
135
|
-
outline: 2px solid #
|
|
153
|
+
outline: 2px solid #ba0c2f;
|
|
136
154
|
outline-offset: 2px;
|
|
137
155
|
```
|
|
138
156
|
|
|
139
157
|
### Transitions
|
|
158
|
+
|
|
140
159
|
```css
|
|
141
160
|
/* Standard transition */
|
|
142
161
|
transition: all 0.2s ease;
|
|
143
|
-
transition-property:
|
|
162
|
+
transition-property:
|
|
163
|
+
color, background-color, border-color, opacity, transform, box-shadow;
|
|
144
164
|
```
|
|
145
165
|
|
|
146
166
|
## Buttons
|
|
147
167
|
|
|
148
168
|
### Primary Button (Hustle Red)
|
|
169
|
+
|
|
149
170
|
```css
|
|
150
|
-
background: #
|
|
171
|
+
background: #ba0c2f;
|
|
151
172
|
color: #ffffff;
|
|
152
173
|
padding: 12px 24px;
|
|
153
|
-
border: 2px solid #
|
|
174
|
+
border: 2px solid #ba0c2f;
|
|
154
175
|
border-radius: 0;
|
|
155
176
|
font-weight: 700;
|
|
156
177
|
```
|
|
157
178
|
|
|
158
179
|
### Secondary Button
|
|
180
|
+
|
|
159
181
|
```css
|
|
160
182
|
background: #ffffff;
|
|
161
183
|
color: #000000;
|
|
@@ -166,6 +188,7 @@ font-weight: 700;
|
|
|
166
188
|
```
|
|
167
189
|
|
|
168
190
|
### Ghost Button
|
|
191
|
+
|
|
169
192
|
```css
|
|
170
193
|
background: transparent;
|
|
171
194
|
color: #000000;
|
|
@@ -176,20 +199,23 @@ font-weight: 700;
|
|
|
176
199
|
```
|
|
177
200
|
|
|
178
201
|
### Button Hover States
|
|
202
|
+
|
|
179
203
|
- **Primary:** background: #8A0923
|
|
180
204
|
- **Secondary:** border-color: #BA0C2F
|
|
181
205
|
- **Ghost:** border-color: #BA0C2F
|
|
182
206
|
|
|
183
207
|
### Button Sizes
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
|
187
|
-
|
|
|
188
|
-
|
|
|
208
|
+
|
|
209
|
+
| Size | Padding | Font Size |
|
|
210
|
+
| ------ | --------- | --------- |
|
|
211
|
+
| Small | 8px 16px | 12px |
|
|
212
|
+
| Medium | 12px 24px | 14px |
|
|
213
|
+
| Large | 16px 32px | 16px |
|
|
189
214
|
|
|
190
215
|
## Form Elements
|
|
191
216
|
|
|
192
217
|
### Input Fields
|
|
218
|
+
|
|
193
219
|
```css
|
|
194
220
|
background: #ffffff;
|
|
195
221
|
border: 2px solid #000000;
|
|
@@ -199,11 +225,13 @@ font-size: 14px;
|
|
|
199
225
|
```
|
|
200
226
|
|
|
201
227
|
### Input States
|
|
228
|
+
|
|
202
229
|
- **Focus:** `border-color: #BA0C2F;`
|
|
203
230
|
- **Error:** `border-color: #EF4444;`
|
|
204
231
|
- **Disabled:** `background: #F5F5F5; opacity: 0.5;`
|
|
205
232
|
|
|
206
233
|
### Labels
|
|
234
|
+
|
|
207
235
|
```css
|
|
208
236
|
display: block;
|
|
209
237
|
margin-bottom: 8px;
|
|
@@ -214,6 +242,7 @@ font-size: 14px;
|
|
|
214
242
|
## Cards
|
|
215
243
|
|
|
216
244
|
### Default Card
|
|
245
|
+
|
|
217
246
|
```css
|
|
218
247
|
background: #ffffff;
|
|
219
248
|
border: 2px solid #000000;
|
|
@@ -222,12 +251,14 @@ padding: 24px;
|
|
|
222
251
|
```
|
|
223
252
|
|
|
224
253
|
### Card Hover
|
|
254
|
+
|
|
225
255
|
```css
|
|
226
|
-
border-color: #
|
|
256
|
+
border-color: #ba0c2f;
|
|
227
257
|
box-shadow: 4px 4px 0px 0px rgba(186, 12, 47, 0.2);
|
|
228
258
|
```
|
|
229
259
|
|
|
230
260
|
### Card (Dark Mode)
|
|
261
|
+
|
|
231
262
|
```css
|
|
232
263
|
background: #111111;
|
|
233
264
|
border: 2px solid #333333;
|
|
@@ -236,6 +267,7 @@ border: 2px solid #333333;
|
|
|
236
267
|
## Hero Headers
|
|
237
268
|
|
|
238
269
|
### Animated Grid Hero
|
|
270
|
+
|
|
239
271
|
- Height: 450px
|
|
240
272
|
- Canvas-based 3D perspective grid animation
|
|
241
273
|
- Hustle Red accent cells (#BA0C2F)
|
|
@@ -246,6 +278,7 @@ border: 2px solid #333333;
|
|
|
246
278
|
## Dark Mode Implementation
|
|
247
279
|
|
|
248
280
|
### CSS Custom Properties
|
|
281
|
+
|
|
249
282
|
```css
|
|
250
283
|
[data-theme="dark"] {
|
|
251
284
|
--bg: #050505;
|
|
@@ -257,20 +290,24 @@ border: 2px solid #333333;
|
|
|
257
290
|
```
|
|
258
291
|
|
|
259
292
|
### Tailwind Classes
|
|
293
|
+
|
|
260
294
|
Use `dark:` prefix for all dark mode styles:
|
|
295
|
+
|
|
261
296
|
```html
|
|
262
|
-
<div class="bg-white dark:bg-gray-900 text-black dark:text-white">
|
|
297
|
+
<div class="bg-white dark:bg-gray-900 text-black dark:text-white"></div>
|
|
263
298
|
```
|
|
264
299
|
|
|
265
300
|
## Voice & Tone
|
|
266
301
|
|
|
267
302
|
### Writing Style
|
|
303
|
+
|
|
268
304
|
- **Professional** but approachable
|
|
269
305
|
- **Clear** and concise
|
|
270
306
|
- **Technical precision** - no fluff
|
|
271
307
|
- **No emojis** in code or documentation (unless requested)
|
|
272
308
|
|
|
273
309
|
### UI Copy Guidelines
|
|
310
|
+
|
|
274
311
|
- Use active voice
|
|
275
312
|
- Keep button labels to 2-3 words
|
|
276
313
|
- Error messages should explain how to fix the issue
|
|
@@ -279,16 +316,19 @@ Use `dark:` prefix for all dark mode styles:
|
|
|
279
316
|
## Accessibility Requirements
|
|
280
317
|
|
|
281
318
|
### Color Contrast
|
|
319
|
+
|
|
282
320
|
- **Normal Text:** Minimum 4.5:1 ratio (WCAG AA)
|
|
283
321
|
- **Large Text:** Minimum 3:1 ratio
|
|
284
322
|
- **Interactive Elements:** Minimum 3:1 ratio
|
|
285
323
|
|
|
286
324
|
### Focus Indicators
|
|
325
|
+
|
|
287
326
|
- All interactive elements must have visible focus states
|
|
288
327
|
- Hustle Red (#BA0C2F) focus ring
|
|
289
328
|
- Focus should not be removed or hidden
|
|
290
329
|
|
|
291
330
|
### Touch Targets
|
|
331
|
+
|
|
292
332
|
- Minimum size: 44px x 44px
|
|
293
333
|
- Minimum spacing: 8px between targets
|
|
294
334
|
|
|
@@ -4,16 +4,16 @@ This project uses **@hustle-together/api-dev-tools** for interview-driven, resea
|
|
|
4
4
|
|
|
5
5
|
### Available Commands
|
|
6
6
|
|
|
7
|
-
| Command
|
|
8
|
-
|
|
9
|
-
| `/hustle-api-create [endpoint]`
|
|
10
|
-
| `/hustle-api-interview [endpoint]` | Questions FROM research findings
|
|
11
|
-
| `/hustle-api-research [library]`
|
|
12
|
-
| `/hustle-api-verify [endpoint]`
|
|
13
|
-
| `/hustle-api-env [endpoint]`
|
|
14
|
-
| `/hustle-api-status [endpoint]`
|
|
15
|
-
| `/hustle-api-continue [endpoint]`
|
|
16
|
-
| `/hustle-api-sessions`
|
|
7
|
+
| Command | Purpose |
|
|
8
|
+
| ---------------------------------- | ------------------------------------- |
|
|
9
|
+
| `/hustle-api-create [endpoint]` | Complete 13-phase workflow |
|
|
10
|
+
| `/hustle-api-interview [endpoint]` | Questions FROM research findings |
|
|
11
|
+
| `/hustle-api-research [library]` | Adaptive propose-approve research |
|
|
12
|
+
| `/hustle-api-verify [endpoint]` | Re-research and verify implementation |
|
|
13
|
+
| `/hustle-api-env [endpoint]` | Check API keys |
|
|
14
|
+
| `/hustle-api-status [endpoint]` | Track progress |
|
|
15
|
+
| `/hustle-api-continue [endpoint]` | Resume interrupted workflow |
|
|
16
|
+
| `/hustle-api-sessions` | Browse saved session logs |
|
|
17
17
|
|
|
18
18
|
### 13-Phase Flow
|
|
19
19
|
|
|
@@ -44,6 +44,7 @@ Phase 13: COMPLETION - Final verification, commit
|
|
|
44
44
|
### State Tracking
|
|
45
45
|
|
|
46
46
|
All progress is tracked in `.claude/api-dev-state.json`:
|
|
47
|
+
|
|
47
48
|
- Current phase and status for each endpoint
|
|
48
49
|
- Interview decisions (injected during implementation)
|
|
49
50
|
- Research sources with freshness tracking
|
|
@@ -53,6 +54,7 @@ All progress is tracked in `.claude/api-dev-state.json`:
|
|
|
53
54
|
### Research Cache
|
|
54
55
|
|
|
55
56
|
Research is cached in `.claude/research/` with 7-day freshness:
|
|
57
|
+
|
|
56
58
|
- `index.json` - Freshness tracking
|
|
57
59
|
- `[api-name]/CURRENT.md` - Latest research
|
|
58
60
|
- `[api-name]/sources.json` - Research sources
|
|
@@ -62,37 +64,38 @@ Research is cached in `.claude/research/` with 7-day freshness:
|
|
|
62
64
|
|
|
63
65
|
### Hooks (25 Total - Automatic Enforcement)
|
|
64
66
|
|
|
65
|
-
| Hook
|
|
66
|
-
|
|
67
|
-
| `session-startup.py`
|
|
68
|
-
| `detect-interruption.py`
|
|
69
|
-
| `enforce-external-research.py`
|
|
70
|
-
| `enforce-disambiguation.py`
|
|
71
|
-
| `enforce-scope.py`
|
|
72
|
-
| `enforce-research.py`
|
|
73
|
-
| `enforce-interview.py`
|
|
74
|
-
| `enforce-deep-research.py`
|
|
75
|
-
| `enforce-schema.py`
|
|
76
|
-
| `enforce-environment.py`
|
|
77
|
-
| `enforce-tdd-red.py`
|
|
78
|
-
| `verify-implementation.py`
|
|
79
|
-
| `enforce-verify.py`
|
|
80
|
-
| `enforce-refactor.py`
|
|
81
|
-
| `enforce-documentation.py`
|
|
82
|
-
| `enforce-questions-sourced.py`
|
|
83
|
-
| `enforce-schema-from-interview.py` | PreToolUse
|
|
84
|
-
| `track-tool-use.py`
|
|
85
|
-
| `periodic-reground.py`
|
|
86
|
-
| `track-scope-coverage.py`
|
|
87
|
-
| `verify-after-green.py`
|
|
88
|
-
| `cache-research.py`
|
|
89
|
-
| `generate-manifest-entry.py`
|
|
90
|
-
| `api-workflow-check.py`
|
|
91
|
-
| `session-logger.py`
|
|
67
|
+
| Hook | Event | Action |
|
|
68
|
+
| ---------------------------------- | ---------------- | ------------------------------------ |
|
|
69
|
+
| `session-startup.py` | SessionStart | Inject state context |
|
|
70
|
+
| `detect-interruption.py` | SessionStart | Detect interrupted workflows |
|
|
71
|
+
| `enforce-external-research.py` | UserPromptSubmit | Require research first |
|
|
72
|
+
| `enforce-disambiguation.py` | PreToolUse | Phase 1 enforcement |
|
|
73
|
+
| `enforce-scope.py` | PreToolUse | Phase 2 enforcement |
|
|
74
|
+
| `enforce-research.py` | PreToolUse | Phase 3 enforcement |
|
|
75
|
+
| `enforce-interview.py` | PreToolUse | Phase 4 - inject decisions |
|
|
76
|
+
| `enforce-deep-research.py` | PreToolUse | Phase 5 enforcement |
|
|
77
|
+
| `enforce-schema.py` | PreToolUse | Phase 6 enforcement |
|
|
78
|
+
| `enforce-environment.py` | PreToolUse | Phase 7 enforcement |
|
|
79
|
+
| `enforce-tdd-red.py` | PreToolUse | Phase 8 enforcement |
|
|
80
|
+
| `verify-implementation.py` | PreToolUse | Phase 9 helper |
|
|
81
|
+
| `enforce-verify.py` | PreToolUse | Phase 10 enforcement |
|
|
82
|
+
| `enforce-refactor.py` | PreToolUse | Phase 11 enforcement |
|
|
83
|
+
| `enforce-documentation.py` | PreToolUse | Phase 12 enforcement |
|
|
84
|
+
| `enforce-questions-sourced.py` | PreToolUse | Validate questions from research |
|
|
85
|
+
| `enforce-schema-from-interview.py` | PreToolUse | Validate schema from interview |
|
|
86
|
+
| `track-tool-use.py` | PostToolUse | Log research, count turns |
|
|
87
|
+
| `periodic-reground.py` | PostToolUse | Re-inject context every 7 turns |
|
|
88
|
+
| `track-scope-coverage.py` | PostToolUse | Track implemented vs deferred |
|
|
89
|
+
| `verify-after-green.py` | PostToolUse | Trigger Phase 10 after tests pass |
|
|
90
|
+
| `cache-research.py` | PostToolUse | Create research cache files |
|
|
91
|
+
| `generate-manifest-entry.py` | PostToolUse | Auto-generate API documentation |
|
|
92
|
+
| `api-workflow-check.py` | Stop | Block if incomplete, generate output |
|
|
93
|
+
| `session-logger.py` | Stop | Save session to api-sessions |
|
|
92
94
|
|
|
93
95
|
### Auto-Generated Documentation
|
|
94
96
|
|
|
95
97
|
When Phase 12 completes, `generate-manifest-entry.py` automatically creates:
|
|
98
|
+
|
|
96
99
|
- **Comprehensive curl examples** (minimal, full, auth, enum variations, boundary values)
|
|
97
100
|
- **Complete test cases** (success, validation, required fields, types, boundaries, arrays)
|
|
98
101
|
- **Parameter documentation** with all possible values
|