@polymorphism-tech/morph-spec 4.9.0 → 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/README.md +2 -2
- package/bin/morph-spec.js +30 -0
- package/bin/task-manager.js +34 -22
- package/claude-plugin.json +1 -1
- package/docs/CHEATSHEET.md +1 -1
- package/docs/QUICKSTART.md +1 -1
- package/framework/CLAUDE.md +99 -98
- package/framework/agents.json +37 -7
- 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/dispatch.js +154 -31
- package/framework/hooks/claude-code/post-tool-use/skill-reminder.js +7 -84
- 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 +3 -2
- 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 +55 -2
- package/framework/hooks/claude-code/session-start/post-compact-restore.js +41 -0
- 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/shared/compact-restore.js +100 -0
- package/framework/hooks/shared/dispatch-helpers.js +116 -0
- package/framework/hooks/shared/phase-utils.js +9 -5
- package/framework/hooks/shared/state-reader.js +27 -3
- package/framework/phases.json +30 -7
- 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 +13 -16
- package/framework/skills/level-0-meta/{code-review → morph-code-review}/SKILL.md +1 -1
- package/framework/skills/level-0-meta/{code-review-nextjs → morph-code-review-nextjs}/SKILL.md +2 -2
- package/framework/skills/level-0-meta/{frontend-review → morph-frontend-review}/SKILL.md +5 -5
- package/framework/skills/level-0-meta/morph-init/SKILL.md +72 -7
- package/framework/skills/level-0-meta/{post-implementation → morph-post-implementation}/SKILL.md +9 -9
- package/framework/skills/level-0-meta/morph-replicate/SKILL.md +1 -1
- package/framework/skills/level-0-meta/{terminal-title → morph-terminal-title}/SKILL.md +1 -1
- package/framework/skills/level-0-meta/{tool-usage-guide → morph-tool-usage-guide}/SKILL.md +2 -3
- package/framework/skills/level-0-meta/{tool-usage-guide → morph-tool-usage-guide}/references/tools-per-phase.md +1 -2
- package/framework/skills/level-0-meta/{verification-before-completion → morph-verification-before-completion}/SKILL.md +1 -1
- 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 +251 -251
- 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 +590 -491
- 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 +237 -194
- package/framework/skills/level-1-workflows/{phase-tasks → morph-phase-tasks}/SKILL.md +307 -270
- 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 +320 -285
- package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +97 -0
- package/framework/standards/integration/mcp/mcp-tools.md +25 -7
- package/framework/templates/docs/onboarding.md +2 -2
- package/package.json +1 -2
- package/src/commands/agents/dispatch-agents.js +50 -3
- package/src/commands/mcp/mcp-setup.js +39 -2
- package/src/commands/phase/phase-reset.js +74 -0
- package/src/commands/project/doctor.js +19 -5
- package/src/commands/scope/escalate.js +215 -0
- package/src/commands/state/advance-phase.js +27 -53
- package/src/commands/state/state.js +1 -1
- package/src/commands/task/expand.js +100 -0
- package/src/core/paths/output-schema.js +4 -3
- package/src/core/state/phase-state-machine.js +7 -4
- package/src/core/state/state-manager.js +4 -3
- 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 +22 -16
- package/src/lib/scope/impact-analyzer.js +106 -0
- package/src/lib/tasks/task-parser.js +1 -1
- package/src/lib/validators/shared/emit-validator-dispatch.js +64 -0
- package/src/scripts/setup-infra.js +15 -0
- package/src/utils/agents-installer.js +32 -12
- package/src/utils/file-copier.js +0 -1
- package/src/utils/hooks-installer.js +15 -1
- package/framework/skills/level-1-workflows/phase-clarify/SKILL.md +0 -216
- package/framework/skills/level-1-workflows/phase-design/SKILL.md +0 -383
- package/src/commands/project/index.js +0 -8
- package/src/core/index.js +0 -10
- 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/workflows/index.js +0 -7
- 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/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/sanitizer/context-sanitizer.js +0 -221
- package/src/sanitizer/patterns.js +0 -163
- 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/{simulation-checklist → morph-simulation-checklist}/SKILL.md +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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "
|
|
2
|
+
"version": "4.0.0",
|
|
3
3
|
"description": "Centralized MCP registry with phase relevance and install configuration for morph-spec workflows",
|
|
4
4
|
"mcps": {
|
|
5
5
|
"context7": {
|
|
@@ -8,8 +8,16 @@
|
|
|
8
8
|
"detection": "enabledPlugins includes context7 or mcpServers includes context7",
|
|
9
9
|
"fallback": "WebSearch + WebFetch for library documentation",
|
|
10
10
|
"usage": "Library documentation lookups, API reference, implementation patterns",
|
|
11
|
+
"healthCheck": {
|
|
12
|
+
"toolPattern": "context7",
|
|
13
|
+
"testCall": "Call resolve-library-id with libraryName 'react' and query 'react hooks'",
|
|
14
|
+
"testParams": { "libraryName": "react", "query": "react hooks" },
|
|
15
|
+
"successIndicator": "Returns a library ID (e.g., /facebook/react)",
|
|
16
|
+
"failureHint": "Context7 MCP not responding. Check that @upstash/context7-mcp is installed and the MCP server is running. Try restarting Claude Code."
|
|
17
|
+
},
|
|
11
18
|
"install": {
|
|
12
19
|
"autoInstall": true,
|
|
20
|
+
"transport": "stdio",
|
|
13
21
|
"config": {
|
|
14
22
|
"command": "cmd",
|
|
15
23
|
"args": ["/c", "npx", "-y", "@upstash/context7-mcp@latest"]
|
|
@@ -27,8 +35,16 @@
|
|
|
27
35
|
"detection": "mcpServers includes playwright",
|
|
28
36
|
"fallback": "WebFetch for read-only page content, manual testing",
|
|
29
37
|
"usage": "UI preview, smoke testing, page inspection, responsive testing, screenshot capture",
|
|
38
|
+
"healthCheck": {
|
|
39
|
+
"toolPattern": "playwright",
|
|
40
|
+
"testCall": "Call browser_navigate with url 'about:blank'",
|
|
41
|
+
"testParams": { "url": "about:blank" },
|
|
42
|
+
"successIndicator": "Page navigates successfully (no error thrown)",
|
|
43
|
+
"failureHint": "Playwright MCP not responding. Ensure @playwright/mcp is installed and browser binaries are available. Run 'npx playwright install' if needed."
|
|
44
|
+
},
|
|
30
45
|
"install": {
|
|
31
46
|
"autoInstall": true,
|
|
47
|
+
"transport": "stdio",
|
|
32
48
|
"config": {
|
|
33
49
|
"command": "cmd",
|
|
34
50
|
"args": ["/c", "npx", "-y", "@playwright/mcp@latest"]
|
|
@@ -46,34 +62,25 @@
|
|
|
46
62
|
"detection": "mcpServers includes supabase",
|
|
47
63
|
"fallback": "Grep query files + Read type definitions for schema inference",
|
|
48
64
|
"usage": "Schema analysis, migrations, RLS policies, data operations",
|
|
65
|
+
"healthCheck": {
|
|
66
|
+
"toolPattern": "supabase",
|
|
67
|
+
"testCall": "Call list_tables with no parameters",
|
|
68
|
+
"testParams": {},
|
|
69
|
+
"successIndicator": "Returns a list of tables (even if empty)",
|
|
70
|
+
"failureHint": "Supabase MCP not responding. If using remote mode, re-authenticate via /mcp in Claude Code. If using local mode, verify SUPABASE_URL and SUPABASE_SERVICE_ROLE_KEY in .claude/settings.local.json."
|
|
71
|
+
},
|
|
49
72
|
"install": {
|
|
50
73
|
"autoInstall": false,
|
|
74
|
+
"transport": "http",
|
|
51
75
|
"config": {
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"env": {
|
|
55
|
-
"SUPABASE_URL": "",
|
|
56
|
-
"SUPABASE_SERVICE_ROLE_KEY": ""
|
|
57
|
-
}
|
|
76
|
+
"type": "http",
|
|
77
|
+
"url": "https://mcp.supabase.com/mcp"
|
|
58
78
|
},
|
|
59
|
-
"credentials": [
|
|
60
|
-
{
|
|
61
|
-
"name": "Supabase Project URL",
|
|
62
|
-
"envVar": "SUPABASE_URL",
|
|
63
|
-
"secret": false,
|
|
64
|
-
"helpUrl": "https://supabase.com/dashboard/project/_/settings/api"
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
"name": "Service Role Key",
|
|
68
|
-
"envVar": "SUPABASE_SERVICE_ROLE_KEY",
|
|
69
|
-
"secret": true,
|
|
70
|
-
"helpUrl": "https://supabase.com/dashboard/project/_/settings/api"
|
|
71
|
-
}
|
|
72
|
-
],
|
|
79
|
+
"credentials": [],
|
|
73
80
|
"prerequisites": [],
|
|
74
81
|
"stackRelevance": ["nextjs-supabase", "supabase", "nextjs"],
|
|
75
|
-
"warnings": ["NEVER connect to PRODUCTION databases. Use local/dev environment only."],
|
|
76
|
-
"setupGuide":
|
|
82
|
+
"warnings": ["Uses OAuth — you will be prompted to authenticate via browser when first connecting.", "NEVER connect to PRODUCTION databases. Use local/dev environment only."],
|
|
83
|
+
"setupGuide": "Run: claude mcp add --transport http supabase https://mcp.supabase.com/mcp"
|
|
77
84
|
}
|
|
78
85
|
},
|
|
79
86
|
"github": {
|
|
@@ -82,11 +89,19 @@
|
|
|
82
89
|
"detection": "mcpServers includes github",
|
|
83
90
|
"fallback": "Bash `gh` CLI commands",
|
|
84
91
|
"usage": "Repo metadata, code search, issue creation, PR management",
|
|
92
|
+
"healthCheck": {
|
|
93
|
+
"toolPattern": "github",
|
|
94
|
+
"testCall": "Call any read-only GitHub tool (e.g., search_repositories or get_repo) to verify connectivity",
|
|
95
|
+
"testParams": {},
|
|
96
|
+
"successIndicator": "Returns repository data or search results without auth errors",
|
|
97
|
+
"failureHint": "GitHub MCP not responding. If using Docker, ensure Docker Desktop is running. Verify GITHUB_PERSONAL_ACCESS_TOKEN env var is set. Ensure the token has not expired and has the required scopes (repo, read:org)."
|
|
98
|
+
},
|
|
85
99
|
"install": {
|
|
86
100
|
"autoInstall": false,
|
|
101
|
+
"transport": "stdio",
|
|
87
102
|
"config": {
|
|
88
|
-
"command": "
|
|
89
|
-
"args": ["
|
|
103
|
+
"command": "docker",
|
|
104
|
+
"args": ["run", "-i", "--rm", "-e", "GITHUB_PERSONAL_ACCESS_TOKEN", "ghcr.io/github/github-mcp-server"],
|
|
90
105
|
"env": {
|
|
91
106
|
"GITHUB_PERSONAL_ACCESS_TOKEN": ""
|
|
92
107
|
}
|
|
@@ -99,39 +114,43 @@
|
|
|
99
114
|
"helpUrl": "https://github.com/settings/tokens"
|
|
100
115
|
}
|
|
101
116
|
],
|
|
102
|
-
"prerequisites": [
|
|
117
|
+
"prerequisites": [
|
|
118
|
+
{
|
|
119
|
+
"name": "Docker",
|
|
120
|
+
"checkCommand": "docker --version",
|
|
121
|
+
"installUrl": "https://docs.docker.com/get-docker/"
|
|
122
|
+
}
|
|
123
|
+
],
|
|
103
124
|
"stackRelevance": ["*"],
|
|
104
125
|
"warnings": [],
|
|
105
|
-
"setupGuide":
|
|
126
|
+
"setupGuide": "Official GitHub MCP Server (github/github-mcp-server). Requires Docker."
|
|
106
127
|
}
|
|
107
128
|
},
|
|
108
|
-
"
|
|
109
|
-
"phases": ["
|
|
110
|
-
"tools": ["
|
|
111
|
-
"detection": "mcpServers includes
|
|
112
|
-
"fallback": "
|
|
113
|
-
"usage": "
|
|
129
|
+
"vercel": {
|
|
130
|
+
"phases": ["implement"],
|
|
131
|
+
"tools": ["search_docs", "list_projects", "get_deployments", "get_deployment_logs", "manage_env_vars"],
|
|
132
|
+
"detection": "mcpServers includes vercel",
|
|
133
|
+
"fallback": "Bash `vercel` CLI commands",
|
|
134
|
+
"usage": "Deployment monitoring, project management, environment variables, log analysis",
|
|
135
|
+
"healthCheck": {
|
|
136
|
+
"toolPattern": "vercel",
|
|
137
|
+
"testCall": "Call search_docs with a query to verify connectivity",
|
|
138
|
+
"testParams": { "query": "deployments" },
|
|
139
|
+
"successIndicator": "Returns documentation search results without auth errors",
|
|
140
|
+
"failureHint": "Vercel MCP not responding. Re-authenticate via /mcp in Claude Code. Ensure you have authorized the Vercel OAuth connection."
|
|
141
|
+
},
|
|
114
142
|
"install": {
|
|
115
143
|
"autoInstall": false,
|
|
144
|
+
"transport": "http",
|
|
116
145
|
"config": {
|
|
117
|
-
"
|
|
118
|
-
"
|
|
119
|
-
"env": {
|
|
120
|
-
"FIGMA_ACCESS_TOKEN": ""
|
|
121
|
-
}
|
|
146
|
+
"type": "http",
|
|
147
|
+
"url": "https://mcp.vercel.com"
|
|
122
148
|
},
|
|
123
|
-
"credentials": [
|
|
124
|
-
{
|
|
125
|
-
"name": "Figma Access Token",
|
|
126
|
-
"envVar": "FIGMA_ACCESS_TOKEN",
|
|
127
|
-
"secret": true,
|
|
128
|
-
"helpUrl": "https://www.figma.com/developers/api#access-tokens"
|
|
129
|
-
}
|
|
130
|
-
],
|
|
149
|
+
"credentials": [],
|
|
131
150
|
"prerequisites": [],
|
|
132
|
-
"stackRelevance": ["
|
|
133
|
-
"warnings": [],
|
|
134
|
-
"setupGuide":
|
|
151
|
+
"stackRelevance": ["nextjs", "nextjs-supabase", "vercel"],
|
|
152
|
+
"warnings": ["Uses OAuth — you will be prompted to authenticate via browser when first connecting."],
|
|
153
|
+
"setupGuide": "Run: claude mcp add --transport http vercel https://mcp.vercel.com"
|
|
135
154
|
}
|
|
136
155
|
},
|
|
137
156
|
"docker": {
|
|
@@ -140,8 +159,16 @@
|
|
|
140
159
|
"detection": "mcpServers includes docker",
|
|
141
160
|
"fallback": "Bash `docker` CLI commands",
|
|
142
161
|
"usage": "Container management, build and run containers",
|
|
162
|
+
"healthCheck": {
|
|
163
|
+
"toolPattern": "docker",
|
|
164
|
+
"testCall": "Call any read-only Docker tool to verify Docker daemon connectivity",
|
|
165
|
+
"testParams": {},
|
|
166
|
+
"successIndicator": "Tool responds without connection errors (Docker daemon is reachable)",
|
|
167
|
+
"failureHint": "Docker MCP not responding. Ensure Docker Desktop is running and the Docker daemon is accessible. Run 'docker info' to verify."
|
|
168
|
+
},
|
|
143
169
|
"install": {
|
|
144
170
|
"autoInstall": false,
|
|
171
|
+
"transport": "stdio",
|
|
145
172
|
"config": {
|
|
146
173
|
"command": "cmd",
|
|
147
174
|
"args": ["/c", "npx", "-y", "@modelcontextprotocol/server-docker"]
|
|
@@ -165,8 +192,16 @@
|
|
|
165
192
|
"detection": "mcpServers includes azure",
|
|
166
193
|
"fallback": "Bash `az` CLI commands",
|
|
167
194
|
"usage": "Cloud resource management, deployment",
|
|
195
|
+
"healthCheck": {
|
|
196
|
+
"toolPattern": "azure",
|
|
197
|
+
"testCall": "Call any read-only Azure tool to verify credentials and connectivity",
|
|
198
|
+
"testParams": {},
|
|
199
|
+
"successIndicator": "Tool responds without authentication or subscription errors",
|
|
200
|
+
"failureHint": "Azure MCP not responding. Verify AZURE_SUBSCRIPTION_ID in .claude/settings.local.json and ensure 'az login' has been run. Check that Azure CLI is installed with 'az --version'."
|
|
201
|
+
},
|
|
168
202
|
"install": {
|
|
169
203
|
"autoInstall": false,
|
|
204
|
+
"transport": "stdio",
|
|
170
205
|
"config": {
|
|
171
206
|
"command": "cmd",
|
|
172
207
|
"args": ["/c", "npx", "-y", "@azure/mcp-server"],
|
|
@@ -198,10 +233,10 @@
|
|
|
198
233
|
"phaseMatrix": {
|
|
199
234
|
"proposal": ["context7"],
|
|
200
235
|
"setup": ["github"],
|
|
201
|
-
"uiux": ["playwright", "
|
|
236
|
+
"uiux": ["playwright", "context7"],
|
|
202
237
|
"design": ["supabase", "context7", "github"],
|
|
203
238
|
"clarify": ["context7", "github"],
|
|
204
239
|
"tasks": ["context7", "github"],
|
|
205
|
-
"implement": ["supabase", "context7", "playwright", "github", "docker", "azure"]
|
|
240
|
+
"implement": ["supabase", "context7", "playwright", "github", "vercel", "docker", "azure"]
|
|
206
241
|
}
|
|
207
242
|
}
|
|
@@ -53,26 +53,23 @@ Read: .morph/features/{feature}/0-proposal/proposal.md
|
|
|
53
53
|
|
|
54
54
|
### Step 2: Ask Clarifying Questions
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
Use `AskUserQuestion` to collect responses — **NEVER list questions as plain text**.
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
### Q2: Constraints
|
|
63
|
-
Are there performance/budget/timeline constraints?
|
|
58
|
+
- Máximo 4 perguntas por chamada. Se precisar de 5, faça 2 chamadas sequenciais (Q1-Q4 → Q5).
|
|
59
|
+
- Para cada pergunta, defina 2-4 opções representativas (o usuário pode usar "Other" para resposta livre).
|
|
60
|
+
- **Aguarde o retorno do tool antes de prosseguir para o Step 3.**
|
|
64
61
|
|
|
65
|
-
|
|
66
|
-
Does this need to integrate with existing features?
|
|
62
|
+
Perguntas-padrão a adaptar para o contexto da feature:
|
|
67
63
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
64
|
+
| Header (≤12 chars) | Pergunta | Opções sugeridas |
|
|
65
|
+
|--------------------|----------|------------------|
|
|
66
|
+
| `Escopo` | Qual é a versão mínima viável desta feature? | MVP básico / Versão completa / Em aberto |
|
|
67
|
+
| `Constraints` | Há restrições de performance, budget ou prazo? | Sem restrições / Performance crítica / Budget limitado |
|
|
68
|
+
| `Integração` | Precisa integrar com features ou sistemas existentes? | Sim, integra com X / Feature isolada / A definir |
|
|
69
|
+
| `Usuários` | Quem são os usuários primários? | End-users / Admins / Sistema interno |
|
|
70
|
+
| `Sucesso` | Como saberemos que a feature funciona corretamente? | Métricas definidas / Testes de aceitação / Feedback do usuário |
|
|
74
71
|
|
|
75
|
-
|
|
72
|
+
> Adapte as opções ao contexto real da feature — as acima são ponto de partida, não template fixo.
|
|
76
73
|
|
|
77
74
|
### Step 3: Generate 2-3 Approaches
|
|
78
75
|
|
|
@@ -26,7 +26,7 @@ git diff --name-only main...HEAD -- "*.cs" | wc -l
|
|
|
26
26
|
**Pular revisão se:**
|
|
27
27
|
- 0 arquivos `.cs` alterados → sem código backend para revisar
|
|
28
28
|
- Apenas mudanças em `*.json`, `*.csproj`, `*.md`, arquivos de migration → escopo de infra
|
|
29
|
-
- Já existe `.morph/features/$ARGUMENTS/
|
|
29
|
+
- Já existe `.morph/features/$ARGUMENTS/5-implement/code-review.md` criado hoje → já revisado
|
|
30
30
|
|
|
31
31
|
Se skip: output `"Skipping code-review: [motivo]"` e parar.
|
|
32
32
|
|
package/framework/skills/level-0-meta/{code-review-nextjs → morph-code-review-nextjs}/SKILL.md
RENAMED
|
@@ -17,7 +17,7 @@ allowed-tools: Read, Write, Edit, Bash, Glob, Grep
|
|
|
17
17
|
> **Ref:** `framework/standards/frontend/nextjs/testing.md`
|
|
18
18
|
> **Example:** `references/review-example-nextjs.md` — filled-in review showing expected finding format.
|
|
19
19
|
> **Script:** `scripts/scan-nextjs.mjs` — automated scan for CRITICAL/HIGH violations before manual review.
|
|
20
|
-
> **Ref:** `.claude/skills/code-review/references/review-guidelines.md` — false-positive rubric, confidence scoring, evidence format.
|
|
20
|
+
> **Ref:** `.claude/skills/morph-code-review/references/review-guidelines.md` — false-positive rubric, confidence scoring, evidence format.
|
|
21
21
|
|
|
22
22
|
---
|
|
23
23
|
|
|
@@ -30,7 +30,7 @@ git diff --name-only main...HEAD -- "*.tsx" "*.ts" | wc -l
|
|
|
30
30
|
**Pular revisão se:**
|
|
31
31
|
- 0 arquivos `.tsx`/`.ts` alterados → sem código frontend para revisar
|
|
32
32
|
- Apenas mudanças em `*.json`, `*.md`, arquivos de config → escopo de infra
|
|
33
|
-
- Já existe `.morph/features/$ARGUMENTS/
|
|
33
|
+
- Já existe `.morph/features/$ARGUMENTS/5-implement/code-review-nextjs.md` criado hoje → já revisado
|
|
34
34
|
|
|
35
35
|
Se skip: output `"Skipping code-review-nextjs: [motivo]"` e parar.
|
|
36
36
|
|
|
@@ -28,7 +28,7 @@ cliVersion: "4.8.19"
|
|
|
28
28
|
## Step 0 — Detectar Contexto e Stack
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
|
-
node .claude/skills/post-implementation/scripts/detect-stack.mjs
|
|
31
|
+
node .claude/skills/morph-post-implementation/scripts/detect-stack.mjs
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
Output JSON: `{ stack: "DOTNET" | "NEXTJS" | "FULLSTACK" | "UNKNOWN", frontendPath, backendPath, startCommand }`
|
|
@@ -79,7 +79,7 @@ contraste ≥ 4.5:1. Ferramentas de referência: WebAIM Contrast Checker (crité
|
|
|
79
79
|
## Step 2 — Scan Estático de Acessibilidade
|
|
80
80
|
|
|
81
81
|
```bash
|
|
82
|
-
node .claude/skills/morph
|
|
82
|
+
node .claude/skills/morph-frontend-review/scripts/scan-accessibility.mjs $frontendPath
|
|
83
83
|
```
|
|
84
84
|
|
|
85
85
|
O script detecta automaticamente a extensão dos arquivos para determinar Next.js (`.tsx`) vs
|
|
@@ -108,7 +108,7 @@ Corrija todos os CRITICALs antes de continuar. Para HIGH < 3, registre no resumo
|
|
|
108
108
|
### Se NEXTJS ou FULLSTACK:
|
|
109
109
|
|
|
110
110
|
```bash
|
|
111
|
-
node .claude/skills/code-review-nextjs/scripts/scan-nextjs.mjs $frontendPath
|
|
111
|
+
node .claude/skills/morph-code-review-nextjs/scripts/scan-nextjs.mjs $frontendPath
|
|
112
112
|
```
|
|
113
113
|
|
|
114
114
|
> Pular se já executado pelo `post-implementation` na mesma sessão.
|
|
@@ -138,7 +138,7 @@ Verificar manualmente as categorias principais do checklist para o feature imple
|
|
|
138
138
|
### 4a. Detectar Dev Server
|
|
139
139
|
|
|
140
140
|
```bash
|
|
141
|
-
node .claude/skills/post-implementation/scripts/detect-dev-server.mjs "$startCommand"
|
|
141
|
+
node .claude/skills/morph-post-implementation/scripts/detect-dev-server.mjs "$startCommand"
|
|
142
142
|
```
|
|
143
143
|
|
|
144
144
|
### 4b. Se dev server disponível (exit 0):
|
|
@@ -178,7 +178,7 @@ await mcp__playwright__browser_take_screenshot({
|
|
|
178
178
|
```
|
|
179
179
|
|
|
180
180
|
Screenshots salvos em: `.morph/features/$ARGUMENTS/visual-screenshots/`
|
|
181
|
-
(funciona tanto na fase `2-ui` quanto na `
|
|
181
|
+
(funciona tanto na fase `2-ui` quanto na `5-implement`)
|
|
182
182
|
|
|
183
183
|
### 4c. Se dev server NÃO disponível (exit 1):
|
|
184
184
|
|
|
@@ -236,17 +236,43 @@ Para criar um novo projeto VSA:
|
|
|
236
236
|
For each detected integration with an available MCP:
|
|
237
237
|
|
|
238
238
|
**Supabase detected:**
|
|
239
|
-
> *"Configure Supabase MCP
|
|
240
|
-
- YES →
|
|
239
|
+
> *"Configure Supabase MCP? Uses OAuth — no credentials needed."*
|
|
240
|
+
- YES → write remote config to `.claude/settings.local.json`:
|
|
241
|
+
```json
|
|
242
|
+
"supabase": { "type": "http", "url": "https://mcp.supabase.com/mcp" }
|
|
243
|
+
```
|
|
241
244
|
- NO → show snippet + `npx morph-spec mcp setup supabase`
|
|
242
245
|
|
|
243
246
|
**GitHub:**
|
|
244
|
-
> *"Configure GitHub MCP?
|
|
245
|
-
- YES
|
|
247
|
+
> *"Configure GitHub MCP? Requires Docker + a `GITHUB_PERSONAL_ACCESS_TOKEN`."*
|
|
248
|
+
- YES → collect token → write Docker config:
|
|
249
|
+
```json
|
|
250
|
+
"github": {
|
|
251
|
+
"command": "docker",
|
|
252
|
+
"args": ["run", "-i", "--rm", "-e", "GITHUB_PERSONAL_ACCESS_TOKEN", "ghcr.io/github/github-mcp-server"],
|
|
253
|
+
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "<token>" }
|
|
254
|
+
}
|
|
255
|
+
```
|
|
256
|
+
- NO → show snippet + `npx morph-spec mcp setup github`
|
|
246
257
|
|
|
247
|
-
|
|
258
|
+
**Vercel detected** (vercel.json exists OR stack is nextjs):
|
|
259
|
+
> *"Configure Vercel MCP? Uses OAuth — no credentials needed."*
|
|
260
|
+
- YES → write remote config:
|
|
261
|
+
```json
|
|
262
|
+
"vercel": { "type": "http", "url": "https://mcp.vercel.com" }
|
|
263
|
+
```
|
|
264
|
+
- NO → show snippet + `npx morph-spec mcp setup vercel`
|
|
265
|
+
|
|
266
|
+
Only offer Docker, Azure if explicitly detected in `.env.example`.
|
|
248
267
|
|
|
249
|
-
> **Format
|
|
268
|
+
> **Format rules for MCP configs:**
|
|
269
|
+
>
|
|
270
|
+
> **Remote MCPs** (Supabase, Vercel) — no credentials, OAuth-based:
|
|
271
|
+
> ```json
|
|
272
|
+
> "mcp-name": { "type": "http", "url": "https://mcp.example.com" }
|
|
273
|
+
> ```
|
|
274
|
+
>
|
|
275
|
+
> **Stdio MCPs** (Context7, Playwright) — local process with `cmd /c` on Windows:
|
|
250
276
|
> ```json
|
|
251
277
|
> "mcp-name": {
|
|
252
278
|
> "command": "cmd",
|
|
@@ -254,11 +280,50 @@ Only offer Figma, Docker, Azure if explicitly detected in `.env.example`.
|
|
|
254
280
|
> "env": { "KEY": "VALUE" }
|
|
255
281
|
> }
|
|
256
282
|
> ```
|
|
283
|
+
>
|
|
284
|
+
> **Docker MCPs** (GitHub) — Docker container:
|
|
285
|
+
> ```json
|
|
286
|
+
> "mcp-name": {
|
|
287
|
+
> "command": "docker",
|
|
288
|
+
> "args": ["run", "-i", "--rm", "-e", "TOKEN_VAR", "ghcr.io/org/image"],
|
|
289
|
+
> "env": { "TOKEN_VAR": "<value>" }
|
|
290
|
+
> }
|
|
291
|
+
> ```
|
|
292
|
+
>
|
|
257
293
|
> **Never** use `"command": "cmd /c"` (space-separated string) — that is invalid and will fail.
|
|
258
294
|
> **Never** use `"command": "npx"` directly — it also fails on Windows without `cmd`.
|
|
259
295
|
|
|
260
296
|
---
|
|
261
297
|
|
|
298
|
+
## Step 7.5 — Validate MCP Connections
|
|
299
|
+
|
|
300
|
+
For each MCP configured in Step 7, run a health check to verify it actually works.
|
|
301
|
+
|
|
302
|
+
**Read the registry:** `framework/skills/level-0-meta/mcp-registry.json` → for each configured MCP, get its `healthCheck` object.
|
|
303
|
+
|
|
304
|
+
**For each configured MCP:**
|
|
305
|
+
|
|
306
|
+
1. **Find available tool:** Search your available tools for one matching `healthCheck.toolPattern` (substring match — e.g., tool name contains "context7")
|
|
307
|
+
2. **If tool found → execute the test call:** Follow `healthCheck.testCall` using `healthCheck.testParams`
|
|
308
|
+
3. **Evaluate result:**
|
|
309
|
+
|
|
310
|
+
| Result | Action |
|
|
311
|
+
|--------|--------|
|
|
312
|
+
| **Success** (matches `healthCheck.successIndicator`) | Print `✓ {MCP} — connection verified` |
|
|
313
|
+
| **Tool not found** (no tool matching `toolPattern`) | Print `○ {MCP} — needs restart to activate` (MCP configured but tools not yet loaded) |
|
|
314
|
+
| **Error** (tool found but call fails) | → **AskUserQuestion** (see below) |
|
|
315
|
+
|
|
316
|
+
**On error — ask user with 3 options:**
|
|
317
|
+
|
|
318
|
+
Use `AskUserQuestion` with header `"{MCP} failed"` and these options:
|
|
319
|
+
- **Reconfigure credentials** — Loop back to Step 7 for this specific MCP. Maximum 2 retries per MCP. After 2 failures, force option 2.
|
|
320
|
+
- **Continue without {MCP}** — Show the `fallback` field from the registry (e.g., "WebSearch + WebFetch for library documentation") and proceed.
|
|
321
|
+
- **Stop init** — Abort initialization. User must fix MCP configuration manually and re-run `/morph:init`.
|
|
322
|
+
|
|
323
|
+
**Retry tracking:** Keep a counter per MCP. On the 2nd failure for the same MCP, skip the "Reconfigure" option and only offer "Continue without" or "Stop".
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
262
327
|
## Step 8 — Final Output
|
|
263
328
|
|
|
264
329
|
Before printing the summary, check `~/.claude/settings.local.json` for `env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`. If set to `"1"`, mark Agent Teams as enabled; otherwise show the warning.
|
|
@@ -271,7 +336,7 @@ Before printing the summary, check `~/.claude/settings.local.json` for `env.CLAU
|
|
|
271
336
|
✓ config.json updated
|
|
272
337
|
Stack: [stack] | Architecture: [architecture]
|
|
273
338
|
Integrations: [list]
|
|
274
|
-
✓ MCPs: [configured list]
|
|
339
|
+
✓ MCPs: [configured list] ([N verified] / [M needs restart] / [K failed])
|
|
275
340
|
|
|
276
341
|
[If CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS = "1":]
|
|
277
342
|
✓ Agent Teams: enabled
|
package/framework/skills/level-0-meta/{post-implementation → morph-post-implementation}/SKILL.md
RENAMED
|
@@ -28,7 +28,7 @@ allowed-tools: Read, Write, Edit, Bash, Glob, Grep, Task,
|
|
|
28
28
|
## Step 1 — Detectar Stack
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
|
-
node .claude/skills/post-implementation/scripts/detect-stack.mjs
|
|
31
|
+
node .claude/skills/morph-post-implementation/scripts/detect-stack.mjs
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
Output JSON: `{ stack: "DOTNET" | "NEXTJS" | "FULLSTACK" | "UNKNOWN", frontendPath, backendPath, startCommand }`
|
|
@@ -49,13 +49,13 @@ Execute os scans automáticos conforme o stack detectado.
|
|
|
49
49
|
### Se DOTNET ou FULLSTACK:
|
|
50
50
|
|
|
51
51
|
```bash
|
|
52
|
-
node .claude/skills/morph
|
|
52
|
+
node .claude/skills/morph-code-review/scripts/scan-csharp.mjs --diff
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
### Se NEXTJS ou FULLSTACK:
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
|
-
node .claude/skills/morph
|
|
58
|
+
node .claude/skills/morph-code-review-nextjs/scripts/scan-nextjs.mjs --diff
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
**🚫 BLOCK se qualquer finding CRITICAL encontrado.**
|
|
@@ -109,7 +109,7 @@ Leia o output de validação, corrija os issues reportados e re-execute até pas
|
|
|
109
109
|
### 5a. Detectar Dev Server
|
|
110
110
|
|
|
111
111
|
```bash
|
|
112
|
-
node .claude/skills/post-implementation/scripts/detect-dev-server.mjs "<startCommand>"
|
|
112
|
+
node .claude/skills/morph-post-implementation/scripts/detect-dev-server.mjs "<startCommand>"
|
|
113
113
|
```
|
|
114
114
|
|
|
115
115
|
Passe o `startCommand` retornado pelo detect-stack no Step 1.
|
|
@@ -140,7 +140,7 @@ await mcp__playwright__browser_console_messages({ level: 'error' });
|
|
|
140
140
|
// Screenshot para documentação
|
|
141
141
|
await mcp__playwright__browser_take_screenshot({
|
|
142
142
|
type: 'png',
|
|
143
|
-
filename: '.morph/features/$ARGUMENTS/
|
|
143
|
+
filename: '.morph/features/$ARGUMENTS/5-implement/smoke-screenshots/smoke-<timestamp>.png'
|
|
144
144
|
});
|
|
145
145
|
```
|
|
146
146
|
|
|
@@ -181,7 +181,7 @@ Não é possível prosseguir para criação de PR sem smoke test ou confirmaçã
|
|
|
181
181
|
|
|
182
182
|
## Step 6 — Code Review Checklist (CRITICAL + HIGH)
|
|
183
183
|
|
|
184
|
-
> Antes de revisar, leia: `.claude/skills/morph
|
|
184
|
+
> Antes de revisar, leia: `.claude/skills/morph-code-review/references/review-guidelines.md` — aplique confidence ≥ 75, ignore violações pré-existentes, inclua file:line em cada finding.
|
|
185
185
|
|
|
186
186
|
Revise os itens mais importantes por stack. Para review completo, use os skills dedicados.
|
|
187
187
|
|
|
@@ -191,14 +191,14 @@ Dispatch dois subagents em paralelo (Task tool):
|
|
|
191
191
|
|
|
192
192
|
**Subagent 1 — Backend Review:**
|
|
193
193
|
> Revisor .NET focado. Escopo: APENAS arquivos .cs alterados (git diff main...HEAD).
|
|
194
|
-
> Run: `node .claude/skills/morph
|
|
194
|
+
> Run: `node .claude/skills/morph-code-review/scripts/scan-csharp.mjs --diff`
|
|
195
195
|
> Depois revisar manualmente itens CRITICAL+HIGH do checklist .NET.
|
|
196
196
|
> Aplicar review-guidelines.md: confidence ≥ 75, skip pré-existentes.
|
|
197
197
|
> Output: findings com file:line, ou "✅ Sem CRITICAL/HIGH em backend alterado."
|
|
198
198
|
|
|
199
199
|
**Subagent 2 — Frontend Review:**
|
|
200
200
|
> Revisor Next.js focado. Escopo: APENAS arquivos .tsx/.ts alterados (git diff main...HEAD).
|
|
201
|
-
> Run: `node .claude/skills/morph
|
|
201
|
+
> Run: `node .claude/skills/morph-code-review-nextjs/scripts/scan-nextjs.mjs --diff`
|
|
202
202
|
> Depois revisar manualmente itens CRITICAL+HIGH do checklist Next.js.
|
|
203
203
|
> Aplicar review-guidelines.md: confidence ≥ 75, skip pré-existentes.
|
|
204
204
|
> Output: findings com file:line, ou "✅ Sem CRITICAL/HIGH em frontend alterado."
|
|
@@ -229,7 +229,7 @@ Aguardar ambos. **🚫 BLOCK se algum retornar CRITICAL não resolvido.**
|
|
|
229
229
|
**Itens CRITICAL e HIGH — Next.js:**
|
|
230
230
|
|
|
231
231
|
```
|
|
232
|
-
[ ] node .claude/skills/morph
|
|
232
|
+
[ ] node .claude/skills/morph-code-review-nextjs/scripts/scan-nextjs.mjs --diff → 0 CRITICAL
|
|
233
233
|
[ ] File names em kebab-case (user-card.tsx, não UserCard.tsx)
|
|
234
234
|
[ ] 'use client' apenas em componentes com hooks/event handlers
|
|
235
235
|
[ ] Sem useEffect para data fetching → Server Component ou useQuery
|
|
@@ -197,7 +197,7 @@ Mapeamento HTML → Blazor:
|
|
|
197
197
|
|
|
198
198
|
## Quando Usar
|
|
199
199
|
|
|
200
|
-
- ✅ Prototipo HTML pronto (
|
|
200
|
+
- ✅ Prototipo HTML pronto (hand-coded, exported, etc.)
|
|
201
201
|
- ✅ Design ja aprovado pelo cliente
|
|
202
202
|
- ✅ Apenas conversao visual (sem logica de negocio nova)
|
|
203
203
|
- ✅ Codigo Blazor existente para atualizar
|
|
@@ -46,7 +46,7 @@ Fix: Auth Login Bug
|
|
|
46
46
|
Run the title script with the desired title:
|
|
47
47
|
|
|
48
48
|
```bash
|
|
49
|
-
bash .claude/skills/terminal-title/scripts/set_title.sh "Fix: Auth Login Bug"
|
|
49
|
+
bash .claude/skills/morph-terminal-title/scripts/set_title.sh "Fix: Auth Login Bug"
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
No confirmation needed — executes silently in the background.
|
|
@@ -137,7 +137,7 @@ Critério: se a leitura de arquivo B não depende do CONTEÚDO de arquivo A, lei
|
|
|
137
137
|
|------|----------------|---------------------|
|
|
138
138
|
| Proposal | GitHub (opcional) | Não |
|
|
139
139
|
| Setup | GitHub (opcional) | Não |
|
|
140
|
-
| UI/UX | Playwright,
|
|
140
|
+
| UI/UX | Playwright, Context7 | Não |
|
|
141
141
|
| Design | Supabase, Context7, GitHub | Sim (domain-architect + schema em paralelo) |
|
|
142
142
|
| Clarify | Context7, GitHub | Não |
|
|
143
143
|
| Tasks | Context7, GitHub | Sim (quando spec tem 20+ reqs ou 3+ domínios) |
|
|
@@ -167,7 +167,6 @@ Critério: se a leitura de arquivo B não depende do CONTEÚDO de arquivo A, lei
|
|
|
167
167
|
|-----|-------------|----------|
|
|
168
168
|
| **Supabase** | Schema analysis, migrations, RLS | Grep + Read code files |
|
|
169
169
|
| **GitHub** | Issues, PRs, repo metadata, code search | Bash `gh` CLI |
|
|
170
|
-
| **Figma** | Design tokens, component specs | Read CSS/SCSS files |
|
|
171
170
|
| **Context7** | Library documentation lookups | WebSearch + WebFetch |
|
|
172
171
|
| **Playwright** | Browser automation, screenshots, page inspection, smoke tests | WebFetch (read-only), Manual testing |
|
|
173
172
|
| **Azure** | Cloud resource management | Bash `az` CLI |
|
|
@@ -216,7 +215,7 @@ For the canonical list of MCPs, their tools, phase relevance, and fallbacks, see
|
|
|
216
215
|
|-------|-------------|----------|
|
|
217
216
|
| Proposal | Context7 | WebSearch |
|
|
218
217
|
| Setup | GitHub | `gh` CLI |
|
|
219
|
-
| UI/UX | Playwright,
|
|
218
|
+
| UI/UX | Playwright, Context7 | WebFetch, Read CSS |
|
|
220
219
|
| Design | Supabase, Context7, GitHub | Grep + Read code |
|
|
221
220
|
| Clarify | Context7, GitHub | WebSearch |
|
|
222
221
|
| Tasks | Context7, GitHub | WebSearch, `gh` CLI |
|
|
@@ -62,7 +62,6 @@
|
|
|
62
62
|
| Read user-provided screenshots | **Read** (image files) | Claude Code reads images natively |
|
|
63
63
|
| Search for existing CSS variables | **Grep** `--root:` or `--color-` in `*.css,*.scss` | Find existing design tokens |
|
|
64
64
|
| Find existing UI components | **Glob** `**/Components/**/*.razor` or `**/components/**/*.tsx` | Existing patterns |
|
|
65
|
-
| Get Figma design tokens | **Figma MCP** `get_file({ fileKey })` | Extract colors, typography from Figma |
|
|
66
65
|
| Look up component library API | **Context7 MCP** `query_docs({ libraryId, query })` | Accurate component props/events |
|
|
67
66
|
| Preview de página existente | **Playwright MCP** `browser_navigate()` + `browser_take_screenshot()` | **WebFetch** URL |
|
|
68
67
|
| Inspecionar estrutura da página | **Playwright MCP** `browser_snapshot()` | **WebFetch** + parse manual |
|
|
@@ -72,7 +71,7 @@
|
|
|
72
71
|
| Generate design system from CSS | **Bash** `npx morph-spec generate design-system --scan` | CLI command |
|
|
73
72
|
| Update state | **Bash** `npx morph-spec state mark-output {feature} uiDesignSystem && npx morph-spec state mark-output {feature} uiMockups && npx morph-spec state mark-output {feature} uiComponents && npx morph-spec state mark-output {feature} uiFlows` | CLI command |
|
|
74
73
|
|
|
75
|
-
**MCPs used:**
|
|
74
|
+
**MCPs used:** Playwright (live preview, page inspection), Context7 (component docs).
|
|
76
75
|
|
|
77
76
|
**Anti-patterns:**
|
|
78
77
|
- ❌ WebSearch for MudBlazor docs (use Context7 MCP — more accurate)
|
|
@@ -9,7 +9,7 @@ argument-hint: "[feature-name] [phase?]"
|
|
|
9
9
|
|
|
10
10
|
> Never claim work is complete without running verification. Evidence before assertions.
|
|
11
11
|
>
|
|
12
|
-
> **Script:** Run `node .claude/skills/verification-before-completion/scripts/check-phase-outputs.mjs <feature> [phase]` to check required output files exist.
|
|
12
|
+
> **Script:** Run `node .claude/skills/morph-verification-before-completion/scripts/check-phase-outputs.mjs <feature> [phase]` to check required output files exist.
|
|
13
13
|
|
|
14
14
|
## When to Use
|
|
15
15
|
|
|
@@ -35,10 +35,10 @@ const PHASE_OUTPUTS = {
|
|
|
35
35
|
{ file: '2-ui/flows.md', required: false },
|
|
36
36
|
],
|
|
37
37
|
tasks: [
|
|
38
|
-
{ file: '
|
|
38
|
+
{ file: '4-tasks/tasks.md', required: true },
|
|
39
39
|
],
|
|
40
40
|
implement: [
|
|
41
|
-
{ file: '
|
|
41
|
+
{ file: '5-implement/recap.md', required: true },
|
|
42
42
|
],
|
|
43
43
|
};
|
|
44
44
|
|