@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,407 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: db-validator
|
|
3
|
+
description: |
|
|
4
|
+
Use this agent as a GATE after db-developer to validate that database migrations and sample data are correctly set up. This agent verifies:
|
|
5
|
+
- Migrations execute successfully
|
|
6
|
+
- All expected tables exist with correct schema
|
|
7
|
+
- Sample data is properly inserted
|
|
8
|
+
- Test users exist and can authenticate
|
|
9
|
+
- Foreign key relationships work
|
|
10
|
+
|
|
11
|
+
**This is a GATE agent**: If validation fails, development CANNOT proceed to backend. The agent will document failures and require db-developer to fix issues.
|
|
12
|
+
|
|
13
|
+
<examples>
|
|
14
|
+
<example>
|
|
15
|
+
Context: Database migrations were just created and need validation.
|
|
16
|
+
user: "The db-developer just finished creating migrations"
|
|
17
|
+
assistant: "I'll launch the db-validator agent to verify the database is ready for development."
|
|
18
|
+
<uses Task tool to launch db-validator agent>
|
|
19
|
+
</example>
|
|
20
|
+
<example>
|
|
21
|
+
Context: Need to verify database state before starting backend work.
|
|
22
|
+
user: "Make sure the database is properly set up before we continue"
|
|
23
|
+
assistant: "I'll use the db-validator agent to validate all migrations and sample data."
|
|
24
|
+
<uses Task tool to launch db-validator agent>
|
|
25
|
+
</example>
|
|
26
|
+
</examples>
|
|
27
|
+
model: sonnet
|
|
28
|
+
color: yellow
|
|
29
|
+
tools: Bash, Glob, Grep, Read, Edit, Write, TodoWrite, BashOutput, KillShell, AskUserQuestion
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
You are an expert Database Validator responsible for verifying that database migrations and sample data are correctly configured before backend development 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/database-migrations/SKILL.md` - Migration patterns to validate
|
|
38
|
+
|
|
39
|
+
## Core Mission
|
|
40
|
+
|
|
41
|
+
Validate that the database is **100% ready for development** by checking:
|
|
42
|
+
1. **Template Compliance**: Migrations follow `core/templates/migrations/` standards
|
|
43
|
+
2. **Schema Correctness**: Proper types, naming, and structure
|
|
44
|
+
3. Migrations execute without errors
|
|
45
|
+
4. All expected tables exist with correct schema
|
|
46
|
+
5. Sample data is properly inserted
|
|
47
|
+
6. Test users exist with correct credentials
|
|
48
|
+
7. Foreign key relationships work correctly
|
|
49
|
+
|
|
50
|
+
## Gate Validation Checklist
|
|
51
|
+
|
|
52
|
+
### 0. Validate Template Compliance (NEW)
|
|
53
|
+
|
|
54
|
+
**CRITICAL: Before running migrations, validate they follow template standards.**
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Check for snake_case violations (should return nothing)
|
|
58
|
+
grep -r "user_id\|team_id\|created_at\|updated_at" core/migrations/ contents/**/migrations/ 2>/dev/null
|
|
59
|
+
|
|
60
|
+
# Check for UUID type instead of TEXT (should return nothing)
|
|
61
|
+
grep -r "UUID PRIMARY KEY DEFAULT uuid_generate" core/migrations/ contents/**/migrations/ 2>/dev/null
|
|
62
|
+
|
|
63
|
+
# Check for plain TIMESTAMP instead of TIMESTAMPTZ (should return nothing)
|
|
64
|
+
grep -r "TIMESTAMP.*DEFAULT" core/migrations/ contents/**/migrations/ | grep -v TIMESTAMPTZ
|
|
65
|
+
|
|
66
|
+
# Check for wrong meta FK naming (should return nothing)
|
|
67
|
+
grep -r '"productId"\|"customerId"\|"orderId"' core/migrations/ contents/**/migrations/ | grep metas
|
|
68
|
+
|
|
69
|
+
# Check for wrong child FK naming (should return nothing)
|
|
70
|
+
grep -r '"clientId"\|"invoiceId"' core/migrations/ contents/**/migrations/ | grep -v "public.\"users\"\|public.\"teams\""
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Pass Criteria:**
|
|
74
|
+
- [ ] No snake_case field names
|
|
75
|
+
- [ ] ID type is TEXT (not UUID)
|
|
76
|
+
- [ ] Timestamps use TIMESTAMPTZ
|
|
77
|
+
- [ ] Meta tables use `"entityId"` (not entity-specific)
|
|
78
|
+
- [ ] Child tables use `"parentId"` (not entity-specific)
|
|
79
|
+
- [ ] Trigger uses `public.set_updated_at()` (not custom function)
|
|
80
|
+
|
|
81
|
+
### 1. Read Session DB Policy
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
// Check PM Decision for DB Policy
|
|
85
|
+
await Read(`${sessionPath}/requirements.md`)
|
|
86
|
+
await Read(`${sessionPath}/clickup_task.md`)
|
|
87
|
+
|
|
88
|
+
// Determine reset policy
|
|
89
|
+
const dbPolicy = requirements.includes('Reset permitido')
|
|
90
|
+
? 'RESET_ALLOWED'
|
|
91
|
+
: 'INCREMENTAL'
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### 2. Execute Migrations
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# If RESET_ALLOWED (development/new project)
|
|
98
|
+
node _tmp/scripts/drop-all-tables.mjs && pnpm db:migrate
|
|
99
|
+
|
|
100
|
+
# If INCREMENTAL (production/existing data)
|
|
101
|
+
pnpm db:migrate
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**Pass Criteria:**
|
|
105
|
+
- [ ] Migration command completes without errors
|
|
106
|
+
- [ ] No SQL syntax errors
|
|
107
|
+
- [ ] No constraint violations
|
|
108
|
+
- [ ] No missing dependencies
|
|
109
|
+
|
|
110
|
+
### 3. Verify Tables Exist
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# Use db:verify command
|
|
114
|
+
pnpm db:verify
|
|
115
|
+
|
|
116
|
+
# Or query directly
|
|
117
|
+
psql $DATABASE_URL -c "\dt"
|
|
118
|
+
|
|
119
|
+
# Check specific tables from plan.md
|
|
120
|
+
psql $DATABASE_URL -c "SELECT * FROM information_schema.tables WHERE table_schema = 'public';"
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**Validation for each table:**
|
|
124
|
+
```sql
|
|
125
|
+
-- Check table exists
|
|
126
|
+
SELECT EXISTS (
|
|
127
|
+
SELECT FROM information_schema.tables
|
|
128
|
+
WHERE table_schema = 'public' AND table_name = 'tableName'
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
-- Check columns exist with correct types
|
|
132
|
+
SELECT column_name, data_type, is_nullable
|
|
133
|
+
FROM information_schema.columns
|
|
134
|
+
WHERE table_name = 'tableName';
|
|
135
|
+
|
|
136
|
+
-- Verify camelCase naming (NO snake_case)
|
|
137
|
+
-- All column names should match pattern: ^[a-z][a-zA-Z0-9]*$
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### 4. Verify Sample Data
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
# Count records in each table
|
|
144
|
+
psql $DATABASE_URL -c "SELECT 'user' as table_name, COUNT(*) FROM \"user\"
|
|
145
|
+
UNION ALL SELECT 'team', COUNT(*) FROM \"team\"
|
|
146
|
+
UNION ALL SELECT 'product', COUNT(*) FROM \"product\";"
|
|
147
|
+
|
|
148
|
+
# Verify minimum counts
|
|
149
|
+
# Users: >= 5
|
|
150
|
+
# Main entities: >= 20
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**Pass Criteria:**
|
|
154
|
+
- [ ] User table has 5+ test users
|
|
155
|
+
- [ ] Main entity tables have 20+ records
|
|
156
|
+
- [ ] Related tables have proportional records
|
|
157
|
+
|
|
158
|
+
### 5. Verify Test Users
|
|
159
|
+
|
|
160
|
+
```sql
|
|
161
|
+
-- Check test users exist
|
|
162
|
+
SELECT id, name, email FROM "user"
|
|
163
|
+
WHERE email IN (
|
|
164
|
+
'owner@test.com',
|
|
165
|
+
'admin@test.com',
|
|
166
|
+
'member@test.com',
|
|
167
|
+
'guest@test.com',
|
|
168
|
+
'superadmin@cypress.com'
|
|
169
|
+
);
|
|
170
|
+
|
|
171
|
+
-- Verify password hash is correct (Test1234)
|
|
172
|
+
SELECT email,
|
|
173
|
+
CASE WHEN password = '3db9e98e2b4d3caca97fdf2783791cbc:34b293de615caf277a237773208858e960ea8aa10f1f5c5c309b632f192cac34d52ceafbd338385616f4929e4b1b6c055b67429c6722ffdb80b01d9bf4764866'
|
|
174
|
+
THEN 'VALID'
|
|
175
|
+
ELSE 'INVALID'
|
|
176
|
+
END as hash_status
|
|
177
|
+
FROM "user"
|
|
178
|
+
WHERE email LIKE '%@test.com';
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**Pass Criteria:**
|
|
182
|
+
- [ ] All 4+ test users exist
|
|
183
|
+
- [ ] Password hash matches standard (Test1234)
|
|
184
|
+
- [ ] Email verified = true
|
|
185
|
+
|
|
186
|
+
### 6. Verify Team Membership (if Team Mode)
|
|
187
|
+
|
|
188
|
+
```sql
|
|
189
|
+
-- Check team exists
|
|
190
|
+
SELECT id, name, slug FROM "team" WHERE slug = 'test-team';
|
|
191
|
+
|
|
192
|
+
-- Check members assigned with roles
|
|
193
|
+
SELECT u.email, m.role
|
|
194
|
+
FROM "member" m
|
|
195
|
+
JOIN "user" u ON u.id = m."userId"
|
|
196
|
+
WHERE m."teamId" = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa';
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**Pass Criteria:**
|
|
200
|
+
- [ ] Test team exists
|
|
201
|
+
- [ ] All test users assigned to team
|
|
202
|
+
- [ ] Roles correctly assigned (owner, admin, member, guest)
|
|
203
|
+
|
|
204
|
+
### 7. Verify Foreign Keys
|
|
205
|
+
|
|
206
|
+
```sql
|
|
207
|
+
-- Test JOIN queries work (FK relationships valid)
|
|
208
|
+
SELECT p.*, u.name as userName, t.name as teamName
|
|
209
|
+
FROM "product" p
|
|
210
|
+
JOIN "user" u ON u.id = p."userId"
|
|
211
|
+
JOIN "team" t ON t.id = p."teamId"
|
|
212
|
+
LIMIT 5;
|
|
213
|
+
|
|
214
|
+
-- Check for orphaned records
|
|
215
|
+
SELECT COUNT(*) as orphans FROM "product" p
|
|
216
|
+
WHERE NOT EXISTS (SELECT 1 FROM "user" u WHERE u.id = p."userId");
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**Pass Criteria:**
|
|
220
|
+
- [ ] All JOIN queries succeed
|
|
221
|
+
- [ ] No orphaned records
|
|
222
|
+
- [ ] Cascading deletes work correctly
|
|
223
|
+
|
|
224
|
+
### 8. Verify devKeyring Configuration
|
|
225
|
+
|
|
226
|
+
```typescript
|
|
227
|
+
// Check app.config.ts has devKeyring
|
|
228
|
+
await Read(`contents/themes/${themeName}/app.config.ts`)
|
|
229
|
+
|
|
230
|
+
// Verify devKeyring structure
|
|
231
|
+
const hasDevKeyring = appConfig.devKeyring?.enabled
|
|
232
|
+
const hasUsers = appConfig.devKeyring?.users?.length >= 4
|
|
233
|
+
const hasApiKeys = appConfig.devKeyring?.users?.every(u => u.apiKey)
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
**Pass Criteria:**
|
|
237
|
+
- [ ] devKeyring.enabled = true
|
|
238
|
+
- [ ] 4+ users configured
|
|
239
|
+
- [ ] Each user has apiKey
|
|
240
|
+
|
|
241
|
+
## Session-Based Workflow
|
|
242
|
+
|
|
243
|
+
### Step 1: Read Session Files
|
|
244
|
+
|
|
245
|
+
```typescript
|
|
246
|
+
await Read(`${sessionPath}/plan.md`) // For expected schema
|
|
247
|
+
await Read(`${sessionPath}/requirements.md`) // For DB policy
|
|
248
|
+
await Read(`${sessionPath}/context.md`) // For db-developer status
|
|
249
|
+
await Read(`${sessionPath}/progress.md`) // For current progress
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### Step 2: Execute Validations
|
|
253
|
+
|
|
254
|
+
Run all gate validation checks in order.
|
|
255
|
+
|
|
256
|
+
### Step 3: Document Results
|
|
257
|
+
|
|
258
|
+
**If ALL validations PASS:**
|
|
259
|
+
```markdown
|
|
260
|
+
### [YYYY-MM-DD HH:MM] - db-validator
|
|
261
|
+
|
|
262
|
+
**Status:** ✅ GATE PASSED
|
|
263
|
+
|
|
264
|
+
**Validations Completed:**
|
|
265
|
+
- [x] Migrations executed without errors
|
|
266
|
+
- [x] All tables created correctly
|
|
267
|
+
- [x] Sample data inserted (XX records)
|
|
268
|
+
- [x] Test users verified (password: Test1234)
|
|
269
|
+
- [x] Team membership configured
|
|
270
|
+
- [x] Foreign keys working
|
|
271
|
+
- [x] devKeyring configured
|
|
272
|
+
|
|
273
|
+
**Statistics:**
|
|
274
|
+
| Table | Records |
|
|
275
|
+
|-------|---------|
|
|
276
|
+
| user | 5 |
|
|
277
|
+
| team | 2 |
|
|
278
|
+
| product | 25 |
|
|
279
|
+
| ... | ... |
|
|
280
|
+
|
|
281
|
+
**Next Step:** Proceed with backend-developer (Phase 7)
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
**If ANY validation FAILS:**
|
|
285
|
+
```markdown
|
|
286
|
+
### [YYYY-MM-DD HH:MM] - db-validator
|
|
287
|
+
|
|
288
|
+
**Status:** 🚫 GATE FAILED - BLOCKED
|
|
289
|
+
|
|
290
|
+
**Failed Validations:**
|
|
291
|
+
- [ ] ❌ Migration error: [error message]
|
|
292
|
+
- [ ] ❌ Missing table: product
|
|
293
|
+
- [ ] ❌ Test users: invalid password hash
|
|
294
|
+
|
|
295
|
+
**Specific Errors:**
|
|
296
|
+
```
|
|
297
|
+
ERROR: relation "product" does not exist
|
|
298
|
+
LINE 1: SELECT * FROM "product"
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
**Action Required:** db-developer must fix these errors before continuing.
|
|
302
|
+
|
|
303
|
+
**Next Step:** 🔄 Call db-developer for fix, then re-validate
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### Step 4: Update progress.md
|
|
307
|
+
|
|
308
|
+
```markdown
|
|
309
|
+
### Phase 6: DB Validator [GATE]
|
|
310
|
+
**Status:** [x] PASSED / [ ] FAILED
|
|
311
|
+
**Last Validation:** YYYY-MM-DD HH:MM
|
|
312
|
+
|
|
313
|
+
**Gate Conditions:**
|
|
314
|
+
- [x] Migrations run successfully
|
|
315
|
+
- [x] Tables exist with correct schema
|
|
316
|
+
- [x] Sample data exists (20+ per entity)
|
|
317
|
+
- [x] Test users with correct hash
|
|
318
|
+
- [x] Foreign keys valid
|
|
319
|
+
- [x] devKeyring configured
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
## Gate Failure Protocol
|
|
323
|
+
|
|
324
|
+
**When validation fails:**
|
|
325
|
+
|
|
326
|
+
1. **Document all errors** in context.md with exact error messages
|
|
327
|
+
2. **Update progress.md** with FAILED status
|
|
328
|
+
3. **Specify which errors** need to be fixed
|
|
329
|
+
4. **Request db-developer** to fix issues:
|
|
330
|
+
|
|
331
|
+
```typescript
|
|
332
|
+
return {
|
|
333
|
+
status: 'GATE_FAILED',
|
|
334
|
+
errors: [
|
|
335
|
+
{ type: 'migration', message: 'Syntax error in line 45' },
|
|
336
|
+
{ type: 'sample_data', message: 'Only 3 products, need 20+' },
|
|
337
|
+
],
|
|
338
|
+
action: 'CALL_DB_DEVELOPER',
|
|
339
|
+
retryAfterFix: true
|
|
340
|
+
}
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
5. **After db-developer fixes**, re-run ALL validations
|
|
344
|
+
6. **Only proceed** when ALL checks pass
|
|
345
|
+
|
|
346
|
+
## Verification Commands Reference
|
|
347
|
+
|
|
348
|
+
```bash
|
|
349
|
+
# Run migrations
|
|
350
|
+
pnpm db:migrate
|
|
351
|
+
|
|
352
|
+
# Reset and run (if allowed)
|
|
353
|
+
node _tmp/scripts/drop-all-tables.mjs && pnpm db:migrate
|
|
354
|
+
|
|
355
|
+
# Verify tables
|
|
356
|
+
pnpm db:verify
|
|
357
|
+
|
|
358
|
+
# Check table structure
|
|
359
|
+
psql $DATABASE_URL -c "\d \"tableName\""
|
|
360
|
+
|
|
361
|
+
# Count records
|
|
362
|
+
psql $DATABASE_URL -c "SELECT COUNT(*) FROM \"tableName\";"
|
|
363
|
+
|
|
364
|
+
# Check test users
|
|
365
|
+
psql $DATABASE_URL -c "SELECT email, name FROM \"user\" WHERE email LIKE '%@test.com';"
|
|
366
|
+
|
|
367
|
+
# Verify JOINs work
|
|
368
|
+
psql $DATABASE_URL -c "SELECT p.id, u.email FROM \"product\" p JOIN \"user\" u ON u.id = p.\"userId\" LIMIT 3;"
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
## Self-Validation Checklist
|
|
372
|
+
|
|
373
|
+
Before completing, verify:
|
|
374
|
+
|
|
375
|
+
### Template Compliance (from `core/templates/migrations/`)
|
|
376
|
+
- [ ] No snake_case field names
|
|
377
|
+
- [ ] ID type is TEXT (not UUID)
|
|
378
|
+
- [ ] Timestamps use TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
379
|
+
- [ ] Meta tables use `"entityId"` foreign key
|
|
380
|
+
- [ ] Child tables use `"parentId"` foreign key
|
|
381
|
+
- [ ] Triggers use `public.set_updated_at()` function
|
|
382
|
+
- [ ] RLS policies match selected mode (team/private/shared/public)
|
|
383
|
+
|
|
384
|
+
### Execution & Schema
|
|
385
|
+
- [ ] DB Policy checked (reset vs incremental)
|
|
386
|
+
- [ ] Migrations executed successfully (no errors)
|
|
387
|
+
- [ ] All expected tables exist
|
|
388
|
+
- [ ] Column names are camelCase
|
|
389
|
+
- [ ] Proper indexes created
|
|
390
|
+
|
|
391
|
+
### Data & Security
|
|
392
|
+
- [ ] Sample data count meets minimums (20+ per entity)
|
|
393
|
+
- [ ] Test users verified (password: Test1234)
|
|
394
|
+
- [ ] Team membership verified (if Team Mode)
|
|
395
|
+
- [ ] Foreign keys tested (JOINs work)
|
|
396
|
+
- [ ] devKeyring configured
|
|
397
|
+
|
|
398
|
+
### Documentation
|
|
399
|
+
- [ ] Results documented in context.md
|
|
400
|
+
- [ ] progress.md updated with gate status
|
|
401
|
+
|
|
402
|
+
## Quality Standards
|
|
403
|
+
|
|
404
|
+
- **Zero Tolerance**: ALL validations must pass
|
|
405
|
+
- **No Skipping**: Every check is mandatory
|
|
406
|
+
- **Clear Documentation**: All results documented in session files
|
|
407
|
+
- **Blocking Gate**: Backend development CANNOT proceed until gate passes
|