@polymorphism-tech/morph-spec 4.9.0 → 4.10.1
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 +35 -98
- package/framework/agents/backend/api-designer.md +3 -0
- package/framework/agents/backend/dotnet-senior.md +3 -0
- package/framework/agents/backend/ef-modeler.md +2 -0
- package/framework/agents/backend/hangfire-orchestrator.md +2 -0
- package/framework/agents/backend/ms-agent-expert.md +2 -0
- package/framework/agents/frontend/blazor-builder.md +2 -0
- package/framework/agents/frontend/nextjs-expert.md +2 -0
- package/framework/agents/infrastructure/azure-architect.md +2 -0
- package/framework/agents/infrastructure/azure-deploy-specialist.md +2 -0
- package/framework/agents/infrastructure/bicep-architect.md +2 -0
- package/framework/agents/infrastructure/container-specialist.md +2 -0
- package/framework/agents/infrastructure/devops-engineer.md +3 -0
- package/framework/agents/infrastructure/infra-architect.md +3 -0
- package/framework/agents/integrations/asaas-financial.md +2 -0
- package/framework/agents/integrations/azure-identity.md +2 -0
- package/framework/agents/integrations/clerk-auth.md +3 -0
- package/framework/agents/integrations/hangfire-integration.md +2 -0
- package/framework/agents/integrations/resend-email.md +2 -0
- package/framework/agents.json +37 -7
- package/framework/commands/commit.md +166 -0
- package/framework/commands/morph-apply.md +156 -155
- package/framework/commands/morph-archive.md +33 -27
- package/framework/commands/morph-infra.md +83 -77
- package/framework/commands/morph-preflight.md +97 -55
- package/framework/commands/morph-proposal.md +131 -58
- package/framework/commands/morph-status.md +36 -30
- package/framework/commands/morph-troubleshoot.md +68 -59
- 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/csharp-standards.md +3 -0
- package/framework/rules/frontend-standards.md +2 -0
- package/framework/rules/infrastructure-standards.md +3 -0
- package/framework/rules/morph-workflow.md +143 -86
- package/framework/rules/nextjs-standards.md +2 -0
- package/framework/rules/testing-standards.md +3 -0
- package/framework/skills/level-0-meta/mcp-registry.json +86 -51
- package/framework/skills/level-0-meta/morph-brainstorming/SKILL.md +139 -0
- package/framework/skills/level-0-meta/morph-checklist/SKILL.md +42 -19
- package/framework/skills/level-0-meta/{code-review → morph-code-review}/SKILL.md +8 -5
- package/framework/skills/level-0-meta/{code-review-nextjs → morph-code-review-nextjs}/SKILL.md +8 -6
- package/framework/skills/level-0-meta/morph-frontend-review/SKILL.md +362 -0
- package/framework/skills/level-0-meta/morph-init/SKILL.md +114 -20
- package/framework/skills/level-0-meta/morph-post-implementation/SKILL.md +362 -0
- package/framework/skills/level-0-meta/morph-replicate/SKILL.md +95 -87
- package/framework/skills/level-0-meta/{simulation-checklist → morph-simulation-checklist}/SKILL.md +24 -0
- package/framework/skills/level-0-meta/{tool-usage-guide → morph-tool-usage-guide}/SKILL.md +43 -43
- 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 +23 -12
- 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 +247 -0
- package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +270 -0
- package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +499 -0
- package/framework/skills/level-1-workflows/morph-phase-implement/.morph/logs/activity.json +38 -0
- package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +472 -0
- 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 +246 -0
- package/framework/skills/level-1-workflows/morph-phase-setup/SKILL.md +238 -0
- package/framework/skills/level-1-workflows/morph-phase-tasks/.morph/logs/activity.json +14 -0
- package/framework/skills/level-1-workflows/morph-phase-tasks/SKILL.md +312 -0
- package/framework/skills/level-1-workflows/{phase-tasks → morph-phase-tasks}/scripts/validate-tasks.mjs +3 -3
- package/framework/skills/level-1-workflows/morph-phase-uiux/SKILL.md +324 -0
- package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +146 -0
- package/framework/standards/integration/mcp/mcp-tools.md +25 -7
- package/framework/templates/docs/onboarding.md +2 -2
- package/package.json +3 -4
- 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 +26 -7
- package/src/commands/project/update.js +4 -4
- 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/stack-filter.js +58 -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 +68 -18
- package/src/utils/agents-installer.js +51 -17
- package/src/utils/claude-md-injector.js +90 -0
- package/src/utils/file-copier.js +0 -1
- package/src/utils/hooks-installer.js +16 -5
- package/src/utils/skills-installer.js +67 -7
- package/CLAUDE.md +0 -98
- package/framework/memory/patterns-learned.md +0 -766
- package/framework/skills/level-0-meta/brainstorming/SKILL.md +0 -137
- package/framework/skills/level-0-meta/frontend-review/SKILL.md +0 -359
- package/framework/skills/level-0-meta/post-implementation/SKILL.md +0 -362
- package/framework/skills/level-0-meta/terminal-title/SKILL.md +0 -61
- package/framework/skills/level-0-meta/terminal-title/scripts/set_title.sh +0 -65
- package/framework/skills/level-1-workflows/phase-clarify/SKILL.md +0 -216
- package/framework/skills/level-1-workflows/phase-codebase-analysis/SKILL.md +0 -252
- package/framework/skills/level-1-workflows/phase-design/SKILL.md +0 -383
- package/framework/skills/level-1-workflows/phase-implement/SKILL.md +0 -492
- package/framework/skills/level-1-workflows/phase-setup/SKILL.md +0 -195
- package/framework/skills/level-1-workflows/phase-tasks/SKILL.md +0 -271
- package/framework/skills/level-1-workflows/phase-uiux/SKILL.md +0 -286
- 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-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,252 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: morph:phase-codebase-analysis
|
|
3
|
-
description: MORPH-SPEC Design sub-phase that analyzes existing codebase and database schema, producing schema-analysis.md with real column names, types, relationships, and field mismatches. Use at the start of Design phase before generating contracts.cs to prevent incorrect field names or types.
|
|
4
|
-
user-invocable: false
|
|
5
|
-
allowed-tools: Read, Write, Edit, Bash, Glob, Grep
|
|
6
|
-
cliVersion: "4.9.0"
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# MORPH Codebase Analysis - Sub-fase de DESIGN
|
|
10
|
-
|
|
11
|
-
> INTERNAL: Automation skill for schema analysis step within Phase 2 (Design).
|
|
12
|
-
> Called by `phase-design.md` Passo 2. Not a standalone user command.
|
|
13
|
-
|
|
14
|
-
Automatiza a análise de código existente para gerar `schema-analysis.md` com dados reais do banco/código.
|
|
15
|
-
|
|
16
|
-
## Pré-requisitos
|
|
17
|
-
|
|
18
|
-
- [ ] FASE 1 (Setup) concluída
|
|
19
|
-
- [ ] Feature tem `proposal.md` aprovado
|
|
20
|
-
- [ ] Contexto do projeto carregado (stack, agentes)
|
|
21
|
-
|
|
22
|
-
## Ferramentas Recomendadas
|
|
23
|
-
|
|
24
|
-
> **Ref:** `framework/skills/level-0-meta/tool-usage-guide/SKILL.md` para guia completo.
|
|
25
|
-
> **Ref:** `framework/standards/integration/mcp/mcp-tools.md` para referência MCP.
|
|
26
|
-
|
|
27
|
-
| Ação | Ferramenta | Alternativa |
|
|
28
|
-
|------|------------|-------------|
|
|
29
|
-
| Listar tabelas do banco | **Supabase MCP** `list_tables()` | **Grep** `.from(` no código |
|
|
30
|
-
| Obter schema de tabela | **Supabase MCP** `get_table_schema()` | **Read** type definitions |
|
|
31
|
-
| Obter relacionamentos FK | **Supabase MCP** `get_relationships()` | **Grep** JOIN/FK patterns |
|
|
32
|
-
| Obter políticas RLS | **Supabase MCP** `query()` | **Read** policy files |
|
|
33
|
-
| Encontrar queries no código | **Grep** `\.from\(` em `*.ts,*.tsx,*.js,*.cs` | — |
|
|
34
|
-
| Encontrar type definitions | **Glob** `src/**/types/**/*.ts` ou `**/Entities/**/*.cs` | — |
|
|
35
|
-
| Ler arquivos encontrados | **Read** cada arquivo | — |
|
|
36
|
-
| Análise multi-arquivo complexa | **Task** (subagent Explore) | Read individual |
|
|
37
|
-
| Gerar schema-analysis.md | **Write** usando template | **Bash** template render |
|
|
38
|
-
|
|
39
|
-
**MCPs desta fase:** Supabase (schema — **PRIORITÁRIO**), Database MCPs genéricos.
|
|
40
|
-
|
|
41
|
-
---
|
|
42
|
-
|
|
43
|
-
## Workflow Automatizado
|
|
44
|
-
|
|
45
|
-
### Passo 1: Detectar Método de Análise
|
|
46
|
-
|
|
47
|
-
**IMPORTANTE (Problem 8 fix):** Não assuma que o MCP está disponível e acessível.
|
|
48
|
-
Verifique primeiro com uma chamada de teste antes de tentar usá-lo.
|
|
49
|
-
|
|
50
|
-
```
|
|
51
|
-
1. SE MCP Supabase configurado no settings.json:
|
|
52
|
-
→ Tentar mcp__supabase__list_tables() com timeout implícito
|
|
53
|
-
→ SE retornar dados válidos (array de tabelas com conteúdo):
|
|
54
|
-
→ Usar Método A (MCP direto)
|
|
55
|
-
→ SE retornar erro, timeout, array vazio, ou dados inacessíveis:
|
|
56
|
-
→ Logar: "MCP Supabase configurado mas inacessível (CloudSQL? Auth? Permissões?)"
|
|
57
|
-
→ Usar Método B (análise estática de código)
|
|
58
|
-
|
|
59
|
-
2. SE MCP Database (outro) configurado:
|
|
60
|
-
→ Testar conectividade com query trivial antes de usar
|
|
61
|
-
→ SE OK: Usar Método A adaptado
|
|
62
|
-
→ SE falhar: Usar Método B
|
|
63
|
-
|
|
64
|
-
3. SE nenhum MCP disponível:
|
|
65
|
-
→ Usar Método B (análise estática de código)
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
**Sinais de MCP inacessível:**
|
|
69
|
-
- Resposta vazia ou `[]` em `list_tables()`
|
|
70
|
-
- Erro de autenticação / permissão negada
|
|
71
|
-
- Schema retornado não bate com o código (ex: tabelas existem no código mas não no MCP)
|
|
72
|
-
- Projeto usa banco diferente do Supabase (CloudSQL, RDS, Azure SQL, etc.)
|
|
73
|
-
|
|
74
|
-
### Passo 2A: Método MCP (Preferencial)
|
|
75
|
-
|
|
76
|
-
**Ferramentas:** Supabase MCP
|
|
77
|
-
|
|
78
|
-
```javascript
|
|
79
|
-
// 1. Listar todas as tabelas
|
|
80
|
-
const tables = await mcp__supabase__list_tables();
|
|
81
|
-
|
|
82
|
-
// 2. Para cada tabela relevante à feature:
|
|
83
|
-
for (const table of relevantTables) {
|
|
84
|
-
// 2a. Schema completo
|
|
85
|
-
const schema = await mcp__supabase__get_table_schema({ table: table.name });
|
|
86
|
-
// → column_name, data_type, is_nullable, column_default
|
|
87
|
-
|
|
88
|
-
// 2b. Relacionamentos
|
|
89
|
-
const rels = await mcp__supabase__get_relationships({ table: table.name });
|
|
90
|
-
// → foreign_table, foreign_column, constraint_type
|
|
91
|
-
|
|
92
|
-
// 2c. Indexes
|
|
93
|
-
const indexes = await mcp__supabase__query({
|
|
94
|
-
query: `SELECT indexname, indexdef FROM pg_indexes WHERE tablename = '${table.name}'`
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
// 2d. RLS policies (segurança)
|
|
98
|
-
const policies = await mcp__supabase__query({
|
|
99
|
-
query: `SELECT policyname, cmd, qual FROM pg_policies WHERE tablename = '${table.name}'`
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
### Passo 2B: Método Análise Estática (Fallback)
|
|
105
|
-
|
|
106
|
-
**Ferramentas:** Grep, Glob, Read, Task (subagent para projetos grandes)
|
|
107
|
-
|
|
108
|
-
**Fase B1: Encontrar Queries**
|
|
109
|
-
|
|
110
|
-
```
|
|
111
|
-
Grep: "\.from\(|\.select\(|SELECT |supabase\.|context\.|dbContext\.|DbSet<"
|
|
112
|
-
Type: ts,tsx,js,jsx,cs
|
|
113
|
-
Output: files_with_matches
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
**Fase B2: Ler Arquivos de Query**
|
|
117
|
-
|
|
118
|
-
Para cada arquivo encontrado, use **Read** para extrair:
|
|
119
|
-
- Nomes de tabelas: `from('leads')`, `DbSet<Lead>`, `FROM leads`
|
|
120
|
-
- Nomes de colunas: `.select('fullname, phonenumber')`, `l.FullName`
|
|
121
|
-
- Tipos de dados: TypeScript interfaces, C# DTOs
|
|
122
|
-
- Relacionamentos: JOIN clauses, navigation properties
|
|
123
|
-
|
|
124
|
-
**Fase B3: Encontrar Type Definitions**
|
|
125
|
-
|
|
126
|
-
```
|
|
127
|
-
# TypeScript/JavaScript:
|
|
128
|
-
Glob: "src/**/types/**/*.ts"
|
|
129
|
-
Glob: "src/**/*.d.ts"
|
|
130
|
-
Glob: "src/**/interfaces/*.ts"
|
|
131
|
-
|
|
132
|
-
# .NET:
|
|
133
|
-
Glob: "**/*Dto.cs"
|
|
134
|
-
Glob: "**/Entities/**/*.cs"
|
|
135
|
-
Glob: "**/Models/**/*.cs"
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
**Fase B4: Quando usar Task (subagent)**
|
|
139
|
-
|
|
140
|
-
Use Task subagent **APENAS** quando:
|
|
141
|
-
- Projeto tem 20+ arquivos de query
|
|
142
|
-
- Múltiplos padrões de acesso a dados (Supabase + EF Core + raw SQL)
|
|
143
|
-
- Análise precisa de contexto cruzado entre muitos arquivos
|
|
144
|
-
|
|
145
|
-
Não use Task subagent quando:
|
|
146
|
-
- Projeto tem < 10 arquivos de query (Read direto é mais rápido)
|
|
147
|
-
- Padrão de acesso a dados é uniforme (só Supabase OU só EF Core)
|
|
148
|
-
|
|
149
|
-
### Passo 2B-Formato: Formato Padronizado para Análise Estática
|
|
150
|
-
|
|
151
|
-
**IMPORTANTE (Problem 10 fix):** Quando usar Método B (análise estática), **sempre use o template oficial**.
|
|
152
|
-
Isso garante que `contracts.cs` pode ser gerado mecanicamente, sem interpretação manual.
|
|
153
|
-
|
|
154
|
-
O template está em `framework/templates/docs/schema-analysis.md`. Use-o via:
|
|
155
|
-
|
|
156
|
-
```bash
|
|
157
|
-
npx morph-spec template render docs/schema-analysis \
|
|
158
|
-
.morph/features/{feature}/1-design/schema-analysis.md \
|
|
159
|
-
'{
|
|
160
|
-
"FEATURE_NAME": "{feature}",
|
|
161
|
-
"FEATURE_NAME_TITLE": "{Feature Display Name}",
|
|
162
|
-
"DATE": "YYYY-MM-DD",
|
|
163
|
-
"AUTHOR": "Claude Code (Sonnet 4.6)",
|
|
164
|
-
"method": "Static Code Analysis",
|
|
165
|
-
"mcpUsed": "No",
|
|
166
|
-
"tableCount": N,
|
|
167
|
-
"fileCount": N,
|
|
168
|
-
"tables": [
|
|
169
|
-
{
|
|
170
|
-
"name": "table_name",
|
|
171
|
-
"codeSource": "path/to/file.ts",
|
|
172
|
-
"columns": [
|
|
173
|
-
{ "name": "column_name", "type": "string", "nullable": false, "notes": "from SELECT query" }
|
|
174
|
-
],
|
|
175
|
-
"relationships": [{ "description": "belongs to users via user_id" }],
|
|
176
|
-
"indexes": [{ "description": "idx_leads_created_at (created_at DESC)" }]
|
|
177
|
-
}
|
|
178
|
-
],
|
|
179
|
-
"fieldMismatches": [
|
|
180
|
-
{ "description": "Code uses user.name but DB column is users.fullname" }
|
|
181
|
-
],
|
|
182
|
-
"typeMismatches": [],
|
|
183
|
-
"relationshipIssues": [],
|
|
184
|
-
"dtoRecommendations": [
|
|
185
|
-
{
|
|
186
|
-
"tableName": "leads",
|
|
187
|
-
"dtoName": "LeadDto",
|
|
188
|
-
"fields": [
|
|
189
|
-
{ "type": "Guid", "name": "Id", "nullable": false, "comment": "PK" },
|
|
190
|
-
{ "type": "string", "name": "FullName", "nullable": false, "comment": "leads.fullname" }
|
|
191
|
-
]
|
|
192
|
-
}
|
|
193
|
-
]
|
|
194
|
-
}'
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
**Se o template render não estiver disponível**, use **Write** tool para criar o arquivo diretamente
|
|
198
|
-
seguindo a estrutura acima. O formato das tabelas e mismatches é OBRIGATÓRIO — sem formato padrão
|
|
199
|
-
não é possível gerar contracts.cs mecanicamente.
|
|
200
|
-
|
|
201
|
-
### Passo 3: Mapear Inconsistências
|
|
202
|
-
|
|
203
|
-
Crie um mapa de:
|
|
204
|
-
|
|
205
|
-
| Frontend/Código | Banco de Dados | Tipo | Problema |
|
|
206
|
-
|----------------|----------------|------|----------|
|
|
207
|
-
| user.name | users.fullname | string | ❌ MISMATCH |
|
|
208
|
-
| lead.phone | leads.phonenumber | string | ❌ MISMATCH |
|
|
209
|
-
| order.metadata | orders.metadata | JSONB | ⚠️ Type complex |
|
|
210
|
-
|
|
211
|
-
### Passo 4: Gerar `schema-analysis.md`
|
|
212
|
-
|
|
213
|
-
Use o template em `framework/templates/docs/schema-analysis.md`:
|
|
214
|
-
|
|
215
|
-
```bash
|
|
216
|
-
npx morph-spec template render docs/schema-analysis \
|
|
217
|
-
.morph/features/{feature-name}/1-design/schema-analysis.md \
|
|
218
|
-
'{ "FEATURE_NAME": "{feature-name}", "DATE": "..." }'
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
OU use **Write** tool para criar diretamente com os dados coletados.
|
|
222
|
-
|
|
223
|
-
### Passo 5: Atualizar State
|
|
224
|
-
|
|
225
|
-
```bash
|
|
226
|
-
npx morph-spec state mark-output {feature-name} schema-analysis
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
---
|
|
230
|
-
|
|
231
|
-
## Outputs
|
|
232
|
-
|
|
233
|
-
- `.morph/features/{feature}/1-design/schema-analysis.md`
|
|
234
|
-
- State atualizado com output `schemaAnalysis`
|
|
235
|
-
|
|
236
|
-
## CHECKPOINT
|
|
237
|
-
|
|
238
|
-
Antes de prosseguir para contracts.cs, apresente ao usuário:
|
|
239
|
-
|
|
240
|
-
- [ ] Analisei {N} tabelas
|
|
241
|
-
- [ ] Encontrei {N} field name mismatches
|
|
242
|
-
- [ ] Encontrei {N} type mismatches
|
|
243
|
-
- [ ] Mapeei {N} relacionamentos
|
|
244
|
-
- [ ] `schema-analysis.md` criado
|
|
245
|
-
|
|
246
|
-
**Perguntas obrigatórias:**
|
|
247
|
-
1. "O schema analysis está correto?"
|
|
248
|
-
2. "Posso gerar contracts.cs com base nesse schema real?"
|
|
249
|
-
|
|
250
|
-
---
|
|
251
|
-
|
|
252
|
-
*MORPH-SPEC by Polymorphism Tech*
|
|
@@ -1,383 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: morph:phase-design
|
|
3
|
-
description: MORPH-SPEC Phase 2 (Design). Analyzes codebase/schema, then produces spec.md, contracts.cs (contracts-vsa.cs for VSA or contracts-level{N}.cs for DDD), schema-analysis.md, and decisions.md for the feature. Use after setup phase to create a full technical specification with C# contracts based on the real database schema and architecture decision records.
|
|
4
|
-
argument-hint: "[feature-name]"
|
|
5
|
-
user-invocable: false
|
|
6
|
-
allowed-tools: Read, Write, Edit, Bash, Glob, Grep
|
|
7
|
-
cliVersion: "4.9.0"
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# MORPH Design - FASE 2
|
|
11
|
-
|
|
12
|
-
> INTERNAL: Workflow skill used by /morph-proposal during automated phase orchestration. Not a user command.
|
|
13
|
-
|
|
14
|
-
Expanda a proposta em especificação técnica completa, contracts, decisões arquiteturais e estimativa de custos.
|
|
15
|
-
|
|
16
|
-
## Pré-requisitos
|
|
17
|
-
|
|
18
|
-
- [ ] FASE 1 (Setup) concluída
|
|
19
|
-
- [ ] FASE 1.5 (UI/UX) concluída OU pulada (se não houver front-end)
|
|
20
|
-
- [ ] Proposta aprovada pelo usuário
|
|
21
|
-
|
|
22
|
-
## Ferramentas Recomendadas
|
|
23
|
-
|
|
24
|
-
> **Ref:** `framework/skills/level-0-meta/tool-usage-guide/SKILL.md` para guia completo.
|
|
25
|
-
> **Ref:** `framework/standards/integration/mcp/mcp-tools.md` para referência MCP.
|
|
26
|
-
> **Example:** `references/spec-example.md` — filled-in spec.md showing expected output quality.
|
|
27
|
-
|
|
28
|
-
| Ação | Ferramenta | Alternativa |
|
|
29
|
-
|------|------------|-------------|
|
|
30
|
-
| Ler proposal + UI specs | **Read** output files | — |
|
|
31
|
-
| Obter dispatch config | **Bash** `npx morph-spec dispatch-agents $ARGUMENTS design` | Agentes a disparar + prompts de task |
|
|
32
|
-
| **Dispatch domain-architect** (paralelo) | **Agent** `subagent_type=domain-architect` (ou `vsa-architect`) + `prompt=agent.taskPrompt` do dispatch config | Análise de complexidade independente |
|
|
33
|
-
| **Dispatch tech leads ativos** (paralelo) | **Agent** `subagent_type=<agent.id>` para cada agente ativo — o `id` do dispatch config é o `name` do subagente nativo em `.claude/agents/` | Análise de domínio independente |
|
|
34
|
-
| Obter schema do banco | **Supabase MCP** `list_tables()`, `get_table_schema()` | **Grep** queries + **Read** types |
|
|
35
|
-
| Obter relacionamentos de FK | **Supabase MCP** `get_relationships()` | **Grep** JOIN/FK no código |
|
|
36
|
-
| Obter políticas RLS | **Supabase MCP** `query()` com pg_policies | **Read** arquivos de políticas |
|
|
37
|
-
| Encontrar arquivos de query (fallback) | **Grep** `\.from\(` em `*.ts,*.tsx,*.js,*.cs` | — |
|
|
38
|
-
| Encontrar definições de tipo (fallback) | **Glob** `src/**/types/**/*.ts` ou `**/Entities/**/*.cs` | — |
|
|
39
|
-
| Ler arquivos de query/tipos (fallback) | **Read** cada arquivo encontrado | — |
|
|
40
|
-
| Pesquisar biblioteca para ADR | **Context7 MCP** `query_docs()` | **WebSearch** + **WebFetch** |
|
|
41
|
-
| Buscar padrões no código | **GitHub MCP** `search_code()` | **Grep** padrões no projeto |
|
|
42
|
-
| Renderizar template contracts (VSA) | **Bash** `npx morph-spec template render code/dotnet/contracts/contracts-vsa.cs ...` | — |
|
|
43
|
-
| Renderizar template contracts (DDD nível detectado) | **Bash** `npx morph-spec template render code/dotnet/contracts/contracts-level{N}.cs ...` onde N = nível detectado no Passo 1.5 | — |
|
|
44
|
-
| Renderizar template spec.md | **Bash** `npx morph-spec template render docs/spec ...` | — |
|
|
45
|
-
| Renderizar template decisions.md | **Bash** `npx morph-spec template render docs/decisions ...` | — |
|
|
46
|
-
| Criar schema-analysis.md | **Write** no diretório de outputs | — |
|
|
47
|
-
| Atualizar state | **Bash** `npx morph-spec state mark-output ...` | — |
|
|
48
|
-
|
|
49
|
-
**MCPs desta fase:** Supabase (schema analysis — **PRIORITÁRIO**), Context7 (research), GitHub (code search).
|
|
50
|
-
|
|
51
|
-
**Anti-padrões:**
|
|
52
|
-
- ❌ Adivinhar nomes de campos sem verificar schema (use MCP ou Grep primeiro!)
|
|
53
|
-
- ❌ Task agent para ler um único arquivo spec (use Read direto)
|
|
54
|
-
- ❌ WebSearch para schema do banco (use Supabase MCP ou análise de código)
|
|
55
|
-
- ❌ Escrever contracts-level{N}.cs do zero (use template render)
|
|
56
|
-
- ❌ Executar análise de domínio e análise de schema sequencialmente (são independentes — paralelize!)
|
|
57
|
-
- ❌ Fazer análise de domínio inline no contexto principal quando 2+ agentes estão ativos (use Task dispatch)
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
## ✅ PRÉ-VOO OBRIGATÓRIO (antes de gerar qualquer artefato)
|
|
62
|
-
|
|
63
|
-
### 1. Verificar contexto injetado pelo SessionStart
|
|
64
|
-
|
|
65
|
-
O hook já injetou o estado atual. Confirme que você leu:
|
|
66
|
-
- Feature ativa, fase, status de approvals
|
|
67
|
-
- Task progress e pending gates
|
|
68
|
-
- Spec snippet (se disponível)
|
|
69
|
-
|
|
70
|
-
### 2. Ler todos os prerequisitos em PARALELO
|
|
71
|
-
|
|
72
|
-
```
|
|
73
|
-
# Uma única chamada, não sequencial:
|
|
74
|
-
Read: .morph/features/{feature}/0-proposal/proposal.md
|
|
75
|
-
+ Read: .morph/config/config.json (→ architecture.style)
|
|
76
|
-
+ Read: .morph/context/README.md (→ project context)
|
|
77
|
-
+ Read: framework/agents.json (→ activeAgents do feature)
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
### 3. Avaliar escopo → EnterPlanMode se necessário
|
|
81
|
-
|
|
82
|
-
Se QUALQUER uma das condições abaixo for verdadeira:
|
|
83
|
-
- [ ] Refactor toca ≥5 arquivos existentes de domínio
|
|
84
|
-
- [ ] Estimativa de tasks ≥20
|
|
85
|
-
- [ ] Mudança de arquitetura (ex: migrar de DDD Level 1 → Level 2)
|
|
86
|
-
|
|
87
|
-
→ **USE EnterPlanMode** antes de gerar contratos. Explore o codebase, apresente opções, aguarde aprovação.
|
|
88
|
-
|
|
89
|
-
### 4. Dispatch paralelo de subagents para artefatos independentes
|
|
90
|
-
|
|
91
|
-
Os 4 artefatos de design são **independentes entre si**. Obtenha o config de dispatch e despache em paralelo:
|
|
92
|
-
|
|
93
|
-
```bash
|
|
94
|
-
npx morph-spec dispatch-agents {feature} design --table
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
Para cada agente em `config.agents` (excluindo o arquiteto já despachado no Passo 1.5), use o `id` como `subagent_type` no Agent tool:
|
|
98
|
-
|
|
99
|
-
```
|
|
100
|
-
# Exemplo com agentes típicos detectados (uma mensagem, múltiplos Agent tool calls):
|
|
101
|
-
Agent(subagent_type=dotnet-senior, prompt=<agent.taskPrompt>) # → spec.md + contracts.cs
|
|
102
|
-
Agent(subagent_type=nextjs-expert, prompt=<agent.taskPrompt>) # → frontend spec
|
|
103
|
-
Agent(subagent_type=standards-architect, prompt=<agent.taskPrompt>) # → decisões + ADRs
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
> **Regra de mapeamento:** `agent.id` do dispatch config = `name:` no frontmatter do arquivo em `.claude/agents/` = `subagent_type` do Agent tool. Ex: `id: "nextjs-expert"` → `Agent(subagent_type=nextjs-expert)`.
|
|
107
|
-
|
|
108
|
-
**Se `config.shouldDispatch === false`** (1 agente ou nenhum): execute os passos abaixo diretamente, sem dispatch.
|
|
109
|
-
|
|
110
|
-
### 5. Criar tasks de sessão para visibilidade
|
|
111
|
-
|
|
112
|
-
```
|
|
113
|
-
TaskCreate: "Gerar spec.md" → activeForm: "Gerando spec.md"
|
|
114
|
-
TaskCreate: "Gerar contracts.cs" → activeForm: "Gerando contracts.cs"
|
|
115
|
-
TaskCreate: "Gerar decisions.md" → activeForm: "Gerando decisions.md"
|
|
116
|
-
TaskCreate: "Avanço de fase" → activeForm: "Avançando fase"
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
---
|
|
120
|
-
|
|
121
|
-
## Workflow
|
|
122
|
-
|
|
123
|
-
### Passo 1: Carregar Contexto, Agentes e Dispatch Config
|
|
124
|
-
|
|
125
|
-
**Obtenha feature state e dispatch config:**
|
|
126
|
-
|
|
127
|
-
```bash
|
|
128
|
-
npx morph-spec state get $ARGUMENTS
|
|
129
|
-
npx morph-spec dispatch-agents $ARGUMENTS design
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
O primeiro comando retorna `activeAgents`. O segundo retorna os agentes a disparar e seus prompts de task.
|
|
133
|
-
|
|
134
|
-
**Leia outputs existentes em paralelo (Read direto):**
|
|
135
|
-
1. `.morph/features/$ARGUMENTS/0-proposal/proposal.md` - Proposta inicial
|
|
136
|
-
2. `.morph/features/$ARGUMENTS/2-ui/*.md` - UI/UX specs (se existirem)
|
|
137
|
-
|
|
138
|
-
**Standards context** (carregue para o contexto principal os standards dos agentes ativos):
|
|
139
|
-
- Paths dos standards em `agents.json[activeAgent].standards[]`
|
|
140
|
-
- Prioridade: `.morph/context/*.md` > `.morph/framework/standards/` > `framework/standards/`
|
|
141
|
-
- Architecture standards → guiam Technical Architecture section
|
|
142
|
-
- Coding standards → definem contracts-level{N}.cs patterns
|
|
143
|
-
|
|
144
|
-
### Passo 1.5: Análise de Domínio via Task Dispatch
|
|
145
|
-
|
|
146
|
-
**⚠️ OBRIGATÓRIO:** Execute antes de gerar qualquer contrato. Use **Task tool** para isolar esta análise do contexto principal.
|
|
147
|
-
|
|
148
|
-
> Para os prompts completos de análise de arquitetura, veja `references/architecture-analysis-guide.md`
|
|
149
|
-
|
|
150
|
-
O arquiteto ativo (lido do dispatch config no Passo 1) pode ser `domain-architect` (DDD) ou `vsa-architect` (VSA) — o prompt vem do dispatch config retornado por `dispatch-agents`.
|
|
151
|
-
|
|
152
|
-
**Paralelização:** Este Task dispatch pode iniciar SIMULTANEAMENTE com o Passo 2 (schema analysis).
|
|
153
|
-
|
|
154
|
-
#### Caminho A: `domain-architect` ativo (DDD)
|
|
155
|
-
|
|
156
|
-
Use o `taskPrompt` do dispatch config (enriquecido com o conteúdo da proposta). Chame o Agent tool usando o `id` do dispatch config como `subagent_type`:
|
|
157
|
-
|
|
158
|
-
```
|
|
159
|
-
# agent.id do dispatch config = subagent_type do Agent tool
|
|
160
|
-
Agent(subagent_type=domain-architect, prompt=<agent.taskPrompt + conteúdo de proposal.md>)
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
O agente responde às 5 perguntas de complexidade DDD e retorna o nível (1, 2 ou 3) com justificativa.
|
|
164
|
-
|
|
165
|
-
**Após receber o resultado:**
|
|
166
|
-
- Documente no spec.md (seção `## Domain Complexity`)
|
|
167
|
-
- **Para Nível 2+:** Preencha o `## Aggregate Blueprint` no spec.md
|
|
168
|
-
- **Para Nível 3:** Adicione `BOUNDED_CONTEXT` como variável ao renderizar o template
|
|
169
|
-
|
|
170
|
-
#### Caminho B: `vsa-architect` ativo (VSA)
|
|
171
|
-
|
|
172
|
-
Use o `taskPrompt` do dispatch config (enriquecido com o conteúdo da proposta). Chame o Agent tool:
|
|
173
|
-
|
|
174
|
-
```
|
|
175
|
-
Agent(subagent_type=vsa-architect, prompt=<agent.taskPrompt + conteúdo de proposal.md>)
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
O agente produz um VSA Blueprint com entity fields, operations, routes, error types e validation rules.
|
|
179
|
-
|
|
180
|
-
**Após receber o resultado:** Documente no spec.md (seção `## Architecture Style: Vertical Slice`).
|
|
181
|
-
|
|
182
|
-
---
|
|
183
|
-
|
|
184
|
-
### Passo 2: Analisar Código Existente (CRÍTICO - FAZER ANTES DE CONTRACTS!)
|
|
185
|
-
|
|
186
|
-
**⚠️ ATENÇÃO:** Este passo é OBRIGATÓRIO antes de gerar `contracts-level{N}.cs`. Previne geração de DTOs com nomes de campos errados.
|
|
187
|
-
|
|
188
|
-
**Delegate para skill dedicada:**
|
|
189
|
-
|
|
190
|
-
> **Ref:** `framework/skills/level-1-workflows/phase-codebase-analysis/SKILL.md` — workflow completo de análise de schema (MCP Supabase → fallback análise estática → SCHEMA-ANALYSIS.md → checkpoint de aprovação)
|
|
191
|
-
|
|
192
|
-
Execute o workflow de `phase-codebase-analysis.md` para:
|
|
193
|
-
1. Detectar se análise é necessária
|
|
194
|
-
2. Tentar MCP Supabase (preferencial) ou análise estática (fallback)
|
|
195
|
-
3. Mapear field name mismatches e type mismatches
|
|
196
|
-
4. Gerar `schema-analysis.md` com findings reais
|
|
197
|
-
5. Apresentar checkpoint ao usuário e aguardar aprovação
|
|
198
|
-
|
|
199
|
-
**Pule se:**
|
|
200
|
-
- Feature é 100% nova (sem dependências em código existente)
|
|
201
|
-
- Não há banco de dados ou APIs envolvidas
|
|
202
|
-
|
|
203
|
-
### Passo 3: Gerar `spec.md`
|
|
204
|
-
|
|
205
|
-
> Para estrutura detalhada de cada seção, veja `references/spec-authoring-guide.md`
|
|
206
|
-
|
|
207
|
-
Crie `.morph/features/$ARGUMENTS/1-design/spec.md` com as seções: Overview, Functional Requirements (FR001...), Non-Functional Requirements, Technical Architecture, Data Model, e Infrastructure Requirements (se aplicável).
|
|
208
|
-
|
|
209
|
-
### Passo 4: Gerar `contracts.cs` (BASEADO NO SCHEMA REAL!)
|
|
210
|
-
|
|
211
|
-
**⚠️ IMPORTANTE:** Use `schema-analysis.md` (do Passo 2) para gerar DTOs/campos corretos!
|
|
212
|
-
|
|
213
|
-
**Selecione o template baseado no arquiteto ativo:**
|
|
214
|
-
|
|
215
|
-
| Arquiteto ativo | Template |
|
|
216
|
-
|-----------------|---------|
|
|
217
|
-
| `vsa-architect` | `code/dotnet/contracts/contracts-vsa.cs` |
|
|
218
|
-
| `domain-architect` (Nível 1) | `code/dotnet/contracts/contracts-level1.cs` |
|
|
219
|
-
| `domain-architect` (Nível 2) | `code/dotnet/contracts/contracts-level2.cs` |
|
|
220
|
-
| `domain-architect` (Nível 3) | `code/dotnet/contracts/contracts-level3.cs` |
|
|
221
|
-
|
|
222
|
-
**Renderizar template:**
|
|
223
|
-
|
|
224
|
-
```bash
|
|
225
|
-
# Para projetos VSA:
|
|
226
|
-
npx morph-spec template render \
|
|
227
|
-
dotnet-contracts-vsa \
|
|
228
|
-
.morph/features/$ARGUMENTS/1-design/contracts.cs \
|
|
229
|
-
'{
|
|
230
|
-
"FEATURE_NAME": "$ARGUMENTS",
|
|
231
|
-
"NAMESPACE": "{ProjectNamespace}",
|
|
232
|
-
"ROUTE": "/api/{kebabCase FEATURE_NAME}s",
|
|
233
|
-
"DATE": "{{DATE}}"
|
|
234
|
-
}'
|
|
235
|
-
|
|
236
|
-
# Para projetos DDD (substituir N pelo nível detectado):
|
|
237
|
-
npx morph-spec template render \
|
|
238
|
-
code/dotnet/contracts/contracts-level{N}.cs \
|
|
239
|
-
.morph/features/$ARGUMENTS/1-design/contracts.cs \
|
|
240
|
-
'{
|
|
241
|
-
"FEATURE_NAME": "$ARGUMENTS",
|
|
242
|
-
"NAMESPACE": "{ProjectNamespace}",
|
|
243
|
-
"dtos": [...],
|
|
244
|
-
"interfaces": [...],
|
|
245
|
-
"enums": [...],
|
|
246
|
-
"valueObjects": [...]
|
|
247
|
-
}'
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
**Após renderizar (VSA):** Preencha os campos marcados com `// placeholder:` no template gerado com os campos reais da entidade, validators e mapeamentos do VSA Blueprint (Passo 1.5 Caminho B).
|
|
251
|
-
|
|
252
|
-
**Padrões obrigatórios (DDD — já incluídos no template):**
|
|
253
|
-
- Records para DTOs (immutable)
|
|
254
|
-
- Interfaces para serviços
|
|
255
|
-
- CancellationToken em métodos async
|
|
256
|
-
- Nullable reference types habilitados
|
|
257
|
-
- **USAR NOMES DE CAMPOS REAIS DO SCHEMA** (NÃO assumir!)
|
|
258
|
-
- XML documentation comments
|
|
259
|
-
- Value objects para complex types
|
|
260
|
-
|
|
261
|
-
**Padrões obrigatórios (VSA — já incluídos no template):**
|
|
262
|
-
- Request + Response records no mesmo arquivo do Handler
|
|
263
|
-
- `sealed` em handlers, endpoints, validators, records
|
|
264
|
-
- `Guid.CreateVersion7()` para IDs
|
|
265
|
-
- `result.Match()` nos endpoints
|
|
266
|
-
- `{Entity}Errors` estático compartilhado por todos os slices da feature
|
|
267
|
-
|
|
268
|
-
**⚠️ CHECKPOINT: Verificar contra schema-analysis.md**
|
|
269
|
-
- [ ] Todos os field names correspondem ao schema real?
|
|
270
|
-
- [ ] Tipos de dados corretos (JSONB → JsonObject, não string)?
|
|
271
|
-
- [ ] Nullability correta (campo opcional no banco → nullable no DTO)?
|
|
272
|
-
- [ ] Relacionamentos mapeados corretamente?
|
|
273
|
-
- [ ] Template foi renderizado corretamente?
|
|
274
|
-
|
|
275
|
-
### Passo 5: Iniciar `decisions.md`
|
|
276
|
-
|
|
277
|
-
**Renderizar template:**
|
|
278
|
-
|
|
279
|
-
```bash
|
|
280
|
-
# Use o template de decisions:
|
|
281
|
-
Read: .morph/framework/templates/feature/decisions.md
|
|
282
|
-
|
|
283
|
-
# OU renderize via CLI:
|
|
284
|
-
npx morph-spec template render \
|
|
285
|
-
feature/decisions \
|
|
286
|
-
.morph/features/$ARGUMENTS/1-design/decisions.md \
|
|
287
|
-
'{
|
|
288
|
-
"FEATURE_NAME": "$ARGUMENTS",
|
|
289
|
-
"DATE": "{{DATE}}",
|
|
290
|
-
"decisions": []
|
|
291
|
-
}'
|
|
292
|
-
```
|
|
293
|
-
|
|
294
|
-
**Template contém estrutura para ADRs (Architecture Decision Records):**
|
|
295
|
-
- Status, Context, Decision, Consequences
|
|
296
|
-
- Pros/Cons analysis
|
|
297
|
-
- Alternatives Considered section
|
|
298
|
-
- Date tracking
|
|
299
|
-
|
|
300
|
-
**ADRs obrigatórios:**
|
|
301
|
-
- Escolha de biblioteca UI (se FASE 1.5 executou)
|
|
302
|
-
- Padrões arquiteturais (CQRS, Repository, etc.)
|
|
303
|
-
- Recursos Azure (se houver infra)
|
|
304
|
-
- Integrações externas (APIs, webhooks, etc.)
|
|
305
|
-
- Análise de custos (se houver recursos pagos)
|
|
306
|
-
|
|
307
|
-
### Passo 6: Estimar Custos
|
|
308
|
-
|
|
309
|
-
Se houver recursos Azure na spec:
|
|
310
|
-
|
|
311
|
-
**Limites configuráveis** (em config.json):
|
|
312
|
-
- `costs.limits.freeTierOnly`: $0 (apenas free tier)
|
|
313
|
-
- `costs.limits.withApproval`: $10 (requer confirmação do usuário)
|
|
314
|
-
- `costs.limits.requiresADR`: $10 (requer ADR documentado)
|
|
315
|
-
|
|
316
|
-
Documente custos em `decisions.md` e atualize state:
|
|
317
|
-
|
|
318
|
-
```bash
|
|
319
|
-
npx morph-spec state set $ARGUMENTS costs.estimated {X.XX}
|
|
320
|
-
npx morph-spec state set $ARGUMENTS costs.approved {true/false}
|
|
321
|
-
```
|
|
322
|
-
|
|
323
|
-
### Passo 7: Atualizar State
|
|
324
|
-
|
|
325
|
-
```bash
|
|
326
|
-
npx morph-spec state mark-output $ARGUMENTS schema-analysis
|
|
327
|
-
npx morph-spec state mark-output $ARGUMENTS spec
|
|
328
|
-
npx morph-spec state mark-output $ARGUMENTS contracts
|
|
329
|
-
npx morph-spec state mark-output $ARGUMENTS decisions
|
|
330
|
-
```
|
|
331
|
-
|
|
332
|
-
## Outputs Gerados
|
|
333
|
-
|
|
334
|
-
- `.morph/features/$ARGUMENTS/1-design/schema-analysis.md` - **NOVO!** Análise do schema real
|
|
335
|
-
- `.morph/features/$ARGUMENTS/1-design/spec.md` - Especificação técnica completa
|
|
336
|
-
- `.morph/features/$ARGUMENTS/1-design/contracts.cs` - Interfaces, DTOs, Enums (baseados no schema real!)
|
|
337
|
-
- `.morph/features/$ARGUMENTS/1-design/decisions.md` - ADRs (novo ou atualizado)
|
|
338
|
-
- State atualizado com custos estimados
|
|
339
|
-
|
|
340
|
-
## PAUSA OBRIGATÓRIA
|
|
341
|
-
|
|
342
|
-
Apresente ao usuário 3 ações sugeridas:
|
|
343
|
-
|
|
344
|
-
1. **Aprovar design e continuar para clarificação**
|
|
345
|
-
2. **Ajustar escopo/complexidade** - Revisar spec.md
|
|
346
|
-
3. **Modificar contracts** - Ajustar interfaces/DTOs
|
|
347
|
-
|
|
348
|
-
## Critérios de Avanço
|
|
349
|
-
|
|
350
|
-
- [x] `spec.md` completo com todos os requisitos
|
|
351
|
-
- [x] `contracts-level{N}.cs` com interfaces e DTOs
|
|
352
|
-
- [x] `decisions.md` com ADRs relevantes
|
|
353
|
-
- [x] Custos estimados e documentados (se houver infra)
|
|
354
|
-
- [x] State atualizado
|
|
355
|
-
- [x] Usuário aprovou design
|
|
356
|
-
|
|
357
|
-
---
|
|
358
|
-
|
|
359
|
-
## Integração com Superpowers
|
|
360
|
-
|
|
361
|
-
> Disponível quando o plugin `superpowers` está instalado.
|
|
362
|
-
|
|
363
|
-
| Skill | Quando Usar | Invocação |
|
|
364
|
-
|-------|-------------|-----------|
|
|
365
|
-
| `writing-plans` | Após spec aprovado, para estruturar abordagem de implementação | `Skill(superpowers:writing-plans)` |
|
|
366
|
-
| `brainstorming` | Para explorar alternativas de arquitetura (use morph-spec version) | Use `brainstorming` (morph-spec version) |
|
|
367
|
-
|
|
368
|
-
---
|
|
369
|
-
|
|
370
|
-
## Outputs desta Fase
|
|
371
|
-
|
|
372
|
-
<!-- morph:outputs:design -->
|
|
373
|
-
| Output | Caminho |
|
|
374
|
-
|--------|---------|
|
|
375
|
-
| `schemaAnalysis` | `.morph/features/{feature}/1-design/schema-analysis.md` |
|
|
376
|
-
| `spec` | `.morph/features/{feature}/1-design/spec.md` |
|
|
377
|
-
| `contracts` | `.morph/features/{feature}/1-design/contracts.cs` |
|
|
378
|
-
| `decisions` | `.morph/features/{feature}/1-design/decisions.md` |
|
|
379
|
-
<!-- /morph:outputs -->
|
|
380
|
-
|
|
381
|
-
---
|
|
382
|
-
|
|
383
|
-
Continuar automaticamente para FASE 3 (Clarify) após aprovação.
|