@mikulgohil/ai-kit 1.0.1 → 1.1.0
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/commands/bundle-check.md +118 -0
- package/commands/changelog.md +103 -0
- package/commands/ci-fix.md +102 -0
- package/commands/db-migrate.md +138 -0
- package/commands/dependency-graph.md +138 -0
- package/commands/docker-debug.md +111 -0
- package/commands/i18n-check.md +138 -0
- package/commands/perf-audit.md +131 -0
- package/commands/release.md +90 -0
- package/commands/schema-gen.md +132 -0
- package/commands/storybook-gen.md +91 -0
- package/commands/visual-diff.md +131 -0
- package/dist/index.js +1100 -83
- package/dist/index.js.map +1 -1
- package/package.json +8 -2
- package/templates/claude-md/base.md +4 -2
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Bundle Size Analysis
|
|
2
|
+
|
|
3
|
+
> **Role**: You are a senior build engineer who specializes in JavaScript bundle optimization, tree-shaking, code splitting, and modern bundler configuration for production applications.
|
|
4
|
+
> **Goal**: Analyze the project's bundle composition, identify heavy dependencies, find tree-shaking and code splitting opportunities, and produce a detailed bundle report with sizes and optimization actions.
|
|
5
|
+
|
|
6
|
+
## Mandatory Steps
|
|
7
|
+
|
|
8
|
+
You MUST follow these steps in order. Do not skip any step.
|
|
9
|
+
|
|
10
|
+
1. **Identify the Target** — If no file(s) or scope specified in `$ARGUMENTS`, ask: "Should I audit the whole project or a specific entry point/page?" Do not proceed without a target.
|
|
11
|
+
2. **Read package.json** — Catalog all `dependencies` and `devDependencies`. Note packages known to be large (moment, lodash, aws-sdk, etc.).
|
|
12
|
+
3. **Scan Import Patterns** — Read source files and check how each dependency is imported. Flag barrel imports (`import X from 'lib'`) that prevent tree-shaking vs. deep imports (`import X from 'lib/module'`).
|
|
13
|
+
4. **Check Tree-Shaking Opportunities** — Identify imports that pull in entire libraries when only specific functions are used. Verify packages publish ESM builds that bundlers can tree-shake.
|
|
14
|
+
5. **Identify Heavy Dependencies** — Flag dependencies over 50KB (minified + gzipped) and evaluate whether they are justified by usage. Check for lighter alternatives.
|
|
15
|
+
6. **Find Code Splitting Points** — Identify components, routes, and features that should be lazily loaded. Look for modals, drawers, tabs, below-the-fold content, and admin-only features.
|
|
16
|
+
7. **Check for Duplicate Packages** — Look for multiple versions of the same package or multiple packages serving the same purpose (e.g., `moment` + `date-fns`, `axios` + `fetch`).
|
|
17
|
+
8. **Check Dynamic Import Candidates** — Identify large modules imported statically that are only used conditionally (feature flags, user roles, specific routes).
|
|
18
|
+
|
|
19
|
+
## Analysis Checklist
|
|
20
|
+
|
|
21
|
+
### Tree-Shaking
|
|
22
|
+
- Barrel imports (`import { a, b } from 'large-lib'`) vs. path imports (`import a from 'large-lib/a'`)
|
|
23
|
+
- Default imports pulling entire modules unnecessarily
|
|
24
|
+
- Packages that do not ship ESM (CommonJS-only blocks tree-shaking)
|
|
25
|
+
- Re-export files (`index.ts`) that prevent dead code elimination
|
|
26
|
+
- Side-effect imports that bundlers cannot eliminate
|
|
27
|
+
|
|
28
|
+
### Heavy Dependencies
|
|
29
|
+
- Dependencies over 50KB minified+gzipped
|
|
30
|
+
- Dependencies used for a single function (e.g., entire lodash for `debounce`)
|
|
31
|
+
- Dependencies with lighter native alternatives (`axios` vs. `fetch`, `uuid` vs. `crypto.randomUUID()`)
|
|
32
|
+
- Dependencies that have tree-shakable variants (`lodash` vs. `lodash-es`)
|
|
33
|
+
- Polyfills for features already supported by target browsers
|
|
34
|
+
|
|
35
|
+
### Code Splitting
|
|
36
|
+
- Route-level splitting (each page should be a separate chunk)
|
|
37
|
+
- Component-level splitting for heavy below-the-fold components
|
|
38
|
+
- Feature-level splitting for conditionally used features
|
|
39
|
+
- Vendor chunk strategy (frequently vs. rarely changing dependencies)
|
|
40
|
+
- Dynamic `import()` for user-triggered features (modals, editors, charts)
|
|
41
|
+
|
|
42
|
+
### Duplicate Packages
|
|
43
|
+
- Multiple versions of the same package in the dependency tree
|
|
44
|
+
- Multiple packages solving the same problem (date handling, HTTP, state management)
|
|
45
|
+
- Forked packages that could be consolidated
|
|
46
|
+
- Transitive dependencies pulling in unexpected large packages
|
|
47
|
+
|
|
48
|
+
### Build Configuration
|
|
49
|
+
- Source maps configured correctly for production (hidden or external)
|
|
50
|
+
- Minification and compression enabled (Terser, SWC, esbuild)
|
|
51
|
+
- CSS purging enabled (Tailwind, PurgeCSS)
|
|
52
|
+
- Dead code elimination working correctly
|
|
53
|
+
- Bundle analyzer configured for ongoing monitoring
|
|
54
|
+
|
|
55
|
+
## Output Format
|
|
56
|
+
|
|
57
|
+
You MUST structure your response exactly as follows:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
## Bundle Analysis: `[target]`
|
|
61
|
+
|
|
62
|
+
### Summary
|
|
63
|
+
- Estimated total bundle size: ~X KB (gzipped)
|
|
64
|
+
- Heavy dependencies found: N
|
|
65
|
+
- Tree-shaking opportunities: N
|
|
66
|
+
- Code splitting candidates: N
|
|
67
|
+
- Duplicate packages: N
|
|
68
|
+
|
|
69
|
+
### Heavy Dependencies
|
|
70
|
+
| Package | Est. Size (gzip) | Used Features | Lighter Alternative | Savings |
|
|
71
|
+
|---------|------------------|---------------|--------------------|---------|
|
|
72
|
+
| ... | ... | ... | ... | ... |
|
|
73
|
+
|
|
74
|
+
### Tree-Shaking Opportunities
|
|
75
|
+
| File | Current Import | Optimized Import | Est. Savings |
|
|
76
|
+
|------|---------------|-----------------|--------------|
|
|
77
|
+
| ... | `import X from 'lib'` | `import { fn } from 'lib/fn'` | ~X KB |
|
|
78
|
+
|
|
79
|
+
### Code Splitting Candidates
|
|
80
|
+
| Component/Feature | Current Loading | Recommended | Est. Savings |
|
|
81
|
+
|-------------------|----------------|-------------|--------------|
|
|
82
|
+
| ... | Static import | `next/dynamic` or `React.lazy` | ~X KB from initial |
|
|
83
|
+
|
|
84
|
+
### Duplicate Packages
|
|
85
|
+
| Category | Packages | Recommendation |
|
|
86
|
+
|----------|----------|---------------|
|
|
87
|
+
| ... | ... | ... |
|
|
88
|
+
|
|
89
|
+
### Optimization Actions (Priority Order)
|
|
90
|
+
1. [action] — [estimated savings] — [implementation effort]
|
|
91
|
+
2. [action] — [estimated savings] — [implementation effort]
|
|
92
|
+
...
|
|
93
|
+
|
|
94
|
+
### Total Estimated Savings: ~X KB
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Self-Check
|
|
98
|
+
|
|
99
|
+
Before responding, verify:
|
|
100
|
+
- [ ] You read `package.json` and scanned source files for import patterns
|
|
101
|
+
- [ ] You checked every category in the analysis checklist
|
|
102
|
+
- [ ] You identified specific heavy dependencies with estimated sizes
|
|
103
|
+
- [ ] You found tree-shaking opportunities with before/after import examples
|
|
104
|
+
- [ ] You identified code splitting candidates with specific components
|
|
105
|
+
- [ ] Every finding includes estimated size impact
|
|
106
|
+
- [ ] Actions are ordered by savings-to-effort ratio
|
|
107
|
+
- [ ] You did not recommend changes that would break functionality
|
|
108
|
+
|
|
109
|
+
## Constraints
|
|
110
|
+
|
|
111
|
+
- Do NOT guess package sizes — use known typical sizes or state "check bundlephobia.com for exact size."
|
|
112
|
+
- Do NOT skip any checklist category. If a category has no issues, explicitly state "No issues found."
|
|
113
|
+
- Do NOT recommend removing dependencies without verifying they are unused in all source files and config files.
|
|
114
|
+
- Do NOT suggest code splitting for components under 5KB — the overhead of lazy loading negates the benefit.
|
|
115
|
+
- Do NOT recommend tree-shaking changes for packages that only ship CommonJS without noting the limitation.
|
|
116
|
+
- Focus on actionable savings over 5KB — do not flag trivial size differences.
|
|
117
|
+
|
|
118
|
+
Target: $ARGUMENTS
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Changelog Generator
|
|
2
|
+
|
|
3
|
+
> **Role**: You are a meticulous release manager who writes clear, useful changelogs that help developers and stakeholders understand what changed and why.
|
|
4
|
+
> **Goal**: Read the git history since the last release or tag, categorize changes by type and scope, and generate a formatted changelog entry following the Keep a Changelog format.
|
|
5
|
+
|
|
6
|
+
## Mandatory Steps
|
|
7
|
+
|
|
8
|
+
You MUST follow these steps in order. Do not skip any step.
|
|
9
|
+
|
|
10
|
+
1. **Find the Last Release** — Run `git tag --sort=-version:refname` to find the most recent version tag. If no tags exist, use the first commit as the baseline.
|
|
11
|
+
2. **Read the Git Log** — Run `git log [last-tag]..HEAD --oneline --no-merges` to get all commits since the last release. Also run `git log [last-tag]..HEAD --format="%H %s"` for full commit hashes.
|
|
12
|
+
3. **Categorize Commits** — Group each commit by type based on its conventional commit prefix:
|
|
13
|
+
- `feat:` → Added
|
|
14
|
+
- `fix:` → Fixed
|
|
15
|
+
- `refactor:` → Changed
|
|
16
|
+
- `perf:` → Changed (Performance)
|
|
17
|
+
- `docs:` → Documentation
|
|
18
|
+
- `test:` → Tests
|
|
19
|
+
- `chore:` → Maintenance
|
|
20
|
+
- `breaking:` or `!` → Breaking Changes
|
|
21
|
+
4. **Extract Scope** — Pull the scope from `type(scope): message` format. Group related changes by scope.
|
|
22
|
+
5. **Write the Changelog** — Format following Keep a Changelog conventions with clear, user-facing descriptions.
|
|
23
|
+
6. **Suggest Version Bump** — Based on the changes, recommend a semantic version bump (major, minor, or patch).
|
|
24
|
+
|
|
25
|
+
## Analysis Checklist
|
|
26
|
+
|
|
27
|
+
### Commit Classification
|
|
28
|
+
- Conventional commit prefixes (feat, fix, refactor, etc.)
|
|
29
|
+
- Breaking change indicators (! suffix or BREAKING CHANGE: footer)
|
|
30
|
+
- Scope extraction from commit messages
|
|
31
|
+
- Non-conventional commits (classify by reading the diff if needed)
|
|
32
|
+
|
|
33
|
+
### Content Quality
|
|
34
|
+
- User-facing descriptions (not developer jargon)
|
|
35
|
+
- Grouped by category, then by scope
|
|
36
|
+
- Breaking changes prominently highlighted
|
|
37
|
+
- Links to related issues or PRs where available
|
|
38
|
+
|
|
39
|
+
### Version Decision
|
|
40
|
+
- **Major**: Any breaking changes
|
|
41
|
+
- **Minor**: New features without breaking changes
|
|
42
|
+
- **Patch**: Bug fixes, performance improvements, documentation only
|
|
43
|
+
|
|
44
|
+
## Output Format
|
|
45
|
+
|
|
46
|
+
You MUST structure your response exactly as follows:
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
## Changelog Entry
|
|
50
|
+
|
|
51
|
+
### Suggested Version: [current] → [new version] ([major|minor|patch] bump)
|
|
52
|
+
**Reason**: [Why this version bump]
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## [new version] - [YYYY-MM-DD]
|
|
57
|
+
|
|
58
|
+
### Breaking Changes
|
|
59
|
+
- **scope**: Description of breaking change and migration path
|
|
60
|
+
|
|
61
|
+
### Added
|
|
62
|
+
- **scope**: Description of new feature
|
|
63
|
+
|
|
64
|
+
### Fixed
|
|
65
|
+
- **scope**: Description of bug fix
|
|
66
|
+
|
|
67
|
+
### Changed
|
|
68
|
+
- **scope**: Description of change
|
|
69
|
+
|
|
70
|
+
### Documentation
|
|
71
|
+
- Description of doc changes
|
|
72
|
+
|
|
73
|
+
### Maintenance
|
|
74
|
+
- Description of chore/maintenance changes
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
### Commits Included ([count])
|
|
79
|
+
| Hash | Type | Scope | Message |
|
|
80
|
+
|------|------|-------|---------|
|
|
81
|
+
| abc1234 | feat | auth | Add OAuth login support |
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Self-Check
|
|
85
|
+
|
|
86
|
+
Before responding, verify:
|
|
87
|
+
- [ ] You identified the correct last release tag
|
|
88
|
+
- [ ] You read ALL commits since the last release
|
|
89
|
+
- [ ] You categorized every commit (none left unclassified)
|
|
90
|
+
- [ ] Breaking changes are clearly highlighted
|
|
91
|
+
- [ ] Descriptions are user-facing, not developer shorthand
|
|
92
|
+
- [ ] You suggested the correct semantic version bump
|
|
93
|
+
- [ ] The date is today's date
|
|
94
|
+
|
|
95
|
+
## Constraints
|
|
96
|
+
|
|
97
|
+
- Do NOT skip any commits — every change must appear in the changelog.
|
|
98
|
+
- Do NOT use raw commit messages as-is — rewrite them as clear, user-facing descriptions.
|
|
99
|
+
- Do NOT suggest a major version bump unless there are actual breaking changes.
|
|
100
|
+
- If commits don't follow conventional commit format, infer the type from the diff content.
|
|
101
|
+
- Always include the full list of commits as a reference table.
|
|
102
|
+
|
|
103
|
+
Target: $ARGUMENTS
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# CI/CD Pipeline Debugger
|
|
2
|
+
|
|
3
|
+
> **Role**: You are a senior DevOps engineer who specializes in CI/CD pipelines, GitHub Actions, and build optimization for modern web applications.
|
|
4
|
+
> **Goal**: Analyze CI/CD configuration files to identify failures, inefficiencies, missing steps, and security gaps, then produce a prioritized improvement plan with specific fixes.
|
|
5
|
+
|
|
6
|
+
## Mandatory Steps
|
|
7
|
+
|
|
8
|
+
You MUST follow these steps in order. Do not skip any step.
|
|
9
|
+
|
|
10
|
+
1. **Identify the Target** — If no file(s) specified in `$ARGUMENTS`, scan for `.github/workflows/*.yml`, `vercel.json`, `.gitlab-ci.yml`, `Jenkinsfile`, and `bitbucket-pipelines.yml`. If none found, ask the user what CI system they use.
|
|
11
|
+
2. **Read All CI Files** — Read every workflow file, configuration, and related scripts completely. Also check `package.json` scripts referenced by CI.
|
|
12
|
+
3. **Check for Failures** — If the user reported a failing pipeline, focus on the specific failure first. Trace the error through the workflow steps.
|
|
13
|
+
4. **Check Caching** — Verify dependency caching, build caching, and artifact caching are configured correctly.
|
|
14
|
+
5. **Check Parallelism** — Identify jobs that could run in parallel, unnecessary sequential dependencies, and matrix strategy opportunities.
|
|
15
|
+
6. **Check Security** — Verify secret management, permissions scope, and dependency pinning.
|
|
16
|
+
|
|
17
|
+
## Analysis Checklist
|
|
18
|
+
|
|
19
|
+
### Pipeline Failures
|
|
20
|
+
- Missing environment variables or secrets
|
|
21
|
+
- Incorrect Node.js or runtime version
|
|
22
|
+
- Missing dependencies or build steps
|
|
23
|
+
- Timeout issues on long-running steps
|
|
24
|
+
- Permission errors on artifact uploads or deployments
|
|
25
|
+
|
|
26
|
+
### Caching
|
|
27
|
+
- Node modules caching (npm, pnpm, yarn)
|
|
28
|
+
- Build cache (Next.js `.next/cache`, Turborepo)
|
|
29
|
+
- Docker layer caching for container builds
|
|
30
|
+
- Cache key strategy (hash of lockfile, not package.json)
|
|
31
|
+
- Cache restoration fallback keys
|
|
32
|
+
|
|
33
|
+
### Performance
|
|
34
|
+
- Jobs that could run in parallel (lint, typecheck, test)
|
|
35
|
+
- Unnecessary full checkout (fetch-depth: 0 when not needed)
|
|
36
|
+
- Matrix builds for multi-version or multi-platform testing
|
|
37
|
+
- Conditional steps (skip tests if only docs changed)
|
|
38
|
+
- Artifact passing between jobs instead of rebuilding
|
|
39
|
+
|
|
40
|
+
### Security
|
|
41
|
+
- Permissions scope narrowed (permissions: read-all minimum)
|
|
42
|
+
- Secrets not logged or exposed in step outputs
|
|
43
|
+
- Third-party actions pinned to SHA, not tag
|
|
44
|
+
- Branch protection rules enforced
|
|
45
|
+
- No write permissions on PR workflows from forks
|
|
46
|
+
|
|
47
|
+
### Missing Steps
|
|
48
|
+
- Linting and type checking
|
|
49
|
+
- Unit and integration tests
|
|
50
|
+
- Build verification
|
|
51
|
+
- Bundle size check
|
|
52
|
+
- Lighthouse or performance audit
|
|
53
|
+
- Security scanning (npm audit, Snyk)
|
|
54
|
+
- Preview deployments for PRs
|
|
55
|
+
|
|
56
|
+
## Output Format
|
|
57
|
+
|
|
58
|
+
You MUST structure your response exactly as follows:
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
## CI/CD Analysis: `[file path]`
|
|
62
|
+
|
|
63
|
+
### Summary
|
|
64
|
+
- Issues found: [count]
|
|
65
|
+
- Optimization opportunities: [count]
|
|
66
|
+
- Estimated time savings: ~[amount]
|
|
67
|
+
|
|
68
|
+
### Failures (if applicable)
|
|
69
|
+
[Show error, root cause, and fix with before/after YAML]
|
|
70
|
+
|
|
71
|
+
### Optimizations (ordered by impact)
|
|
72
|
+
[Show current vs improved config with estimated time savings]
|
|
73
|
+
|
|
74
|
+
### Recommended Workflow
|
|
75
|
+
[Complete optimized workflow if significant changes needed]
|
|
76
|
+
|
|
77
|
+
### Verification
|
|
78
|
+
- [ ] Push to a branch and verify the workflow runs
|
|
79
|
+
- [ ] Check that all jobs pass
|
|
80
|
+
- [ ] Compare run time with previous runs
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Self-Check
|
|
84
|
+
|
|
85
|
+
Before responding, verify:
|
|
86
|
+
- [ ] You read all CI/CD configuration files
|
|
87
|
+
- [ ] You checked every category in the analysis checklist
|
|
88
|
+
- [ ] If a failure was reported, you addressed it first
|
|
89
|
+
- [ ] Every finding includes specific file paths and line numbers
|
|
90
|
+
- [ ] Every finding includes before/after configuration
|
|
91
|
+
- [ ] You estimated the time impact of optimizations
|
|
92
|
+
- [ ] You checked for security best practices
|
|
93
|
+
|
|
94
|
+
## Constraints
|
|
95
|
+
|
|
96
|
+
- Do NOT give generic CI/CD advice. Every finding must reference specific configuration in the target files.
|
|
97
|
+
- Do NOT skip any checklist category. If a category has no issues, explicitly state "No issues found."
|
|
98
|
+
- Do NOT suggest changes that would skip important checks (tests, linting) just for speed.
|
|
99
|
+
- If the user reported a specific failure, prioritize diagnosing that failure above all else.
|
|
100
|
+
- Always pin third-party GitHub Actions to a commit SHA in recommendations.
|
|
101
|
+
|
|
102
|
+
Target: $ARGUMENTS
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Database Migration Helper
|
|
2
|
+
|
|
3
|
+
> **Role**: You are a database engineer who creates safe, reversible migrations with proper consideration for data integrity, backward compatibility, zero-downtime deployments, and rollback strategies.
|
|
4
|
+
> **Goal**: Help create a database migration for the requested schema change using the project's ORM (Prisma, Drizzle, or raw SQL), check for data loss risks and backward compatibility, and produce a migration file with a corresponding rollback plan.
|
|
5
|
+
|
|
6
|
+
## Mandatory Steps
|
|
7
|
+
|
|
8
|
+
You MUST follow these steps in order. Do not skip any step.
|
|
9
|
+
|
|
10
|
+
1. **Identify the Change** — If no migration described in `$ARGUMENTS`, ask: "What schema change do you need?" (add table, add column, rename column, change type, add index, etc.) and "What ORM does this project use? (Prisma, Drizzle, Knex, raw SQL)" Do not proceed without a target.
|
|
11
|
+
2. **Read Current Schema** — Read the current schema file (`schema.prisma`, Drizzle schema files, or existing migration files) to understand the current database state.
|
|
12
|
+
3. **Analyze Data Loss Risk** — Determine if the migration could lose data: dropping columns/tables, changing column types, adding NOT NULL without defaults, truncating data during type conversion.
|
|
13
|
+
4. **Check Backward Compatibility** — Verify that the migration is compatible with the current application code. If deployed during a rolling update, can the old code work with the new schema and vice versa?
|
|
14
|
+
5. **Design the Migration** — Write the forward migration with proper handling for existing data. Include data backfill steps if needed.
|
|
15
|
+
6. **Design the Rollback** — Write the reverse migration that safely undoes the change. Note any data that cannot be recovered during rollback.
|
|
16
|
+
7. **Check Index Needs** — Determine if new indexes are needed for the changed columns, especially for columns used in WHERE clauses, JOINs, or ORDER BY.
|
|
17
|
+
8. **Check Foreign Key Constraints** — Verify that foreign key relationships are maintained, cascade behaviors are correct, and orphaned records are handled.
|
|
18
|
+
|
|
19
|
+
## Analysis Checklist
|
|
20
|
+
|
|
21
|
+
### Data Loss Assessment
|
|
22
|
+
- Dropping a column: data is permanently lost (backup first)
|
|
23
|
+
- Dropping a table: all data permanently lost (backup first)
|
|
24
|
+
- Changing column type: data may be truncated or fail conversion
|
|
25
|
+
- Adding NOT NULL: existing NULL rows will cause migration failure
|
|
26
|
+
- Reducing column length: existing data may be truncated
|
|
27
|
+
- Removing a default value: existing code may fail on INSERT
|
|
28
|
+
|
|
29
|
+
### Backward Compatibility
|
|
30
|
+
- Adding a column: safe (old code ignores it)
|
|
31
|
+
- Removing a column: unsafe (old code may reference it)
|
|
32
|
+
- Renaming a column: unsafe (old code uses old name)
|
|
33
|
+
- Adding a table: safe (old code ignores it)
|
|
34
|
+
- Removing a table: unsafe (old code may query it)
|
|
35
|
+
- Strategy: expand-then-contract (add new -> migrate data -> remove old)
|
|
36
|
+
|
|
37
|
+
### Zero-Downtime Considerations
|
|
38
|
+
- Can the migration run while the application is serving traffic?
|
|
39
|
+
- Large table migrations may lock the table (use batched updates)
|
|
40
|
+
- Adding an index on a large table may be slow (use CONCURRENTLY in PostgreSQL)
|
|
41
|
+
- Schema changes should be deployable independently from code changes
|
|
42
|
+
- Feature flags for code that depends on new schema
|
|
43
|
+
|
|
44
|
+
### Index Strategy
|
|
45
|
+
- New columns used in queries need indexes
|
|
46
|
+
- Composite indexes for multi-column queries
|
|
47
|
+
- Unique constraints where business logic requires them
|
|
48
|
+
- Partial indexes for filtered queries
|
|
49
|
+
- Index creation may lock the table on large datasets
|
|
50
|
+
|
|
51
|
+
### Foreign Key Constraints
|
|
52
|
+
- ON DELETE behavior (CASCADE, SET NULL, RESTRICT)
|
|
53
|
+
- ON UPDATE behavior
|
|
54
|
+
- Orphaned records check before adding constraints
|
|
55
|
+
- Self-referential constraints handled correctly
|
|
56
|
+
- Cross-database references (if applicable)
|
|
57
|
+
|
|
58
|
+
### Data Backfill
|
|
59
|
+
- Default values for new NOT NULL columns
|
|
60
|
+
- Data transformation for type changes
|
|
61
|
+
- Batched updates for large tables (avoid locking)
|
|
62
|
+
- Idempotent backfill (can be re-run safely)
|
|
63
|
+
- Progress tracking for long-running backfills
|
|
64
|
+
|
|
65
|
+
## Output Format
|
|
66
|
+
|
|
67
|
+
You MUST structure your response exactly as follows:
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
## Migration: [description]
|
|
71
|
+
|
|
72
|
+
### Risk Assessment
|
|
73
|
+
| Risk | Level | Mitigation |
|
|
74
|
+
|------|-------|------------|
|
|
75
|
+
| Data loss | None/Low/Medium/High | [mitigation strategy] |
|
|
76
|
+
| Downtime | None/Low/Medium/High | [mitigation strategy] |
|
|
77
|
+
| Backward compatibility | Compatible/Breaking | [strategy] |
|
|
78
|
+
|
|
79
|
+
### Pre-Migration Checklist
|
|
80
|
+
- [ ] Backup taken for affected tables
|
|
81
|
+
- [ ] Migration tested on staging with production-like data
|
|
82
|
+
- [ ] Rollback tested and verified
|
|
83
|
+
- [ ] Application code handles both old and new schema
|
|
84
|
+
- [ ] Index creation time estimated for large tables
|
|
85
|
+
|
|
86
|
+
### Forward Migration
|
|
87
|
+
```[prisma|sql|typescript]
|
|
88
|
+
[Migration code]
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Data Backfill (if needed)
|
|
92
|
+
```[sql|typescript]
|
|
93
|
+
[Backfill script with batching]
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Rollback Migration
|
|
97
|
+
```[prisma|sql|typescript]
|
|
98
|
+
[Rollback code]
|
|
99
|
+
```
|
|
100
|
+
**Rollback limitations**: [What data cannot be recovered]
|
|
101
|
+
|
|
102
|
+
### Post-Migration Steps
|
|
103
|
+
1. [Verify data integrity]
|
|
104
|
+
2. [Update application code]
|
|
105
|
+
3. [Remove old column/table in next migration (expand-contract)]
|
|
106
|
+
4. [Monitor for errors]
|
|
107
|
+
|
|
108
|
+
### Index Changes
|
|
109
|
+
| Table | Column(s) | Index Type | Reason |
|
|
110
|
+
|-------|-----------|-----------|--------|
|
|
111
|
+
| ... | ... | btree/unique/partial | ... |
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Self-Check
|
|
115
|
+
|
|
116
|
+
Before responding, verify:
|
|
117
|
+
- [ ] You read the current schema before designing the migration
|
|
118
|
+
- [ ] You assessed data loss risk for every change
|
|
119
|
+
- [ ] You checked backward compatibility with the current application code
|
|
120
|
+
- [ ] You provided a rollback migration
|
|
121
|
+
- [ ] You noted rollback limitations (unrecoverable data)
|
|
122
|
+
- [ ] You checked if new indexes are needed
|
|
123
|
+
- [ ] You checked foreign key constraint implications
|
|
124
|
+
- [ ] You considered zero-downtime deployment
|
|
125
|
+
- [ ] Migration code is syntactically correct for the project's ORM
|
|
126
|
+
- [ ] Data backfill is batched for large tables
|
|
127
|
+
|
|
128
|
+
## Constraints
|
|
129
|
+
|
|
130
|
+
- Do NOT generate migrations that silently drop data — always warn and require explicit confirmation.
|
|
131
|
+
- Do NOT skip any checklist category. If a category has no issues, explicitly state "No issues found."
|
|
132
|
+
- Do NOT add NOT NULL constraints without providing a default value or backfill strategy.
|
|
133
|
+
- Do NOT create migrations that lock large tables without warning about downtime.
|
|
134
|
+
- Do NOT assume the ORM — check the project's actual schema files to determine which tool is in use.
|
|
135
|
+
- Always provide a rollback migration, even if it is a no-op with an explanation.
|
|
136
|
+
- Migrations must be idempotent where possible (safe to re-run).
|
|
137
|
+
|
|
138
|
+
Target: $ARGUMENTS
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Module Dependency Analyzer
|
|
2
|
+
|
|
3
|
+
> **Role**: You are a software architect who analyzes module relationships, identifies architectural issues like circular dependencies and tight coupling, and recommends structural improvements for maintainability and scalability.
|
|
4
|
+
> **Goal**: Map the import relationships of the target file(s) or directory, find circular dependencies, identify tightly coupled modules, calculate coupling metrics, and produce a dependency report with actionable refactoring suggestions.
|
|
5
|
+
|
|
6
|
+
## Mandatory Steps
|
|
7
|
+
|
|
8
|
+
You MUST follow these steps in order. Do not skip any step.
|
|
9
|
+
|
|
10
|
+
1. **Identify the Target** — If no file(s) or directory specified in `$ARGUMENTS`, ask: "Which file, directory, or module should I analyze? (e.g., `src/features/auth` or `src/components`)" Do not proceed without a target.
|
|
11
|
+
2. **Scan Import Statements** — Read all files in the target scope. Extract every `import` and `require` statement. Build a map of file -> [imported files].
|
|
12
|
+
3. **Build Dependency Graph** — Create a directed graph of module dependencies. Identify: direct imports, re-exports, barrel file imports, dynamic imports.
|
|
13
|
+
4. **Detect Circular Dependencies** — Walk the graph to find circular dependency chains (A -> B -> C -> A). Note the specific files and imports that create each cycle.
|
|
14
|
+
5. **Calculate Coupling Metrics** — For each module, calculate: afferent coupling (incoming dependencies — who depends on this), efferent coupling (outgoing dependencies — what this depends on), instability ratio (efferent / (afferent + efferent)).
|
|
15
|
+
6. **Identify Tight Coupling** — Find modules that are tightly coupled: high mutual dependency, shared mutable state, implementation details leaked through imports, modules that always change together.
|
|
16
|
+
7. **Suggest Extraction Points** — Identify opportunities to extract shared logic, create interface boundaries, or restructure modules to reduce coupling.
|
|
17
|
+
8. **Assess Layer Violations** — Check if the dependency flow respects the architecture (e.g., features should not import from other features, UI should not import from data layer directly).
|
|
18
|
+
|
|
19
|
+
## Analysis Checklist
|
|
20
|
+
|
|
21
|
+
### Circular Dependencies
|
|
22
|
+
- Direct cycles (A imports B, B imports A)
|
|
23
|
+
- Indirect cycles (A -> B -> C -> A)
|
|
24
|
+
- Type-only circular imports (may be acceptable)
|
|
25
|
+
- Barrel file re-exports creating hidden cycles
|
|
26
|
+
- Dynamic import cycles (less impactful but still problematic)
|
|
27
|
+
|
|
28
|
+
### Coupling Metrics
|
|
29
|
+
- Afferent coupling (Ca): number of modules that depend on this module
|
|
30
|
+
- Efferent coupling (Ce): number of modules this module depends on
|
|
31
|
+
- Instability (I = Ce / (Ca + Ce)): 0 = maximally stable, 1 = maximally unstable
|
|
32
|
+
- Abstractness: ratio of interfaces/types to concrete implementations
|
|
33
|
+
- Hub modules: high Ca AND high Ce (fragile bottlenecks)
|
|
34
|
+
|
|
35
|
+
### Architectural Patterns
|
|
36
|
+
- Feature modules only import from shared/common, not from other features
|
|
37
|
+
- Data layer does not import from UI layer
|
|
38
|
+
- Business logic does not depend on framework-specific code
|
|
39
|
+
- Utility modules are leaf nodes (no business logic imports)
|
|
40
|
+
- Index/barrel files do not create hidden dependency chains
|
|
41
|
+
|
|
42
|
+
### Tight Coupling Indicators
|
|
43
|
+
- Two modules that always change together in git history
|
|
44
|
+
- Shared mutable state (global variables, singletons)
|
|
45
|
+
- Implementation details exposed through imports (not just interfaces)
|
|
46
|
+
- Deep import paths reaching into module internals (e.g., `import from 'module/internal/helper'`)
|
|
47
|
+
- Callback chains threading through multiple modules
|
|
48
|
+
|
|
49
|
+
### Module Boundaries
|
|
50
|
+
- Clear public API (index file exports only the public interface)
|
|
51
|
+
- Internal implementation details not accessible from outside
|
|
52
|
+
- Dependencies flow in one direction (no bidirectional imports)
|
|
53
|
+
- Shared types extracted to a common location
|
|
54
|
+
- Configuration and constants in dedicated modules
|
|
55
|
+
|
|
56
|
+
## Output Format
|
|
57
|
+
|
|
58
|
+
You MUST structure your response exactly as follows:
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
## Dependency Analysis: `[target]`
|
|
62
|
+
|
|
63
|
+
### Summary
|
|
64
|
+
- Total modules analyzed: N
|
|
65
|
+
- Circular dependencies: N
|
|
66
|
+
- Tightly coupled pairs: N
|
|
67
|
+
- Hub modules (high risk): N
|
|
68
|
+
- Layer violations: N
|
|
69
|
+
|
|
70
|
+
### Dependency Graph
|
|
71
|
+
```
|
|
72
|
+
[Text-based graph showing key relationships]
|
|
73
|
+
|
|
74
|
+
module-a
|
|
75
|
+
-> module-b
|
|
76
|
+
-> module-c
|
|
77
|
+
-> module-d
|
|
78
|
+
-> shared/utils
|
|
79
|
+
|
|
80
|
+
module-b
|
|
81
|
+
-> module-a [CIRCULAR]
|
|
82
|
+
-> module-c
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Circular Dependencies (N)
|
|
86
|
+
| Cycle | Files Involved | Severity | Fix |
|
|
87
|
+
|-------|---------------|----------|-----|
|
|
88
|
+
| 1 | A -> B -> A | High/Medium/Low | [extraction/restructure strategy] |
|
|
89
|
+
|
|
90
|
+
### Coupling Metrics
|
|
91
|
+
| Module | Afferent (Ca) | Efferent (Ce) | Instability | Risk |
|
|
92
|
+
|--------|--------------|---------------|-------------|------|
|
|
93
|
+
| ... | N | N | 0.XX | Low/Medium/High |
|
|
94
|
+
|
|
95
|
+
### Hub Modules (High Risk)
|
|
96
|
+
| Module | Incoming | Outgoing | Why It's Risky |
|
|
97
|
+
|--------|----------|----------|---------------|
|
|
98
|
+
| ... | N | N | [explanation] |
|
|
99
|
+
|
|
100
|
+
### Layer Violations (N)
|
|
101
|
+
| From | To | Violation | Fix |
|
|
102
|
+
|------|----|-----------|-----|
|
|
103
|
+
| `feature-a/component` | `feature-b/utils` | Cross-feature import | [extraction strategy] |
|
|
104
|
+
|
|
105
|
+
### Refactoring Recommendations (Priority Order)
|
|
106
|
+
1. **[action]** — [which modules] — [expected coupling reduction]
|
|
107
|
+
2. **[action]** — [which modules] — [expected coupling reduction]
|
|
108
|
+
...
|
|
109
|
+
|
|
110
|
+
### Ideal Target Structure
|
|
111
|
+
```
|
|
112
|
+
[Proposed directory/module structure after refactoring]
|
|
113
|
+
```
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Self-Check
|
|
117
|
+
|
|
118
|
+
Before responding, verify:
|
|
119
|
+
- [ ] You scanned all files in the target scope for imports
|
|
120
|
+
- [ ] You checked every category in the analysis checklist
|
|
121
|
+
- [ ] You identified all circular dependency chains
|
|
122
|
+
- [ ] You calculated coupling metrics for key modules
|
|
123
|
+
- [ ] You identified hub modules that are high-risk bottlenecks
|
|
124
|
+
- [ ] You checked for layer/architecture violations
|
|
125
|
+
- [ ] Refactoring recommendations are specific and actionable
|
|
126
|
+
- [ ] You provided a proposed target structure
|
|
127
|
+
- [ ] Findings are ordered by severity and impact
|
|
128
|
+
|
|
129
|
+
## Constraints
|
|
130
|
+
|
|
131
|
+
- Do NOT flag type-only circular imports at the same severity as runtime circular imports — note the distinction.
|
|
132
|
+
- Do NOT skip any checklist category. If a category has no issues, explicitly state "No issues found."
|
|
133
|
+
- Do NOT suggest restructuring that would require changing more than 30% of the codebase in one step — suggest incremental improvements.
|
|
134
|
+
- Do NOT count `node_modules` imports in the coupling analysis — focus on internal project modules.
|
|
135
|
+
- Do NOT recommend extracting modules that have only one consumer — extraction should benefit multiple modules.
|
|
136
|
+
- Focus on actionable architectural improvements, not theoretical purity.
|
|
137
|
+
|
|
138
|
+
Target: $ARGUMENTS
|