@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
@@ -0,0 +1,507 @@
1
+ ---
2
+ name: morph:phase-design
3
+ description: MORPH-SPEC Phase 2 (Design). Schema-first interactive design: reads EF models/Supabase/DB, validates findings with user, then routes to VSA Blueprint or DDD Architecture Blueprint based on config.architecture.style, producing spec.md, contracts.cs, schema-analysis.md, and decisions.md through a quality loop (score 0-100). Use after setup phase to create technical specifications grounded in the real database schema.
4
+ argument-hint: "[feature-name]"
5
+ user-invocable: false
6
+ allowed-tools: Read, Write, Edit, Bash, Glob, Grep
7
+ cliVersion: "4.10.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
+ Design técnico interativo: schema primeiro, blueprint validado, artefatos gerados com loop de qualidade.
15
+
16
+ ## Pré-requisitos
17
+
18
+ - [ ] FASE 1 (Setup) concluída
19
+ - [ ] FASE 1.5 (UI/UX) concluída OU pulada
20
+ - [ ] Proposta aprovada pelo usuário
21
+
22
+ ## Ferramentas Recomendadas
23
+
24
+ > **Ref:** `framework/skills/level-0-meta/morph-tool-usage-guide/SKILL.md` para guia completo.
25
+ > **Example:** `references/spec-example.md` — filled-in spec.md showing expected output quality.
26
+
27
+ | Ação | Ferramenta | Alternativa |
28
+ |------|------------|-------------|
29
+ | Ler proposal + UI specs | **Read** output files | — |
30
+ | **Detectar arquitetura** | **Bash** `cat .morph/config/config.json \| grep -A3 '"architecture"'` | **Read** config.json |
31
+ | **Schema: Supabase** | **Supabase MCP** `list_tables()`, `get_table_schema()`, `get_relationships()` | — |
32
+ | **Schema: EF Core** | **Glob** `**/Entities/**/*.cs` + **Glob** `**/*Context.cs` → **Read** | **Grep** `DbSet<` |
33
+ | **Schema: Next.js/TS** | **Glob** `src/**/types/**/*.ts` + **Grep** `interface\|type.*=` | — |
34
+ | Schema: políticas RLS | **Supabase MCP** `query()` com `pg_policies` | **Read** policy files |
35
+ | Dispatch vsa-architect | **Agent** `subagent_type=vsa-architect` + `prompt=agent.taskPrompt` | — |
36
+ | Dispatch domain-architect | **Agent** `subagent_type=domain-architect` + `prompt=agent.taskPrompt` | — |
37
+ | Dispatch tech leads | **Agent** para cada agente ativo do dispatch config | — |
38
+ | Research biblioteca | **Context7 MCP** `query_docs()` | **WebSearch** + **WebFetch** |
39
+ | Renderizar contracts VSA | **Bash** `npx morph-spec template render dotnet-contracts-vsa ...` | — |
40
+ | Renderizar contracts DDD | **Bash** `npx morph-spec template render dotnet-contracts-level{N} ...` | — |
41
+ | Renderizar spec.md | **Bash** `npx morph-spec template render docs/spec ...` | — |
42
+ | Renderizar decisions.md | **Bash** `npx morph-spec template render docs/decisions ...` | — |
43
+ | Atualizar state | **Bash** `npx morph-spec state mark-output $ARGUMENTS <type>` | — |
44
+
45
+ **Anti-padrões:**
46
+ - ❌ Gerar contratos antes de ler o schema real — campos adivinhados corrompem todo o design
47
+ - ❌ Apresentar Blueprint sem validar com o usuário primeiro
48
+ - ❌ Perguntas como texto simples — sempre use `AskUserQuestion`
49
+ - ❌ Executar schema analysis e blueprint em sequência — são independentes, paralelize
50
+ - ❌ Ignorar `config.architecture.style` — sempre detecte antes do CHECKPOINT 2
51
+
52
+ ---
53
+
54
+ ## ✅ PRÉ-VOO
55
+
56
+ **PASSO 0 (ANTES de qualquer leitura ou escrita) — Garantir fase design:**
57
+
58
+ ```bash
59
+ npx morph-spec state get $ARGUMENTS
60
+ ```
61
+
62
+ Verifique o campo `"phase"` no output:
63
+
64
+ **Se `"phase": "design"`** → ✅ fase correta, prossiga.
65
+
66
+ **Se `"phase": "proposal"`** → execute em sequência:
67
+ 1. `npx morph-spec state mark-output $ARGUMENTS proposal`
68
+ 2. `npx morph-spec phase advance $ARGUMENTS` (→ setup)
69
+ 3. `npx morph-spec phase advance $ARGUMENTS` (→ design)
70
+
71
+ **Se `"phase": "setup"`** → execute:
72
+ 1. `npx morph-spec phase advance $ARGUMENTS` (→ design)
73
+
74
+ **Qualquer outro valor** → ⛔ não prossiga — estado inconsistente, reporte ao usuário.
75
+
76
+ > **Regra:** Nunca escreva em `1-design/` enquanto a fase não for `design`. O hook bloqueará e a sequência ficará corrompida.
77
+
78
+ ---
79
+
80
+ Leia em paralelo:
81
+ ```
82
+ Read: .morph/features/$ARGUMENTS/0-proposal/proposal.md
83
+ + Read: .morph/config/config.json ← detectar architecture.style
84
+ + Read: .morph/context/README.md
85
+ ```
86
+
87
+ **Detectar estilo de arquitetura:**
88
+
89
+ ```bash
90
+ cat .morph/config/config.json | grep -A3 '"architecture"'
91
+ ```
92
+
93
+ | Valor de `config.architecture.style` | Caminho |
94
+ |--------------------------------------|---------|
95
+ | `"vertical-slice"` | → **VSA** (CHECKPOINT 2-VSA + contratos VSA) |
96
+ | qualquer outro valor ou ausente | → **DDD** (CHECKPOINT 2-DDD + contratos DDD) |
97
+
98
+ Se escopo ≥ 20 tasks ou refactor toca ≥ 5 arquivos de domínio → **EnterPlanMode** antes de continuar.
99
+
100
+ Crie tasks de sessão:
101
+ ```
102
+ TaskCreate: "Analisar schema" → activeForm: "Lendo schema real"
103
+ TaskCreate: "Validar Blueprint" → activeForm: "Gerando blueprint"
104
+ TaskCreate: "Gerar spec + contracts" → activeForm: "Gerando artefatos"
105
+ TaskCreate: "Loop de qualidade" → activeForm: "Refinando design"
106
+ ```
107
+
108
+ ---
109
+
110
+ ## CHECKPOINT 1 — Schema Real (OBRIGATÓRIO antes de qualquer geração)
111
+
112
+ > **Regra:** Nunca assuma nomes de campos. Todo DTO gerado deve ter origem rastreável no schema.
113
+
114
+ ### 1.1 Ler schema real
115
+
116
+ Execute em paralelo conforme o stack detectado em `config.json`:
117
+
118
+ **Supabase (preferencial se disponível):**
119
+ ```
120
+ Supabase MCP: list_tables() → get_table_schema(table) para cada tabela relevante
121
+ + get_relationships() → políticas RLS se aplicável
122
+ ```
123
+
124
+ **EF Core (.NET):**
125
+ ```
126
+ Glob: **/Entities/**/*.cs → Read cada arquivo de entidade
127
+ Glob: **/*DbContext.cs → Read para ver DbSet<> e relações
128
+ Grep: "DbSet<" → confirmar entidades mapeadas
129
+ ```
130
+
131
+ **TypeScript/Next.js:**
132
+ ```
133
+ Glob: src/**/types/**/*.ts, src/**/models/**/*.ts
134
+ Grep: "export interface|export type" → Read arquivos encontrados
135
+ ```
136
+
137
+ ### 1.2 Gerar schema-analysis.md
138
+
139
+ Escreva `.morph/features/$ARGUMENTS/1-design/schema-analysis.md` com:
140
+
141
+ ```markdown
142
+ # Schema Analysis — {Feature}
143
+
144
+ ## Entidades Relevantes
145
+
146
+ ### {EntityName}
147
+ | Campo | Tipo DB | Tipo C#/TS | Nullable | Notas |
148
+ |-------|---------|-----------|----------|-------|
149
+ | id | uuid | Guid | No | PK |
150
+ | ... | ... | ... | ... | ... |
151
+
152
+ ## Relacionamentos
153
+ - {Entity A} 1—N {Entity B} via {campo FK}
154
+
155
+ ## Campos JSONB / Complexos
156
+ - {campo}: estrutura interna {chaves conhecidas}
157
+
158
+ ## Campos sem uso identificado
159
+ - {campo}: presente no schema mas sem referência na proposta
160
+ ```
161
+
162
+ ### 1.3 Validar com usuário
163
+
164
+ Use `AskUserQuestion`:
165
+
166
+ ```json
167
+ {
168
+ "questions": [{
169
+ "header": "Schema OK?",
170
+ "question": "Encontrei estas entidades e campos no schema. Estão corretos antes de gerar os contratos?",
171
+ "multiSelect": false,
172
+ "options": [
173
+ { "label": "Confirmar e continuar", "description": "Schema mapeado corretamente" },
174
+ { "label": "Tenho correções", "description": "Use Other para descrever o que está errado" }
175
+ ]
176
+ }]
177
+ }
178
+ ```
179
+
180
+ - **"Confirmar"** → prosseguir para Checkpoint 2
181
+ - **"Tenho correções" / Other** → aplicar correções no schema-analysis.md e repetir 1.3
182
+
183
+ ---
184
+
185
+ ## CHECKPOINT 2 — Blueprint de Arquitetura (OBRIGATÓRIO antes de gerar contracts)
186
+
187
+ > Use o caminho correspondente ao estilo detectado no PRÉ-VOO.
188
+
189
+ ---
190
+
191
+ ### CHECKPOINT 2-VSA — Vertical Slice Architecture
192
+
193
+ #### 2-VSA.1 Dispatch vsa-architect
194
+
195
+ ```bash
196
+ npx morph-spec dispatch-agents $ARGUMENTS design
197
+ ```
198
+
199
+ Use o `taskPrompt` do agente `vsa-architect` do resultado. Chame:
200
+
201
+ ```
202
+ Agent(subagent_type=vsa-architect, prompt=<taskPrompt + conteúdo de proposal.md + schema-analysis.md>)
203
+ ```
204
+
205
+ O agente produz um VSA Blueprint com:
206
+ - Entity fields (baseados no schema validado no Checkpoint 1)
207
+ - Operations (GetAll, GetById, Create, Update, Delete + custom)
208
+ - Routes (`GET /api/{feature}s`, `POST /api/{feature}s`, etc.)
209
+ - Error types (`{Entity}Errors.NotFound`, `{Entity}Errors.AlreadyExists`, etc.)
210
+ - Validation rules por campo
211
+
212
+ **Paralelize** com outros agentes ativos do dispatch config.
213
+
214
+ #### 2-VSA.2 Validar Blueprint com usuário
215
+
216
+ Apresente o blueprint gerado de forma legível e use `AskUserQuestion`:
217
+
218
+ ```json
219
+ {
220
+ "questions": [{
221
+ "header": "Blueprint OK?",
222
+ "question": "Planejei estes slices e operações para a feature. Confirmar antes de gerar spec e contracts?",
223
+ "multiSelect": false,
224
+ "options": [
225
+ { "label": "Confirmar blueprint", "description": "Gerar spec.md e contracts-vsa.cs com este blueprint" },
226
+ { "label": "Preciso ajustar", "description": "Use Other para descrever o que mudar no blueprint" }
227
+ ]
228
+ }]
229
+ }
230
+ ```
231
+
232
+ - **"Confirmar"** → prosseguir para geração VSA
233
+ - **"Preciso ajustar" / Other** → atualizar blueprint e repetir 2-VSA.2
234
+
235
+ ---
236
+
237
+ ### CHECKPOINT 2-DDD — Domain-Driven Design
238
+
239
+ #### 2-DDD.1 Determinar Nível de Complexidade
240
+
241
+ Leia a proposta e avalie com base nas 5 perguntas de detecção em `framework/standards/architecture/ddd/complexity-levels.md`:
242
+
243
+ | Nível | Quando usar |
244
+ |-------|-------------|
245
+ | **Nível 1 (CRUD)** | Entidades simples, sem regras de negócio complexas, CRUD básico |
246
+ | **Nível 2 (Business Logic)** | Invariantes de domínio, workflows de negócio, múltiplas entidades relacionadas |
247
+ | **Nível 3 (Bounded Context)** | Isolamento de contexto, eventos de integração, sistemas distribuídos |
248
+
249
+ > Se incerto, assuma Nível 1 e use `AskUserQuestion` para confirmar.
250
+
251
+ #### 2-DDD.2 Dispatch domain-architect
252
+
253
+ ```bash
254
+ npx morph-spec dispatch-agents $ARGUMENTS design
255
+ ```
256
+
257
+ Use o `taskPrompt` do agente `domain-architect` do resultado. Chame:
258
+
259
+ ```
260
+ Agent(subagent_type=domain-architect, prompt=<taskPrompt + conteúdo de proposal.md + schema-analysis.md + nível detectado>)
261
+ ```
262
+
263
+ O agente produz um Architecture Blueprint com:
264
+ - **Nível 1:** Entidades, repositórios, services, DTOs
265
+ - **Nível 2:** AggregateRoot, Value Objects, Domain Events, CQRS handlers
266
+ - **Nível 3:** BC setup, Integration Events, Anti-corruption layer
267
+
268
+ **Paralelize** com outros agentes ativos do dispatch config.
269
+
270
+ #### 2-DDD.3 Validar Blueprint com usuário
271
+
272
+ Apresente o blueprint gerado de forma legível e use `AskUserQuestion`:
273
+
274
+ ```json
275
+ {
276
+ "questions": [{
277
+ "header": "Blueprint OK?",
278
+ "question": "Planejei esta arquitetura de domínio para a feature. Confirmar antes de gerar spec e contracts?",
279
+ "multiSelect": false,
280
+ "options": [
281
+ { "label": "Confirmar blueprint", "description": "Gerar spec.md e contracts-level{N}.cs com este blueprint" },
282
+ { "label": "Preciso ajustar", "description": "Use Other para descrever o que mudar no blueprint" }
283
+ ]
284
+ }]
285
+ }
286
+ ```
287
+
288
+ - **"Confirmar"** → prosseguir para geração DDD
289
+ - **"Preciso ajustar" / Other** → atualizar blueprint e repetir 2-DDD.3
290
+
291
+ ---
292
+
293
+ ## Geração de Artefatos
294
+
295
+ Com schema validado (Checkpoint 1) e blueprint confirmado (Checkpoint 2):
296
+
297
+ ### Gerar spec.md
298
+
299
+ > Estrutura detalhada: `references/spec-authoring-guide.md`
300
+
301
+ Crie `.morph/features/$ARGUMENTS/1-design/spec.md` com:
302
+ - Overview, Functional Requirements (FR001...) com critérios de aceitação mensuráveis
303
+ - Non-Functional Requirements, Data Model
304
+ - **VSA:** seção `## Architecture Style: Vertical Slice` com slices e operações
305
+ - **DDD:** seção `## Domain Complexity` com nível (1/2/3) e justificativa
306
+ - Infrastructure Requirements (se aplicável)
307
+
308
+ ### Gerar contracts.cs — VSA
309
+
310
+ **Fonte obrigatória:** campos do `schema-analysis.md` + operações do VSA Blueprint.
311
+
312
+ ```bash
313
+ npx morph-spec template render \
314
+ dotnet-contracts-vsa \
315
+ .morph/features/$ARGUMENTS/1-design/contracts.cs \
316
+ '{
317
+ "FEATURE_NAME": "$ARGUMENTS",
318
+ "NAMESPACE": "{ProjectNamespace}",
319
+ "ROUTE": "/api/{kebabCase FEATURE_NAME}s",
320
+ "DATE": "{{TODAY}}"
321
+ }'
322
+ ```
323
+
324
+ Após renderizar, preencha os `// placeholder:` com os campos reais do schema-analysis.md.
325
+
326
+ **Padrões obrigatórios (VSA):**
327
+ - `sealed` em handlers, endpoints, validators, records
328
+ - `Guid.CreateVersion7()` para IDs
329
+ - `result.Match()` nos endpoints
330
+ - `{Entity}Errors` estático compartilhado por todos os slices
331
+ - CancellationToken em todos os métodos async
332
+
333
+ ### Gerar contracts.cs — DDD
334
+
335
+ **Fonte obrigatória:** campos do `schema-analysis.md` + componentes do DDD Blueprint.
336
+
337
+ ```bash
338
+ # Substituir {N} pelo nível detectado (1, 2 ou 3):
339
+ npx morph-spec template render \
340
+ dotnet-contracts-level{N} \
341
+ .morph/features/$ARGUMENTS/1-design/contracts.cs \
342
+ '{
343
+ "FEATURE_NAME": "$ARGUMENTS",
344
+ "NAMESPACE": "{ProjectNamespace}",
345
+ "DATE": "{{TODAY}}"
346
+ }'
347
+ ```
348
+
349
+ Após renderizar, preencha os `// placeholder:` com os campos reais do schema-analysis.md.
350
+
351
+ **Padrões obrigatórios (DDD):**
352
+ - Nível 1: interfaces de repositório + service com métodos mapeados
353
+ - Nível 2: AggregateRoot com invariantes + Value Objects imutáveis + Domain Events
354
+ - Nível 3: adiciona Integration Events + Bounded Context boundary
355
+
356
+ ### Gerar decisions.md
357
+
358
+ ```bash
359
+ npx morph-spec template render docs/decisions \
360
+ .morph/features/$ARGUMENTS/1-design/decisions.md \
361
+ '{"FEATURE_NAME": "$ARGUMENTS", "DATE": "{{TODAY}}", "decisions": []}'
362
+ ```
363
+
364
+ ADRs obrigatórios: escolha de arquitetura (VSA vs DDD + justificativa), biblioteca UI (se UI/UX executou), integrações externas, recursos Azure com estimativa de custos.
365
+
366
+ ---
367
+
368
+ ## Sistema de Pontuação de Qualidade
369
+
370
+ Após gerar os artefatos, avalie o design com o **Quality Score (0–100)**:
371
+
372
+ | Dimensão | Pts | Critério de máxima pontuação |
373
+ |----------|-----|------------------------------|
374
+ | **Fidelidade ao schema** | 25 | Todos os campos em contracts.cs têm origem rastreável no schema-analysis.md — zero adivinhados |
375
+ | **Cobertura funcional** | 20 | Todos os FRs da proposta estão no spec com critérios de aceitação mensuráveis |
376
+ | **Blueprint completo** | 20 | **VSA:** todos os slices têm handler, validator (exceto GetAll), endpoint e errors \| **DDD:** todas as entidades/aggregates/services têm componentes do nível detectado |
377
+ | **Integrações externas** | 20 | APIs/services com payload, error format e retry policy documentados |
378
+ | **Infra / custos** | 15 | Azure resources estimados com custo, ou "N/A" explícito documentado |
379
+
380
+ **Thresholds:**
381
+
382
+ | Score | Ação |
383
+ |-------|------|
384
+ | ≥ 85 | Design satisfatório. Oferecer encerrar ou refinar opcionalmente |
385
+ | 70–84 | Continuar. Focar nas dimensões mais fracas |
386
+ | < 70 | Continuar. Questões técnicas abertas bloqueam implementação |
387
+
388
+ ---
389
+
390
+ ## Loop de Qualidade
391
+
392
+ **Repita até: score ≥ 85 OU usuário aprova.**
393
+
394
+ ### A. Calcular score
395
+
396
+ Pontue cada dimensão com base nos artefatos gerados. Identifique as lacunas mais impactantes.
397
+
398
+ ### B. Identificar questões abertas
399
+
400
+ Perguntas típicas por dimensão:
401
+
402
+ | Dimensão fraca | Exemplos de questões |
403
+ |----------------|----------------------|
404
+ | Schema fidelity | "O campo `metadata` (JSONB) tem estrutura definida? Quais chaves?" |
405
+ | Cobertura funcional | "FR003 diz 'notificar usuário' — por email, push ou ambos?" |
406
+ | Blueprint VSA | "O slice CreateOrder deve disparar um job de email ou é síncrono?" |
407
+ | Blueprint DDD | "O método `Place()` do OrderAggregate deve emitir `OrderPlacedEvent`?" |
408
+ | Integrações | "A API de pagamento usa webhook ou polling para confirmar?" |
409
+ | Infra/custos | "Este feature precisa de storage Azure? Qual tier?" |
410
+
411
+ ### C. Perguntar via AskUserQuestion
412
+
413
+ Máximo 3 questões técnicas por chamada. Na última chamada de cada round, inclua sempre:
414
+
415
+ ```json
416
+ {
417
+ "header": "Encerrar?",
418
+ "question": "Deseja encerrar o design agora ou continuar refinando?",
419
+ "multiSelect": false,
420
+ "options": [
421
+ { "label": "Continuar refinando", "description": "Claude identificou mais questões abertas" },
422
+ { "label": "Encerrar design", "description": "Prosseguir para Clarify com o design atual" }
423
+ ]
424
+ }
425
+ ```
426
+
427
+ > Se score ≥ 85, ajuste: `"Continuar (opcional)"` com description `"Score {N}/100 — design está satisfatório"`
428
+
429
+ ### D. Incorporar respostas
430
+
431
+ Atualize spec.md, contracts.cs e decisions.md com as respostas recebidas. Recalcule o score.
432
+
433
+ ### E. Condição de saída
434
+
435
+ - Usuário escolheu **"Encerrar design"** → sair do loop
436
+ - Score ≥ 85 E sem questões novas → sair do loop
437
+
438
+ ---
439
+
440
+ ## Pós-Loop: Atualizar State
441
+
442
+ ```bash
443
+ npx morph-spec state mark-output $ARGUMENTS schema-analysis
444
+ npx morph-spec state mark-output $ARGUMENTS spec
445
+ npx morph-spec state mark-output $ARGUMENTS contracts
446
+ npx morph-spec state mark-output $ARGUMENTS decisions
447
+ ```
448
+
449
+ Se houver custos Azure estimados:
450
+ ```bash
451
+ npx morph-spec state set $ARGUMENTS costs.estimated {X.XX}
452
+ ```
453
+
454
+ ## PAUSA OBRIGATÓRIA
455
+
456
+ ```json
457
+ {
458
+ "questions": [{
459
+ "header": "Aprovação",
460
+ "question": "Design gerado. Aprovar para continuar para Clarify?",
461
+ "multiSelect": false,
462
+ "options": [
463
+ { "label": "Aprovar e continuar", "description": "Avançar para fase Clarify" },
464
+ { "label": "Tenho feedback", "description": "Digite o que deseja mudar (Other)" }
465
+ ]
466
+ }]
467
+ }
468
+ ```
469
+
470
+ - **"Aprovar e continuar"** →
471
+ ```bash
472
+ npx morph-spec approve $ARGUMENTS design
473
+ npx morph-spec phase advance $ARGUMENTS
474
+ ```
475
+ - **"Tenho feedback" / Other** → aplicar feedback e repetir PAUSA
476
+
477
+ ## Outputs Gerados
478
+
479
+ - `.morph/features/$ARGUMENTS/1-design/schema-analysis.md` — Schema real mapeado e validado
480
+ - `.morph/features/$ARGUMENTS/1-design/spec.md` — Especificação técnica completa
481
+ - `.morph/features/$ARGUMENTS/1-design/contracts.cs` — Contracts baseados no schema real (VSA ou DDD)
482
+ - `.morph/features/$ARGUMENTS/1-design/decisions.md` — ADRs documentados
483
+
484
+ ## Critérios de Avanço
485
+
486
+ - [x] Estilo de arquitetura detectado em `config.architecture.style`
487
+ - [x] Schema validado pelo usuário (Checkpoint 1)
488
+ - [x] Blueprint confirmado pelo usuário (Checkpoint 2-VSA ou 2-DDD)
489
+ - [x] Score de qualidade ≥ 85 OU usuário encerrou
490
+ - [x] Todos os field names em contracts.cs rastreáveis ao schema-analysis.md
491
+ - [x] State atualizado
492
+ - [x] Usuário aprovou na PAUSA OBRIGATÓRIA
493
+
494
+ ---
495
+
496
+ <!-- morph:outputs:design -->
497
+ | Output | Caminho |
498
+ |--------|---------|
499
+ | `schemaAnalysis` | `.morph/features/{feature}/1-design/schema-analysis.md` |
500
+ | `spec` | `.morph/features/{feature}/1-design/spec.md` |
501
+ | `contracts` | `.morph/features/{feature}/1-design/contracts.cs` |
502
+ | `contractsTs` | `.morph/features/{feature}/1-design/contracts.ts` |
503
+ | `contractsVsa` | `.morph/features/{feature}/1-design/contracts-vsa.cs` |
504
+ | `decisions` | `.morph/features/{feature}/1-design/decisions.md` |
505
+ <!-- /morph:outputs -->
506
+
507
+ Continuar automaticamente para FASE 3 (Clarify) após aprovação.