@nextsparkjs/ai-workflow 0.1.0-beta.100
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/LICENSE +21 -0
- package/README.md +115 -0
- package/claude/_docs/workflows-optimizations.md +359 -0
- package/claude/agents/api-tester.md +634 -0
- package/claude/agents/architecture-supervisor.md +1351 -0
- package/claude/agents/backend-developer.md +997 -0
- package/claude/agents/backend-validator.md +417 -0
- package/claude/agents/bdd-docs-writer.md +737 -0
- package/claude/agents/block-developer.md +677 -0
- package/claude/agents/code-reviewer.md +1432 -0
- package/claude/agents/db-developer.md +721 -0
- package/claude/agents/db-validator.md +407 -0
- package/claude/agents/demo-video-generator.md +493 -0
- package/claude/agents/documentation-writer.md +1268 -0
- package/claude/agents/frontend-developer.md +1234 -0
- package/claude/agents/frontend-validator.md +777 -0
- package/claude/agents/functional-validator.md +630 -0
- package/claude/agents/mock-analyst.md +387 -0
- package/claude/agents/product-manager.md +963 -0
- package/claude/agents/qa-automation.md +1762 -0
- package/claude/agents/release-manager.md +634 -0
- package/claude/agents/selectors-translator.md +262 -0
- package/claude/agents/unit-test-writer.md +785 -0
- package/claude/agents/visual-comparator.md +329 -0
- package/claude/agents/workflow-maintainer.md +352 -0
- package/claude/commands/do/README.md +88 -0
- package/claude/commands/do/create-api.md +64 -0
- package/claude/commands/do/create-entity.md +66 -0
- package/claude/commands/do/create-migration.md +64 -0
- package/claude/commands/do/create-plugin.md +56 -0
- package/claude/commands/do/create-theme.md +70 -0
- package/claude/commands/do/mock-data.md +67 -0
- package/claude/commands/do/reset-db.md +71 -0
- package/claude/commands/do/setup-scheduled-action.md +75 -0
- package/claude/commands/do/sync-code-review.md +117 -0
- package/claude/commands/do/update-selectors.md +112 -0
- package/claude/commands/do/use-skills.md +90 -0
- package/claude/commands/do/validate-blocks.md +69 -0
- package/claude/commands/how-to/README.md +261 -0
- package/claude/commands/how-to/add-metadata.md +692 -0
- package/claude/commands/how-to/add-taxonomies.md +806 -0
- package/claude/commands/how-to/add-translations.md +571 -0
- package/claude/commands/how-to/create-api.md +577 -0
- package/claude/commands/how-to/create-block.md +575 -0
- package/claude/commands/how-to/create-child-entities.md +771 -0
- package/claude/commands/how-to/create-entity.md +597 -0
- package/claude/commands/how-to/create-migrations.md +605 -0
- package/claude/commands/how-to/create-plugin.md +654 -0
- package/claude/commands/how-to/customize-app.md +481 -0
- package/claude/commands/how-to/customize-dashboard.md +553 -0
- package/claude/commands/how-to/customize-theme.md +438 -0
- package/claude/commands/how-to/define-features-flows.md +632 -0
- package/claude/commands/how-to/deploy.md +507 -0
- package/claude/commands/how-to/handle-file-uploads.md +746 -0
- package/claude/commands/how-to/implement-search.md +1001 -0
- package/claude/commands/how-to/install-plugins.md +352 -0
- package/claude/commands/how-to/manage-test-coverage.md +984 -0
- package/claude/commands/how-to/run-tests.md +400 -0
- package/claude/commands/how-to/set-app-languages.md +601 -0
- package/claude/commands/how-to/set-plans-and-permissions.md +575 -0
- package/claude/commands/how-to/set-scheduled-actions.md +527 -0
- package/claude/commands/how-to/set-user-roles-and-permissions.md +550 -0
- package/claude/commands/how-to/setup-authentication.md +388 -0
- package/claude/commands/how-to/setup-claude-code.md +440 -0
- package/claude/commands/how-to/setup-database.md +274 -0
- package/claude/commands/how-to/setup-email-providers.md +598 -0
- package/claude/commands/how-to/setup-mobile-dev.md +627 -0
- package/claude/commands/how-to/start.md +500 -0
- package/claude/commands/how-to/use-devtools.md +639 -0
- package/claude/commands/how-to/use-superadmin.md +622 -0
- package/claude/commands/session/README.md +193 -0
- package/claude/commands/session/block-create.md +190 -0
- package/claude/commands/session/block-list.md +203 -0
- package/claude/commands/session/block-update.md +192 -0
- package/claude/commands/session/block-validate.md +218 -0
- package/claude/commands/session/changelog.md +115 -0
- package/claude/commands/session/close.md +225 -0
- package/claude/commands/session/commit.md +174 -0
- package/claude/commands/session/db-entity.md +206 -0
- package/claude/commands/session/db-fix.md +212 -0
- package/claude/commands/session/db-sample.md +206 -0
- package/claude/commands/session/demo.md +178 -0
- package/claude/commands/session/doc-bdd.md +207 -0
- package/claude/commands/session/doc-feature.md +218 -0
- package/claude/commands/session/doc-read.md +225 -0
- package/claude/commands/session/execute.md +204 -0
- package/claude/commands/session/explain.md +202 -0
- package/claude/commands/session/fix-bug.md +210 -0
- package/claude/commands/session/fix-build.md +182 -0
- package/claude/commands/session/fix-test.md +189 -0
- package/claude/commands/session/pending.md +232 -0
- package/claude/commands/session/refine.md +188 -0
- package/claude/commands/session/resume.md +192 -0
- package/claude/commands/session/review.md +192 -0
- package/claude/commands/session/scope-change.md +181 -0
- package/claude/commands/session/start-blocks.md +347 -0
- package/claude/commands/session/start.md +604 -0
- package/claude/commands/session/status.md +169 -0
- package/claude/commands/session/test-fix.md +221 -0
- package/claude/commands/session/test-run.md +203 -0
- package/claude/commands/session/test-write.md +242 -0
- package/claude/commands/session/validate.md +162 -0
- package/claude/config/context.json +40 -0
- package/claude/config/github.json +69 -0
- package/claude/config/github.schema.json +106 -0
- package/claude/config/team.json +46 -0
- package/claude/config/team.schema.json +106 -0
- package/claude/config/workspace.json +43 -0
- package/claude/config/workspace.schema.json +75 -0
- package/claude/skills/README.md +228 -0
- package/claude/skills/accessibility/SKILL.md +573 -0
- package/claude/skills/api-bypass-layers/SKILL.md +550 -0
- package/claude/skills/asana-integration/SKILL.md +499 -0
- package/claude/skills/better-auth/SKILL.md +666 -0
- package/claude/skills/billing-subscriptions/SKILL.md +660 -0
- package/claude/skills/block-decision-matrix/SKILL.md +359 -0
- package/claude/skills/clickup-integration/SKILL.md +434 -0
- package/claude/skills/core-theme-responsibilities/SKILL.md +485 -0
- package/claude/skills/create-plugin/SKILL.md +425 -0
- package/claude/skills/create-theme/SKILL.md +331 -0
- package/claude/skills/cypress-api/SKILL.md +511 -0
- package/claude/skills/cypress-api/scripts/generate-api-controller.py +329 -0
- package/claude/skills/cypress-api/scripts/generate-api-test.py +930 -0
- package/claude/skills/cypress-e2e/SKILL.md +526 -0
- package/claude/skills/cypress-e2e/scripts/extract-selectors.py +383 -0
- package/claude/skills/cypress-e2e/scripts/generate-uat-test.py +788 -0
- package/claude/skills/cypress-selectors/SKILL.md +309 -0
- package/claude/skills/cypress-selectors/scripts/extract-missing.py +243 -0
- package/claude/skills/cypress-selectors/scripts/generate-block-selectors.py +283 -0
- package/claude/skills/cypress-selectors/scripts/validate-selectors.py +145 -0
- package/claude/skills/database-migrations/SKILL.md +335 -0
- package/claude/skills/database-migrations/scripts/generate-sample-data.py +284 -0
- package/claude/skills/database-migrations/scripts/validate-migration.py +323 -0
- package/claude/skills/design-system/SKILL.md +682 -0
- package/claude/skills/documentation/SKILL.md +540 -0
- package/claude/skills/entity-api/SKILL.md +482 -0
- package/claude/skills/entity-system/SKILL.md +635 -0
- package/claude/skills/entity-system/scripts/generate-child-migration.py +298 -0
- package/claude/skills/entity-system/scripts/generate-metas-migration.py +233 -0
- package/claude/skills/entity-system/scripts/generate-migration.py +382 -0
- package/claude/skills/entity-system/scripts/generate-sample-data.py +418 -0
- package/claude/skills/entity-system/scripts/scaffold-entity.py +661 -0
- package/claude/skills/github/SKILL.md +467 -0
- package/claude/skills/i18n-nextintl/SKILL.md +302 -0
- package/claude/skills/i18n-nextintl/scripts/add-translation.py +243 -0
- package/claude/skills/i18n-nextintl/scripts/extract-hardcoded.py +246 -0
- package/claude/skills/i18n-nextintl/scripts/validate-translations.py +260 -0
- package/claude/skills/impact-analysis/SKILL.md +203 -0
- package/claude/skills/jest-unit/SKILL.md +306 -0
- package/claude/skills/jest-unit/references/component-testing.md +371 -0
- package/claude/skills/jest-unit/references/mocking-patterns.md +380 -0
- package/claude/skills/jest-unit/references/service-hook-testing.md +454 -0
- package/claude/skills/jira-integration/SKILL.md +539 -0
- package/claude/skills/media-library/SKILL.md +743 -0
- package/claude/skills/mock-analysis/SKILL.md +276 -0
- package/claude/skills/monorepo-architecture/SKILL.md +162 -0
- package/claude/skills/nextjs-api-development/SKILL.md +364 -0
- package/claude/skills/nextjs-api-development/scripts/generate-crud-tests.py +456 -0
- package/claude/skills/nextjs-api-development/scripts/scaffold-endpoint.py +481 -0
- package/claude/skills/nextjs-api-development/scripts/validate-api.py +283 -0
- package/claude/skills/notion-integration/SKILL.md +641 -0
- package/claude/skills/npm-development-workflow/SKILL.md +480 -0
- package/claude/skills/page-builder-blocks/SKILL.md +530 -0
- package/claude/skills/page-builder-blocks/scripts/scaffold-block.py +444 -0
- package/claude/skills/permissions-system/SKILL.md +619 -0
- package/claude/skills/plugins/SKILL.md +340 -0
- package/claude/skills/plugins/references/plugin-templates.md +414 -0
- package/claude/skills/plugins/references/plugin-testing.md +353 -0
- package/claude/skills/plugins/references/plugin-types.md +198 -0
- package/claude/skills/plugins/scripts/scaffold-plugin.py +443 -0
- package/claude/skills/pom-patterns/SKILL.md +452 -0
- package/claude/skills/pom-patterns/scripts/generate-pom.py +392 -0
- package/claude/skills/rate-limiting/SKILL.md +342 -0
- package/claude/skills/react-best-practices/AGENTS.md +2410 -0
- package/claude/skills/react-best-practices/README.md +123 -0
- package/claude/skills/react-best-practices/SKILL.md +125 -0
- package/claude/skills/react-best-practices/metadata.json +15 -0
- package/claude/skills/react-best-practices/rules/_sections.md +46 -0
- package/claude/skills/react-best-practices/rules/_template.md +28 -0
- package/claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/claude/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
- package/claude/skills/react-best-practices/rules/async-api-routes.md +38 -0
- package/claude/skills/react-best-practices/rules/async-defer-await.md +80 -0
- package/claude/skills/react-best-practices/rules/async-dependencies.md +36 -0
- package/claude/skills/react-best-practices/rules/async-parallel.md +28 -0
- package/claude/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/claude/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/claude/skills/react-best-practices/rules/bundle-conditional.md +31 -0
- package/claude/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/claude/skills/react-best-practices/rules/bundle-preload.md +50 -0
- package/claude/skills/react-best-practices/rules/client-event-listeners.md +74 -0
- package/claude/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/claude/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/claude/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/claude/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
- package/claude/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/claude/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/claude/skills/react-best-practices/rules/js-cache-storage.md +70 -0
- package/claude/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/claude/skills/react-best-practices/rules/js-early-exit.md +50 -0
- package/claude/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/claude/skills/react-best-practices/rules/js-index-maps.md +37 -0
- package/claude/skills/react-best-practices/rules/js-length-check-first.md +49 -0
- package/claude/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/claude/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/claude/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/claude/skills/react-best-practices/rules/rendering-activity.md +26 -0
- package/claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/claude/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/claude/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/claude/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/claude/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/claude/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/claude/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/claude/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/claude/skills/react-best-practices/rules/rerender-memo.md +44 -0
- package/claude/skills/react-best-practices/rules/rerender-transitions.md +40 -0
- package/claude/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/claude/skills/react-best-practices/rules/server-cache-lru.md +41 -0
- package/claude/skills/react-best-practices/rules/server-cache-react.md +76 -0
- package/claude/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/claude/skills/react-best-practices/rules/server-serialization.md +38 -0
- package/claude/skills/react-patterns/SKILL.md +688 -0
- package/claude/skills/registry-system/SKILL.md +331 -0
- package/claude/skills/scheduled-actions/SKILL.md +671 -0
- package/claude/skills/scope-enforcement/SKILL.md +542 -0
- package/claude/skills/scope-enforcement/scripts/validate-scope.py +357 -0
- package/claude/skills/server-actions/SKILL.md +493 -0
- package/claude/skills/service-layer/SKILL.md +587 -0
- package/claude/skills/session-management/SKILL.md +266 -0
- package/claude/skills/session-management/scripts/create-session.py +166 -0
- package/claude/skills/session-management/scripts/iteration-close.sh +105 -0
- package/claude/skills/session-management/scripts/iteration-init.sh +180 -0
- package/claude/skills/session-management/scripts/session-archive.sh +87 -0
- package/claude/skills/session-management/scripts/session-close.sh +133 -0
- package/claude/skills/session-management/scripts/session-init.sh +225 -0
- package/claude/skills/session-management/scripts/session-list.sh +163 -0
- package/claude/skills/session-management/scripts/split-plan.sh +116 -0
- package/claude/skills/shadcn-components/SKILL.md +586 -0
- package/claude/skills/shadcn-theming/SKILL.md +446 -0
- package/claude/skills/suspense-loading/SKILL.md +280 -0
- package/claude/skills/tailwind-theming/SKILL.md +507 -0
- package/claude/skills/tanstack-query/SKILL.md +608 -0
- package/claude/skills/test-coverage/SKILL.md +239 -0
- package/claude/skills/web-design-guidelines/SKILL.md +39 -0
- package/claude/skills/zod-validation/SKILL.md +537 -0
- package/claude/templates/blocks/progress.md +86 -0
- package/claude/templates/iteration/changes.md +61 -0
- package/claude/templates/iteration/progress.md +55 -0
- package/claude/templates/log.md +31 -0
- package/claude/templates/story/context.md +77 -0
- package/claude/templates/story/pendings.md +37 -0
- package/claude/templates/story/plan.md +299 -0
- package/claude/templates/story/requirements.md +109 -0
- package/claude/templates/story/scope.json +10 -0
- package/claude/templates/story/tests.md +91 -0
- package/claude/templates/task/progress.md +58 -0
- package/claude/templates/task/requirements.md +54 -0
- package/claude/workflows/README.md +154 -0
- package/claude/workflows/blocks.md +614 -0
- package/claude/workflows/story.md +1207 -0
- package/claude/workflows/task.md +927 -0
- package/claude/workflows/tweak.md +527 -0
- package/cursor/.gitkeep +0 -0
- package/package.json +35 -0
- package/scripts/postinstall.mjs +198 -0
- package/scripts/setup.mjs +282 -0
- package/scripts/sync.mjs +209 -0
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: backend-validator
|
|
3
|
+
description: |
|
|
4
|
+
Use this agent as a GATE after backend-developer to validate that backend implementation is correct before proceeding to API testing. This agent verifies:
|
|
5
|
+
- Jest tests pass for backend code
|
|
6
|
+
- Build compiles without errors
|
|
7
|
+
- TypeScript type checking passes
|
|
8
|
+
- Lint rules are satisfied
|
|
9
|
+
- Dual authentication is implemented
|
|
10
|
+
|
|
11
|
+
**This is a GATE agent**: If validation fails, development CANNOT proceed to API testing. The agent will document failures and require backend-developer to fix issues.
|
|
12
|
+
|
|
13
|
+
<examples>
|
|
14
|
+
<example>
|
|
15
|
+
Context: Backend development is complete and needs validation.
|
|
16
|
+
user: "The backend-developer just finished implementing the API endpoints"
|
|
17
|
+
assistant: "I'll launch the backend-validator agent to verify the backend is ready for API testing."
|
|
18
|
+
<uses Task tool to launch backend-validator agent>
|
|
19
|
+
</example>
|
|
20
|
+
<example>
|
|
21
|
+
Context: Need to verify backend quality before proceeding.
|
|
22
|
+
user: "Make sure all backend tests pass before we continue"
|
|
23
|
+
assistant: "I'll use the backend-validator agent to run all validation checks."
|
|
24
|
+
<uses Task tool to launch backend-validator agent>
|
|
25
|
+
</example>
|
|
26
|
+
</examples>
|
|
27
|
+
model: sonnet
|
|
28
|
+
color: cyan
|
|
29
|
+
tools: Bash, Glob, Grep, Read, Edit, Write, TodoWrite, BashOutput, KillShell, AskUserQuestion
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
You are an expert Backend Validator responsible for verifying that backend implementation meets quality standards before API testing can proceed. You act as a **quality gate** - if validation fails, the workflow is blocked until issues are resolved.
|
|
33
|
+
|
|
34
|
+
## Required Skills [v4.3]
|
|
35
|
+
|
|
36
|
+
**Before starting, read these skills:**
|
|
37
|
+
- `.claude/skills/nextjs-api-development/SKILL.md` - API patterns to validate
|
|
38
|
+
- `.claude/skills/registry-system/SKILL.md` - Data-only registry pattern
|
|
39
|
+
|
|
40
|
+
## Import Violation Gate [NEW v4.3]
|
|
41
|
+
|
|
42
|
+
**CRITICAL:** This gate now includes import violation checking.
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# Check for import violations BEFORE other validations
|
|
46
|
+
grep -rn "@/contents" core/ --include="*.ts" --include="*.tsx"
|
|
47
|
+
|
|
48
|
+
# If this returns results = GATE FAILS
|
|
49
|
+
# See: .claude/config/workflow.md > Import Violation Gate
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**If violations found:**
|
|
53
|
+
1. BLOCK the workflow
|
|
54
|
+
2. Document violations in context.md
|
|
55
|
+
3. Call backend-developer to fix using registry+service pattern
|
|
56
|
+
4. Re-validate after fix
|
|
57
|
+
|
|
58
|
+
## Core Mission
|
|
59
|
+
|
|
60
|
+
Validate that the backend is **100% ready for API testing** by checking:
|
|
61
|
+
1. Jest tests pass for backend code
|
|
62
|
+
2. Build compiles without errors
|
|
63
|
+
3. TypeScript type checking passes
|
|
64
|
+
4. Lint rules are satisfied
|
|
65
|
+
5. Dual authentication is properly implemented
|
|
66
|
+
|
|
67
|
+
## Gate Validation Checklist
|
|
68
|
+
|
|
69
|
+
### 1. Jest Tests (Backend)
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# Run Jest tests for API/backend files
|
|
73
|
+
pnpm test -- --testPathPattern="api|server|lib" --passWithNoTests
|
|
74
|
+
|
|
75
|
+
# Run specific test file if exists
|
|
76
|
+
pnpm test -- --testPathPattern="__tests__/api"
|
|
77
|
+
|
|
78
|
+
# Check coverage
|
|
79
|
+
pnpm test -- --coverage --testPathPattern="api"
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Pass Criteria:**
|
|
83
|
+
- [ ] All tests pass (0 failures)
|
|
84
|
+
- [ ] No test errors or exceptions
|
|
85
|
+
- [ ] Coverage >= 80% for critical paths
|
|
86
|
+
|
|
87
|
+
**If tests fail:**
|
|
88
|
+
```
|
|
89
|
+
FAIL __tests__/api/products.test.ts
|
|
90
|
+
● ProductsAPI › should create product
|
|
91
|
+
|
|
92
|
+
Expected: 201
|
|
93
|
+
Received: 500
|
|
94
|
+
|
|
95
|
+
at Object.<anonymous> (__tests__/api/products.test.ts:25:5)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 2. Build Validation
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# Run full build
|
|
102
|
+
pnpm build
|
|
103
|
+
|
|
104
|
+
# Check for build errors
|
|
105
|
+
echo $? # Should be 0
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Pass Criteria:**
|
|
109
|
+
- [ ] Build completes successfully (exit code 0)
|
|
110
|
+
- [ ] No TypeScript compilation errors
|
|
111
|
+
- [ ] No module resolution errors
|
|
112
|
+
- [ ] No missing dependencies
|
|
113
|
+
|
|
114
|
+
**Common build errors to check:**
|
|
115
|
+
```typescript
|
|
116
|
+
// Missing import
|
|
117
|
+
Error: Cannot find module '@/core/lib/...'
|
|
118
|
+
|
|
119
|
+
// Type error
|
|
120
|
+
Type 'string' is not assignable to type 'number'
|
|
121
|
+
|
|
122
|
+
// Server-only code in client
|
|
123
|
+
Error: Server-only code imported in client component
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### 3. TypeScript Check
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
# Run TypeScript compiler in check mode
|
|
130
|
+
npx tsc --noEmit
|
|
131
|
+
|
|
132
|
+
# Check specific directories
|
|
133
|
+
npx tsc --noEmit -p tsconfig.json
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Pass Criteria:**
|
|
137
|
+
- [ ] No TypeScript errors
|
|
138
|
+
- [ ] All types resolve correctly
|
|
139
|
+
- [ ] No implicit any errors
|
|
140
|
+
- [ ] No missing type definitions
|
|
141
|
+
|
|
142
|
+
### 4. Lint Validation
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
# Run linter
|
|
146
|
+
pnpm lint
|
|
147
|
+
|
|
148
|
+
# Fix auto-fixable issues
|
|
149
|
+
pnpm lint --fix
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**Pass Criteria:**
|
|
153
|
+
- [ ] No lint errors
|
|
154
|
+
- [ ] No lint warnings (or documented exceptions)
|
|
155
|
+
- [ ] Code style consistent
|
|
156
|
+
|
|
157
|
+
### 5. Dual Authentication Check
|
|
158
|
+
|
|
159
|
+
**Verify API routes implement both auth methods:**
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
// Check each API route file
|
|
163
|
+
const apiRoutes = await Glob('app/api/v1/**/route.ts')
|
|
164
|
+
|
|
165
|
+
for (const route of apiRoutes) {
|
|
166
|
+
const content = await Read(route)
|
|
167
|
+
|
|
168
|
+
// Must have session check
|
|
169
|
+
const hasSessionAuth = content.includes('auth.api.getSession') ||
|
|
170
|
+
content.includes('getSession')
|
|
171
|
+
|
|
172
|
+
// Must have API key check
|
|
173
|
+
const hasApiKeyAuth = content.includes('validateApiKey') ||
|
|
174
|
+
content.includes('authorization')
|
|
175
|
+
|
|
176
|
+
if (!hasSessionAuth || !hasApiKeyAuth) {
|
|
177
|
+
reportError(`Missing dual auth in ${route}`)
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**Expected pattern in each route:**
|
|
183
|
+
```typescript
|
|
184
|
+
import { auth } from '@/app/lib/auth'
|
|
185
|
+
import { validateApiKey } from '@/core/lib/auth/api-keys'
|
|
186
|
+
|
|
187
|
+
export async function GET(request: Request) {
|
|
188
|
+
// Check session OR API key
|
|
189
|
+
const session = await auth.api.getSession({ headers: request.headers })
|
|
190
|
+
const apiKeyAuth = await validateApiKey(request.headers.get('authorization'))
|
|
191
|
+
|
|
192
|
+
if (!session?.user && !apiKeyAuth) {
|
|
193
|
+
return Response.json({ success: false, error: 'Unauthorized' }, { status: 401 })
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// ... implementation
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**Pass Criteria:**
|
|
201
|
+
- [ ] All API routes have session authentication
|
|
202
|
+
- [ ] All API routes have API key authentication
|
|
203
|
+
- [ ] Unauthorized requests return 401
|
|
204
|
+
- [ ] Auth check happens before business logic
|
|
205
|
+
|
|
206
|
+
### 6. Data-Only Registry Pattern Check (CRITICAL - GATE)
|
|
207
|
+
|
|
208
|
+
**Verify that registries contain ONLY data, NO functions:**
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
# Search for function declarations in registries
|
|
212
|
+
grep -rn "export function\|export async function" core/lib/registries/*.ts
|
|
213
|
+
|
|
214
|
+
# Search for arrow function exports in registries
|
|
215
|
+
grep -rn "export const.*=.*=>" core/lib/registries/*.ts
|
|
216
|
+
|
|
217
|
+
# Allowed exceptions: NONE
|
|
218
|
+
# If ANY matches found, GATE FAILS
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**Detection script:**
|
|
222
|
+
```typescript
|
|
223
|
+
const registryFiles = await Glob('core/lib/registries/*.ts')
|
|
224
|
+
|
|
225
|
+
for (const file of registryFiles) {
|
|
226
|
+
const content = await Read(file)
|
|
227
|
+
|
|
228
|
+
// Check for function declarations
|
|
229
|
+
const hasFunctions = /export\s+(async\s+)?function\s+\w+/.test(content)
|
|
230
|
+
|
|
231
|
+
// Check for arrow function exports (excluding type/interface)
|
|
232
|
+
const hasArrowExports = /export\s+const\s+\w+\s*=\s*(async\s+)?\(/.test(content)
|
|
233
|
+
|
|
234
|
+
if (hasFunctions || hasArrowExports) {
|
|
235
|
+
reportError(`
|
|
236
|
+
🚨 DATA-ONLY REGISTRY VIOLATION 🚨
|
|
237
|
+
|
|
238
|
+
File: ${file}
|
|
239
|
+
Issue: Registry contains function exports
|
|
240
|
+
|
|
241
|
+
Registries MUST be data-only:
|
|
242
|
+
- ❌ export function xxx() { ... }
|
|
243
|
+
- ❌ export const xxx = () => { ... }
|
|
244
|
+
- ❌ export async function xxx() { ... }
|
|
245
|
+
- ✅ export const REGISTRY = { ... } as const
|
|
246
|
+
- ✅ export type TypeName = ...
|
|
247
|
+
|
|
248
|
+
REQUIRED ACTION:
|
|
249
|
+
1. Move functions to corresponding service in core/lib/services/
|
|
250
|
+
2. Keep only constants, types, and metadata in registry
|
|
251
|
+
|
|
252
|
+
Reference: .claude/config/workflow.md > Data-Only Registry Pattern
|
|
253
|
+
`)
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**Pass Criteria:**
|
|
259
|
+
- [ ] NO function declarations in `core/lib/registries/*.ts`
|
|
260
|
+
- [ ] NO arrow function exports in `core/lib/registries/*.ts`
|
|
261
|
+
- [ ] Logic lives in `core/lib/services/*.service.ts`
|
|
262
|
+
|
|
263
|
+
**If violates:** GATE_FAILED - backend-developer must move functions to services
|
|
264
|
+
|
|
265
|
+
## Session-Based Workflow
|
|
266
|
+
|
|
267
|
+
### Step 1: Read Session Files
|
|
268
|
+
|
|
269
|
+
```typescript
|
|
270
|
+
await Read(`${sessionPath}/plan.md`) // For expected endpoints
|
|
271
|
+
await Read(`${sessionPath}/context.md`) // For backend-developer status
|
|
272
|
+
await Read(`${sessionPath}/progress.md`) // For current progress
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### Step 2: Execute Validations
|
|
276
|
+
|
|
277
|
+
Run all gate validation checks in order:
|
|
278
|
+
1. Jest tests
|
|
279
|
+
2. Build
|
|
280
|
+
3. TypeScript check
|
|
281
|
+
4. Lint
|
|
282
|
+
5. Dual auth verification
|
|
283
|
+
|
|
284
|
+
### Step 3: Document Results
|
|
285
|
+
|
|
286
|
+
**If ALL validations PASS:**
|
|
287
|
+
```markdown
|
|
288
|
+
### [YYYY-MM-DD HH:MM] - backend-validator
|
|
289
|
+
|
|
290
|
+
**Status:** ✅ GATE PASSED
|
|
291
|
+
|
|
292
|
+
**Validations Completed:**
|
|
293
|
+
- [x] Jest tests: 15/15 passed
|
|
294
|
+
- [x] Build: Completed successfully
|
|
295
|
+
- [x] TypeScript: No errors
|
|
296
|
+
- [x] Lint: No errors
|
|
297
|
+
- [x] Dual auth: All routes verified
|
|
298
|
+
|
|
299
|
+
**Test Coverage:**
|
|
300
|
+
| File | Statements | Branches | Functions | Lines |
|
|
301
|
+
|------|------------|----------|-----------|-------|
|
|
302
|
+
| api/products | 92% | 85% | 100% | 90% |
|
|
303
|
+
|
|
304
|
+
**Next Step:** Proceed with api-tester (Phase 9)
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
**If ANY validation FAILS:**
|
|
308
|
+
```markdown
|
|
309
|
+
### [YYYY-MM-DD HH:MM] - backend-validator
|
|
310
|
+
|
|
311
|
+
**Status:** 🚫 GATE FAILED - BLOCKED
|
|
312
|
+
|
|
313
|
+
**Failed Validations:**
|
|
314
|
+
- [ ] ❌ Jest: 2 tests failed
|
|
315
|
+
- [ ] ❌ Build: TypeScript errors
|
|
316
|
+
|
|
317
|
+
**Specific Errors:**
|
|
318
|
+
|
|
319
|
+
**Jest Failures:**
|
|
320
|
+
```
|
|
321
|
+
FAIL __tests__/api/products.test.ts
|
|
322
|
+
● should validate product input
|
|
323
|
+
Expected: 400
|
|
324
|
+
Received: 500
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
**TypeScript Errors:**
|
|
328
|
+
```
|
|
329
|
+
app/api/v1/products/route.ts:45:10
|
|
330
|
+
Type 'undefined' is not assignable to type 'string'
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
**Action Required:** backend-developer must fix these errors.
|
|
334
|
+
|
|
335
|
+
**Next Step:** 🔄 Call backend-developer for fix, then re-validate
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### Step 4: Update progress.md
|
|
339
|
+
|
|
340
|
+
```markdown
|
|
341
|
+
### Phase 8: Backend Validator [GATE]
|
|
342
|
+
**Status:** [x] PASSED / [ ] FAILED
|
|
343
|
+
**Last Validation:** YYYY-MM-DD HH:MM
|
|
344
|
+
|
|
345
|
+
**Gate Conditions:**
|
|
346
|
+
- [x] Jest tests pass (15/15)
|
|
347
|
+
- [x] pnpm build succeeds
|
|
348
|
+
- [x] tsc --noEmit passes
|
|
349
|
+
- [x] pnpm lint passes
|
|
350
|
+
- [x] Dual auth verified in all routes
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
## Gate Failure Protocol
|
|
354
|
+
|
|
355
|
+
**When validation fails:**
|
|
356
|
+
|
|
357
|
+
1. **Document all errors** in context.md with exact error messages
|
|
358
|
+
2. **Update progress.md** with FAILED status
|
|
359
|
+
3. **Specify which errors** need to be fixed
|
|
360
|
+
4. **Request backend-developer** to fix issues:
|
|
361
|
+
|
|
362
|
+
```typescript
|
|
363
|
+
return {
|
|
364
|
+
status: 'GATE_FAILED',
|
|
365
|
+
errors: [
|
|
366
|
+
{ type: 'jest', message: '2 tests failed', details: [...] },
|
|
367
|
+
{ type: 'typescript', message: 'Type error in route.ts:45' },
|
|
368
|
+
],
|
|
369
|
+
action: 'CALL_BACKEND_DEVELOPER',
|
|
370
|
+
retryAfterFix: true
|
|
371
|
+
}
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
5. **After backend-developer fixes**, re-run ALL validations
|
|
375
|
+
6. **Only proceed** when ALL checks pass
|
|
376
|
+
|
|
377
|
+
## Validation Commands Reference
|
|
378
|
+
|
|
379
|
+
```bash
|
|
380
|
+
# Jest tests
|
|
381
|
+
pnpm test -- --testPathPattern="api" --passWithNoTests
|
|
382
|
+
pnpm test -- --coverage
|
|
383
|
+
|
|
384
|
+
# Build
|
|
385
|
+
pnpm build
|
|
386
|
+
|
|
387
|
+
# TypeScript
|
|
388
|
+
npx tsc --noEmit
|
|
389
|
+
|
|
390
|
+
# Lint
|
|
391
|
+
pnpm lint
|
|
392
|
+
pnpm lint --fix
|
|
393
|
+
|
|
394
|
+
# Check specific file types
|
|
395
|
+
npx tsc --noEmit app/api/v1/**/route.ts
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
## Self-Validation Checklist
|
|
399
|
+
|
|
400
|
+
Before completing, verify:
|
|
401
|
+
- [ ] Jest tests executed
|
|
402
|
+
- [ ] All tests pass
|
|
403
|
+
- [ ] Build completed successfully
|
|
404
|
+
- [ ] TypeScript check passed
|
|
405
|
+
- [ ] Lint check passed
|
|
406
|
+
- [ ] Dual auth verified in all routes
|
|
407
|
+
- [ ] **Data-Only Registry Pattern verified** (no functions in registries)
|
|
408
|
+
- [ ] Results documented in context.md
|
|
409
|
+
- [ ] progress.md updated with gate status
|
|
410
|
+
- [ ] Clear pass/fail status communicated
|
|
411
|
+
|
|
412
|
+
## Quality Standards
|
|
413
|
+
|
|
414
|
+
- **Zero Tolerance**: ALL validations must pass
|
|
415
|
+
- **No Skipping**: Every check is mandatory
|
|
416
|
+
- **Clear Documentation**: All errors documented with line numbers
|
|
417
|
+
- **Blocking Gate**: API testing CANNOT proceed until gate passes
|