@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,526 @@
1
+ ---
2
+ name: cypress-e2e
3
+ description: |
4
+ End-to-End testing patterns with Cypress for UAT tests.
5
+ Covers test structure, cy.session(), batch execution, tags, POMs, and BDD documentation.
6
+ Use this skill when writing UAT tests or creating new entity test files.
7
+ allowed-tools: Read, Glob, Grep, Bash(python:*), Bash(pnpm cy:run:*)
8
+ version: 1.0.0
9
+ ---
10
+
11
+ # Cypress E2E Testing Skill
12
+
13
+ Patterns and tools for writing End-to-End UAT tests with Cypress.
14
+
15
+ ## Architecture Overview
16
+
17
+ ```
18
+ contents/themes/{theme}/tests/cypress/
19
+ ├── e2e/
20
+ │ ├── api/ # API tests (see cypress-api skill)
21
+ │ │ └── entities/
22
+ │ │ └── {entity}-crud.cy.ts
23
+ │ ├── uat/ # UAT tests (this skill)
24
+ │ │ ├── {entity}/
25
+ │ │ │ ├── {entity}-owner.cy.ts
26
+ │ │ │ ├── {entity}-owner.bdd.md # BDD documentation
27
+ │ │ │ └── {entity}-member.cy.ts
28
+ │ │ └── {feature}/
29
+ │ │ └── {feature}.cy.ts
30
+ │ └── _selectors/ # Selector validation tests
31
+ │ └── {feature}-selectors.cy.ts
32
+ ├── src/
33
+ │ ├── core/ # Base classes (DO NOT MODIFY)
34
+ │ │ ├── BasePOM.ts
35
+ │ │ ├── DashboardEntityPOM.ts
36
+ │ │ └── AuthPOM.ts
37
+ │ ├── entities/ # Entity POMs
38
+ │ │ └── {Entity}POM.ts
39
+ │ ├── features/ # Feature POMs
40
+ │ │ └── {Feature}POM.ts
41
+ │ ├── controllers/ # API controllers
42
+ │ │ └── {Entity}APIController.js
43
+ │ ├── helpers/
44
+ │ │ └── ApiInterceptor.ts
45
+ │ ├── session-helpers.ts # Login functions
46
+ │ └── selectors.ts # Theme selectors
47
+ └── fixtures/
48
+ └── entities.json # AUTO-GENERATED entity config
49
+ ```
50
+
51
+ ## When to Use This Skill
52
+
53
+ - Writing UAT tests for entity CRUD operations
54
+ - Creating role-based test suites (owner, member, viewer)
55
+ - Implementing cy.session() for cached authentication
56
+ - Using Page Object Model pattern
57
+ - Generating BDD documentation
58
+
59
+ ## Test Tag System
60
+
61
+ ### Permanent Tags (COMMIT)
62
+
63
+ | Tag | Purpose | When to Use |
64
+ |-----|---------|-------------|
65
+ | `@api` | API tests | Tests in `e2e/api/` |
66
+ | `@uat` | UAT tests | Tests in `e2e/uat/` |
67
+ | `@smoke` | Critical path tests | Must-pass tests |
68
+ | `@regression` | Full test suite | All tests |
69
+ | `@feat-{entity}` | Entity-specific | `@feat-tasks`, `@feat-customers` |
70
+ | `@role-{role}` | Role-based tests | `@role-owner`, `@role-member` |
71
+ | `@crud` | CRUD operations | Tests covering Create/Read/Update/Delete |
72
+
73
+ ### Temporary Tags (NEVER COMMIT)
74
+
75
+ | Tag | Purpose | When to Use |
76
+ |-----|---------|-------------|
77
+ | `@in-develop` | Tests being fixed | During iteration loop |
78
+ | `@scope-{session}` | Session tests | All tests for current session |
79
+
80
+ **CRITICAL:** code-reviewer (Phase 16) BLOCKS if temporary tags remain.
81
+
82
+ ## Test ID Convention
83
+
84
+ ```
85
+ {ROLE}_{ENTITY_SLUG_UPPER}_{ACTION}_{NUMBER}
86
+
87
+ Examples:
88
+ - OWNER_TASK_CREATE_001
89
+ - MEMBER_CUSTOMER_READ_001
90
+ - ADMIN_POST_DELETE_001
91
+ ```
92
+
93
+ ## Session Helpers (cy.session)
94
+
95
+ ### Available Login Functions
96
+
97
+ ```typescript
98
+ import {
99
+ loginAsOwner,
100
+ loginAsAdmin,
101
+ loginAsMember,
102
+ loginAsEditor,
103
+ loginAsViewer,
104
+ loginAsSuperadmin,
105
+ loginAsDeveloper
106
+ } from '../session-helpers'
107
+ ```
108
+
109
+ ### Test Users
110
+
111
+ ```typescript
112
+ // Team-based users (password: 'Test1234')
113
+ DEFAULT_THEME_USERS = {
114
+ OWNER: 'carlos.mendoza@tmt.dev', // Everpoint Labs (owner)
115
+ ADMIN: 'james.wilson@tmt.dev', // Everpoint Labs (admin)
116
+ MEMBER: 'emily.johnson@tmt.dev', // Everpoint (member)
117
+ EDITOR: 'diego.ramirez@tmt.dev', // Everpoint Labs (editor)
118
+ VIEWER: 'sarah.davis@tmt.dev', // Ironvale Global (viewer)
119
+ }
120
+
121
+ // Core system users (password: 'Pandora1234')
122
+ CORE_USERS = {
123
+ SUPERADMIN: 'superadmin@tmt.dev', // Global superadmin
124
+ DEVELOPER: 'developer@tmt.dev', // Global developer
125
+ }
126
+ ```
127
+
128
+ ### Session Pattern
129
+
130
+ ```typescript
131
+ describe('Entity CRUD - Owner Role', {
132
+ tags: ['@uat', '@feat-tasks', '@role-owner', '@regression']
133
+ }, () => {
134
+ const pom = TasksPOM.create()
135
+
136
+ beforeEach(() => {
137
+ // cy.session() handles caching automatically
138
+ loginAsOwner()
139
+
140
+ // Setup API intercepts BEFORE navigation
141
+ pom.setupApiIntercepts()
142
+
143
+ // Navigate with API wait
144
+ pom.visitList()
145
+ pom.api.waitForList()
146
+ })
147
+
148
+ it('OWNER_TASK_CREATE_001: should create new task', () => {
149
+ // Test implementation
150
+ })
151
+ })
152
+ ```
153
+
154
+ ## Page Object Model (POM) Pattern
155
+
156
+ ### Entity POM Structure
157
+
158
+ ```typescript
159
+ import { DashboardEntityPOM } from '../core/DashboardEntityPOM'
160
+ import entitiesConfig from '../../fixtures/entities.json'
161
+
162
+ export interface TaskFormData {
163
+ title?: string
164
+ description?: string
165
+ priority?: string
166
+ status?: string
167
+ }
168
+
169
+ export class TasksPOM extends DashboardEntityPOM {
170
+ constructor() {
171
+ // NEVER hardcode slugs - always from entities.json
172
+ super(entitiesConfig.entities.tasks.slug)
173
+ }
174
+
175
+ // Factory pattern (MANDATORY)
176
+ static create(): TasksPOM {
177
+ return new TasksPOM()
178
+ }
179
+
180
+ // Entity-specific form filling
181
+ fillTaskForm(data: TaskFormData): this {
182
+ if (data.title) this.fillField('title', data.title)
183
+ if (data.description) this.fillTextarea('description', data.description)
184
+ if (data.priority) this.selectOption('priority', data.priority)
185
+ return this
186
+ }
187
+
188
+ // Entity-specific workflows
189
+ createTaskWithApiWait(data: TaskFormData): this {
190
+ this.setupApiIntercepts()
191
+ this.clickAdd()
192
+ this.waitForForm()
193
+ this.fillTaskForm(data)
194
+ this.submitForm()
195
+ this.api.waitForCreate()
196
+ return this
197
+ }
198
+ }
199
+ ```
200
+
201
+ ### DashboardEntityPOM Methods
202
+
203
+ | Method | Description |
204
+ |--------|-------------|
205
+ | `visitList()` | Navigate to entity list page |
206
+ | `visitCreate()` | Navigate to create form |
207
+ | `visitEdit(id)` | Navigate to edit form |
208
+ | `visitDetail(id)` | Navigate to detail page |
209
+ | `clickAdd()` | Click add button |
210
+ | `submitForm()` | Submit current form |
211
+ | `waitForList()` | Wait for list to load |
212
+ | `waitForForm()` | Wait for form to load |
213
+ | `waitForDetail()` | Wait for detail to load |
214
+ | `assertInList(text)` | Assert text in list |
215
+ | `assertNotInList(text)` | Assert text not in list |
216
+ | `assertTableVisible()` | Assert table is visible |
217
+
218
+ ### ApiInterceptor Methods
219
+
220
+ | Method | Description |
221
+ |--------|-------------|
222
+ | `setupApiIntercepts()` | Setup all intercepts |
223
+ | `api.waitForList()` | Wait for GET list |
224
+ | `api.waitForCreate()` | Wait for POST create |
225
+ | `api.waitForUpdate()` | Wait for PATCH update |
226
+ | `api.waitForDelete()` | Wait for DELETE |
227
+
228
+ ## Batch Execution Strategy
229
+
230
+ ### Configuration
231
+
232
+ | Setting | Default | Description |
233
+ |---------|---------|-------------|
234
+ | `BATCH_SIZE` | 5 | Tests per batch |
235
+ | `SUCCESS_THRESHOLD` | 0.9 | Minimum pass rate (90%) |
236
+ | `MAX_BATCH_RETRIES` | 3 | Max retries per batch |
237
+
238
+ ### Workflow
239
+
240
+ ```
241
+ 1. PLAN: Document tests in tests.md
242
+ 2. BATCH: Group into batches of 5
243
+ 3. FOR EACH BATCH:
244
+ a. TAG: Add @in-develop + @scope-{session}
245
+ b. RUN: Execute with --env grepTags="@in-develop"
246
+ c. FIX: Address failures
247
+ d. RETRY: Until batch passes (max 3)
248
+ e. UNTAG: Remove @in-develop (keep @scope)
249
+ 4. FINAL: Run all with --env grepTags="@scope-{session}"
250
+ 5. EVALUATE: Calculate pass rate
251
+ 6. CLEANUP: Remove ALL temporary tags
252
+ ```
253
+
254
+ ### Pass Rate Thresholds
255
+
256
+ | Rate | Status | Action |
257
+ |------|--------|--------|
258
+ | 100% | GATE_PASSED | Continue to code-review |
259
+ | 90-99% | GATE_PASSED_WITH_WARNINGS | Document in pendings.md |
260
+ | <90% | GATE_FAILED | Block workflow |
261
+
262
+ ## BDD Documentation Format
263
+
264
+ Each test file should have a corresponding `.bdd.md` file with bilingual documentation.
265
+
266
+ ### UAT BDD Format
267
+
268
+ ```markdown
269
+ # {Entity} UI - {Role} Role (Format: BDD/Gherkin - Bilingual)
270
+
271
+ > **Test File:** `{entity}-{role}.cy.ts`
272
+ > **Format:** Behavior-Driven Development (BDD) with Given/When/Then
273
+ > **Languages:** English / Spanish (side-by-side)
274
+ > **Total Tests:** N
275
+
276
+ ---
277
+
278
+ ## Feature: {Entity} Management - {Role} Role (Access Level)
279
+
280
+ <table>
281
+ <tr>
282
+ <th width="50%">English</th>
283
+ <th width="50%">Espanol</th>
284
+ </tr>
285
+ <tr>
286
+ <td>
287
+
288
+ As a **{Role}**
289
+ I want to **manage {entities} through the dashboard UI**
290
+ So that **I can perform operations for my team**
291
+
292
+ </td>
293
+ <td>
294
+
295
+ Como **{Role}**
296
+ Quiero **gestionar {entidades} a traves del dashboard**
297
+ Para **realizar operaciones para mi equipo**
298
+
299
+ </td>
300
+ </tr>
301
+ </table>
302
+
303
+ ### Background
304
+
305
+ <table>
306
+ <tr>
307
+ <th width="50%">English</th>
308
+ <th width="50%">Espanol</th>
309
+ </tr>
310
+ <tr>
311
+ <td>
312
+
313
+ ```gherkin
314
+ Given I am logged in as {Role} ({email})
315
+ And I have navigated to the {Entity} dashboard
316
+ And the list has loaded successfully
317
+ ```
318
+
319
+ </td>
320
+ <td>
321
+
322
+ ```gherkin
323
+ Given estoy logueado como {Role} ({email})
324
+ And he navegado al dashboard de {Entidad}
325
+ And la lista ha cargado exitosamente
326
+ ```
327
+
328
+ </td>
329
+ </tr>
330
+ </table>
331
+
332
+ ---
333
+
334
+ ## CREATE - {Role} can create {entities}
335
+
336
+ ### {ROLE}_{ENTITY}_CREATE_001: Create new {entity} successfully `@smoke` `@critical`
337
+
338
+ <table>
339
+ <tr>
340
+ <th width="50%">English</th>
341
+ <th width="50%">Espanol</th>
342
+ </tr>
343
+ <tr>
344
+ <td>
345
+
346
+ ```gherkin
347
+ Scenario: {Role} creates a simple {entity}
348
+
349
+ Given I am logged in as {Role}
350
+ And I am on the {Entity} list page
351
+ When I click the "Add" button
352
+ Then the creation form should appear
353
+
354
+ When I enter "Test {Entity}" in the Title field
355
+ And I click the "Save" button
356
+ Then the form should submit successfully
357
+ And I should see a success message
358
+ And I should be redirected to the list
359
+ And I should see "Test {Entity}" in the list
360
+ ```
361
+
362
+ </td>
363
+ <td>
364
+
365
+ ```gherkin
366
+ Scenario: {Role} crea un/a {entidad} simple
367
+
368
+ Given estoy logueado como {Role}
369
+ And estoy en la pagina de lista de {Entidades}
370
+ When hago clic en el boton "Agregar"
371
+ Then deberia aparecer el formulario de creacion
372
+
373
+ When ingreso "Test {Entidad}" en el campo Titulo
374
+ And hago clic en el boton "Guardar"
375
+ Then el formulario deberia enviarse exitosamente
376
+ And deberia ver un mensaje de exito
377
+ And deberia ser redirigido a la lista
378
+ And deberia ver "Test {Entidad}" en la lista
379
+ ```
380
+
381
+ </td>
382
+ </tr>
383
+ </table>
384
+
385
+ **Visual Flow:**
386
+ ```
387
+ [List Page] → [Click Add] → [Form] → [Fill Fields] → [Save] → [List with new item]
388
+ ```
389
+
390
+ ---
391
+
392
+ ## Summary
393
+
394
+ | Test ID | Operation | Description | Tags |
395
+ |---------|-----------|-------------|------|
396
+ | {ROLE}_{ENTITY}_CREATE_001 | CREATE | Create with title | `@smoke` `@critical` |
397
+ | {ROLE}_{ENTITY}_READ_001 | READ | View list | `@smoke` |
398
+ | {ROLE}_{ENTITY}_UPDATE_001 | UPDATE | Edit existing | |
399
+ | {ROLE}_{ENTITY}_DELETE_001 | DELETE | Delete | `@critical` |
400
+ ```
401
+
402
+ ## Scripts
403
+
404
+ ### Generate UAT Test
405
+
406
+ ```bash
407
+ # Generate test file + BDD documentation
408
+ python3 .claude/skills/cypress-e2e/scripts/generate-uat-test.py \
409
+ --entity tasks \
410
+ --theme default \
411
+ --role owner \
412
+ --with-bdd
413
+
414
+ # Preview without writing
415
+ python3 .claude/skills/cypress-e2e/scripts/generate-uat-test.py \
416
+ --entity tasks \
417
+ --theme default \
418
+ --role owner \
419
+ --with-bdd \
420
+ --dry-run
421
+ ```
422
+
423
+ ### Generate Entity POM
424
+
425
+ Uses the `pom-patterns` skill script (shared, not duplicated):
426
+
427
+ ```bash
428
+ # Generate POM from template
429
+ python3 .claude/skills/pom-patterns/scripts/generate-pom.py \
430
+ --entity tasks \
431
+ --theme default
432
+
433
+ # With custom fields
434
+ python3 .claude/skills/pom-patterns/scripts/generate-pom.py \
435
+ --entity products \
436
+ --theme default \
437
+ --fields "name,description,price,category,status"
438
+ ```
439
+
440
+ See `pom-patterns` skill for full documentation.
441
+
442
+ ### Extract Selectors
443
+
444
+ ```bash
445
+ # Scan component for data-cy attributes
446
+ python3 .claude/skills/cypress-e2e/scripts/extract-selectors.py \
447
+ --component contents/themes/default/components/TaskList.tsx
448
+ ```
449
+
450
+ ## Test Execution Commands
451
+
452
+ ```bash
453
+ # Run specific test file
454
+ pnpm cy:run --spec "contents/themes/default/tests/cypress/e2e/uat/tasks/tasks-owner.cy.ts"
455
+
456
+ # Run by tag
457
+ pnpm cy:run --env grepTags="@feat-tasks"
458
+ pnpm cy:run --env grepTags="@smoke"
459
+ pnpm cy:run --env grepTags="@role-owner"
460
+
461
+ # Run @in-develop tests only (during iteration)
462
+ pnpm cy:run --env grepTags="@in-develop"
463
+
464
+ # Run all session tests
465
+ pnpm cy:run --env grepTags="@scope-2025-12-30-tasks-v1"
466
+ ```
467
+
468
+ ## Anti-Patterns
469
+
470
+ ```typescript
471
+ // NEVER: Hardcoded selectors
472
+ cy.get('[data-cy="task-title"]')
473
+
474
+ // CORRECT: Use cySelector from selectors.ts
475
+ import { cySelector } from '../selectors'
476
+ cy.get(cySelector('entities.form.field', { slug: 'tasks', name: 'title' }))
477
+
478
+ // NEVER: Fixed timeouts
479
+ cy.wait(3000)
480
+
481
+ // CORRECT: Use API interceptors
482
+ pom.api.waitForCreate()
483
+
484
+ // NEVER: Hardcoded entity slugs
485
+ super('tasks')
486
+
487
+ // CORRECT: From entities.json
488
+ super(entitiesConfig.entities.tasks.slug)
489
+
490
+ // NEVER: Login in every test
491
+ beforeEach(() => {
492
+ cy.visit('/login')
493
+ cy.get('[data-cy="email"]').type('user@test.com')
494
+ // ...
495
+ })
496
+
497
+ // CORRECT: Use cy.session() via helpers
498
+ beforeEach(() => {
499
+ loginAsOwner() // Session is cached
500
+ })
501
+
502
+ // NEVER: Commit temporary tags
503
+ { tags: ['@in-develop', '@scope-2025-12-30-tasks-v1'] }
504
+
505
+ // CORRECT: Remove before commit
506
+ { tags: ['@uat', '@feat-tasks', '@role-owner', '@regression'] }
507
+ ```
508
+
509
+ ## Checklist
510
+
511
+ Before finalizing UAT tests:
512
+
513
+ - [ ] Uses session helpers (`loginAsOwner()`, etc.)
514
+ - [ ] Uses POM pattern (extends DashboardEntityPOM)
515
+ - [ ] Uses API interceptors for deterministic waits
516
+ - [ ] Follows test ID convention (`{ROLE}_{ENTITY}_{ACTION}_{NUMBER}`)
517
+ - [ ] Includes permanent tags (`@uat`, `@feat-{entity}`, `@role-{role}`)
518
+ - [ ] NO temporary tags (`@in-develop`, `@scope-{session}`)
519
+ - [ ] Has corresponding `.bdd.md` documentation file
520
+ - [ ] BDD is bilingual (English/Spanish)
521
+
522
+ ## Related Skills
523
+
524
+ - `cypress-api` - API testing patterns
525
+ - `cypress-selectors` - Selector architecture
526
+ - `pom-patterns` - Page Object Model patterns