@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,212 @@
|
|
|
1
|
+
# /session:db:fix
|
|
2
|
+
|
|
3
|
+
Test and fix database migrations iteratively until success.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Syntax
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
/session:db:fix [--migration <name>]
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Behavior
|
|
16
|
+
|
|
17
|
+
Runs migrations, detects errors, fixes them, and retries until successful.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Flow
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
25
|
+
│ /session:db:fix │
|
|
26
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
27
|
+
│ │
|
|
28
|
+
│ 1. Run pending migrations │
|
|
29
|
+
│ ↓ │
|
|
30
|
+
│ 2. Check for errors │
|
|
31
|
+
│ │ │
|
|
32
|
+
│ ├─► No errors: Done │
|
|
33
|
+
│ │ │
|
|
34
|
+
│ └─► Errors found: │
|
|
35
|
+
│ ↓ │
|
|
36
|
+
│ 3. Analyze error │
|
|
37
|
+
│ - Syntax error? │
|
|
38
|
+
│ - Missing reference? │
|
|
39
|
+
│ - Type mismatch? │
|
|
40
|
+
│ ↓ │
|
|
41
|
+
│ 4. Apply fix │
|
|
42
|
+
│ ↓ │
|
|
43
|
+
│ 5. Go to step 1 │
|
|
44
|
+
│ │
|
|
45
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Example Output
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
🗃️ FIX DATABASE MIGRATIONS
|
|
54
|
+
|
|
55
|
+
─────────────────────────────────────────
|
|
56
|
+
|
|
57
|
+
📋 ITERATION 1
|
|
58
|
+
|
|
59
|
+
Running migrations...
|
|
60
|
+
|
|
61
|
+
❌ Migration failed: 008_products.sql
|
|
62
|
+
|
|
63
|
+
Error:
|
|
64
|
+
ERROR: relation "categories" does not exist
|
|
65
|
+
LINE 10: categoryId UUID REFERENCES categories(id),
|
|
66
|
+
|
|
67
|
+
─────────────────────────────────────────
|
|
68
|
+
|
|
69
|
+
🔍 ANALYZING ERROR
|
|
70
|
+
|
|
71
|
+
Type: Missing foreign key reference
|
|
72
|
+
Table: categories
|
|
73
|
+
Required by: products.categoryId
|
|
74
|
+
|
|
75
|
+
Analysis:
|
|
76
|
+
- categories table not created yet
|
|
77
|
+
- Need to create categories before products
|
|
78
|
+
- Or make categoryId nullable without FK constraint
|
|
79
|
+
|
|
80
|
+
Options:
|
|
81
|
+
[1] Create categories migration first
|
|
82
|
+
[2] Make categoryId nullable (no FK)
|
|
83
|
+
[3] Remove categoryId field
|
|
84
|
+
|
|
85
|
+
> 1
|
|
86
|
+
|
|
87
|
+
─────────────────────────────────────────
|
|
88
|
+
|
|
89
|
+
🔧 APPLYING FIX
|
|
90
|
+
|
|
91
|
+
Creating: 007_categories.sql
|
|
92
|
+
|
|
93
|
+
```sql
|
|
94
|
+
CREATE TABLE categories (
|
|
95
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
96
|
+
name VARCHAR(255) NOT NULL,
|
|
97
|
+
teamId UUID NOT NULL REFERENCES teams(id),
|
|
98
|
+
createdAt TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
ALTER TABLE categories ENABLE ROW LEVEL SECURITY;
|
|
102
|
+
|
|
103
|
+
CREATE POLICY categories_team_isolation ON categories
|
|
104
|
+
USING (teamId = current_setting('app.current_team_id')::UUID);
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
✓ Migration created
|
|
108
|
+
|
|
109
|
+
Renumbering: 008_products.sql → 008_products.sql (unchanged)
|
|
110
|
+
|
|
111
|
+
─────────────────────────────────────────
|
|
112
|
+
|
|
113
|
+
📋 ITERATION 2
|
|
114
|
+
|
|
115
|
+
Running migrations...
|
|
116
|
+
|
|
117
|
+
✓ 007_categories.sql executed
|
|
118
|
+
✓ 008_products.sql executed
|
|
119
|
+
|
|
120
|
+
─────────────────────────────────────────
|
|
121
|
+
|
|
122
|
+
📊 SUMMARY
|
|
123
|
+
|
|
124
|
+
Iterations: 2
|
|
125
|
+
Migrations fixed: 1
|
|
126
|
+
Migrations created: 1
|
|
127
|
+
|
|
128
|
+
Database is now up to date.
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Common Error Fixes
|
|
134
|
+
|
|
135
|
+
| Error | Auto-Fix |
|
|
136
|
+
|-------|----------|
|
|
137
|
+
| Missing table reference | Create migration or reorder |
|
|
138
|
+
| Syntax error | Fix SQL syntax |
|
|
139
|
+
| Type mismatch | Cast or change type |
|
|
140
|
+
| Duplicate key | Update or skip |
|
|
141
|
+
| RLS policy error | Fix policy syntax |
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## With Specific Migration
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
/session:db:fix --migration 008_products
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Output:
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
🗃️ FIX MIGRATION: 008_products.sql
|
|
155
|
+
|
|
156
|
+
─────────────────────────────────────────
|
|
157
|
+
|
|
158
|
+
Running 008_products.sql...
|
|
159
|
+
|
|
160
|
+
⚠️ Warning: Migration partially applied
|
|
161
|
+
|
|
162
|
+
Issues:
|
|
163
|
+
1. Table created
|
|
164
|
+
2. Indexes created
|
|
165
|
+
3. ❌ RLS policy failed
|
|
166
|
+
|
|
167
|
+
Error:
|
|
168
|
+
ERROR: policy "products_team_isolation" already exists
|
|
169
|
+
|
|
170
|
+
─────────────────────────────────────────
|
|
171
|
+
|
|
172
|
+
🔧 FIX OPTIONS
|
|
173
|
+
|
|
174
|
+
[1] Drop and recreate policy
|
|
175
|
+
[2] Skip policy (already exists)
|
|
176
|
+
[3] Rename new policy
|
|
177
|
+
|
|
178
|
+
> 2
|
|
179
|
+
|
|
180
|
+
Skipping existing policy...
|
|
181
|
+
✓ Migration completed with skip
|
|
182
|
+
|
|
183
|
+
─────────────────────────────────────────
|
|
184
|
+
|
|
185
|
+
Verifying database state...
|
|
186
|
+
✓ Table: products exists
|
|
187
|
+
✓ Columns: 9 columns correct
|
|
188
|
+
✓ Indexes: 3 indexes present
|
|
189
|
+
✓ RLS: Enabled with policies
|
|
190
|
+
|
|
191
|
+
Database is consistent.
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Options
|
|
197
|
+
|
|
198
|
+
| Option | Description |
|
|
199
|
+
|--------|-------------|
|
|
200
|
+
| `--migration <name>` | Fix specific migration |
|
|
201
|
+
| `--max-iterations <n>` | Max fix attempts (default: 5) |
|
|
202
|
+
| `--dry-run` | Show fixes without applying |
|
|
203
|
+
| `--reset` | Drop and recreate tables |
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Related Commands
|
|
208
|
+
|
|
209
|
+
| Command | Action |
|
|
210
|
+
|---------|--------|
|
|
211
|
+
| `/session:db:entity` | Create entity migration |
|
|
212
|
+
| `/session:db:sample` | Generate sample data |
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
# /session:db:sample
|
|
2
|
+
|
|
3
|
+
Generate coherent sample data for database entities.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Required Skills
|
|
8
|
+
|
|
9
|
+
**[MANDATORY]** Read before executing:
|
|
10
|
+
- `.claude/skills/database-migrations/SKILL.md` - Understand sample data patterns
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Syntax
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
/session:db:sample <entity-name> [--count <n>]
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Behavior
|
|
23
|
+
|
|
24
|
+
Creates realistic sample data that respects foreign keys and business rules.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Flow
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
32
|
+
│ /session:db:sample │
|
|
33
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
34
|
+
│ │
|
|
35
|
+
│ 1. Read entity schema │
|
|
36
|
+
│ - Fields and types │
|
|
37
|
+
│ - Foreign key relationships │
|
|
38
|
+
│ ↓ │
|
|
39
|
+
│ 2. Analyze existing data │
|
|
40
|
+
│ - Reference tables for FKs │
|
|
41
|
+
│ - Available team/user IDs │
|
|
42
|
+
│ ↓ │
|
|
43
|
+
│ 3. Generate sample data │
|
|
44
|
+
│ - Realistic names/values │
|
|
45
|
+
│ - Valid FK references │
|
|
46
|
+
│ - Varied data distribution │
|
|
47
|
+
│ ↓ │
|
|
48
|
+
│ 4. Create SQL insert statements │
|
|
49
|
+
│ ↓ │
|
|
50
|
+
│ 5. Add to migration or seed file │
|
|
51
|
+
│ │
|
|
52
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Example Output
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
🌱 GENERATE SAMPLE DATA
|
|
61
|
+
|
|
62
|
+
Entity: products
|
|
63
|
+
Count: 20 records
|
|
64
|
+
|
|
65
|
+
─────────────────────────────────────────
|
|
66
|
+
|
|
67
|
+
🔍 ANALYZING SCHEMA
|
|
68
|
+
|
|
69
|
+
Fields:
|
|
70
|
+
├─ name: VARCHAR(255) NOT NULL
|
|
71
|
+
├─ description: TEXT
|
|
72
|
+
├─ price: DECIMAL(10,2) NOT NULL
|
|
73
|
+
├─ categoryId: UUID FK → categories
|
|
74
|
+
├─ isActive: BOOLEAN
|
|
75
|
+
├─ teamId: UUID FK → teams
|
|
76
|
+
└─ createdById: UUID FK → user
|
|
77
|
+
|
|
78
|
+
Foreign Keys:
|
|
79
|
+
├─ categories: 5 existing records
|
|
80
|
+
├─ teams: 3 existing records
|
|
81
|
+
└─ user: 10 existing records
|
|
82
|
+
|
|
83
|
+
─────────────────────────────────────────
|
|
84
|
+
|
|
85
|
+
📝 GENERATED DATA
|
|
86
|
+
|
|
87
|
+
File: core/db/seeds/008_products_sample.sql
|
|
88
|
+
|
|
89
|
+
```sql
|
|
90
|
+
-- ============================================
|
|
91
|
+
-- Sample Data: products
|
|
92
|
+
-- Count: 20 records
|
|
93
|
+
-- Generated: 2026-01-11
|
|
94
|
+
-- ============================================
|
|
95
|
+
|
|
96
|
+
-- Using existing references
|
|
97
|
+
-- Teams: team_alpha, team_beta, team_gamma
|
|
98
|
+
-- Categories: Electronics, Clothing, Home, Sports, Books
|
|
99
|
+
|
|
100
|
+
INSERT INTO products (
|
|
101
|
+
id, name, description, price, categoryId,
|
|
102
|
+
isActive, teamId, createdById
|
|
103
|
+
) VALUES
|
|
104
|
+
-- Team Alpha products (Electronics focus)
|
|
105
|
+
(
|
|
106
|
+
'prod-001-uuid',
|
|
107
|
+
'Wireless Bluetooth Headphones',
|
|
108
|
+
'Premium noise-cancelling headphones with 30h battery',
|
|
109
|
+
149.99,
|
|
110
|
+
(SELECT id FROM categories WHERE name = 'Electronics'),
|
|
111
|
+
true,
|
|
112
|
+
(SELECT id FROM teams WHERE name = 'Team Alpha'),
|
|
113
|
+
(SELECT id FROM "user" WHERE email = 'admin@test.com')
|
|
114
|
+
),
|
|
115
|
+
(
|
|
116
|
+
'prod-002-uuid',
|
|
117
|
+
'Smart Watch Pro',
|
|
118
|
+
'Fitness tracker with heart rate monitor',
|
|
119
|
+
299.99,
|
|
120
|
+
(SELECT id FROM categories WHERE name = 'Electronics'),
|
|
121
|
+
true,
|
|
122
|
+
(SELECT id FROM teams WHERE name = 'Team Alpha'),
|
|
123
|
+
(SELECT id FROM "user" WHERE email = 'admin@test.com')
|
|
124
|
+
),
|
|
125
|
+
-- ... 18 more records with varied data
|
|
126
|
+
(
|
|
127
|
+
'prod-020-uuid',
|
|
128
|
+
'Yoga Mat Premium',
|
|
129
|
+
'Non-slip eco-friendly yoga mat',
|
|
130
|
+
45.00,
|
|
131
|
+
(SELECT id FROM categories WHERE name = 'Sports'),
|
|
132
|
+
true,
|
|
133
|
+
(SELECT id FROM teams WHERE name = 'Team Gamma'),
|
|
134
|
+
(SELECT id FROM "user" WHERE email = 'member@test.com')
|
|
135
|
+
);
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
─────────────────────────────────────────
|
|
139
|
+
|
|
140
|
+
📊 DATA DISTRIBUTION
|
|
141
|
+
|
|
142
|
+
By Team:
|
|
143
|
+
├─ Team Alpha: 8 products
|
|
144
|
+
├─ Team Beta: 7 products
|
|
145
|
+
└─ Team Gamma: 5 products
|
|
146
|
+
|
|
147
|
+
By Category:
|
|
148
|
+
├─ Electronics: 6 products
|
|
149
|
+
├─ Clothing: 4 products
|
|
150
|
+
├─ Home: 4 products
|
|
151
|
+
├─ Sports: 4 products
|
|
152
|
+
└─ Books: 2 products
|
|
153
|
+
|
|
154
|
+
Price Range: $15.00 - $499.99
|
|
155
|
+
Active: 18 | Inactive: 2
|
|
156
|
+
|
|
157
|
+
─────────────────────────────────────────
|
|
158
|
+
|
|
159
|
+
✓ Sample data created: 008_products_sample.sql
|
|
160
|
+
|
|
161
|
+
Run migration to insert data.
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## With Test Users
|
|
167
|
+
|
|
168
|
+
Generates data distributed across test users from devKeyring:
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
/session:db:sample products --with-devkeyring
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
```sql
|
|
175
|
+
-- Data for DevKeyring users
|
|
176
|
+
INSERT INTO products (teamId, createdById, ...)
|
|
177
|
+
VALUES
|
|
178
|
+
-- superadmin@test.com (sees all)
|
|
179
|
+
(..., (SELECT id FROM "user" WHERE email = 'superadmin@test.com')),
|
|
180
|
+
|
|
181
|
+
-- admin@test.com (Team Alpha)
|
|
182
|
+
(..., (SELECT id FROM "user" WHERE email = 'admin@test.com')),
|
|
183
|
+
|
|
184
|
+
-- member@test.com (Team Beta, limited role)
|
|
185
|
+
(..., (SELECT id FROM "user" WHERE email = 'member@test.com'));
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Options
|
|
191
|
+
|
|
192
|
+
| Option | Description |
|
|
193
|
+
|--------|-------------|
|
|
194
|
+
| `--count <n>` | Number of records (default: 20) |
|
|
195
|
+
| `--with-devkeyring` | Use test users from devKeyring |
|
|
196
|
+
| `--append` | Add to existing seed file |
|
|
197
|
+
| `--dry-run` | Show SQL without creating |
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Related Commands
|
|
202
|
+
|
|
203
|
+
| Command | Action |
|
|
204
|
+
|---------|--------|
|
|
205
|
+
| `/session:db:entity` | Create entity migration |
|
|
206
|
+
| `/session:db:fix` | Fix data issues |
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# /session:demo
|
|
2
|
+
|
|
3
|
+
Run a live visual demo of the implemented feature.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Syntax
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
/session:demo [--record]
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Behavior
|
|
16
|
+
|
|
17
|
+
Opens a browser and demonstrates the implemented feature visually using Playwright.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Flow
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
25
|
+
│ /session:demo │
|
|
26
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
27
|
+
│ │
|
|
28
|
+
│ 1. Load session context │
|
|
29
|
+
│ - Read requirements.md (ACs) │
|
|
30
|
+
│ - Read plan.md (features) │
|
|
31
|
+
│ ↓ │
|
|
32
|
+
│ 2. Start dev server (if not running) │
|
|
33
|
+
│ ↓ │
|
|
34
|
+
│ 3. Launch browser with Playwright │
|
|
35
|
+
│ ↓ │
|
|
36
|
+
│ 4. Execute demo flow │
|
|
37
|
+
│ - Navigate to relevant pages │
|
|
38
|
+
│ - Demonstrate each AC │
|
|
39
|
+
│ - Explain what's happening │
|
|
40
|
+
│ ↓ │
|
|
41
|
+
│ 5. Generate demo summary │
|
|
42
|
+
│ │
|
|
43
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Example Output
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
🎬 SESSION DEMO
|
|
52
|
+
|
|
53
|
+
Session: stories/2026-01-11-new-products-entity
|
|
54
|
+
ACs to demonstrate: 5
|
|
55
|
+
|
|
56
|
+
─────────────────────────────────────────
|
|
57
|
+
|
|
58
|
+
🚀 STARTING DEMO
|
|
59
|
+
|
|
60
|
+
Starting dev server...
|
|
61
|
+
✓ Server running at http://localhost:3000
|
|
62
|
+
|
|
63
|
+
Launching browser...
|
|
64
|
+
✓ Browser ready
|
|
65
|
+
|
|
66
|
+
─────────────────────────────────────────
|
|
67
|
+
|
|
68
|
+
📋 DEMO: AC1 - Create Product
|
|
69
|
+
|
|
70
|
+
[Browser] Navigating to /dashboard/products
|
|
71
|
+
[Browser] Clicking "New Product" button
|
|
72
|
+
[Browser] Filling form:
|
|
73
|
+
- Name: "Demo Product"
|
|
74
|
+
- Price: 99.99
|
|
75
|
+
- Description: "Test product for demo"
|
|
76
|
+
[Browser] Clicking "Save"
|
|
77
|
+
|
|
78
|
+
✓ Product created successfully
|
|
79
|
+
|
|
80
|
+
─────────────────────────────────────────
|
|
81
|
+
|
|
82
|
+
📋 DEMO: AC2 - Upload Images
|
|
83
|
+
|
|
84
|
+
[Browser] Clicking "Add Images"
|
|
85
|
+
[Browser] Selecting test image
|
|
86
|
+
[Browser] Uploading...
|
|
87
|
+
|
|
88
|
+
✓ Image uploaded and displayed
|
|
89
|
+
|
|
90
|
+
─────────────────────────────────────────
|
|
91
|
+
|
|
92
|
+
📋 DEMO: AC3 - Assign Categories
|
|
93
|
+
|
|
94
|
+
[Browser] Opening category selector
|
|
95
|
+
[Browser] Selecting "Electronics"
|
|
96
|
+
[Browser] Saving changes
|
|
97
|
+
|
|
98
|
+
✓ Category assigned
|
|
99
|
+
|
|
100
|
+
─────────────────────────────────────────
|
|
101
|
+
|
|
102
|
+
📊 DEMO SUMMARY
|
|
103
|
+
|
|
104
|
+
ACs Demonstrated: 5/5
|
|
105
|
+
Issues Found: 0
|
|
106
|
+
Screenshots: 5 saved to _tmp/demo/
|
|
107
|
+
|
|
108
|
+
Demo complete!
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## With Recording
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
/session:demo --record
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Output:
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
🎬 SESSION DEMO (RECORDING)
|
|
123
|
+
|
|
124
|
+
Recording to: _tmp/demo/2026-01-11-products-demo.mp4
|
|
125
|
+
|
|
126
|
+
[Recording started]
|
|
127
|
+
...
|
|
128
|
+
[Recording stopped]
|
|
129
|
+
|
|
130
|
+
✓ Video saved: _tmp/demo/2026-01-11-products-demo.mp4
|
|
131
|
+
Duration: 2:34
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Options
|
|
137
|
+
|
|
138
|
+
| Option | Description |
|
|
139
|
+
|--------|-------------|
|
|
140
|
+
| `--record` | Record demo as video |
|
|
141
|
+
| `--ac <number>` | Demo specific AC only |
|
|
142
|
+
| `--mobile` | Demo in mobile viewport |
|
|
143
|
+
| `--slow` | Slow down actions for visibility |
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## Demo Configuration
|
|
148
|
+
|
|
149
|
+
In session's `demo.config.json`:
|
|
150
|
+
|
|
151
|
+
```json
|
|
152
|
+
{
|
|
153
|
+
"baseUrl": "http://localhost:3000",
|
|
154
|
+
"credentials": {
|
|
155
|
+
"email": "admin@test.com",
|
|
156
|
+
"password": "Test1234"
|
|
157
|
+
},
|
|
158
|
+
"flows": [
|
|
159
|
+
{
|
|
160
|
+
"ac": "AC1",
|
|
161
|
+
"steps": [
|
|
162
|
+
{ "action": "navigate", "path": "/dashboard/products" },
|
|
163
|
+
{ "action": "click", "selector": "[data-cy=new-product]" }
|
|
164
|
+
]
|
|
165
|
+
}
|
|
166
|
+
]
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Related Commands
|
|
173
|
+
|
|
174
|
+
| Command | Action |
|
|
175
|
+
|---------|--------|
|
|
176
|
+
| `/session:explain` | Explain code implementation |
|
|
177
|
+
| `/session:validate` | Validate before demo |
|
|
178
|
+
| `/session:close` | Close session |
|