@nebutra/next-unicorn-skill 2.0.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.
Files changed (119) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/LICENSE +21 -0
  3. package/README.md +316 -0
  4. package/SKILL.md +318 -0
  5. package/dist/analyzer/pattern-catalog.d.ts +35 -0
  6. package/dist/analyzer/pattern-catalog.d.ts.map +1 -0
  7. package/dist/analyzer/pattern-catalog.js +342 -0
  8. package/dist/analyzer/pattern-catalog.js.map +1 -0
  9. package/dist/analyzer/scanner.d.ts +33 -0
  10. package/dist/analyzer/scanner.d.ts.map +1 -0
  11. package/dist/analyzer/scanner.js +302 -0
  12. package/dist/analyzer/scanner.js.map +1 -0
  13. package/dist/auditor/ux-auditor.d.ts +26 -0
  14. package/dist/auditor/ux-auditor.d.ts.map +1 -0
  15. package/dist/auditor/ux-auditor.js +272 -0
  16. package/dist/auditor/ux-auditor.js.map +1 -0
  17. package/dist/checker/peer-dependency-checker.d.ts +62 -0
  18. package/dist/checker/peer-dependency-checker.d.ts.map +1 -0
  19. package/dist/checker/peer-dependency-checker.js +94 -0
  20. package/dist/checker/peer-dependency-checker.js.map +1 -0
  21. package/dist/index.d.ts +78 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +325 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/planner/migration-planner.d.ts +47 -0
  26. package/dist/planner/migration-planner.d.ts.map +1 -0
  27. package/dist/planner/migration-planner.js +144 -0
  28. package/dist/planner/migration-planner.js.map +1 -0
  29. package/dist/pr-creator/git-operations.d.ts +29 -0
  30. package/dist/pr-creator/git-operations.d.ts.map +1 -0
  31. package/dist/pr-creator/git-operations.js +10 -0
  32. package/dist/pr-creator/git-operations.js.map +1 -0
  33. package/dist/pr-creator/platform-client.d.ts +47 -0
  34. package/dist/pr-creator/platform-client.d.ts.map +1 -0
  35. package/dist/pr-creator/platform-client.js +9 -0
  36. package/dist/pr-creator/platform-client.js.map +1 -0
  37. package/dist/pr-creator/pr-description-builder.d.ts +23 -0
  38. package/dist/pr-creator/pr-description-builder.d.ts.map +1 -0
  39. package/dist/pr-creator/pr-description-builder.js +187 -0
  40. package/dist/pr-creator/pr-description-builder.js.map +1 -0
  41. package/dist/pr-creator/pr-executor.d.ts +30 -0
  42. package/dist/pr-creator/pr-executor.d.ts.map +1 -0
  43. package/dist/pr-creator/pr-executor.js +109 -0
  44. package/dist/pr-creator/pr-executor.js.map +1 -0
  45. package/dist/pr-creator/pr-strategy.d.ts +56 -0
  46. package/dist/pr-creator/pr-strategy.d.ts.map +1 -0
  47. package/dist/pr-creator/pr-strategy.js +125 -0
  48. package/dist/pr-creator/pr-strategy.js.map +1 -0
  49. package/dist/schemas/input.schema.d.ts +231 -0
  50. package/dist/schemas/input.schema.d.ts.map +1 -0
  51. package/dist/schemas/input.schema.js +159 -0
  52. package/dist/schemas/input.schema.js.map +1 -0
  53. package/dist/schemas/output.schema.d.ts +2543 -0
  54. package/dist/schemas/output.schema.d.ts.map +1 -0
  55. package/dist/schemas/output.schema.js +199 -0
  56. package/dist/schemas/output.schema.js.map +1 -0
  57. package/dist/scorer/impact-scorer.d.ts +45 -0
  58. package/dist/scorer/impact-scorer.d.ts.map +1 -0
  59. package/dist/scorer/impact-scorer.js +243 -0
  60. package/dist/scorer/impact-scorer.js.map +1 -0
  61. package/dist/security/osv-client.d.ts +72 -0
  62. package/dist/security/osv-client.d.ts.map +1 -0
  63. package/dist/security/osv-client.js +36 -0
  64. package/dist/security/osv-client.js.map +1 -0
  65. package/dist/security/vuln-report-builder.d.ts +18 -0
  66. package/dist/security/vuln-report-builder.d.ts.map +1 -0
  67. package/dist/security/vuln-report-builder.js +141 -0
  68. package/dist/security/vuln-report-builder.js.map +1 -0
  69. package/dist/security/vulnerability-scanner.d.ts +65 -0
  70. package/dist/security/vulnerability-scanner.d.ts.map +1 -0
  71. package/dist/security/vulnerability-scanner.js +140 -0
  72. package/dist/security/vulnerability-scanner.js.map +1 -0
  73. package/dist/updater/changelog-verifier.d.ts +29 -0
  74. package/dist/updater/changelog-verifier.d.ts.map +1 -0
  75. package/dist/updater/changelog-verifier.js +80 -0
  76. package/dist/updater/changelog-verifier.js.map +1 -0
  77. package/dist/updater/registry-client.d.ts +49 -0
  78. package/dist/updater/registry-client.d.ts.map +1 -0
  79. package/dist/updater/registry-client.js +10 -0
  80. package/dist/updater/registry-client.js.map +1 -0
  81. package/dist/updater/update-plan-builder.d.ts +23 -0
  82. package/dist/updater/update-plan-builder.d.ts.map +1 -0
  83. package/dist/updater/update-plan-builder.js +93 -0
  84. package/dist/updater/update-plan-builder.js.map +1 -0
  85. package/dist/updater/update-policy.d.ts +50 -0
  86. package/dist/updater/update-policy.d.ts.map +1 -0
  87. package/dist/updater/update-policy.js +118 -0
  88. package/dist/updater/update-policy.js.map +1 -0
  89. package/dist/updater/update-scorer.d.ts +51 -0
  90. package/dist/updater/update-scorer.d.ts.map +1 -0
  91. package/dist/updater/update-scorer.js +166 -0
  92. package/dist/updater/update-scorer.js.map +1 -0
  93. package/dist/utils/constraint-filter.d.ts +44 -0
  94. package/dist/utils/constraint-filter.d.ts.map +1 -0
  95. package/dist/utils/constraint-filter.js +69 -0
  96. package/dist/utils/constraint-filter.js.map +1 -0
  97. package/dist/utils/serializer.d.ts +17 -0
  98. package/dist/utils/serializer.d.ts.map +1 -0
  99. package/dist/utils/serializer.js +24 -0
  100. package/dist/utils/serializer.js.map +1 -0
  101. package/dist/utils/skill-parser.d.ts +29 -0
  102. package/dist/utils/skill-parser.d.ts.map +1 -0
  103. package/dist/utils/skill-parser.js +175 -0
  104. package/dist/utils/skill-parser.js.map +1 -0
  105. package/dist/verifier/context7.d.ts +48 -0
  106. package/dist/verifier/context7.d.ts.map +1 -0
  107. package/dist/verifier/context7.js +97 -0
  108. package/dist/verifier/context7.js.map +1 -0
  109. package/examples/backend-node/input.json +28 -0
  110. package/examples/backend-node/output.json +343 -0
  111. package/examples/frontend-nextjs/input.json +37 -0
  112. package/examples/frontend-nextjs/output.json +302 -0
  113. package/package.json +78 -0
  114. package/templates/deletion-checklist.md +42 -0
  115. package/templates/migration-plan.md +61 -0
  116. package/templates/prd-template.md +123 -0
  117. package/templates/summary-table.md +28 -0
  118. package/templates/update-plan.md +61 -0
  119. package/templates/vuln-report.md +50 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,57 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [2.0.0] - 2026-02-08
9
+
10
+ ### Added
11
+
12
+ - **Vulnerability Scanning** — scans current AND recommended deps via OSV database
13
+ - Prevents "upgrade into a vulnerability" scenarios (unique to Next-Unicorn)
14
+ - SARIF output for GitHub Code Scanning CI/CD integration
15
+ - Severity filtering, fixable/unfixable classification
16
+ - **Auto-Update Existing Dependencies** — impact-scored version upgrades
17
+ - Configurable update policy (patch/minor/major, pinned packages, min-age window)
18
+ - Context7-powered breaking change detection via changelog verification
19
+ - 7-dimension scoring + urgency classification (routine/recommended/urgent/critical)
20
+ - Related package grouping (e.g. all `@babel/*` together)
21
+ - **PR Auto-Creation** — creates GitHub/GitLab PRs for updates and migrations
22
+ - Conventional commit titles (`fix(deps):`, `chore(deps):`, `refactor(domain):`)
23
+ - Rich markdown PR descriptions with impact tables, vulnerability details, reviewer checklists
24
+ - Migration PRs with adapter code scaffolding for high-risk items
25
+ - Existing PR deduplication (update instead of duplicate)
26
+ - 15 new property-based tests (Properties 15–29), bringing total to 29
27
+ - New Zod schemas: `VulnFindingSchema`, `UpdateItemSchema`, `PRResultSchema`, and more
28
+ - New templates: `vuln-report.md`, `update-plan.md`
29
+
30
+ ### Changed
31
+
32
+ - Extended `InputSchema` with optional `updatePolicy` and `prPolicy` fields
33
+ - Extended `OutputSchema` with optional `vulnerabilityReport`, `updatePlan`, `pullRequests` sections
34
+ - Orchestrator pipeline expanded from 10 to 13 steps
35
+ - All new external clients (OSV, Registry, GitHub API) use injectable interfaces — zero new runtime deps
36
+ - Version bumped to 2.0.0
37
+
38
+ ## [1.0.0] - 2026-02-05
39
+
40
+ ### Added
41
+
42
+ - Initial release
43
+ - Pattern-based scanning across 68 Vibe Coding Domains (ISO 25010-aligned)
44
+ - Context7 MCP verification for every library recommendation
45
+ - 7-dimension impact scoring (scalability, performance, security, maintainability, feature richness, UX, UI aesthetics)
46
+ - Phased migration plans with adapter strategies for high-risk changes
47
+ - Deletion checklists with estimated lines saved
48
+ - UX completeness audit (8 categories: A11y, error/empty/loading states, form validation, etc.)
49
+ - Monorepo support (npm, pip, cargo, go)
50
+ - License compliance filtering
51
+ - Dependency conflict detection
52
+ - Peer dependency checking with semver validation
53
+ - 14 property-based tests with fast-check
54
+ - Serializer with JSON round-trip guarantee
55
+ - SKILL.md parser with YAML frontmatter round-trip
56
+ - Complete examples (frontend-nextjs, backend-node)
57
+ - Reusable templates (summary table, migration plan, deletion checklist, PRD)
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 TsekaLuk
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,316 @@
1
+ <p align="center">
2
+ <h1 align="center">Next-Unicorn</h1>
3
+ <p align="center">
4
+ Stop Vibe Coding debt. Audit your codebase, replace reinvented wheels with<br/>
5
+ unicorn-grade libraries, and ship a migration plan + "delete-code" checklist.
6
+ </p>
7
+ </p>
8
+
9
+ <p align="center">
10
+ <a href="https://github.com/TsekaLuk/Next-Unicorn-Skill/actions/workflows/ci.yml"><img src="https://github.com/TsekaLuk/Next-Unicorn-Skill/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
11
+ <a href="https://www.npmjs.com/package/@nebutra/next-unicorn-skill"><img src="https://img.shields.io/npm/v/@nebutra/next-unicorn-skill.svg?color=blue" alt="npm version" /></a>
12
+ <a href="./LICENSE"><img src="https://img.shields.io/badge/license-MIT-green.svg" alt="License" /></a>
13
+ <a href="https://www.typescriptlang.org/"><img src="https://img.shields.io/badge/TypeScript-strict-blue.svg" alt="TypeScript" /></a>
14
+ <a href="./tests/"><img src="https://img.shields.io/badge/tests-191%20passed-brightgreen.svg" alt="Tests" /></a>
15
+ <a href="./tests/"><img src="https://img.shields.io/badge/properties-29%20verified-purple.svg" alt="Property Tests" /></a>
16
+ </p>
17
+
18
+ <p align="center">
19
+ <a href="#quick-start">Quick Start</a> &bull;
20
+ <a href="#features">Features</a> &bull;
21
+ <a href="#how-it-works">How It Works</a> &bull;
22
+ <a href="#comparison">Comparison</a> &bull;
23
+ <a href="#api">API</a> &bull;
24
+ <a href="#examples">Examples</a> &bull;
25
+ <a href="#contributing">Contributing</a>
26
+ </p>
27
+
28
+ ---
29
+
30
+ ## Why Next-Unicorn?
31
+
32
+ Every codebase accumulates hand-rolled implementations that should be mature libraries. Custom date formatters, DIY loggers, bespoke state machines, ad-hoc i18n — **Vibe Coding debt**.
33
+
34
+ Snyk, Dependabot, and Renovate manage your *existing* dependencies. They can't find code you wrote that *should become* a dependency.
35
+
36
+ **Next-Unicorn does both** — and verifies every recommendation against real documentation via [Context7 MCP](https://context7.com).
37
+
38
+ ## Quick Start
39
+
40
+ ```bash
41
+ # npm
42
+ npm install @nebutra/next-unicorn-skill
43
+
44
+ # pnpm
45
+ pnpm add @nebutra/next-unicorn-skill
46
+
47
+ # bun
48
+ bun add @nebutra/next-unicorn-skill
49
+ ```
50
+
51
+ ```typescript
52
+ import { analyze } from '@nebutra/next-unicorn-skill';
53
+
54
+ const result = await analyze({
55
+ input: {
56
+ projectMetadata: {
57
+ repoPath: './my-project',
58
+ languages: ['typescript'],
59
+ packageManagers: ['pnpm'],
60
+ currentLibraries: { react: '18.2.0', next: '14.1.0' },
61
+ },
62
+ optimizationGoals: ['reduce custom code', 'improve maintainability'],
63
+ constraints: {
64
+ licenseAllowlist: ['MIT', 'Apache-2.0', 'ISC'],
65
+ },
66
+ priorityFocusAreas: ['i18n', 'observability', 'auth-security'],
67
+ },
68
+ context7Client: myContext7Client,
69
+ // Optional Phase 2 clients:
70
+ vulnClient: myOsvClient, // vulnerability scanning
71
+ registryClient: myRegistryClient, // auto-update
72
+ platformClient: myGitHubClient, // PR creation
73
+ gitOps: myGitOperations, // PR creation
74
+ });
75
+
76
+ if (result.success) {
77
+ console.log(result.prettyJson);
78
+ }
79
+ ```
80
+
81
+ Or use as an **MCP SKILL** — provide [`SKILL.md`](./SKILL.md) to your AI agent (Claude Code, Kiro, etc.).
82
+
83
+ ## Features
84
+
85
+ ### Core Analysis
86
+
87
+ | Feature | Description |
88
+ |---------|-------------|
89
+ | **Pattern-based scanning** | Detects hand-rolled code across 68 Vibe Coding Domains (ISO 25010-aligned) |
90
+ | **Context7 verification** | Every recommendation verified against real, version-correct documentation |
91
+ | **7-dimension impact scoring** | Scalability, performance, security, maintainability, feature richness, UX, UI aesthetics |
92
+ | **Phased migration plans** | Low / medium / high risk phases with adapter strategies |
93
+ | **Deletion checklists** | Every file and line range to remove, with estimated lines saved |
94
+ | **UX completeness audit** | A11y, error/empty/loading states, form validation, design system alignment |
95
+ | **Monorepo support** | Detects npm, pip, cargo, go workspaces independently |
96
+
97
+ ### Dependency Management (v2.0)
98
+
99
+ | Feature | Description |
100
+ |---------|-------------|
101
+ | **Vulnerability scanning** | Scans current AND recommended deps via OSV — prevents "upgrade into a vuln" |
102
+ | **Auto-update deps** | Impact-scored version upgrades with Context7-powered breaking change detection |
103
+ | **PR auto-creation** | GitHub/GitLab PRs with conventional commit titles, impact tables, reviewer checklists |
104
+ | **Migration PRs** | PRs with adapter code scaffolding for hand-rolled code replacement |
105
+
106
+ ## How It Works
107
+
108
+ ```
109
+ Input ─> Validator ─> Scanner ─> Context7 Verifier ─> Impact Scorer
110
+ ─> Conflict Detection ─> Vuln Scanner ─> License Filter
111
+ ─> Migration Planner ─> UX Auditor ─> Auto-Updater
112
+ ─> Serializer ─> PR Creator ─> Output
113
+ ```
114
+
115
+ Each stage is a pure function with structured I/O. All external dependencies (Context7, OSV, npm registry, GitHub API) are **injected via interfaces** for testability.
116
+
117
+ ### Before / After
118
+
119
+ <table>
120
+ <tr><th>Before (hand-rolled)</th><th>After (recommended)</th></tr>
121
+ <tr>
122
+ <td>
123
+
124
+ ```tsx
125
+ // Custom i18n across 47 files
126
+ const translations = {
127
+ en: { greeting: 'Hello' },
128
+ es: { greeting: 'Hola' },
129
+ };
130
+ function t(key, locale) {
131
+ return translations[locale]?.[key] ?? key;
132
+ }
133
+ // No plurals, no interpolation, no RTL
134
+ ```
135
+
136
+ </td>
137
+ <td>
138
+
139
+ ```tsx
140
+ // next-intl — Context7 verified, MIT
141
+ // Impact: 9.2/10 composite
142
+ // Migration risk: low | Effort: 8h
143
+ import { useTranslations } from 'next-intl';
144
+
145
+ export default function Page() {
146
+ const t = useTranslations('common');
147
+ return <h1>{t('greeting')}</h1>;
148
+ }
149
+ ```
150
+
151
+ </td>
152
+ </tr>
153
+ <tr>
154
+ <td>
155
+
156
+ ```typescript
157
+ // Custom logger with console.log
158
+ function logRequest(req) {
159
+ console.log(JSON.stringify({
160
+ time: new Date().toISOString(),
161
+ method: req.method,
162
+ url: req.url,
163
+ }));
164
+ }
165
+ // No levels, no redaction, no rotation
166
+ ```
167
+
168
+ </td>
169
+ <td>
170
+
171
+ ```typescript
172
+ // pino — Context7 verified, MIT
173
+ // Impact: 9.0/10 composite
174
+ // Migration risk: low | Effort: 4h
175
+ import pino from 'pino';
176
+ const logger = pino({
177
+ level: 'info',
178
+ redact: ['req.headers.authorization'],
179
+ });
180
+ ```
181
+
182
+ </td>
183
+ </tr>
184
+ </table>
185
+
186
+ ## Comparison
187
+
188
+ | Feature | Next-Unicorn | Snyk | Dependabot | Renovate |
189
+ |---------|:---:|:---:|:---:|:---:|
190
+ | Finds hand-rolled code to replace | **Yes** | | | |
191
+ | Recommends new libraries | **Yes** | | | |
192
+ | 7-dimension impact scoring | **Yes** | | | |
193
+ | Context7 doc verification | **Yes** | | | |
194
+ | Phased migration plans | **Yes** | | | |
195
+ | UX completeness audit | **Yes** | | | |
196
+ | Deletion checklists | **Yes** | | | |
197
+ | Vulnerability scanning | **Yes** | Yes | Yes | |
198
+ | Scans *recommended* libs for vulns | **Yes** | | | |
199
+ | Auto-update existing deps | **Yes** | | Yes | Yes |
200
+ | Impact-scored updates | **Yes** | | | |
201
+ | PR auto-creation | **Yes** | Yes | Yes | Yes |
202
+ | Migration PRs with adapter code | **Yes** | | | |
203
+ | License compliance | **Yes** | Yes | | |
204
+ | Monorepo support | **Yes** | Yes | Yes | Yes |
205
+
206
+ ## API
207
+
208
+ ### `analyze(options): Promise<AnalyzeResult>`
209
+
210
+ | Option | Type | Required | Description |
211
+ |--------|------|:--------:|-------------|
212
+ | `input` | `InputSchema` | Yes | Project metadata, goals, constraints, focus areas |
213
+ | `context7Client` | `Context7Client` | Yes | Context7 MCP client for doc verification |
214
+ | `vulnClient` | `VulnerabilityClient` | No | OSV client for vulnerability scanning |
215
+ | `registryClient` | `RegistryClient` | No | Package registry client for auto-update |
216
+ | `platformClient` | `PlatformClient` | No | GitHub/GitLab client for PR creation |
217
+ | `gitOps` | `GitOperations` | No | Git CLI operations for PR creation |
218
+
219
+ ### Output Structure
220
+
221
+ ```jsonc
222
+ {
223
+ "recommendedChanges": [...], // Recommendations with impact scores
224
+ "filesToDelete": [...], // Files to remove after migration
225
+ "linesSavedEstimate": 1250, // Total lines saved
226
+ "uxAudit": [...], // UX completeness (8 categories)
227
+ "migrationPlan": { // Phased plan
228
+ "phases": [...], // low → medium → high risk
229
+ "deletionChecklist": [...] // Detailed items with reasons
230
+ },
231
+ "vulnerabilityReport": {...}, // (optional) Vuln findings + SARIF
232
+ "updatePlan": {...}, // (optional) Scored dep updates
233
+ "pullRequests": {...} // (optional) Created PR results
234
+ }
235
+ ```
236
+
237
+ ## Vibe Coding Domains
238
+
239
+ 68 domains across 11 categories, aligned with ISO/IEC 25010:
240
+
241
+ | Category | Count | Examples |
242
+ |----------|:-----:|---------|
243
+ | UX / Design | 14 | `ux-completeness`, `a11y-accessibility`, `forms-ux`, `design-system` |
244
+ | SEO / i18n | 5 | `seo`, `i18n`, `content-marketing` |
245
+ | Growth / Data | 7 | `analytics-tracking`, `ab-testing-experimentation` |
246
+ | Frontend Arch | 8 | `state-management`, `data-fetching-caching`, `agent-architecture` |
247
+ | Backend / Platform | 8 | `database-orm-migrations`, `jobs-queue-scheduler`, `feature-flags-config` |
248
+ | Security | 5 | `auth-security`, `permissions-rbac-ux`, `fraud-abuse-prevention` |
249
+ | Observability | 4 | `logging-tracing-metrics`, `error-monitoring` |
250
+ | Delivery / DevEx | 6 | `testing-strategy`, `ci-cd-release`, `dependency-management` |
251
+ | Performance | 3 | `performance-web-vitals`, `cost-optimization` |
252
+ | AI Engineering | 3 | `ai-model-serving`, `rag-vector-search` |
253
+ | Business | 3 | `payments-billing`, `marketplace-platform` |
254
+
255
+ > Extensible via `customDomains` in the input schema.
256
+
257
+ ## Testing
258
+
259
+ ```bash
260
+ pnpm test # 191 tests (vitest + fast-check)
261
+ pnpm typecheck # TypeScript strict mode
262
+ pnpm build # Compile to dist/
263
+ ```
264
+
265
+ **29 property-based tests** verify correctness invariants:
266
+
267
+ - Schema round-trip guarantees (Properties 1–3)
268
+ - Detection completeness (Property 4)
269
+ - Context7 verification correctness (Property 5)
270
+ - Scoring range and composite correctness (Properties 6–7)
271
+ - Migration phase ordering and adapter mandates (Properties 8–10)
272
+ - UX audit completeness (Property 11)
273
+ - Constraint filtering (Properties 12–13)
274
+ - JSON indentation (Property 14)
275
+ - Vulnerability scanning (Properties 15–18)
276
+ - Update policy and scoring (Properties 19–24)
277
+ - PR strategy and formatting (Properties 25–29)
278
+
279
+ ## Examples
280
+
281
+ | Scenario | Input | Output |
282
+ |----------|-------|--------|
283
+ | Next.js Frontend | [`examples/frontend-nextjs/input.json`](./examples/frontend-nextjs/input.json) | [`output.json`](./examples/frontend-nextjs/output.json) |
284
+ | Node.js Backend | [`examples/backend-node/input.json`](./examples/backend-node/input.json) | [`output.json`](./examples/backend-node/output.json) |
285
+
286
+ ## Templates
287
+
288
+ | Template | Purpose |
289
+ |----------|---------|
290
+ | [`summary-table.md`](./templates/summary-table.md) | Comparison table for stakeholders |
291
+ | [`migration-plan.md`](./templates/migration-plan.md) | Phased migration plan |
292
+ | [`deletion-checklist.md`](./templates/deletion-checklist.md) | Files to delete after migration |
293
+ | [`vuln-report.md`](./templates/vuln-report.md) | Vulnerability scan report |
294
+ | [`update-plan.md`](./templates/update-plan.md) | Dependency update plan |
295
+ | [`prd-template.md`](./templates/prd-template.md) | PRD for stakeholder presentation |
296
+
297
+ ## Contributing
298
+
299
+ See [CONTRIBUTING.md](./CONTRIBUTING.md) for development setup, architecture overview, and contribution guidelines.
300
+
301
+ ## Releasing
302
+
303
+ Releases are automated via GitHub Actions:
304
+
305
+ ```bash
306
+ # Tag a new version
307
+ git tag v2.0.0
308
+ git push origin v2.0.0
309
+ # → CI runs tests → creates GitHub Release → publishes to npm
310
+ ```
311
+
312
+ See [CHANGELOG.md](./CHANGELOG.md) for version history.
313
+
314
+ ## License
315
+
316
+ [MIT](./LICENSE) &copy; [TsekaLuk](https://github.com/TsekaLuk)