@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.
Files changed (124) hide show
  1. package/README.md +2 -2
  2. package/bin/morph-spec.js +30 -0
  3. package/bin/task-manager.js +34 -22
  4. package/claude-plugin.json +1 -1
  5. package/docs/CHEATSHEET.md +1 -1
  6. package/docs/QUICKSTART.md +1 -1
  7. package/framework/CLAUDE.md +99 -98
  8. package/framework/agents.json +37 -7
  9. package/framework/commands/commit.md +166 -0
  10. package/framework/commands/morph-apply.md +13 -2
  11. package/framework/commands/morph-archive.md +8 -2
  12. package/framework/commands/morph-infra.md +6 -0
  13. package/framework/commands/morph-preflight.md +6 -0
  14. package/framework/commands/morph-proposal.md +56 -7
  15. package/framework/commands/morph-status.md +6 -0
  16. package/framework/commands/morph-troubleshoot.md +6 -0
  17. package/framework/hooks/claude-code/notification/approval-reminder.js +3 -2
  18. package/framework/hooks/claude-code/post-tool-use/dispatch.js +154 -31
  19. package/framework/hooks/claude-code/post-tool-use/skill-reminder.js +7 -84
  20. package/framework/hooks/claude-code/post-tool-use/validator-feedback.js +8 -17
  21. package/framework/hooks/claude-code/pre-compact/save-morph-context.js +16 -3
  22. package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +4 -3
  23. package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +3 -2
  24. package/framework/hooks/claude-code/pre-tool-use/task-tracking-guard.js +60 -0
  25. package/framework/hooks/claude-code/session-start/inject-morph-context.js +55 -2
  26. package/framework/hooks/claude-code/session-start/post-compact-restore.js +41 -0
  27. package/framework/hooks/claude-code/stop/validate-completion.js +2 -15
  28. package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +23 -5
  29. package/framework/hooks/shared/compact-restore.js +100 -0
  30. package/framework/hooks/shared/dispatch-helpers.js +116 -0
  31. package/framework/hooks/shared/phase-utils.js +9 -5
  32. package/framework/hooks/shared/state-reader.js +27 -3
  33. package/framework/phases.json +30 -7
  34. package/framework/rules/morph-workflow.md +88 -86
  35. package/framework/skills/level-0-meta/mcp-registry.json +86 -51
  36. package/framework/skills/level-0-meta/{brainstorming → morph-brainstorming}/SKILL.md +13 -16
  37. package/framework/skills/level-0-meta/{code-review → morph-code-review}/SKILL.md +1 -1
  38. package/framework/skills/level-0-meta/{code-review-nextjs → morph-code-review-nextjs}/SKILL.md +2 -2
  39. package/framework/skills/level-0-meta/{frontend-review → morph-frontend-review}/SKILL.md +5 -5
  40. package/framework/skills/level-0-meta/morph-init/SKILL.md +72 -7
  41. package/framework/skills/level-0-meta/{post-implementation → morph-post-implementation}/SKILL.md +9 -9
  42. package/framework/skills/level-0-meta/morph-replicate/SKILL.md +1 -1
  43. package/framework/skills/level-0-meta/{terminal-title → morph-terminal-title}/SKILL.md +1 -1
  44. package/framework/skills/level-0-meta/{tool-usage-guide → morph-tool-usage-guide}/SKILL.md +2 -3
  45. package/framework/skills/level-0-meta/{tool-usage-guide → morph-tool-usage-guide}/references/tools-per-phase.md +1 -2
  46. package/framework/skills/level-0-meta/{verification-before-completion → morph-verification-before-completion}/SKILL.md +1 -1
  47. package/framework/skills/level-0-meta/{verification-before-completion → morph-verification-before-completion}/scripts/check-phase-outputs.mjs +2 -2
  48. package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +238 -0
  49. package/framework/skills/level-1-workflows/{phase-codebase-analysis → morph-phase-codebase-analysis}/SKILL.md +251 -251
  50. package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +507 -0
  51. package/framework/skills/level-1-workflows/{phase-implement → morph-phase-implement}/SKILL.md +590 -491
  52. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/code-quality-reviewer-prompt.md +50 -0
  53. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/implementer-prompt.md +45 -0
  54. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/spec-reviewer-prompt.md +47 -0
  55. package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +254 -0
  56. package/framework/skills/level-1-workflows/{phase-setup → morph-phase-setup}/SKILL.md +237 -194
  57. package/framework/skills/level-1-workflows/{phase-tasks → morph-phase-tasks}/SKILL.md +307 -270
  58. package/framework/skills/level-1-workflows/{phase-tasks → morph-phase-tasks}/scripts/validate-tasks.mjs +3 -3
  59. package/framework/skills/level-1-workflows/{phase-uiux → morph-phase-uiux}/SKILL.md +320 -285
  60. package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +97 -0
  61. package/framework/standards/integration/mcp/mcp-tools.md +25 -7
  62. package/framework/templates/docs/onboarding.md +2 -2
  63. package/package.json +1 -2
  64. package/src/commands/agents/dispatch-agents.js +50 -3
  65. package/src/commands/mcp/mcp-setup.js +39 -2
  66. package/src/commands/phase/phase-reset.js +74 -0
  67. package/src/commands/project/doctor.js +19 -5
  68. package/src/commands/scope/escalate.js +215 -0
  69. package/src/commands/state/advance-phase.js +27 -53
  70. package/src/commands/state/state.js +1 -1
  71. package/src/commands/task/expand.js +100 -0
  72. package/src/core/paths/output-schema.js +4 -3
  73. package/src/core/state/phase-state-machine.js +7 -4
  74. package/src/core/state/state-manager.js +4 -3
  75. package/src/lib/detectors/claude-config-detector.js +93 -347
  76. package/src/lib/detectors/design-system-detector.js +189 -189
  77. package/src/lib/detectors/index.js +155 -57
  78. package/src/lib/generators/context-generator.js +2 -2
  79. package/src/lib/installers/mcp-installer.js +37 -5
  80. package/src/lib/phase-chain/phase-validator.js +22 -16
  81. package/src/lib/scope/impact-analyzer.js +106 -0
  82. package/src/lib/tasks/task-parser.js +1 -1
  83. package/src/lib/validators/shared/emit-validator-dispatch.js +64 -0
  84. package/src/scripts/setup-infra.js +15 -0
  85. package/src/utils/agents-installer.js +32 -12
  86. package/src/utils/file-copier.js +0 -1
  87. package/src/utils/hooks-installer.js +15 -1
  88. package/framework/skills/level-1-workflows/phase-clarify/SKILL.md +0 -216
  89. package/framework/skills/level-1-workflows/phase-design/SKILL.md +0 -383
  90. package/src/commands/project/index.js +0 -8
  91. package/src/core/index.js +0 -10
  92. package/src/core/state/index.js +0 -8
  93. package/src/core/templates/index.js +0 -9
  94. package/src/core/templates/template-data-sources.js +0 -325
  95. package/src/core/workflows/index.js +0 -7
  96. package/src/lib/detectors/config-detector.js +0 -223
  97. package/src/lib/detectors/standards-generator.js +0 -335
  98. package/src/lib/detectors/structure-detector.js +0 -275
  99. package/src/lib/monitor/agent-resolver.js +0 -144
  100. package/src/lib/monitor/renderer.js +0 -230
  101. package/src/lib/orchestration/index.js +0 -7
  102. package/src/lib/orchestration/team-orchestrator.js +0 -404
  103. package/src/sanitizer/context-sanitizer.js +0 -221
  104. package/src/sanitizer/patterns.js +0 -163
  105. package/src/writer/file-writer.js +0 -86
  106. /package/framework/skills/level-0-meta/{brainstorming → morph-brainstorming}/references/proposal-example.md +0 -0
  107. /package/framework/skills/level-0-meta/{code-review → morph-code-review}/references/review-example.md +0 -0
  108. /package/framework/skills/level-0-meta/{code-review → morph-code-review}/references/review-guidelines.md +0 -0
  109. /package/framework/skills/level-0-meta/{code-review → morph-code-review}/scripts/scan-csharp.mjs +0 -0
  110. /package/framework/skills/level-0-meta/{code-review-nextjs → morph-code-review-nextjs}/references/review-example-nextjs.md +0 -0
  111. /package/framework/skills/level-0-meta/{code-review-nextjs → morph-code-review-nextjs}/scripts/scan-nextjs.mjs +0 -0
  112. /package/framework/skills/level-0-meta/{frontend-review → morph-frontend-review}/scripts/scan-accessibility.mjs +0 -0
  113. /package/framework/skills/level-0-meta/{post-implementation → morph-post-implementation}/scripts/detect-dev-server.mjs +0 -0
  114. /package/framework/skills/level-0-meta/{post-implementation → morph-post-implementation}/scripts/detect-stack.mjs +0 -0
  115. /package/framework/skills/level-0-meta/{simulation-checklist → morph-simulation-checklist}/SKILL.md +0 -0
  116. /package/framework/skills/level-0-meta/{terminal-title → morph-terminal-title}/scripts/set_title.sh +0 -0
  117. /package/framework/skills/level-1-workflows/{phase-clarify → morph-phase-clarify}/references/clarifications-example.md +0 -0
  118. /package/framework/skills/level-1-workflows/{phase-design → morph-phase-design}/references/architecture-analysis-guide.md +0 -0
  119. /package/framework/skills/level-1-workflows/{phase-design → morph-phase-design}/references/spec-authoring-guide.md +0 -0
  120. /package/framework/skills/level-1-workflows/{phase-design → morph-phase-design}/references/spec-example.md +0 -0
  121. /package/framework/skills/level-1-workflows/{phase-implement → morph-phase-implement}/references/recap-example.md +0 -0
  122. /package/framework/skills/level-1-workflows/{phase-implement → morph-phase-implement}/references/vsa-implementation-guide.md +0 -0
  123. /package/framework/skills/level-1-workflows/{phase-tasks → morph-phase-tasks}/references/task-planning-patterns.md +0 -0
  124. /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.0.0",
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
- "command": "cmd",
53
- "args": ["/c", "npx", "-y", "@supabase/mcp-server-supabase"],
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": null
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": "cmd",
89
- "args": ["/c", "npx", "-y", "@modelcontextprotocol/server-github"],
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": null
126
+ "setupGuide": "Official GitHub MCP Server (github/github-mcp-server). Requires Docker."
106
127
  }
107
128
  },
108
- "figma": {
109
- "phases": ["uiux"],
110
- "tools": ["get_file"],
111
- "detection": "mcpServers includes figma",
112
- "fallback": "Read CSS/SCSS files for existing design tokens",
113
- "usage": "Design token extraction, component specs, color/typography from Figma files",
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
- "command": "cmd",
118
- "args": ["/c", "npx", "-y", "@anthropic/mcp-server-figma"],
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": ["blazor", "nextjs", "react", "vue"],
133
- "warnings": [],
134
- "setupGuide": null
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", "figma", "context7"],
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
- Generate **3-5 focused questions** for the user:
56
+ Use `AskUserQuestion` to collect responses — **NEVER list questions as plain text**.
57
57
 
58
- ```markdown
59
- ### Q1: Scope
60
- What is the minimum viable version of this feature?
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
- ### Q3: Integration
66
- Does this need to integrate with existing features?
62
+ Perguntas-padrão a adaptar para o contexto da feature:
67
63
 
68
- ### Q4: Users
69
- Who are the primary users of this feature?
70
-
71
- ### Q5: Success Criteria
72
- How will we know this feature is working correctly?
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
- **Wait for user responses before proceeding.**
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/4-implement/code-review.md` criado hoje → já revisado
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
 
@@ -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/4-implement/code-review-nextjs.md` criado hoje → já revisado
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:frontend-review/scripts/scan-accessibility.mjs $frontendPath
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 `4-implement`)
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 now? I'll need `SUPABASE_URL` and `SERVICE_ROLE_KEY`."*
240
- - YES → collect credentials add to `.claude/settings.local.json` under `mcpServers`
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? I'll need a `GITHUB_PERSONAL_ACCESS_TOKEN`."*
245
- - YES/NOsame pattern
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
- Only offer Figma, Docker, Azure if explicitly detected in `.env.example`.
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 rule:** Always write MCP entries with `"command": "cmd"` and `"/c"` as the **first element of `"args"`**:
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
@@ -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:code-review/scripts/scan-csharp.mjs --diff
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:code-review-nextjs/scripts/scan-nextjs.mjs --diff
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/4-implement/smoke-screenshots/smoke-<timestamp>.png'
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:code-review/references/review-guidelines.md` — aplique confidence ≥ 75, ignore violações pré-existentes, inclua file:line em cada finding.
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:code-review/scripts/scan-csharp.mjs --diff`
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:code-review-nextjs/scripts/scan-nextjs.mjs --diff`
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:code-review-nextjs/scripts/scan-nextjs.mjs --diff → 0 CRITICAL
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 (Figma export, hand-coded, etc.)
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, Figma, Context7 | Não |
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, Figma, Context7 | WebFetch, Read CSS |
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:** Figma (design tokens), Playwright (live preview, page inspection), Context7 (component docs).
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: '3-tasks/tasks.md', required: true },
38
+ { file: '4-tasks/tasks.md', required: true },
39
39
  ],
40
40
  implement: [
41
- { file: '4-implement/recap.md', required: true },
41
+ { file: '5-implement/recap.md', required: true },
42
42
  ],
43
43
  };
44
44