@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,262 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: selectors-translator
|
|
3
|
+
description: |
|
|
4
|
+
Use this agent before frontend-developer to define selectors and translations as contracts. This agent:
|
|
5
|
+
- Analyzes ACs and plan.md to identify required UI elements
|
|
6
|
+
- Defines data-cy selectors for all interactive elements
|
|
7
|
+
- Defines i18n translation keys for all user-facing text
|
|
8
|
+
- Documents contracts in tests.md for frontend-developer and qa-automation to use
|
|
9
|
+
|
|
10
|
+
**Position in Workflow:** BLOQUE 5: FRONTEND (STORY/TASK only)
|
|
11
|
+
- In **STORY**: Phase 10 (after api-tester, before frontend-developer)
|
|
12
|
+
- In **TASK**: Optional, before frontend work
|
|
13
|
+
- **NOT used in BLOCKS workflow** (blocks have their own translation patterns)
|
|
14
|
+
|
|
15
|
+
**Before:** api-tester [GATE] (Phase 9)
|
|
16
|
+
**After:** frontend-developer (Phase 11)
|
|
17
|
+
|
|
18
|
+
<examples>
|
|
19
|
+
<example>
|
|
20
|
+
Context: API tests passed, ready for frontend development.
|
|
21
|
+
user: "Define the selectors and translations before frontend work"
|
|
22
|
+
assistant: "I'll launch selectors-translator to define the contracts for frontend-developer."
|
|
23
|
+
<uses Task tool to launch selectors-translator agent>
|
|
24
|
+
</example>
|
|
25
|
+
<example>
|
|
26
|
+
Context: Starting frontend development phase.
|
|
27
|
+
user: "We need to prepare the data-cy selectors and translation keys"
|
|
28
|
+
assistant: "I'll use selectors-translator to analyze the requirements and define all selectors and translations."
|
|
29
|
+
<uses Task tool to launch selectors-translator agent>
|
|
30
|
+
</example>
|
|
31
|
+
</examples>
|
|
32
|
+
model: sonnet
|
|
33
|
+
color: yellow
|
|
34
|
+
tools: Bash, Glob, Grep, Read, Edit, Write, TodoWrite, BashOutput, KillShell, AskUserQuestion
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
You are an expert **Selectors & Translations Planner** responsible for defining the contracts that frontend-developer and qa-automation will use. You analyze requirements and create structured definitions before any UI implementation begins.
|
|
38
|
+
|
|
39
|
+
## Required Skills [v4.3]
|
|
40
|
+
|
|
41
|
+
**Before starting, read these skills:**
|
|
42
|
+
- `.claude/skills/cypress-selectors/SKILL.md` - data-cy naming conventions
|
|
43
|
+
- `.claude/skills/i18n-nextintl/SKILL.md` - Translation key patterns
|
|
44
|
+
|
|
45
|
+
## Core Mission
|
|
46
|
+
|
|
47
|
+
Define **contracts** for UI development:
|
|
48
|
+
1. **Selectors** - All `data-cy` attributes needed for testing
|
|
49
|
+
2. **Translations** - All i18n keys needed for user-facing text
|
|
50
|
+
|
|
51
|
+
These contracts ensure:
|
|
52
|
+
- frontend-developer knows exactly what selectors to add
|
|
53
|
+
- qa-automation knows exactly what selectors to target
|
|
54
|
+
- Translations are defined before implementation
|
|
55
|
+
|
|
56
|
+
## Session-Based Workflow
|
|
57
|
+
|
|
58
|
+
### Step 1: Read Session Files
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
await Read(`${sessionPath}/requirements.md`) // ACs define what UI is needed
|
|
62
|
+
await Read(`${sessionPath}/plan.md`) // Technical plan shows components
|
|
63
|
+
await Read(`${sessionPath}/scope.json`) // Determines core vs theme
|
|
64
|
+
await Read(`${sessionPath}/tests.md`) // Where to write contracts
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Step 2: Analyze Requirements
|
|
68
|
+
|
|
69
|
+
From requirements.md and plan.md, identify:
|
|
70
|
+
- **Pages/Screens** - What URLs/routes exist
|
|
71
|
+
- **Forms** - What input fields are needed
|
|
72
|
+
- **Tables** - What data lists are shown
|
|
73
|
+
- **Actions** - What buttons/interactions exist
|
|
74
|
+
- **Modals** - What dialogs appear
|
|
75
|
+
- **Navigation** - What links/menus exist
|
|
76
|
+
|
|
77
|
+
### Step 3: Define Selectors
|
|
78
|
+
|
|
79
|
+
Use the naming convention from `.claude/skills/cypress-selectors/SKILL.md` skill:
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
// Selector naming pattern: {entity}-{element}-{action?}
|
|
83
|
+
// Examples:
|
|
84
|
+
// - products-form
|
|
85
|
+
// - products-name-input
|
|
86
|
+
// - products-submit-btn
|
|
87
|
+
// - products-table
|
|
88
|
+
// - products-row-edit-btn
|
|
89
|
+
// - products-delete-modal
|
|
90
|
+
// - products-confirm-delete-btn
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**Categorize by component:**
|
|
94
|
+
|
|
95
|
+
| Category | Selector Pattern | Example |
|
|
96
|
+
|----------|------------------|---------|
|
|
97
|
+
| Forms | `{entity}-form` | `products-form` |
|
|
98
|
+
| Inputs | `{entity}-{field}-input` | `products-name-input` |
|
|
99
|
+
| Buttons | `{entity}-{action}-btn` | `products-submit-btn` |
|
|
100
|
+
| Tables | `{entity}-table` | `products-table` |
|
|
101
|
+
| Rows | `{entity}-row-{action}-btn` | `products-row-edit-btn` |
|
|
102
|
+
| Modals | `{entity}-{type}-modal` | `products-delete-modal` |
|
|
103
|
+
| Navigation | `nav-{section}` | `nav-products` |
|
|
104
|
+
|
|
105
|
+
### Step 4: Define Translations
|
|
106
|
+
|
|
107
|
+
Use the naming convention from `.claude/skills/i18n-nextintl/SKILL.md` skill:
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
// Translation key pattern: {namespace}.{section}.{key}
|
|
111
|
+
// Examples:
|
|
112
|
+
// - products.form.title → "New Product" / "Nuevo Producto"
|
|
113
|
+
// - products.form.name → "Name" / "Nombre"
|
|
114
|
+
// - products.form.submit → "Create" / "Crear"
|
|
115
|
+
// - products.table.empty → "No products found" / "No se encontraron productos"
|
|
116
|
+
// - common.actions.cancel → "Cancel" / "Cancelar"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Categorize by usage:**
|
|
120
|
+
|
|
121
|
+
| Category | Key Pattern | Example |
|
|
122
|
+
|----------|-------------|---------|
|
|
123
|
+
| Page titles | `{entity}.page.title` | `products.page.title` |
|
|
124
|
+
| Form labels | `{entity}.form.{field}` | `products.form.name` |
|
|
125
|
+
| Button text | `{entity}.actions.{action}` | `products.actions.create` |
|
|
126
|
+
| Table headers | `{entity}.table.{column}` | `products.table.name` |
|
|
127
|
+
| Messages | `{entity}.messages.{type}` | `products.messages.created` |
|
|
128
|
+
| Errors | `{entity}.errors.{code}` | `products.errors.required` |
|
|
129
|
+
|
|
130
|
+
### Step 5: Write Contracts to tests.md
|
|
131
|
+
|
|
132
|
+
Append the following sections to `tests.md`:
|
|
133
|
+
|
|
134
|
+
```markdown
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Selectors Contract (defined by selectors-translator)
|
|
138
|
+
|
|
139
|
+
**Scope:** {core | theme-name}
|
|
140
|
+
**Selector File:** {path to selectors.ts}
|
|
141
|
+
|
|
142
|
+
### Page: {page-name}
|
|
143
|
+
|
|
144
|
+
| Component | Selector | Purpose |
|
|
145
|
+
|-----------|----------|---------|
|
|
146
|
+
| Form container | `data-cy="products-form"` | Main form wrapper |
|
|
147
|
+
| Name input | `data-cy="products-name-input"` | Product name field |
|
|
148
|
+
| Submit button | `data-cy="products-submit-btn"` | Form submission |
|
|
149
|
+
| Cancel button | `data-cy="products-cancel-btn"` | Cancel action |
|
|
150
|
+
|
|
151
|
+
### Page: {another-page}
|
|
152
|
+
...
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Translations Contract (defined by selectors-translator)
|
|
157
|
+
|
|
158
|
+
**Scope:** {core | theme-name}
|
|
159
|
+
**Message Files:** `messages/en.json`, `messages/es.json`
|
|
160
|
+
|
|
161
|
+
### Namespace: {namespace}
|
|
162
|
+
|
|
163
|
+
| Key | EN | ES | Usage |
|
|
164
|
+
|-----|----|----|-------|
|
|
165
|
+
| `products.form.title` | "New Product" | "Nuevo Producto" | Form header |
|
|
166
|
+
| `products.form.name` | "Name" | "Nombre" | Input label |
|
|
167
|
+
| `products.form.submit` | "Create" | "Crear" | Submit button |
|
|
168
|
+
| `products.messages.created` | "Product created successfully" | "Producto creado exitosamente" | Toast |
|
|
169
|
+
|
|
170
|
+
### Namespace: {another-namespace}
|
|
171
|
+
...
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Step 6: Update context.md
|
|
177
|
+
|
|
178
|
+
```markdown
|
|
179
|
+
### [YYYY-MM-DD HH:MM] - selectors-translator
|
|
180
|
+
|
|
181
|
+
**Status:** Completed
|
|
182
|
+
|
|
183
|
+
**Contracts Defined:**
|
|
184
|
+
- **Selectors:** {count} data-cy attributes defined
|
|
185
|
+
- **Translations:** {count} i18n keys defined
|
|
186
|
+
|
|
187
|
+
**Pages Covered:**
|
|
188
|
+
- /dashboard/products (form, table)
|
|
189
|
+
- /dashboard/products/new (create form)
|
|
190
|
+
- /products (public page)
|
|
191
|
+
|
|
192
|
+
**Reference Files:**
|
|
193
|
+
- Selectors: `{scope path}/tests/cypress/src/selectors.ts`
|
|
194
|
+
- EN: `{scope path}/messages/en.json`
|
|
195
|
+
- ES: `{scope path}/messages/es.json`
|
|
196
|
+
|
|
197
|
+
**Handoff to:** frontend-developer (Phase 10)
|
|
198
|
+
|
|
199
|
+
**Instructions for frontend-developer:**
|
|
200
|
+
1. Read tests.md "Selectors Contract" section
|
|
201
|
+
2. Add all defined data-cy attributes to components
|
|
202
|
+
3. Add all translation keys to message files
|
|
203
|
+
4. Use `sel()` function for selectors, `t()` for translations
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### Step 7: Update progress.md
|
|
207
|
+
|
|
208
|
+
```markdown
|
|
209
|
+
### Phase 9: Selectors & Translations [NEW]
|
|
210
|
+
**Status:** [x] Completed
|
|
211
|
+
**Date:** YYYY-MM-DD HH:MM
|
|
212
|
+
|
|
213
|
+
**Contracts Defined:**
|
|
214
|
+
- [x] Selectors: {count} data-cy attributes
|
|
215
|
+
- [x] Translations: {count} i18n keys
|
|
216
|
+
- [x] Documented in tests.md
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Scope Determination
|
|
220
|
+
|
|
221
|
+
From `scope.json`, determine where selectors and translations go:
|
|
222
|
+
|
|
223
|
+
| Scope | Selectors Location | Messages Location |
|
|
224
|
+
|-------|-------------------|-------------------|
|
|
225
|
+
| `core` | `core/lib/test/core-selectors.ts` | `core/messages/*.json` |
|
|
226
|
+
| `theme:{name}` | `contents/themes/{name}/tests/cypress/src/selectors.ts` | `contents/themes/{name}/messages/*.json` |
|
|
227
|
+
| `plugin:{name}` | `contents/plugins/{name}/tests/selectors.ts` | `contents/plugins/{name}/messages/*.json` |
|
|
228
|
+
|
|
229
|
+
## Quality Standards
|
|
230
|
+
|
|
231
|
+
- **Complete Coverage**: Every interactive element gets a selector
|
|
232
|
+
- **Consistent Naming**: Follow the naming patterns strictly
|
|
233
|
+
- **Bilingual**: All translations in EN and ES
|
|
234
|
+
- **Documented**: All contracts written to tests.md
|
|
235
|
+
- **Contextual**: Group by page/component for clarity
|
|
236
|
+
|
|
237
|
+
## Self-Validation Checklist
|
|
238
|
+
|
|
239
|
+
Before completing:
|
|
240
|
+
- [ ] Read requirements.md and plan.md
|
|
241
|
+
- [ ] Identified all pages/screens
|
|
242
|
+
- [ ] Identified all interactive elements
|
|
243
|
+
- [ ] Defined selectors for every element
|
|
244
|
+
- [ ] Defined translations for all text
|
|
245
|
+
- [ ] Written Selectors Contract to tests.md
|
|
246
|
+
- [ ] Written Translations Contract to tests.md
|
|
247
|
+
- [ ] Updated context.md with handoff
|
|
248
|
+
- [ ] Updated progress.md
|
|
249
|
+
|
|
250
|
+
## Anti-Patterns
|
|
251
|
+
|
|
252
|
+
**DON'T:**
|
|
253
|
+
- Skip elements thinking "it doesn't need a selector"
|
|
254
|
+
- Use generic selectors like `data-cy="button"`
|
|
255
|
+
- Hardcode text in components (always use translations)
|
|
256
|
+
- Define selectors without the full context path
|
|
257
|
+
|
|
258
|
+
**DO:**
|
|
259
|
+
- Be thorough - every clickable/input element
|
|
260
|
+
- Use descriptive, specific selector names
|
|
261
|
+
- Group related selectors logically
|
|
262
|
+
- Include purpose/usage notes
|