@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.
Files changed (272) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +115 -0
  3. package/claude/_docs/workflows-optimizations.md +359 -0
  4. package/claude/agents/api-tester.md +634 -0
  5. package/claude/agents/architecture-supervisor.md +1351 -0
  6. package/claude/agents/backend-developer.md +997 -0
  7. package/claude/agents/backend-validator.md +417 -0
  8. package/claude/agents/bdd-docs-writer.md +737 -0
  9. package/claude/agents/block-developer.md +677 -0
  10. package/claude/agents/code-reviewer.md +1432 -0
  11. package/claude/agents/db-developer.md +721 -0
  12. package/claude/agents/db-validator.md +407 -0
  13. package/claude/agents/demo-video-generator.md +493 -0
  14. package/claude/agents/documentation-writer.md +1268 -0
  15. package/claude/agents/frontend-developer.md +1234 -0
  16. package/claude/agents/frontend-validator.md +777 -0
  17. package/claude/agents/functional-validator.md +630 -0
  18. package/claude/agents/mock-analyst.md +387 -0
  19. package/claude/agents/product-manager.md +963 -0
  20. package/claude/agents/qa-automation.md +1762 -0
  21. package/claude/agents/release-manager.md +634 -0
  22. package/claude/agents/selectors-translator.md +262 -0
  23. package/claude/agents/unit-test-writer.md +785 -0
  24. package/claude/agents/visual-comparator.md +329 -0
  25. package/claude/agents/workflow-maintainer.md +352 -0
  26. package/claude/commands/do/README.md +88 -0
  27. package/claude/commands/do/create-api.md +64 -0
  28. package/claude/commands/do/create-entity.md +66 -0
  29. package/claude/commands/do/create-migration.md +64 -0
  30. package/claude/commands/do/create-plugin.md +56 -0
  31. package/claude/commands/do/create-theme.md +70 -0
  32. package/claude/commands/do/mock-data.md +67 -0
  33. package/claude/commands/do/reset-db.md +71 -0
  34. package/claude/commands/do/setup-scheduled-action.md +75 -0
  35. package/claude/commands/do/sync-code-review.md +117 -0
  36. package/claude/commands/do/update-selectors.md +112 -0
  37. package/claude/commands/do/use-skills.md +90 -0
  38. package/claude/commands/do/validate-blocks.md +69 -0
  39. package/claude/commands/how-to/README.md +261 -0
  40. package/claude/commands/how-to/add-metadata.md +692 -0
  41. package/claude/commands/how-to/add-taxonomies.md +806 -0
  42. package/claude/commands/how-to/add-translations.md +571 -0
  43. package/claude/commands/how-to/create-api.md +577 -0
  44. package/claude/commands/how-to/create-block.md +575 -0
  45. package/claude/commands/how-to/create-child-entities.md +771 -0
  46. package/claude/commands/how-to/create-entity.md +597 -0
  47. package/claude/commands/how-to/create-migrations.md +605 -0
  48. package/claude/commands/how-to/create-plugin.md +654 -0
  49. package/claude/commands/how-to/customize-app.md +481 -0
  50. package/claude/commands/how-to/customize-dashboard.md +553 -0
  51. package/claude/commands/how-to/customize-theme.md +438 -0
  52. package/claude/commands/how-to/define-features-flows.md +632 -0
  53. package/claude/commands/how-to/deploy.md +507 -0
  54. package/claude/commands/how-to/handle-file-uploads.md +746 -0
  55. package/claude/commands/how-to/implement-search.md +1001 -0
  56. package/claude/commands/how-to/install-plugins.md +352 -0
  57. package/claude/commands/how-to/manage-test-coverage.md +984 -0
  58. package/claude/commands/how-to/run-tests.md +400 -0
  59. package/claude/commands/how-to/set-app-languages.md +601 -0
  60. package/claude/commands/how-to/set-plans-and-permissions.md +575 -0
  61. package/claude/commands/how-to/set-scheduled-actions.md +527 -0
  62. package/claude/commands/how-to/set-user-roles-and-permissions.md +550 -0
  63. package/claude/commands/how-to/setup-authentication.md +388 -0
  64. package/claude/commands/how-to/setup-claude-code.md +440 -0
  65. package/claude/commands/how-to/setup-database.md +274 -0
  66. package/claude/commands/how-to/setup-email-providers.md +598 -0
  67. package/claude/commands/how-to/setup-mobile-dev.md +627 -0
  68. package/claude/commands/how-to/start.md +500 -0
  69. package/claude/commands/how-to/use-devtools.md +639 -0
  70. package/claude/commands/how-to/use-superadmin.md +622 -0
  71. package/claude/commands/session/README.md +193 -0
  72. package/claude/commands/session/block-create.md +190 -0
  73. package/claude/commands/session/block-list.md +203 -0
  74. package/claude/commands/session/block-update.md +192 -0
  75. package/claude/commands/session/block-validate.md +218 -0
  76. package/claude/commands/session/changelog.md +115 -0
  77. package/claude/commands/session/close.md +225 -0
  78. package/claude/commands/session/commit.md +174 -0
  79. package/claude/commands/session/db-entity.md +206 -0
  80. package/claude/commands/session/db-fix.md +212 -0
  81. package/claude/commands/session/db-sample.md +206 -0
  82. package/claude/commands/session/demo.md +178 -0
  83. package/claude/commands/session/doc-bdd.md +207 -0
  84. package/claude/commands/session/doc-feature.md +218 -0
  85. package/claude/commands/session/doc-read.md +225 -0
  86. package/claude/commands/session/execute.md +204 -0
  87. package/claude/commands/session/explain.md +202 -0
  88. package/claude/commands/session/fix-bug.md +210 -0
  89. package/claude/commands/session/fix-build.md +182 -0
  90. package/claude/commands/session/fix-test.md +189 -0
  91. package/claude/commands/session/pending.md +232 -0
  92. package/claude/commands/session/refine.md +188 -0
  93. package/claude/commands/session/resume.md +192 -0
  94. package/claude/commands/session/review.md +192 -0
  95. package/claude/commands/session/scope-change.md +181 -0
  96. package/claude/commands/session/start-blocks.md +347 -0
  97. package/claude/commands/session/start.md +604 -0
  98. package/claude/commands/session/status.md +169 -0
  99. package/claude/commands/session/test-fix.md +221 -0
  100. package/claude/commands/session/test-run.md +203 -0
  101. package/claude/commands/session/test-write.md +242 -0
  102. package/claude/commands/session/validate.md +162 -0
  103. package/claude/config/context.json +40 -0
  104. package/claude/config/github.json +69 -0
  105. package/claude/config/github.schema.json +106 -0
  106. package/claude/config/team.json +46 -0
  107. package/claude/config/team.schema.json +106 -0
  108. package/claude/config/workspace.json +43 -0
  109. package/claude/config/workspace.schema.json +75 -0
  110. package/claude/skills/README.md +228 -0
  111. package/claude/skills/accessibility/SKILL.md +573 -0
  112. package/claude/skills/api-bypass-layers/SKILL.md +550 -0
  113. package/claude/skills/asana-integration/SKILL.md +499 -0
  114. package/claude/skills/better-auth/SKILL.md +666 -0
  115. package/claude/skills/billing-subscriptions/SKILL.md +660 -0
  116. package/claude/skills/block-decision-matrix/SKILL.md +359 -0
  117. package/claude/skills/clickup-integration/SKILL.md +434 -0
  118. package/claude/skills/core-theme-responsibilities/SKILL.md +485 -0
  119. package/claude/skills/create-plugin/SKILL.md +425 -0
  120. package/claude/skills/create-theme/SKILL.md +331 -0
  121. package/claude/skills/cypress-api/SKILL.md +511 -0
  122. package/claude/skills/cypress-api/scripts/generate-api-controller.py +329 -0
  123. package/claude/skills/cypress-api/scripts/generate-api-test.py +930 -0
  124. package/claude/skills/cypress-e2e/SKILL.md +526 -0
  125. package/claude/skills/cypress-e2e/scripts/extract-selectors.py +383 -0
  126. package/claude/skills/cypress-e2e/scripts/generate-uat-test.py +788 -0
  127. package/claude/skills/cypress-selectors/SKILL.md +309 -0
  128. package/claude/skills/cypress-selectors/scripts/extract-missing.py +243 -0
  129. package/claude/skills/cypress-selectors/scripts/generate-block-selectors.py +283 -0
  130. package/claude/skills/cypress-selectors/scripts/validate-selectors.py +145 -0
  131. package/claude/skills/database-migrations/SKILL.md +335 -0
  132. package/claude/skills/database-migrations/scripts/generate-sample-data.py +284 -0
  133. package/claude/skills/database-migrations/scripts/validate-migration.py +323 -0
  134. package/claude/skills/design-system/SKILL.md +682 -0
  135. package/claude/skills/documentation/SKILL.md +540 -0
  136. package/claude/skills/entity-api/SKILL.md +482 -0
  137. package/claude/skills/entity-system/SKILL.md +635 -0
  138. package/claude/skills/entity-system/scripts/generate-child-migration.py +298 -0
  139. package/claude/skills/entity-system/scripts/generate-metas-migration.py +233 -0
  140. package/claude/skills/entity-system/scripts/generate-migration.py +382 -0
  141. package/claude/skills/entity-system/scripts/generate-sample-data.py +418 -0
  142. package/claude/skills/entity-system/scripts/scaffold-entity.py +661 -0
  143. package/claude/skills/github/SKILL.md +467 -0
  144. package/claude/skills/i18n-nextintl/SKILL.md +302 -0
  145. package/claude/skills/i18n-nextintl/scripts/add-translation.py +243 -0
  146. package/claude/skills/i18n-nextintl/scripts/extract-hardcoded.py +246 -0
  147. package/claude/skills/i18n-nextintl/scripts/validate-translations.py +260 -0
  148. package/claude/skills/impact-analysis/SKILL.md +203 -0
  149. package/claude/skills/jest-unit/SKILL.md +306 -0
  150. package/claude/skills/jest-unit/references/component-testing.md +371 -0
  151. package/claude/skills/jest-unit/references/mocking-patterns.md +380 -0
  152. package/claude/skills/jest-unit/references/service-hook-testing.md +454 -0
  153. package/claude/skills/jira-integration/SKILL.md +539 -0
  154. package/claude/skills/media-library/SKILL.md +743 -0
  155. package/claude/skills/mock-analysis/SKILL.md +276 -0
  156. package/claude/skills/monorepo-architecture/SKILL.md +162 -0
  157. package/claude/skills/nextjs-api-development/SKILL.md +364 -0
  158. package/claude/skills/nextjs-api-development/scripts/generate-crud-tests.py +456 -0
  159. package/claude/skills/nextjs-api-development/scripts/scaffold-endpoint.py +481 -0
  160. package/claude/skills/nextjs-api-development/scripts/validate-api.py +283 -0
  161. package/claude/skills/notion-integration/SKILL.md +641 -0
  162. package/claude/skills/npm-development-workflow/SKILL.md +480 -0
  163. package/claude/skills/page-builder-blocks/SKILL.md +530 -0
  164. package/claude/skills/page-builder-blocks/scripts/scaffold-block.py +444 -0
  165. package/claude/skills/permissions-system/SKILL.md +619 -0
  166. package/claude/skills/plugins/SKILL.md +340 -0
  167. package/claude/skills/plugins/references/plugin-templates.md +414 -0
  168. package/claude/skills/plugins/references/plugin-testing.md +353 -0
  169. package/claude/skills/plugins/references/plugin-types.md +198 -0
  170. package/claude/skills/plugins/scripts/scaffold-plugin.py +443 -0
  171. package/claude/skills/pom-patterns/SKILL.md +452 -0
  172. package/claude/skills/pom-patterns/scripts/generate-pom.py +392 -0
  173. package/claude/skills/rate-limiting/SKILL.md +342 -0
  174. package/claude/skills/react-best-practices/AGENTS.md +2410 -0
  175. package/claude/skills/react-best-practices/README.md +123 -0
  176. package/claude/skills/react-best-practices/SKILL.md +125 -0
  177. package/claude/skills/react-best-practices/metadata.json +15 -0
  178. package/claude/skills/react-best-practices/rules/_sections.md +46 -0
  179. package/claude/skills/react-best-practices/rules/_template.md +28 -0
  180. package/claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  181. package/claude/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
  182. package/claude/skills/react-best-practices/rules/async-api-routes.md +38 -0
  183. package/claude/skills/react-best-practices/rules/async-defer-await.md +80 -0
  184. package/claude/skills/react-best-practices/rules/async-dependencies.md +36 -0
  185. package/claude/skills/react-best-practices/rules/async-parallel.md +28 -0
  186. package/claude/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  187. package/claude/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  188. package/claude/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  189. package/claude/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  190. package/claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  191. package/claude/skills/react-best-practices/rules/bundle-preload.md +50 -0
  192. package/claude/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  193. package/claude/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
  194. package/claude/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  195. package/claude/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  196. package/claude/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
  197. package/claude/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  198. package/claude/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  199. package/claude/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  200. package/claude/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  201. package/claude/skills/react-best-practices/rules/js-early-exit.md +50 -0
  202. package/claude/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  203. package/claude/skills/react-best-practices/rules/js-index-maps.md +37 -0
  204. package/claude/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  205. package/claude/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  206. package/claude/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  207. package/claude/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  208. package/claude/skills/react-best-practices/rules/rendering-activity.md +26 -0
  209. package/claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  210. package/claude/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  211. package/claude/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  212. package/claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  213. package/claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  214. package/claude/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  215. package/claude/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  216. package/claude/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  217. package/claude/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  218. package/claude/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  219. package/claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  220. package/claude/skills/react-best-practices/rules/rerender-memo.md +44 -0
  221. package/claude/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  222. package/claude/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  223. package/claude/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  224. package/claude/skills/react-best-practices/rules/server-cache-react.md +76 -0
  225. package/claude/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
  226. package/claude/skills/react-best-practices/rules/server-serialization.md +38 -0
  227. package/claude/skills/react-patterns/SKILL.md +688 -0
  228. package/claude/skills/registry-system/SKILL.md +331 -0
  229. package/claude/skills/scheduled-actions/SKILL.md +671 -0
  230. package/claude/skills/scope-enforcement/SKILL.md +542 -0
  231. package/claude/skills/scope-enforcement/scripts/validate-scope.py +357 -0
  232. package/claude/skills/server-actions/SKILL.md +493 -0
  233. package/claude/skills/service-layer/SKILL.md +587 -0
  234. package/claude/skills/session-management/SKILL.md +266 -0
  235. package/claude/skills/session-management/scripts/create-session.py +166 -0
  236. package/claude/skills/session-management/scripts/iteration-close.sh +105 -0
  237. package/claude/skills/session-management/scripts/iteration-init.sh +180 -0
  238. package/claude/skills/session-management/scripts/session-archive.sh +87 -0
  239. package/claude/skills/session-management/scripts/session-close.sh +133 -0
  240. package/claude/skills/session-management/scripts/session-init.sh +225 -0
  241. package/claude/skills/session-management/scripts/session-list.sh +163 -0
  242. package/claude/skills/session-management/scripts/split-plan.sh +116 -0
  243. package/claude/skills/shadcn-components/SKILL.md +586 -0
  244. package/claude/skills/shadcn-theming/SKILL.md +446 -0
  245. package/claude/skills/suspense-loading/SKILL.md +280 -0
  246. package/claude/skills/tailwind-theming/SKILL.md +507 -0
  247. package/claude/skills/tanstack-query/SKILL.md +608 -0
  248. package/claude/skills/test-coverage/SKILL.md +239 -0
  249. package/claude/skills/web-design-guidelines/SKILL.md +39 -0
  250. package/claude/skills/zod-validation/SKILL.md +537 -0
  251. package/claude/templates/blocks/progress.md +86 -0
  252. package/claude/templates/iteration/changes.md +61 -0
  253. package/claude/templates/iteration/progress.md +55 -0
  254. package/claude/templates/log.md +31 -0
  255. package/claude/templates/story/context.md +77 -0
  256. package/claude/templates/story/pendings.md +37 -0
  257. package/claude/templates/story/plan.md +299 -0
  258. package/claude/templates/story/requirements.md +109 -0
  259. package/claude/templates/story/scope.json +10 -0
  260. package/claude/templates/story/tests.md +91 -0
  261. package/claude/templates/task/progress.md +58 -0
  262. package/claude/templates/task/requirements.md +54 -0
  263. package/claude/workflows/README.md +154 -0
  264. package/claude/workflows/blocks.md +614 -0
  265. package/claude/workflows/story.md +1207 -0
  266. package/claude/workflows/task.md +927 -0
  267. package/claude/workflows/tweak.md +527 -0
  268. package/cursor/.gitkeep +0 -0
  269. package/package.json +35 -0
  270. package/scripts/postinstall.mjs +198 -0
  271. package/scripts/setup.mjs +282 -0
  272. 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