@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.
- 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 +331 -0
- package/.claude/commands/README.md +196 -0
- package/.claude/commands/add-command.md +212 -0
- package/.claude/commands/api-create.md +510 -0
- package/.claude/commands/api-env.md +51 -0
- package/.claude/commands/api-interview.md +344 -0
- package/.claude/commands/api-research.md +357 -0
- package/.claude/commands/api-status.md +279 -0
- package/.claude/commands/api-verify.md +232 -0
- package/.claude/commands/beepboop.md +96 -0
- package/.claude/commands/busycommit.md +111 -0
- package/.claude/commands/commit.md +82 -0
- package/.claude/commands/cycle.md +137 -0
- package/.claude/commands/gap.md +85 -0
- package/.claude/commands/green.md +137 -0
- package/.claude/commands/issue.md +187 -0
- package/.claude/commands/ntfy-setup.md +91 -0
- package/.claude/commands/ntfy-test.md +74 -0
- package/.claude/commands/plan.md +167 -0
- package/.claude/commands/pr.md +121 -0
- package/.claude/commands/publish.md +40 -0
- package/.claude/commands/red.md +137 -0
- package/.claude/commands/refactor.md +137 -0
- package/.claude/commands/spike.md +137 -0
- package/.claude/commands/summarize.md +93 -0
- package/.claude/commands/tdd.md +139 -0
- package/.claude/commands/worktree-add.md +307 -0
- package/.claude/commands/worktree-cleanup.md +275 -0
- package/.claude/hooks/api-workflow-check.py +227 -0
- package/.claude/hooks/enforce-deep-research.py +185 -0
- package/.claude/hooks/enforce-disambiguation.py +155 -0
- package/.claude/hooks/enforce-documentation.py +192 -0
- package/.claude/hooks/enforce-environment.py +253 -0
- package/.claude/hooks/enforce-external-research.py +328 -0
- package/.claude/hooks/enforce-interview.py +421 -0
- package/.claude/hooks/enforce-refactor.py +189 -0
- package/.claude/hooks/enforce-research.py +159 -0
- package/.claude/hooks/enforce-schema.py +186 -0
- package/.claude/hooks/enforce-scope.py +160 -0
- package/.claude/hooks/enforce-tdd-red.py +250 -0
- package/.claude/hooks/enforce-verify.py +186 -0
- package/.claude/hooks/periodic-reground.py +154 -0
- package/.claude/hooks/session-startup.py +151 -0
- package/.claude/hooks/track-tool-use.py +626 -0
- package/.claude/hooks/verify-after-green.py +282 -0
- package/.claude/hooks/verify-implementation.py +225 -0
- package/.claude/research/index.json +6 -0
- package/.claude/settings.json +144 -0
- package/.claude/settings.local.json +12 -0
- package/.claude-plugin/marketplace.json +103 -0
- package/.skills/README.md +293 -0
- package/.skills/_shared/convert-commands.py +192 -0
- package/.skills/_shared/hooks/api-workflow-check.py +227 -0
- package/.skills/_shared/hooks/enforce-deep-research.py +185 -0
- package/.skills/_shared/hooks/enforce-disambiguation.py +155 -0
- package/.skills/_shared/hooks/enforce-documentation.py +192 -0
- package/.skills/_shared/hooks/enforce-environment.py +253 -0
- package/.skills/_shared/hooks/enforce-external-research.py +328 -0
- package/.skills/_shared/hooks/enforce-interview.py +421 -0
- package/.skills/_shared/hooks/enforce-refactor.py +189 -0
- package/.skills/_shared/hooks/enforce-research.py +159 -0
- package/.skills/_shared/hooks/enforce-schema.py +186 -0
- package/.skills/_shared/hooks/enforce-scope.py +160 -0
- package/.skills/_shared/hooks/enforce-tdd-red.py +250 -0
- package/.skills/_shared/hooks/enforce-verify.py +186 -0
- package/.skills/_shared/hooks/periodic-reground.py +154 -0
- package/.skills/_shared/hooks/session-startup.py +151 -0
- package/.skills/_shared/hooks/track-tool-use.py +626 -0
- package/.skills/_shared/hooks/verify-after-green.py +282 -0
- package/.skills/_shared/hooks/verify-implementation.py +225 -0
- package/.skills/_shared/install.sh +114 -0
- package/.skills/_shared/settings.json +93 -0
- package/.skills/add-command/SKILL.md +227 -0
- package/.skills/api-create/SKILL.md +623 -0
- package/.skills/api-env/SKILL.md +64 -0
- package/.skills/api-interview/SKILL.md +357 -0
- package/.skills/api-research/SKILL.md +370 -0
- package/.skills/api-status/SKILL.md +292 -0
- package/.skills/api-verify/SKILL.md +245 -0
- package/.skills/beepboop/SKILL.md +111 -0
- package/.skills/busycommit/SKILL.md +126 -0
- package/.skills/commit/SKILL.md +97 -0
- package/.skills/cycle/SKILL.md +152 -0
- package/.skills/gap/SKILL.md +100 -0
- package/.skills/green/SKILL.md +152 -0
- package/.skills/issue/SKILL.md +202 -0
- package/.skills/plan/SKILL.md +182 -0
- package/.skills/pr/SKILL.md +136 -0
- package/.skills/publish/SKILL.md +160 -0
- package/.skills/red/SKILL.md +152 -0
- package/.skills/refactor/SKILL.md +152 -0
- package/.skills/spike/SKILL.md +152 -0
- package/.skills/summarize/SKILL.md +108 -0
- package/.skills/tdd/SKILL.md +154 -0
- package/.skills/update-todos/SKILL.md +250 -0
- package/.skills/worktree-add/SKILL.md +322 -0
- package/.skills/worktree-cleanup/SKILL.md +290 -0
- package/CHANGELOG.md +115 -0
- package/README.md +161 -7101
- 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 +33 -12
- 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
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Create Next.js pages with
|
|
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.
|
|
9
|
-
**
|
|
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
|
|
429
|
+
import { test, expect } from "@playwright/test";
|
|
415
430
|
|
|
416
|
-
test.describe(
|
|
431
|
+
test.describe("[Name] Page", () => {
|
|
417
432
|
test.beforeEach(async ({ page }) => {
|
|
418
|
-
await page.goto(
|
|
433
|
+
await page.goto("/[name]");
|
|
419
434
|
});
|
|
420
435
|
|
|
421
436
|
// Basic Rendering Tests
|
|
422
|
-
test(
|
|
437
|
+
test("page loads successfully", async ({ page }) => {
|
|
423
438
|
await expect(page).toHaveTitle(/[Name]/);
|
|
424
|
-
await expect(page.locator(
|
|
439
|
+
await expect(page.locator("h1")).toContainText("[Expected Title]");
|
|
425
440
|
});
|
|
426
441
|
|
|
427
|
-
test(
|
|
428
|
-
await expect(page.getByRole(
|
|
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(
|
|
433
|
-
await expect(
|
|
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(
|
|
454
|
+
test("form validation works", async ({ page }) => {
|
|
438
455
|
await page.click('button[type="submit"]');
|
|
439
|
-
await expect(page.getByText(
|
|
456
|
+
await expect(page.getByText("Required field")).toBeVisible();
|
|
440
457
|
});
|
|
441
458
|
|
|
442
|
-
test(
|
|
443
|
-
await page.fill('input[name="email"]',
|
|
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(
|
|
462
|
+
await expect(page.getByText("Success")).toBeVisible();
|
|
446
463
|
});
|
|
447
464
|
|
|
448
465
|
// Navigation Tests
|
|
449
|
-
test(
|
|
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(
|
|
472
|
+
test("mobile layout works", async ({ page }) => {
|
|
456
473
|
await page.setViewportSize({ width: 375, height: 667 });
|
|
457
|
-
await expect(page.getByRole(
|
|
474
|
+
await expect(page.getByRole("navigation")).toBeVisible();
|
|
458
475
|
});
|
|
459
476
|
|
|
460
477
|
// Auth Tests (if protected)
|
|
461
|
-
test(
|
|
478
|
+
test("redirects to login when unauthenticated", async ({ page }) => {
|
|
462
479
|
// Clear auth state
|
|
463
480
|
await page.context().clearCookies();
|
|
464
|
-
await page.goto(
|
|
481
|
+
await page.goto("/[name]");
|
|
465
482
|
await expect(page).toHaveURL(/\/login/);
|
|
466
483
|
});
|
|
467
484
|
|
|
468
485
|
// Performance Tests
|
|
469
|
-
test(
|
|
486
|
+
test("page loads within performance budget", async ({ page }) => {
|
|
470
487
|
const startTime = Date.now();
|
|
471
|
-
await page.goto(
|
|
472
|
-
await page.waitForLoadState(
|
|
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:
|
|
728
|
+
# Phase 11: CODE REVIEW (Greptile)
|
|
711
729
|
|
|
712
|
-
**Goal:**
|
|
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
|
|
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
|
-
|
|
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
|
|
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": {
|
|
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": {
|
|
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
|
|
905
|
-
|
|
906
|
-
| 1
|
|
907
|
-
| 3
|
|
908
|
-
| 4
|
|
909
|
-
| 5
|
|
910
|
-
| 6
|
|
911
|
-
| 7
|
|
912
|
-
| 8
|
|
913
|
-
| 10
|
|
914
|
-
| 12
|
|
915
|
-
| 12
|
|
916
|
-
| 13
|
|
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.
|
|
933
|
-
**Last Updated:** 2025-12-
|
|
995
|
+
**Version:** 3.11.0
|
|
996
|
+
**Last Updated:** 2025-12-28
|