@polymorphism-tech/morph-spec 4.8.19 → 4.10.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/CLAUDE.md +21 -0
- package/README.md +2 -2
- package/bin/morph-spec.js +44 -55
- package/bin/task-manager.js +133 -20
- package/bin/validate.js +67 -33
- package/claude-plugin.json +1 -1
- package/docs/CHEATSHEET.md +201 -203
- package/docs/QUICKSTART.md +2 -2
- package/framework/CLAUDE.md +99 -77
- package/framework/agents.json +734 -182
- package/framework/commands/commit.md +166 -0
- package/framework/commands/morph-apply.md +13 -2
- package/framework/commands/morph-archive.md +8 -2
- package/framework/commands/morph-infra.md +6 -0
- package/framework/commands/morph-preflight.md +6 -0
- package/framework/commands/morph-proposal.md +56 -7
- package/framework/commands/morph-status.md +6 -0
- package/framework/commands/morph-troubleshoot.md +6 -0
- package/framework/hooks/claude-code/notification/approval-reminder.js +3 -2
- package/framework/hooks/claude-code/post-tool-use/context-refresh.js +1 -1
- package/framework/hooks/claude-code/post-tool-use/dispatch.js +155 -32
- package/framework/hooks/claude-code/post-tool-use/skill-reminder.js +78 -0
- package/framework/hooks/claude-code/post-tool-use/validator-feedback.js +8 -17
- package/framework/hooks/claude-code/pre-compact/save-morph-context.js +16 -3
- package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +4 -3
- package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +4 -3
- package/framework/hooks/claude-code/pre-tool-use/task-tracking-guard.js +60 -0
- package/framework/hooks/claude-code/session-start/inject-morph-context.js +124 -2
- package/framework/hooks/claude-code/session-start/post-compact-restore.js +41 -0
- package/framework/hooks/claude-code/statusline.py +76 -30
- package/framework/hooks/claude-code/stop/validate-completion.js +2 -15
- package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +23 -5
- package/framework/hooks/claude-code/user-prompt/set-terminal-title.js +14 -6
- package/framework/hooks/shared/activity-logger.js +0 -24
- package/framework/hooks/shared/compact-restore.js +100 -0
- package/framework/hooks/shared/dispatch-helpers.js +116 -0
- package/framework/hooks/shared/phase-utils.js +12 -5
- package/framework/hooks/shared/skill-reminder-helpers.js +79 -0
- package/framework/hooks/shared/stale-task-reset.js +57 -0
- package/framework/hooks/shared/state-reader.js +29 -5
- package/framework/hooks/shared/worktree-helpers.js +53 -0
- package/framework/phases.json +69 -14
- package/framework/rules/morph-workflow.md +88 -86
- package/framework/skills/level-0-meta/mcp-registry.json +86 -51
- package/framework/skills/level-0-meta/{brainstorming → morph-brainstorming}/SKILL.md +14 -17
- package/framework/skills/level-0-meta/morph-checklist/SKILL.md +2 -2
- package/framework/skills/level-0-meta/{code-review → morph-code-review}/SKILL.md +2 -2
- package/framework/skills/level-0-meta/{code-review-nextjs → morph-code-review-nextjs}/SKILL.md +163 -163
- package/framework/skills/level-0-meta/{frontend-review → morph-frontend-review}/SKILL.md +9 -9
- package/framework/skills/level-0-meta/morph-init/SKILL.md +77 -12
- package/framework/skills/level-0-meta/{post-implementation → morph-post-implementation}/SKILL.md +62 -15
- package/framework/skills/level-0-meta/morph-replicate/SKILL.md +5 -5
- package/framework/skills/level-0-meta/morph-replicate/references/blazor-html-mapping.md +1 -1
- package/framework/skills/level-0-meta/{simulation-checklist → morph-simulation-checklist}/SKILL.md +1 -1
- package/framework/skills/level-0-meta/{terminal-title → morph-terminal-title}/SKILL.md +2 -2
- package/framework/skills/level-0-meta/{tool-usage-guide → morph-tool-usage-guide}/SKILL.md +3 -4
- package/framework/skills/level-0-meta/{tool-usage-guide → morph-tool-usage-guide}/references/tools-per-phase.md +7 -7
- package/framework/skills/level-0-meta/{verification-before-completion → morph-verification-before-completion}/SKILL.md +2 -2
- package/framework/skills/level-0-meta/{verification-before-completion → morph-verification-before-completion}/scripts/check-phase-outputs.mjs +2 -2
- package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +238 -0
- package/framework/skills/level-1-workflows/{phase-codebase-analysis → morph-phase-codebase-analysis}/SKILL.md +3 -3
- package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +507 -0
- package/framework/skills/level-1-workflows/{phase-implement → morph-phase-implement}/SKILL.md +168 -27
- package/framework/skills/level-1-workflows/morph-phase-implement/prompts/code-quality-reviewer-prompt.md +50 -0
- package/framework/skills/level-1-workflows/morph-phase-implement/prompts/implementer-prompt.md +45 -0
- package/framework/skills/level-1-workflows/morph-phase-implement/prompts/spec-reviewer-prompt.md +47 -0
- package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +254 -0
- package/framework/skills/level-1-workflows/{phase-setup → morph-phase-setup}/SKILL.md +50 -3
- package/framework/skills/level-1-workflows/{phase-tasks → morph-phase-tasks}/SKILL.md +48 -11
- package/framework/skills/level-1-workflows/{phase-tasks → morph-phase-tasks}/scripts/validate-tasks.mjs +3 -3
- package/framework/skills/level-1-workflows/{phase-uiux → morph-phase-uiux}/SKILL.md +46 -11
- package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +97 -0
- package/framework/standards/STANDARDS.json +640 -88
- package/framework/standards/infrastructure/vercel/vercel-database.md +106 -0
- package/framework/standards/integration/mcp/mcp-tools.md +25 -7
- package/framework/templates/REGISTRY.json +1825 -1909
- package/framework/templates/context/CONTEXT-FEATURE.md +276 -276
- package/framework/templates/docs/onboarding.md +3 -7
- package/package.json +2 -7
- package/src/commands/agents/dispatch-agents.js +104 -6
- package/src/commands/mcp/mcp-setup.js +39 -2
- package/src/commands/phase/phase-reset.js +74 -0
- package/src/commands/project/doctor.js +34 -51
- package/src/commands/project/init.js +1 -1
- package/src/commands/project/status.js +2 -2
- package/src/commands/project/update.js +381 -365
- package/src/commands/project/worktree.js +154 -0
- package/src/commands/scope/escalate.js +215 -0
- package/src/commands/state/advance-phase.js +132 -68
- package/src/commands/state/approve.js +2 -2
- package/src/commands/state/index.js +7 -8
- package/src/commands/state/phase-runner.js +1 -1
- package/src/commands/state/state.js +61 -6
- package/src/commands/task/expand.js +100 -0
- package/src/commands/tasks/task.js +78 -99
- package/src/commands/templates/template-render.js +93 -173
- package/src/commands/trust/trust.js +26 -21
- package/src/core/paths/output-schema.js +19 -3
- package/src/core/state/phase-state-machine.js +7 -4
- package/src/core/state/state-manager.js +32 -57
- package/src/core/workflows/workflow-detector.js +9 -87
- package/src/lib/detectors/claude-config-detector.js +93 -347
- package/src/lib/detectors/design-system-detector.js +189 -189
- package/src/lib/detectors/index.js +155 -57
- package/src/lib/generators/context-generator.js +2 -2
- package/src/lib/installers/mcp-installer.js +37 -5
- package/src/lib/phase-chain/phase-validator.js +336 -0
- package/src/lib/scope/impact-analyzer.js +106 -0
- package/src/lib/stack/stack-profile.js +88 -0
- package/src/lib/tasks/task-classifier.js +16 -0
- package/src/lib/tasks/task-parser.js +1 -1
- package/src/lib/tasks/test-runner.js +77 -0
- package/src/lib/trust/trust-manager.js +32 -144
- package/src/lib/validators/shared/emit-validator-dispatch.js +64 -0
- package/src/lib/validators/spec-validator.js +58 -4
- package/src/lib/validators/validation-runner.js +23 -11
- package/src/scripts/setup-infra.js +255 -224
- package/src/utils/agents-installer.js +34 -14
- package/src/utils/banner.js +1 -1
- package/src/utils/claude-settings-manager.js +1 -1
- package/src/utils/file-copier.js +1 -1
- package/src/utils/hooks-installer.js +272 -8
- package/framework/hooks/dev/check-sync-health.js +0 -117
- package/framework/hooks/dev/guard-version-numbers.js +0 -57
- package/framework/hooks/dev/sync-standards-registry.js +0 -60
- package/framework/hooks/dev/sync-template-registry.js +0 -60
- package/framework/hooks/dev/validate-skill-format.js +0 -70
- package/framework/hooks/dev/validate-standard-format.js +0 -73
- package/framework/skills/level-1-workflows/phase-clarify/SKILL.md +0 -190
- package/framework/skills/level-1-workflows/phase-design/SKILL.md +0 -366
- package/framework/templates/meta-prompts/hops/hop-retry.md +0 -78
- package/framework/templates/meta-prompts/hops/hop-validation.md +0 -97
- package/framework/templates/meta-prompts/hops/hop-wrapper.md +0 -36
- package/framework/workflows/configs/design-impl.json +0 -49
- package/framework/workflows/configs/express.json +0 -45
- package/framework/workflows/configs/fast-track.json +0 -42
- package/framework/workflows/configs/full-morph.json +0 -79
- package/framework/workflows/configs/fusion.json +0 -39
- package/framework/workflows/configs/long-running.json +0 -33
- package/framework/workflows/configs/spec-only.json +0 -43
- package/framework/workflows/configs/ui-refresh.json +0 -49
- package/framework/workflows/configs/zero-touch.json +0 -82
- package/src/commands/project/index.js +0 -8
- package/src/commands/project/monitor.js +0 -295
- package/src/commands/project/tutorial.js +0 -115
- package/src/commands/state/validate-phase.js +0 -238
- package/src/commands/templates/generate-contracts.js +0 -445
- package/src/core/index.js +0 -10
- package/src/core/orchestrator.js +0 -171
- package/src/core/registry/command-registry.js +0 -28
- package/src/core/registry/index.js +0 -8
- package/src/core/registry/validator-registry.js +0 -204
- package/src/core/state/index.js +0 -8
- package/src/core/templates/index.js +0 -9
- package/src/core/templates/template-data-sources.js +0 -325
- package/src/core/templates/template-validator.js +0 -296
- package/src/core/workflows/index.js +0 -7
- package/src/generator/config-generator.js +0 -206
- package/src/generator/templates/config.json.template +0 -40
- package/src/generator/templates/project.md.template +0 -67
- package/src/lib/agents/micro-agent-factory.js +0 -161
- package/src/lib/analysis/complexity-analyzer.js +0 -441
- package/src/lib/analysis/index.js +0 -7
- package/src/lib/analytics/analytics-engine.js +0 -345
- package/src/lib/checkpoints/checkpoint-hooks.js +0 -298
- package/src/lib/checkpoints/index.js +0 -7
- package/src/lib/context/context-bundler.js +0 -241
- package/src/lib/context/context-optimizer.js +0 -212
- package/src/lib/context/context-tracker.js +0 -273
- package/src/lib/context/core-four-tracker.js +0 -201
- package/src/lib/context/mcp-optimizer.js +0 -200
- package/src/lib/detectors/config-detector.js +0 -223
- package/src/lib/detectors/standards-generator.js +0 -335
- package/src/lib/detectors/structure-detector.js +0 -275
- package/src/lib/execution/fusion-executor.js +0 -304
- package/src/lib/execution/parallel-executor.js +0 -270
- package/src/lib/hooks/stop-hook-executor.js +0 -286
- package/src/lib/hops/hop-composer.js +0 -221
- package/src/lib/monitor/agent-resolver.js +0 -144
- package/src/lib/monitor/renderer.js +0 -230
- package/src/lib/orchestration/index.js +0 -7
- package/src/lib/orchestration/team-orchestrator.js +0 -404
- package/src/lib/phase-chain/eligibility-checker.js +0 -243
- package/src/lib/threads/thread-coordinator.js +0 -238
- package/src/lib/threads/thread-manager.js +0 -317
- package/src/lib/tracking/artifact-trail.js +0 -202
- package/src/sanitizer/context-sanitizer.js +0 -221
- package/src/sanitizer/patterns.js +0 -163
- package/src/scanner/project-scanner.js +0 -242
- package/src/ui/diff-display.js +0 -91
- package/src/ui/interactive-wizard.js +0 -96
- package/src/ui/user-review.js +0 -211
- package/src/ui/wizard-questions.js +0 -188
- package/src/utils/color-utils.js +0 -70
- package/src/utils/process-handler.js +0 -97
- package/src/writer/file-writer.js +0 -86
- /package/framework/skills/level-0-meta/{brainstorming → morph-brainstorming}/references/proposal-example.md +0 -0
- /package/framework/skills/level-0-meta/{code-review → morph-code-review}/references/review-example.md +0 -0
- /package/framework/skills/level-0-meta/{code-review → morph-code-review}/references/review-guidelines.md +0 -0
- /package/framework/skills/level-0-meta/{code-review → morph-code-review}/scripts/scan-csharp.mjs +0 -0
- /package/framework/skills/level-0-meta/{code-review-nextjs → morph-code-review-nextjs}/references/review-example-nextjs.md +0 -0
- /package/framework/skills/level-0-meta/{code-review-nextjs → morph-code-review-nextjs}/scripts/scan-nextjs.mjs +0 -0
- /package/framework/skills/level-0-meta/{frontend-review → morph-frontend-review}/scripts/scan-accessibility.mjs +0 -0
- /package/framework/skills/level-0-meta/{post-implementation → morph-post-implementation}/scripts/detect-dev-server.mjs +0 -0
- /package/framework/skills/level-0-meta/{post-implementation → morph-post-implementation}/scripts/detect-stack.mjs +0 -0
- /package/framework/skills/level-0-meta/{terminal-title → morph-terminal-title}/scripts/set_title.sh +0 -0
- /package/framework/skills/level-1-workflows/{phase-clarify → morph-phase-clarify}/references/clarifications-example.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-design → morph-phase-design}/references/architecture-analysis-guide.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-design → morph-phase-design}/references/spec-authoring-guide.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-design → morph-phase-design}/references/spec-example.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-implement → morph-phase-implement}/references/recap-example.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-implement → morph-phase-implement}/references/vsa-implementation-guide.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-tasks → morph-phase-tasks}/references/task-planning-patterns.md +0 -0
- /package/framework/skills/level-1-workflows/{phase-tasks → morph-phase-tasks}/references/tasks-example.md +0 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Vercel Deployment — Database Standard
|
|
2
|
+
|
|
3
|
+
> **Scope:** nextjs-vercel
|
|
4
|
+
> **Layer:** 1 (always-on for Vercel-deployed Next.js)
|
|
5
|
+
> **Keywords:** vercel, neon, planetscale, serverless database, serverless postgres, deploy nextjs
|
|
6
|
+
> **Load When:** deployment target is Vercel with Next.js stack
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Rule: Vercel Requires a Serverless Database
|
|
11
|
+
|
|
12
|
+
**NEVER** use a traditional long-lived database connection pool (PostgreSQL TCP, MySQL TCP) with Vercel.
|
|
13
|
+
Vercel functions are ephemeral and stateless — each invocation may spawn a fresh process.
|
|
14
|
+
A persistent connection pool (e.g., EF Core + plain Npgsql TCP) will exhaust database connection limits within minutes under moderate load.
|
|
15
|
+
|
|
16
|
+
**ALWAYS** use a **serverless-compatible** database when deploying to Vercel.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Approved Serverless Databases
|
|
21
|
+
|
|
22
|
+
| Provider | Type | Connection mode | Notes |
|
|
23
|
+
|----------|------|-----------------|-------|
|
|
24
|
+
| **Neon** | PostgreSQL (serverless) | HTTP (`@neondatabase/serverless`) or pooled TCP via PgBouncer | First choice for SQL |
|
|
25
|
+
| **PlanetScale** | MySQL-compatible (serverless) | HTTP driver (`@planetscale/database`) | Good for MySQL ecosystems |
|
|
26
|
+
| **Supabase** | PostgreSQL + PgBouncer | Pooled TCP (transaction mode) or REST | Full BaaS option |
|
|
27
|
+
| **Turso** | SQLite (distributed) | HTTP (`@libsql/client`) | Lightweight, edge-friendly |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Implementation: Neon (Recommended)
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
// lib/db.ts
|
|
35
|
+
import { neon } from '@neondatabase/serverless';
|
|
36
|
+
|
|
37
|
+
const sql = neon(process.env.DATABASE_URL!);
|
|
38
|
+
export default sql;
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
// Example: API Route (app/api/items/route.ts)
|
|
43
|
+
import sql from '@/lib/db';
|
|
44
|
+
|
|
45
|
+
export async function GET() {
|
|
46
|
+
const items = await sql`SELECT * FROM items LIMIT 50`;
|
|
47
|
+
return Response.json(items);
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Environment variable
|
|
52
|
+
```
|
|
53
|
+
DATABASE_URL=postgresql://user:pass@ep-xxx.neon.tech/dbname?sslmode=require
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Implementation: Supabase + PgBouncer (Transaction Mode)
|
|
59
|
+
|
|
60
|
+
Use the **port 6543** connection string (PgBouncer, transaction pooling):
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
DATABASE_URL=postgresql://user:pass@db.xxx.supabase.co:6543/postgres?pgbouncer=true&connection_limit=1
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
If using an ORM (Prisma/Drizzle), set `connection_limit=1` to avoid pool saturation.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Anti-patterns — NEVER use with Vercel
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
// WRONG: plain Npgsql/pg pool without serverless adapter
|
|
74
|
+
import { Pool } from 'pg';
|
|
75
|
+
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
|
|
76
|
+
// → Leaks connections on every cold start
|
|
77
|
+
|
|
78
|
+
// WRONG: EF Core (dotnet) TCP pool behind a Vercel-deployed Next.js API route
|
|
79
|
+
// → Not applicable (EF Core is .NET), but calling a .NET API that pools
|
|
80
|
+
// connections is fine as long as the .NET side runs on a persistent server
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Decision Tree: Choose Your DB Tier
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
Deploying to Vercel?
|
|
89
|
+
└── YES → Use serverless DB
|
|
90
|
+
├── Need SQL + PostGIS/pgvector? → Neon
|
|
91
|
+
├── Need full BaaS (auth, storage, RLS)? → Supabase
|
|
92
|
+
├── MySQL ecosystem? → PlanetScale
|
|
93
|
+
└── Edge-only, lightweight? → Turso
|
|
94
|
+
└── NO (EasyPanel, Railway, Render, Azure Container Apps)
|
|
95
|
+
└── Any PostgreSQL with connection pool is fine
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Validator Check (design phase)
|
|
101
|
+
|
|
102
|
+
During `phase-design`, the standards agent must verify:
|
|
103
|
+
|
|
104
|
+
- `config.deployment.target === 'vercel'` → enforce serverless DB selection
|
|
105
|
+
- If `database.provider` is missing or is `postgresql-tcp`, flag as **BLOCKING** issue
|
|
106
|
+
- Add to `decisions.md`: "Database must be serverless-compatible (Vercel constraint)"
|
|
@@ -49,15 +49,10 @@ const repo = await mcp__github__get_repo();
|
|
|
49
49
|
|
|
50
50
|
| MCP | Use Case | Example |
|
|
51
51
|
|-----|----------|---------|
|
|
52
|
-
| **Figma** | Extract design tokens, components | `mcp__figma__get_file({ fileKey })` |
|
|
53
52
|
| **Playwright** | Navigate, screenshot, inspect live pages | `mcp__playwright__browser_navigate({ url })` |
|
|
54
53
|
| **Context7** | Component library documentation | `mcp__context7__query_docs({ libraryId, query })` |
|
|
55
54
|
|
|
56
55
|
```javascript
|
|
57
|
-
// Get design tokens from Figma
|
|
58
|
-
const file = await mcp__figma__get_file({ fileKey: "abc123" });
|
|
59
|
-
// → colors, typography, spacing from design file
|
|
60
|
-
|
|
61
56
|
// Screenshot existing app for design reference
|
|
62
57
|
await mcp__playwright__browser_navigate({ url: "https://app.example.com/dashboard" });
|
|
63
58
|
const screenshot = await mcp__playwright__browser_take_screenshot();
|
|
@@ -180,6 +175,7 @@ for (const task of tasks) {
|
|
|
180
175
|
| **GitHub** | Create PR, push branches | `mcp__github__create_pull_request()` |
|
|
181
176
|
| **Context7** | Look up API usage during coding | `mcp__context7__query_docs()` |
|
|
182
177
|
| **Playwright** | Smoke test deployed features, verify UI | `mcp__playwright__browser_navigate()` |
|
|
178
|
+
| **Vercel** | Deploy, check logs, manage env vars | `mcp__vercel__list_projects()` |
|
|
183
179
|
| **Azure** | Provision resources, check deployment status | Provider-specific |
|
|
184
180
|
| **Docker** | Build images, manage containers | Provider-specific |
|
|
185
181
|
|
|
@@ -214,7 +210,25 @@ const logs = await mcp__playwright__browser_console_messages();
|
|
|
214
210
|
// Screenshot for recap.md documentation
|
|
215
211
|
const screenshot = await mcp__playwright__browser_take_screenshot();
|
|
216
212
|
|
|
217
|
-
//
|
|
213
|
+
// === VERCEL (Deployment & Environment) ===
|
|
214
|
+
|
|
215
|
+
// List projects
|
|
216
|
+
const projects = await mcp__vercel__list_projects();
|
|
217
|
+
|
|
218
|
+
// Check deployment status and logs
|
|
219
|
+
const deployments = await mcp__vercel__get_deployments({ projectId: 'my-project' });
|
|
220
|
+
const logs = await mcp__vercel__get_deployment_logs({ deploymentId: deployments[0].uid });
|
|
221
|
+
|
|
222
|
+
// Manage environment variables
|
|
223
|
+
await mcp__vercel__manage_env_vars({
|
|
224
|
+
projectId: 'my-project',
|
|
225
|
+
action: 'set',
|
|
226
|
+
key: 'DATABASE_URL',
|
|
227
|
+
value: process.env.DATABASE_URL,
|
|
228
|
+
target: ['production', 'preview']
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
// Fallback: Bash for migrations, gh CLI for PRs, vercel CLI for deployments
|
|
218
232
|
```
|
|
219
233
|
|
|
220
234
|
---
|
|
@@ -225,7 +239,6 @@ const screenshot = await mcp__playwright__browser_take_screenshot();
|
|
|
225
239
|
|------|----------|--------------------|
|
|
226
240
|
| Database schema | Supabase/DB MCP | Grep queries + Read types |
|
|
227
241
|
| Repo metadata | GitHub MCP | Bash `gh` CLI |
|
|
228
|
-
| Design tokens | Figma MCP | Read CSS/SCSS variables |
|
|
229
242
|
| Library docs | Context7 | WebSearch + WebFetch |
|
|
230
243
|
| Live page preview | Playwright MCP | WebFetch URL |
|
|
231
244
|
| Page interaction (click, type, navigate) | Playwright MCP | Manual testing |
|
|
@@ -233,6 +246,7 @@ const screenshot = await mcp__playwright__browser_take_screenshot();
|
|
|
233
246
|
| Console error checking | Playwright MCP (`browser_console_messages`) | Browser DevTools |
|
|
234
247
|
| Container ops | Docker MCP | Bash `docker` CLI |
|
|
235
248
|
| Cloud resources | Azure MCP | Bash `az` CLI |
|
|
249
|
+
| Vercel deployments | Vercel MCP | Bash `vercel` CLI |
|
|
236
250
|
|
|
237
251
|
**Rule:** MCP tools provide structured data (JSON responses). Native tools require manual parsing. **Always prefer MCP when available** — fall back to native when not.
|
|
238
252
|
|
|
@@ -332,6 +346,8 @@ await mcp__playwright__browser_file_upload({ ref: "s1e20", paths: ["/path/to/fil
|
|
|
332
346
|
|
|
333
347
|
### Supabase: Full Schema Discovery
|
|
334
348
|
|
|
349
|
+
> **v4 config:** Remote OAuth — `{ "type": "http", "url": "https://mcp.supabase.com/mcp" }`. Authenticate via `/mcp` in Claude Code.
|
|
350
|
+
|
|
335
351
|
```javascript
|
|
336
352
|
// Complete workflow for Phase 2 schema analysis
|
|
337
353
|
const tables = await mcp__supabase__list_tables();
|
|
@@ -362,6 +378,8 @@ const docs = await mcp__context7__query_docs({
|
|
|
362
378
|
|
|
363
379
|
### GitHub: Code Search Across Repo
|
|
364
380
|
|
|
381
|
+
> **v4 config:** Docker — `{ "command": "docker", "args": ["run", "-i", "--rm", "-e", "GITHUB_PERSONAL_ACCESS_TOKEN", "ghcr.io/github/github-mcp-server"] }`. Requires Docker Desktop.
|
|
382
|
+
|
|
365
383
|
```javascript
|
|
366
384
|
// Find patterns in large codebase during Phase 2
|
|
367
385
|
const results = await mcp__github__search_code({
|