@hustle-together/api-dev-tools 3.10.1 → 3.12.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 (178) 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 +331 -0
  9. package/.claude/commands/README.md +196 -0
  10. package/.claude/commands/add-command.md +212 -0
  11. package/.claude/commands/api-create.md +510 -0
  12. package/.claude/commands/api-env.md +51 -0
  13. package/.claude/commands/api-interview.md +344 -0
  14. package/.claude/commands/api-research.md +357 -0
  15. package/.claude/commands/api-status.md +279 -0
  16. package/.claude/commands/api-verify.md +232 -0
  17. package/.claude/commands/beepboop.md +96 -0
  18. package/.claude/commands/busycommit.md +111 -0
  19. package/.claude/commands/commit.md +82 -0
  20. package/.claude/commands/cycle.md +137 -0
  21. package/.claude/commands/gap.md +85 -0
  22. package/.claude/commands/green.md +137 -0
  23. package/.claude/commands/issue.md +187 -0
  24. package/.claude/commands/ntfy-setup.md +91 -0
  25. package/.claude/commands/ntfy-test.md +74 -0
  26. package/.claude/commands/plan.md +167 -0
  27. package/.claude/commands/pr.md +121 -0
  28. package/.claude/commands/publish.md +40 -0
  29. package/.claude/commands/red.md +137 -0
  30. package/.claude/commands/refactor.md +137 -0
  31. package/.claude/commands/spike.md +137 -0
  32. package/.claude/commands/summarize.md +93 -0
  33. package/.claude/commands/tdd.md +139 -0
  34. package/.claude/commands/worktree-add.md +307 -0
  35. package/.claude/commands/worktree-cleanup.md +275 -0
  36. package/.claude/hooks/api-workflow-check.py +227 -0
  37. package/.claude/hooks/enforce-deep-research.py +185 -0
  38. package/.claude/hooks/enforce-disambiguation.py +155 -0
  39. package/.claude/hooks/enforce-documentation.py +192 -0
  40. package/.claude/hooks/enforce-environment.py +253 -0
  41. package/.claude/hooks/enforce-external-research.py +328 -0
  42. package/.claude/hooks/enforce-interview.py +421 -0
  43. package/.claude/hooks/enforce-refactor.py +189 -0
  44. package/.claude/hooks/enforce-research.py +159 -0
  45. package/.claude/hooks/enforce-schema.py +186 -0
  46. package/.claude/hooks/enforce-scope.py +160 -0
  47. package/.claude/hooks/enforce-tdd-red.py +250 -0
  48. package/.claude/hooks/enforce-verify.py +186 -0
  49. package/.claude/hooks/periodic-reground.py +154 -0
  50. package/.claude/hooks/session-startup.py +151 -0
  51. package/.claude/hooks/track-tool-use.py +626 -0
  52. package/.claude/hooks/verify-after-green.py +282 -0
  53. package/.claude/hooks/verify-implementation.py +225 -0
  54. package/.claude/research/index.json +6 -0
  55. package/.claude/settings.json +144 -0
  56. package/.claude/settings.local.json +12 -0
  57. package/.claude-plugin/marketplace.json +103 -0
  58. package/.skills/README.md +293 -0
  59. package/.skills/_shared/convert-commands.py +192 -0
  60. package/.skills/_shared/hooks/api-workflow-check.py +227 -0
  61. package/.skills/_shared/hooks/enforce-deep-research.py +185 -0
  62. package/.skills/_shared/hooks/enforce-disambiguation.py +155 -0
  63. package/.skills/_shared/hooks/enforce-documentation.py +192 -0
  64. package/.skills/_shared/hooks/enforce-environment.py +253 -0
  65. package/.skills/_shared/hooks/enforce-external-research.py +328 -0
  66. package/.skills/_shared/hooks/enforce-interview.py +421 -0
  67. package/.skills/_shared/hooks/enforce-refactor.py +189 -0
  68. package/.skills/_shared/hooks/enforce-research.py +159 -0
  69. package/.skills/_shared/hooks/enforce-schema.py +186 -0
  70. package/.skills/_shared/hooks/enforce-scope.py +160 -0
  71. package/.skills/_shared/hooks/enforce-tdd-red.py +250 -0
  72. package/.skills/_shared/hooks/enforce-verify.py +186 -0
  73. package/.skills/_shared/hooks/periodic-reground.py +154 -0
  74. package/.skills/_shared/hooks/session-startup.py +151 -0
  75. package/.skills/_shared/hooks/track-tool-use.py +626 -0
  76. package/.skills/_shared/hooks/verify-after-green.py +282 -0
  77. package/.skills/_shared/hooks/verify-implementation.py +225 -0
  78. package/.skills/_shared/install.sh +114 -0
  79. package/.skills/_shared/settings.json +93 -0
  80. package/.skills/add-command/SKILL.md +227 -0
  81. package/.skills/api-create/SKILL.md +623 -0
  82. package/.skills/api-env/SKILL.md +64 -0
  83. package/.skills/api-interview/SKILL.md +357 -0
  84. package/.skills/api-research/SKILL.md +370 -0
  85. package/.skills/api-status/SKILL.md +292 -0
  86. package/.skills/api-verify/SKILL.md +245 -0
  87. package/.skills/beepboop/SKILL.md +111 -0
  88. package/.skills/busycommit/SKILL.md +126 -0
  89. package/.skills/commit/SKILL.md +97 -0
  90. package/.skills/cycle/SKILL.md +152 -0
  91. package/.skills/gap/SKILL.md +100 -0
  92. package/.skills/green/SKILL.md +152 -0
  93. package/.skills/issue/SKILL.md +202 -0
  94. package/.skills/plan/SKILL.md +182 -0
  95. package/.skills/pr/SKILL.md +136 -0
  96. package/.skills/publish/SKILL.md +160 -0
  97. package/.skills/red/SKILL.md +152 -0
  98. package/.skills/refactor/SKILL.md +152 -0
  99. package/.skills/spike/SKILL.md +152 -0
  100. package/.skills/summarize/SKILL.md +108 -0
  101. package/.skills/tdd/SKILL.md +154 -0
  102. package/.skills/update-todos/SKILL.md +250 -0
  103. package/.skills/worktree-add/SKILL.md +322 -0
  104. package/.skills/worktree-cleanup/SKILL.md +290 -0
  105. package/CHANGELOG.md +115 -0
  106. package/README.md +161 -7101
  107. package/bin/cli.js +448 -805
  108. package/commands/README.md +66 -31
  109. package/commands/add-command.md +8 -5
  110. package/commands/beepboop.md +4 -5
  111. package/commands/busycommit.md +2 -3
  112. package/commands/commit.md +2 -3
  113. package/commands/cycle.md +2 -7
  114. package/commands/gap.md +2 -3
  115. package/commands/green.md +2 -7
  116. package/commands/hustle-api-continue.md +8 -5
  117. package/commands/hustle-api-create.md +70 -29
  118. package/commands/hustle-api-env.md +1 -0
  119. package/commands/hustle-api-interview.md +32 -19
  120. package/commands/hustle-api-research.md +47 -21
  121. package/commands/hustle-api-sessions.md +8 -7
  122. package/commands/hustle-api-status.md +21 -1
  123. package/commands/hustle-api-verify.md +14 -13
  124. package/commands/hustle-combine.md +488 -241
  125. package/commands/hustle-ui-create-page.md +113 -50
  126. package/commands/hustle-ui-create.md +179 -26
  127. package/commands/issue.md +3 -8
  128. package/commands/plan.md +2 -3
  129. package/commands/pr.md +2 -3
  130. package/commands/red.md +2 -7
  131. package/commands/refactor.md +2 -7
  132. package/commands/spike.md +2 -7
  133. package/commands/summarize.md +2 -3
  134. package/commands/tdd.md +2 -7
  135. package/commands/worktree-add.md +208 -216
  136. package/commands/worktree-cleanup.md +172 -178
  137. package/hooks/api-workflow-check.py +5 -3
  138. package/hooks/enforce-component-type-confirm.py +97 -0
  139. package/hooks/lib/__init__.py +1 -0
  140. package/hooks/lib/greptile.py +355 -0
  141. package/hooks/lib/ntfy.py +209 -0
  142. package/hooks/notify-input-needed.py +73 -0
  143. package/hooks/notify-phase-complete.py +90 -0
  144. package/hooks/run-code-review.py +246 -0
  145. package/hooks/track-token-usage.py +121 -0
  146. package/package.json +33 -12
  147. package/scripts/collect-test-results.ts +102 -77
  148. package/scripts/extract-parameters.ts +112 -70
  149. package/scripts/generate-test-manifest.ts +118 -77
  150. package/templates/.env.example +57 -0
  151. package/templates/BRAND_GUIDE.md +92 -52
  152. package/templates/CLAUDE-SECTION.md +40 -37
  153. package/templates/SPEC.json +186 -38
  154. package/templates/api-dev-state.json +33 -4
  155. package/templates/api-showcase/_components/APICard.tsx +22 -18
  156. package/templates/api-showcase/_components/APIModal.tsx +110 -64
  157. package/templates/api-showcase/_components/APIShowcase.tsx +53 -35
  158. package/templates/api-showcase/_components/APITester.tsx +128 -67
  159. package/templates/api-showcase/page.tsx +4 -4
  160. package/templates/api-test/page.tsx +51 -30
  161. package/templates/api-test/test-structure/route.ts +43 -34
  162. package/templates/component/Component.stories.tsx +41 -39
  163. package/templates/component/Component.test.tsx +96 -78
  164. package/templates/component/Component.tsx +63 -52
  165. package/templates/component/Component.types.ts +10 -6
  166. package/templates/component/Component.visual.spec.ts +170 -0
  167. package/templates/component/index.ts +2 -2
  168. package/templates/dev-tools/_components/DevToolsLanding.tsx +8 -8
  169. package/templates/dev-tools/page.tsx +4 -3
  170. package/templates/mcp-servers.json +30 -2
  171. package/templates/page/page.e2e.test.ts +56 -48
  172. package/templates/page/page.tsx +3 -3
  173. package/templates/shared/HeroHeader.tsx +16 -15
  174. package/templates/shared/index.ts +1 -1
  175. package/templates/ui-showcase/_components/PreviewCard.tsx +20 -20
  176. package/templates/ui-showcase/_components/PreviewModal.tsx +149 -108
  177. package/templates/ui-showcase/_components/UIShowcase.tsx +43 -35
  178. package/templates/ui-showcase/page.tsx +4 -4
@@ -1,23 +1,25 @@
1
1
  ---
2
- description: Create Next.js pages with 13-phase interview-driven workflow
2
+ description: Create Next.js pages with 14-phase interview-driven workflow
3
3
  argument-hint: [page-name]
4
4
  ---
5
5
 
6
6
  # Hustle UI Create - Page Mode
7
7
 
8
- **Version:** 3.10.0
9
- **13-phase workflow for creating Next.js App Router pages**
8
+ **Version:** 3.11.0
9
+ **14-phase workflow for creating Next.js App Router pages**
10
10
 
11
11
  You are creating a page using the Hustle Together interview-driven workflow.
12
12
 
13
13
  ## Pre-Flight Check
14
14
 
15
15
  Before starting, verify state file exists:
16
+
16
17
  ```bash
17
18
  cat .claude/api-dev-state.json 2>/dev/null || echo "Creating new state file"
18
19
  ```
19
20
 
20
21
  Initialize state for page creation:
22
+
21
23
  ```json
22
24
  {
23
25
  "workflow": "ui-create-page",
@@ -33,6 +35,7 @@ Initialize state for page creation:
33
35
  **Goal:** Clarify page type and purpose
34
36
 
35
37
  Ask the user:
38
+
36
39
  ```
37
40
  Phase 1: DISAMBIGUATION
38
41
 
@@ -52,6 +55,7 @@ Please select A-G:
52
55
  **Wait for user response.**
53
56
 
54
57
  Update state:
58
+
55
59
  ```json
56
60
  {
57
61
  "phases": {
@@ -135,26 +139,31 @@ Please select A or B:
135
139
  Perform 2-3 targeted searches based on page type:
136
140
 
137
141
  **For Landing Pages:**
142
+
138
143
  1. `Next.js 15 landing page best practices`
139
144
  2. `shadcn landing page components hero section`
140
145
  3. `responsive landing page layout App Router`
141
146
 
142
147
  **For Dashboards:**
148
+
143
149
  1. `Next.js 15 dashboard layout App Router`
144
150
  2. `shadcn dashboard components data table`
145
151
  3. `Recharts React charts dashboard`
146
152
 
147
153
  **For Form Pages:**
154
+
148
155
  1. `Next.js 15 server actions form handling`
149
156
  2. `react-hook-form zod validation`
150
157
  3. `shadcn form components`
151
158
 
152
159
  **For List Pages:**
160
+
153
161
  1. `Next.js 15 pagination App Router`
154
162
  2. `shadcn data table filtering sorting`
155
163
  3. `server-side pagination searchParams`
156
164
 
157
165
  **For Detail Pages:**
166
+
158
167
  1. `Next.js 15 dynamic routes [id] App Router`
159
168
  2. `generateStaticParams ISR`
160
169
  3. `optimistic updates detail page`
@@ -162,6 +171,7 @@ Perform 2-3 targeted searches based on page type:
162
171
  Use Context7 for Next.js and ShadCN documentation.
163
172
 
164
173
  Document findings in state:
174
+
165
175
  ```json
166
176
  {
167
177
  "phases": {
@@ -222,6 +232,7 @@ Q6: [Research-derived question about specific feature]
222
232
  **Wait for all answers before proceeding.**
223
233
 
224
234
  Store all decisions in state:
235
+
225
236
  ```json
226
237
  {
227
238
  "phases": {
@@ -257,6 +268,7 @@ cat .claude/registry.json | jq '.pages'
257
268
  ```
258
269
 
259
270
  Present findings:
271
+
260
272
  ```
261
273
  Phase 5: PAGE ANALYSIS
262
274
 
@@ -332,6 +344,7 @@ export interface [Name]Filters {
332
344
  ```
333
345
 
334
346
  Present to user:
347
+
335
348
  ```
336
349
  Phase 6: DATA SCHEMA
337
350
 
@@ -361,6 +374,7 @@ ls -la src/app/api/v2/ 2>/dev/null | head -20
361
374
  ```
362
375
 
363
376
  If page requires API routes that don't exist:
377
+
364
378
  ```
365
379
  Phase 7: ENVIRONMENT CHECK
366
380
 
@@ -391,6 +405,7 @@ cat package.json | jq '.dependencies, .devDependencies' | grep -E "next-auth|@ta
391
405
  ```
392
406
 
393
407
  Report status:
408
+
394
409
  ```
395
410
  Environment Check:
396
411
  API Routes: [X/Y available]
@@ -411,65 +426,67 @@ Ready to proceed with TDD?
411
426
  ```typescript
412
427
  // src/app/[name]/__tests__/[name].e2e.test.ts
413
428
 
414
- import { test, expect } from '@playwright/test';
429
+ import { test, expect } from "@playwright/test";
415
430
 
416
- test.describe('[Name] Page', () => {
431
+ test.describe("[Name] Page", () => {
417
432
  test.beforeEach(async ({ page }) => {
418
- await page.goto('/[name]');
433
+ await page.goto("/[name]");
419
434
  });
420
435
 
421
436
  // Basic Rendering Tests
422
- test('page loads successfully', async ({ page }) => {
437
+ test("page loads successfully", async ({ page }) => {
423
438
  await expect(page).toHaveTitle(/[Name]/);
424
- await expect(page.locator('h1')).toContainText('[Expected Title]');
439
+ await expect(page.locator("h1")).toContainText("[Expected Title]");
425
440
  });
426
441
 
427
- test('displays main content section', async ({ page }) => {
428
- await expect(page.getByRole('main')).toBeVisible();
442
+ test("displays main content section", async ({ page }) => {
443
+ await expect(page.getByRole("main")).toBeVisible();
429
444
  });
430
445
 
431
446
  // Data Display Tests (for List/Dashboard)
432
- test('displays data items', async ({ page }) => {
433
- await expect(page.locator('[data-testid="item-card"]')).toHaveCount.greaterThan(0);
447
+ test("displays data items", async ({ page }) => {
448
+ await expect(
449
+ page.locator('[data-testid="item-card"]'),
450
+ ).toHaveCount.greaterThan(0);
434
451
  });
435
452
 
436
453
  // Form Tests (for Form pages)
437
- test('form validation works', async ({ page }) => {
454
+ test("form validation works", async ({ page }) => {
438
455
  await page.click('button[type="submit"]');
439
- await expect(page.getByText('Required field')).toBeVisible();
456
+ await expect(page.getByText("Required field")).toBeVisible();
440
457
  });
441
458
 
442
- test('form submission works', async ({ page }) => {
443
- await page.fill('input[name="email"]', 'test@example.com');
459
+ test("form submission works", async ({ page }) => {
460
+ await page.fill('input[name="email"]', "test@example.com");
444
461
  await page.click('button[type="submit"]');
445
- await expect(page.getByText('Success')).toBeVisible();
462
+ await expect(page.getByText("Success")).toBeVisible();
446
463
  });
447
464
 
448
465
  // Navigation Tests
449
- test('navigation works correctly', async ({ page }) => {
466
+ test("navigation works correctly", async ({ page }) => {
450
467
  await page.click('a[href="/[name]/details"]');
451
468
  await expect(page).toHaveURL(/\/[name]\/details/);
452
469
  });
453
470
 
454
471
  // Responsive Tests
455
- test('mobile layout works', async ({ page }) => {
472
+ test("mobile layout works", async ({ page }) => {
456
473
  await page.setViewportSize({ width: 375, height: 667 });
457
- await expect(page.getByRole('navigation')).toBeVisible();
474
+ await expect(page.getByRole("navigation")).toBeVisible();
458
475
  });
459
476
 
460
477
  // Auth Tests (if protected)
461
- test('redirects to login when unauthenticated', async ({ page }) => {
478
+ test("redirects to login when unauthenticated", async ({ page }) => {
462
479
  // Clear auth state
463
480
  await page.context().clearCookies();
464
- await page.goto('/[name]');
481
+ await page.goto("/[name]");
465
482
  await expect(page).toHaveURL(/\/login/);
466
483
  });
467
484
 
468
485
  // Performance Tests
469
- test('page loads within performance budget', async ({ page }) => {
486
+ test("page loads within performance budget", async ({ page }) => {
470
487
  const startTime = Date.now();
471
- await page.goto('/[name]');
472
- await page.waitForLoadState('networkidle');
488
+ await page.goto("/[name]");
489
+ await page.waitForLoadState("networkidle");
473
490
  const loadTime = Date.now() - startTime;
474
491
  expect(loadTime).toBeLessThan(3000); // 3 second budget
475
492
  });
@@ -674,6 +691,7 @@ Step 4: Performance Metrics
674
691
  ```
675
692
 
676
693
  **Present 4-step results:**
694
+
677
695
  ```
678
696
  Phase 10: VERIFICATION (4-Step)
679
697
 
@@ -707,11 +725,46 @@ Any issues to fix?
707
725
 
708
726
  ---
709
727
 
710
- # Phase 11: TDD REFACTOR
728
+ # Phase 11: CODE REVIEW (Greptile)
711
729
 
712
- **Goal:** Clean up code while tests pass
730
+ **Goal:** AI-powered code review before refactoring
731
+
732
+ Run Greptile code review to catch issues early:
733
+
734
+ - Bug detection with full codebase context
735
+ - Security vulnerability scanning (OWASP top 10)
736
+ - Performance issue identification
737
+ - Accessibility concerns
738
+
739
+ **Requires:** GREPTILE_API_KEY + GITHUB_TOKEN
740
+
741
+ Present results:
742
+
743
+ ```
744
+ Phase 11: CODE REVIEW
745
+
746
+ Greptile found [N] issue(s):
747
+
748
+ 1. [file:line] - [severity] [issue description]
749
+ 2. [file:line] - [severity] [issue description]
750
+
751
+ How should I proceed?
752
+ A) Fix all issues in refactor phase
753
+ B) Fix critical only, defer others
754
+ C) Skip - no issues to fix
755
+ ```
756
+
757
+ **Wait for user response.**
758
+
759
+ ---
760
+
761
+ # Phase 12: TDD REFACTOR
762
+
763
+ **Goal:** Fix code review issues + clean up code while tests pass
713
764
 
714
765
  Refactoring checklist:
766
+
767
+ - [ ] Address Greptile issues (bugs, security, performance)
715
768
  - [ ] Extract repeated components to `_components/`
716
769
  - [ ] Move data fetching to dedicated functions
717
770
  - [ ] Extract server actions to `_lib/actions.ts`
@@ -721,20 +774,22 @@ Refactoring checklist:
721
774
  - [ ] Extract types to `_types/`
722
775
 
723
776
  Run tests after each refactor:
777
+
724
778
  ```bash
725
779
  pnpm playwright test src/app/[name]
726
780
  ```
727
781
 
728
782
  ---
729
783
 
730
- # Phase 12: DOCUMENTATION
784
+ # Phase 13: DOCUMENTATION
731
785
 
732
786
  **Goal:** Complete all documentation
733
787
 
734
788
  ### Page Documentation
735
789
 
736
790
  Create or update:
737
- ```typescript
791
+
792
+ ````typescript
738
793
  // src/app/[name]/README.md (optional)
739
794
 
740
795
  # [Name] Page
@@ -756,8 +811,9 @@ Create or update:
756
811
  ## Testing
757
812
  ```bash
758
813
  pnpm playwright test src/app/[name]
759
- ```
760
- ```
814
+ ````
815
+
816
+ ````
761
817
 
762
818
  ### Registry Entry
763
819
 
@@ -784,9 +840,10 @@ Update `.claude/registry.json`:
784
840
  }
785
841
  }
786
842
  }
787
- ```
843
+ ````
788
844
 
789
845
  Present checklist:
846
+
790
847
  ```
791
848
  Phase 12: DOCUMENTATION
792
849
 
@@ -802,7 +859,7 @@ Documentation complete?
802
859
 
803
860
  ---
804
861
 
805
- # Phase 13: COMPLETION
862
+ # Phase 14: COMPLETION
806
863
 
807
864
  **Goal:** Final output and showcase integration
808
865
 
@@ -880,11 +937,17 @@ Update state: `phases.completion.status = "complete"`
880
937
  "phases": {
881
938
  "disambiguation": { "status": "complete", "page_type": "dashboard" },
882
939
  "scope": { "status": "complete" },
883
- "design_research": { "status": "complete", "brand_guide_applied": true },
940
+ "design_research": {
941
+ "status": "complete",
942
+ "brand_guide_applied": true
943
+ },
884
944
  "interview": { "status": "complete", "decisions": {} },
885
945
  "page_analysis": { "status": "complete", "components_selected": [] },
886
946
  "data_schema": { "status": "complete", "schema_file": "..." },
887
- "environment_check": { "status": "complete", "api_routes_verified": true },
947
+ "environment_check": {
948
+ "status": "complete",
949
+ "api_routes_verified": true
950
+ },
888
951
  "tdd_red": { "status": "complete", "tests_written": 15 },
889
952
  "tdd_green": { "status": "complete", "tests_passed": 15 },
890
953
  "verify": { "status": "complete", "four_step_passed": true },
@@ -901,19 +964,19 @@ Update state: `phases.completion.status = "complete"`
901
964
 
902
965
  # Hooks That Enforce This Workflow
903
966
 
904
- | Phase | Hook | Purpose |
905
- |-------|------|---------|
906
- | 1 | `enforce-ui-disambiguation.py` | Validates page type selection |
907
- | 3 | `enforce-brand-guide.py` | Ensures brand guide is checked |
908
- | 4 | `enforce-ui-interview.py` | Injects interview decisions |
909
- | 5 | `enforce-page-components.py` | Checks registry for components |
910
- | 6 | `enforce-page-data-schema.py` | Validates data types defined |
911
- | 7 | `check-api-routes.py` | Verifies required API routes |
912
- | 8 | `check-playwright-setup.py` | Ensures Playwright is configured |
913
- | 10 | `verify-after-green.py` | Triggers 4-step verification |
914
- | 12 | `update-registry.py` | Adds page to registry |
915
- | 12 | `update-ui-showcase.py` | Updates showcase |
916
- | 13 | `api-workflow-check.py` | Blocks if incomplete |
967
+ | Phase | Hook | Purpose |
968
+ | ----- | ------------------------------ | -------------------------------- |
969
+ | 1 | `enforce-ui-disambiguation.py` | Validates page type selection |
970
+ | 3 | `enforce-brand-guide.py` | Ensures brand guide is checked |
971
+ | 4 | `enforce-ui-interview.py` | Injects interview decisions |
972
+ | 5 | `enforce-page-components.py` | Checks registry for components |
973
+ | 6 | `enforce-page-data-schema.py` | Validates data types defined |
974
+ | 7 | `check-api-routes.py` | Verifies required API routes |
975
+ | 8 | `check-playwright-setup.py` | Ensures Playwright is configured |
976
+ | 10 | `verify-after-green.py` | Triggers 4-step verification |
977
+ | 12 | `update-registry.py` | Adds page to registry |
978
+ | 12 | `update-ui-showcase.py` | Updates showcase |
979
+ | 13 | `api-workflow-check.py` | Blocks if incomplete |
917
980
 
918
981
  ---
919
982
 
@@ -929,5 +992,5 @@ Update state: `phases.completion.status = "complete"`
929
992
 
930
993
  ---
931
994
 
932
- **Version:** 3.10.0
933
- **Last Updated:** 2025-12-12
995
+ **Version:** 3.11.0
996
+ **Last Updated:** 2025-12-28