@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.
Files changed (139) hide show
  1. package/.claude/agents/code-reviewer.md +170 -0
  2. package/.claude/agents/docs-generator.md +80 -0
  3. package/.claude/agents/implementation-reviewer.md +119 -0
  4. package/.claude/agents/parallel-researcher.md +52 -0
  5. package/.claude/agents/research-validator.md +116 -0
  6. package/.claude/agents/schema-generator.md +70 -0
  7. package/.claude/agents/test-writer.md +104 -0
  8. package/.claude/api-dev-state.json +305 -56
  9. package/.claude/commands/README.md +21 -10
  10. package/.claude/commands/add-command.md +8 -5
  11. package/.claude/commands/api-create.md +36 -25
  12. package/.claude/commands/api-env.md +1 -0
  13. package/.claude/commands/api-interview.md +32 -19
  14. package/.claude/commands/api-research.md +47 -21
  15. package/.claude/commands/api-status.md +21 -1
  16. package/.claude/commands/api-verify.md +14 -13
  17. package/.claude/commands/beepboop.md +4 -5
  18. package/.claude/commands/busycommit.md +2 -3
  19. package/.claude/commands/commit.md +2 -3
  20. package/.claude/commands/cycle.md +2 -7
  21. package/.claude/commands/gap.md +2 -3
  22. package/.claude/commands/green.md +2 -7
  23. package/.claude/commands/issue.md +3 -8
  24. package/.claude/commands/ntfy-setup.md +91 -0
  25. package/.claude/commands/ntfy-test.md +74 -0
  26. package/.claude/commands/plan.md +2 -3
  27. package/.claude/commands/pr.md +2 -3
  28. package/.claude/commands/publish.md +40 -0
  29. package/.claude/commands/red.md +2 -7
  30. package/.claude/commands/refactor.md +2 -7
  31. package/.claude/commands/spike.md +2 -7
  32. package/.claude/commands/summarize.md +2 -3
  33. package/.claude/commands/tdd.md +2 -7
  34. package/.claude/commands/worktree-add.md +208 -216
  35. package/.claude/commands/worktree-cleanup.md +172 -178
  36. package/.claude/settings.json +63 -12
  37. package/.claude/settings.local.json +2 -1
  38. package/.claude-plugin/marketplace.json +2 -11
  39. package/.skills/README.md +55 -53
  40. package/.skills/_shared/settings.json +1 -1
  41. package/.skills/add-command/SKILL.md +10 -5
  42. package/.skills/api-create/SKILL.md +146 -35
  43. package/.skills/api-env/SKILL.md +1 -0
  44. package/.skills/api-interview/SKILL.md +32 -19
  45. package/.skills/api-research/SKILL.md +47 -21
  46. package/.skills/api-status/SKILL.md +21 -1
  47. package/.skills/api-verify/SKILL.md +14 -13
  48. package/.skills/beepboop/SKILL.md +6 -5
  49. package/.skills/busycommit/SKILL.md +4 -3
  50. package/.skills/commit/SKILL.md +4 -3
  51. package/.skills/cycle/SKILL.md +4 -7
  52. package/.skills/gap/SKILL.md +4 -3
  53. package/.skills/green/SKILL.md +4 -7
  54. package/.skills/issue/SKILL.md +5 -8
  55. package/.skills/plan/SKILL.md +4 -3
  56. package/.skills/pr/SKILL.md +4 -3
  57. package/.skills/publish/SKILL.md +160 -0
  58. package/.skills/red/SKILL.md +4 -7
  59. package/.skills/refactor/SKILL.md +4 -7
  60. package/.skills/spike/SKILL.md +4 -7
  61. package/.skills/summarize/SKILL.md +4 -3
  62. package/.skills/tdd/SKILL.md +4 -7
  63. package/.skills/update-todos/SKILL.md +22 -0
  64. package/.skills/worktree-add/SKILL.md +210 -216
  65. package/.skills/worktree-cleanup/SKILL.md +183 -187
  66. package/CHANGELOG.md +97 -79
  67. package/README.md +161 -7142
  68. package/bin/cli.js +448 -805
  69. package/commands/README.md +66 -31
  70. package/commands/add-command.md +8 -5
  71. package/commands/beepboop.md +4 -5
  72. package/commands/busycommit.md +2 -3
  73. package/commands/commit.md +2 -3
  74. package/commands/cycle.md +2 -7
  75. package/commands/gap.md +2 -3
  76. package/commands/green.md +2 -7
  77. package/commands/hustle-api-continue.md +8 -5
  78. package/commands/hustle-api-create.md +70 -29
  79. package/commands/hustle-api-env.md +1 -0
  80. package/commands/hustle-api-interview.md +32 -19
  81. package/commands/hustle-api-research.md +47 -21
  82. package/commands/hustle-api-sessions.md +8 -7
  83. package/commands/hustle-api-status.md +21 -1
  84. package/commands/hustle-api-verify.md +14 -13
  85. package/commands/hustle-combine.md +488 -241
  86. package/commands/hustle-ui-create-page.md +113 -50
  87. package/commands/hustle-ui-create.md +179 -26
  88. package/commands/issue.md +3 -8
  89. package/commands/plan.md +2 -3
  90. package/commands/pr.md +2 -3
  91. package/commands/red.md +2 -7
  92. package/commands/refactor.md +2 -7
  93. package/commands/spike.md +2 -7
  94. package/commands/summarize.md +2 -3
  95. package/commands/tdd.md +2 -7
  96. package/commands/worktree-add.md +208 -216
  97. package/commands/worktree-cleanup.md +172 -178
  98. package/hooks/api-workflow-check.py +5 -3
  99. package/hooks/enforce-component-type-confirm.py +97 -0
  100. package/hooks/lib/__init__.py +1 -0
  101. package/hooks/lib/greptile.py +355 -0
  102. package/hooks/lib/ntfy.py +209 -0
  103. package/hooks/notify-input-needed.py +73 -0
  104. package/hooks/notify-phase-complete.py +90 -0
  105. package/hooks/run-code-review.py +246 -0
  106. package/hooks/track-token-usage.py +121 -0
  107. package/package.json +13 -3
  108. package/scripts/collect-test-results.ts +102 -77
  109. package/scripts/extract-parameters.ts +112 -70
  110. package/scripts/generate-test-manifest.ts +118 -77
  111. package/templates/.env.example +57 -0
  112. package/templates/BRAND_GUIDE.md +92 -52
  113. package/templates/CLAUDE-SECTION.md +40 -37
  114. package/templates/SPEC.json +186 -38
  115. package/templates/api-dev-state.json +33 -4
  116. package/templates/api-showcase/_components/APICard.tsx +22 -18
  117. package/templates/api-showcase/_components/APIModal.tsx +110 -64
  118. package/templates/api-showcase/_components/APIShowcase.tsx +53 -35
  119. package/templates/api-showcase/_components/APITester.tsx +128 -67
  120. package/templates/api-showcase/page.tsx +4 -4
  121. package/templates/api-test/page.tsx +51 -30
  122. package/templates/api-test/test-structure/route.ts +43 -34
  123. package/templates/component/Component.stories.tsx +41 -39
  124. package/templates/component/Component.test.tsx +96 -78
  125. package/templates/component/Component.tsx +63 -52
  126. package/templates/component/Component.types.ts +10 -6
  127. package/templates/component/Component.visual.spec.ts +170 -0
  128. package/templates/component/index.ts +2 -2
  129. package/templates/dev-tools/_components/DevToolsLanding.tsx +8 -8
  130. package/templates/dev-tools/page.tsx +4 -3
  131. package/templates/mcp-servers.json +30 -2
  132. package/templates/page/page.e2e.test.ts +56 -48
  133. package/templates/page/page.tsx +3 -3
  134. package/templates/shared/HeroHeader.tsx +16 -15
  135. package/templates/shared/index.ts +1 -1
  136. package/templates/ui-showcase/_components/PreviewCard.tsx +20 -20
  137. package/templates/ui-showcase/_components/PreviewModal.tsx +149 -108
  138. package/templates/ui-showcase/_components/UIShowcase.tsx +43 -35
  139. package/templates/ui-showcase/page.tsx +4 -4
@@ -6,53 +6,61 @@
6
6
  ## Core Colors
7
7
 
8
8
  ### Hustle Brand Colors
9
- | Name | Hex | RGB | Usage |
10
- |------|-----|-----|-------|
11
- | **Hustle Red** | #BA0C2F | rgb(186, 12, 47) | Primary accent, buttons, links, focus rings |
12
- | **Hustle Red Hover** | #8A0923 | rgb(138, 9, 35) | Hover states |
13
- | **Hustle Red Light** | rgba(186, 12, 47, 0.1) | - | Backgrounds, badges |
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
- | Name | Hex | Usage |
17
- |------|-----|-------|
18
- | **Background** | #FFFFFF | Main background |
19
- | **Background Secondary** | #F8F8F8 | Cards, sections |
20
- | **Background Tertiary** | #F0F0F0 | Nested elements |
21
- | **Text** | #1A1A1A | Primary text |
22
- | **Text Muted** | #666666 | Secondary text |
23
- | **Border** | #E5E5E5 | Light borders |
24
- | **Border Strong** | #000000 | Boxy card borders |
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
- | Name | Hex | Usage |
28
- |------|-----|-------|
29
- | **Background** | #050505 | Main background |
29
+
30
+ | Name | Hex | Usage |
31
+ | ------------------------ | ------- | --------------- |
32
+ | **Background** | #050505 | Main background |
30
33
  | **Background Secondary** | #111111 | Cards, sections |
31
- | **Background Tertiary** | #1A1A1A | Nested elements |
32
- | **Text** | #F0F0F0 | Primary text |
33
- | **Text Muted** | #888888 | Secondary text |
34
- | **Border** | #333333 | Dark borders |
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
- | Name | Hex | Usage |
38
- |------|-----|-------|
40
+
41
+ | Name | Hex | Usage |
42
+ | ----------- | ------- | --------------------------- |
39
43
  | **Success** | #22C55E | Completed, passed, positive |
40
- | **Warning** | #EAB308 | Caution, pending |
41
- | **Error** | #EF4444 | Failed, errors, destructive |
42
- | **Info** | #3B82F6 | Informational |
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: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Segoe UI', Roboto, sans-serif;
54
+ --font-main:
55
+ -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", Roboto,
56
+ sans-serif;
50
57
 
51
58
  /* Monospace */
52
- --font-mono: 'SF Mono', Monaco, Inconsolata, 'Fira Code', monospace;
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
- | Token | Value | Pixels |
86
- |-------|-------|--------|
87
- | 0 | 0 | 0 |
88
- | 1 | 0.25rem | 4px |
89
- | 2 | 0.5rem | 8px |
90
- | 3 | 0.75rem | 12px |
91
- | 4 | 1rem | 16px |
92
- | 5 | 1.25rem | 20px |
93
- | 6 | 1.5rem | 24px |
94
- | 8 | 2rem | 32px |
95
- | 10 | 2.5rem | 40px |
96
- | 12 | 3rem | 48px |
97
- | 16 | 4rem | 64px |
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 #BA0C2F;
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: color, background-color, border-color, opacity, transform, box-shadow;
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: #BA0C2F;
171
+ background: #ba0c2f;
151
172
  color: #ffffff;
152
173
  padding: 12px 24px;
153
- border: 2px solid #BA0C2F;
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
- | Size | Padding | Font Size |
185
- |------|---------|-----------|
186
- | Small | 8px 16px | 12px |
187
- | Medium | 12px 24px | 14px |
188
- | Large | 16px 32px | 16px |
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: #BA0C2F;
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 | 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 |
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 | Event | Action |
66
- |------|-------|--------|
67
- | `session-startup.py` | SessionStart | Inject state context |
68
- | `detect-interruption.py` | SessionStart | Detect interrupted workflows |
69
- | `enforce-external-research.py` | UserPromptSubmit | Require research first |
70
- | `enforce-disambiguation.py` | PreToolUse | Phase 1 enforcement |
71
- | `enforce-scope.py` | PreToolUse | Phase 2 enforcement |
72
- | `enforce-research.py` | PreToolUse | Phase 3 enforcement |
73
- | `enforce-interview.py` | PreToolUse | Phase 4 - inject decisions |
74
- | `enforce-deep-research.py` | PreToolUse | Phase 5 enforcement |
75
- | `enforce-schema.py` | PreToolUse | Phase 6 enforcement |
76
- | `enforce-environment.py` | PreToolUse | Phase 7 enforcement |
77
- | `enforce-tdd-red.py` | PreToolUse | Phase 8 enforcement |
78
- | `verify-implementation.py` | PreToolUse | Phase 9 helper |
79
- | `enforce-verify.py` | PreToolUse | Phase 10 enforcement |
80
- | `enforce-refactor.py` | PreToolUse | Phase 11 enforcement |
81
- | `enforce-documentation.py` | PreToolUse | Phase 12 enforcement |
82
- | `enforce-questions-sourced.py` | PreToolUse | Validate questions from research |
83
- | `enforce-schema-from-interview.py` | PreToolUse | Validate schema from interview |
84
- | `track-tool-use.py` | PostToolUse | Log research, count turns |
85
- | `periodic-reground.py` | PostToolUse | Re-inject context every 7 turns |
86
- | `track-scope-coverage.py` | PostToolUse | Track implemented vs deferred |
87
- | `verify-after-green.py` | PostToolUse | Trigger Phase 10 after tests pass |
88
- | `cache-research.py` | PostToolUse | Create research cache files |
89
- | `generate-manifest-entry.py` | PostToolUse | Auto-generate API documentation |
90
- | `api-workflow-check.py` | Stop | Block if incomplete, generate output |
91
- | `session-logger.py` | Stop | Save session to api-sessions |
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