@polymorphism-tech/morph-spec 1.0.4 → 2.0.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 (152) hide show
  1. package/CLAUDE.md +1381 -0
  2. package/LICENSE +72 -0
  3. package/README.md +89 -6
  4. package/bin/detect-agents.js +225 -0
  5. package/bin/morph-spec.js +120 -0
  6. package/bin/render-template.js +302 -0
  7. package/bin/semantic-detect-agents.js +246 -0
  8. package/bin/validate-agents-skills.js +239 -0
  9. package/bin/validate-agents.js +69 -0
  10. package/bin/validate-phase.js +263 -0
  11. package/content/.azure/README.md +293 -0
  12. package/content/.azure/docs/azure-devops-setup.md +454 -0
  13. package/content/.azure/docs/branch-strategy.md +398 -0
  14. package/content/.azure/docs/local-development.md +515 -0
  15. package/content/.azure/pipelines/pipeline-variables.yml +34 -0
  16. package/content/.azure/pipelines/prod-pipeline.yml +319 -0
  17. package/content/.azure/pipelines/staging-pipeline.yml +234 -0
  18. package/content/.azure/pipelines/templates/build-dotnet.yml +75 -0
  19. package/content/.azure/pipelines/templates/deploy-app-service.yml +94 -0
  20. package/content/.azure/pipelines/templates/deploy-container-app.yml +120 -0
  21. package/content/.azure/pipelines/templates/infra-deploy.yml +90 -0
  22. package/content/.claude/commands/morph-apply.md +118 -26
  23. package/content/.claude/commands/morph-archive.md +9 -9
  24. package/content/.claude/commands/morph-clarify.md +184 -0
  25. package/content/.claude/commands/morph-design.md +275 -0
  26. package/content/.claude/commands/morph-proposal.md +56 -15
  27. package/content/.claude/commands/morph-setup.md +100 -0
  28. package/content/.claude/commands/morph-status.md +47 -32
  29. package/content/.claude/commands/morph-tasks.md +319 -0
  30. package/content/.claude/commands/morph-uiux.md +211 -0
  31. package/content/.claude/skills/specialists/ai-system-architect.md +604 -0
  32. package/content/.claude/skills/specialists/ms-agent-expert.md +143 -89
  33. package/content/.claude/skills/specialists/ui-ux-designer.md +744 -9
  34. package/content/.claude/skills/stacks/dotnet-blazor.md +244 -8
  35. package/content/.claude/skills/stacks/dotnet-nextjs.md +2 -2
  36. package/content/.morph/.morphversion +5 -0
  37. package/content/.morph/config/agents.json +101 -8
  38. package/content/.morph/config/azure-pricing.json +70 -0
  39. package/content/.morph/config/azure-pricing.schema.json +50 -0
  40. package/content/.morph/config/config.template.json +15 -3
  41. package/content/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +392 -0
  42. package/content/.morph/hooks/README.md +239 -0
  43. package/content/.morph/hooks/pre-commit-agents.sh +24 -0
  44. package/content/.morph/hooks/pre-commit-all.sh +48 -0
  45. package/content/.morph/hooks/pre-commit-costs.sh +91 -0
  46. package/content/.morph/hooks/pre-commit-specs.sh +49 -0
  47. package/content/.morph/hooks/pre-commit-tests.sh +60 -0
  48. package/content/.morph/project.md +5 -4
  49. package/content/.morph/schemas/agent.schema.json +296 -0
  50. package/content/.morph/standards/agent-framework-setup.md +453 -0
  51. package/content/.morph/standards/architecture.md +142 -7
  52. package/content/.morph/standards/azure.md +218 -23
  53. package/content/.morph/standards/coding.md +47 -12
  54. package/content/.morph/standards/dotnet10-migration.md +494 -0
  55. package/content/.morph/standards/fluent-ui-setup.md +590 -0
  56. package/content/.morph/standards/migration-guide.md +514 -0
  57. package/content/.morph/standards/passkeys-auth.md +423 -0
  58. package/content/.morph/standards/vector-search-rag.md +536 -0
  59. package/content/.morph/state.json +18 -0
  60. package/content/.morph/templates/FluentDesignTheme.cs +149 -0
  61. package/content/.morph/templates/MudTheme.cs +281 -0
  62. package/content/.morph/templates/contracts.cs +55 -55
  63. package/content/.morph/templates/decisions.md +4 -4
  64. package/content/.morph/templates/design-system.css +226 -0
  65. package/content/.morph/templates/infra/.dockerignore.example +89 -0
  66. package/content/.morph/templates/infra/Dockerfile.example +82 -0
  67. package/content/.morph/templates/infra/README.md +286 -0
  68. package/content/.morph/templates/infra/app-service.bicep +164 -0
  69. package/content/.morph/templates/infra/deploy.ps1 +229 -0
  70. package/content/.morph/templates/infra/deploy.sh +208 -0
  71. package/content/.morph/templates/infra/main.bicep +41 -7
  72. package/content/.morph/templates/infra/parameters.dev.json +6 -0
  73. package/content/.morph/templates/infra/parameters.prod.json +6 -0
  74. package/content/.morph/templates/infra/parameters.staging.json +29 -0
  75. package/content/.morph/templates/proposal.md +3 -3
  76. package/content/.morph/templates/recap.md +3 -3
  77. package/content/.morph/templates/spec.md +9 -8
  78. package/content/.morph/templates/sprint-status.yaml +68 -0
  79. package/content/.morph/templates/state.template.json +222 -0
  80. package/content/.morph/templates/story.md +143 -0
  81. package/content/.morph/templates/tasks.md +1 -1
  82. package/content/.morph/templates/ui-components.md +276 -0
  83. package/content/.morph/templates/ui-design-system.md +286 -0
  84. package/content/.morph/templates/ui-flows.md +336 -0
  85. package/content/.morph/templates/ui-mockups.md +133 -0
  86. package/content/.morph/test-infra/example.bicep +59 -0
  87. package/content/CLAUDE.md +124 -0
  88. package/content/README.md +79 -0
  89. package/detectors/config-detector.js +223 -0
  90. package/detectors/conversation-analyzer.js +163 -0
  91. package/detectors/index.js +84 -0
  92. package/detectors/standards-generator.js +275 -0
  93. package/detectors/structure-detector.js +221 -0
  94. package/docs/README.md +149 -0
  95. package/docs/api/cost-calculator.js.html +513 -0
  96. package/docs/api/design-system-generator.js.html +382 -0
  97. package/docs/api/fonts/Montserrat/Montserrat-Bold.eot +0 -0
  98. package/docs/api/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
  99. package/docs/api/fonts/Montserrat/Montserrat-Bold.woff +0 -0
  100. package/docs/api/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
  101. package/docs/api/fonts/Montserrat/Montserrat-Regular.eot +0 -0
  102. package/docs/api/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
  103. package/docs/api/fonts/Montserrat/Montserrat-Regular.woff +0 -0
  104. package/docs/api/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
  105. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
  106. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +978 -0
  107. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
  108. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
  109. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
  110. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
  111. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1049 -0
  112. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
  113. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
  114. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
  115. package/docs/api/global.html +5263 -0
  116. package/docs/api/index.html +96 -0
  117. package/docs/api/scripts/collapse.js +39 -0
  118. package/docs/api/scripts/commonNav.js +28 -0
  119. package/docs/api/scripts/linenumber.js +25 -0
  120. package/docs/api/scripts/nav.js +12 -0
  121. package/docs/api/scripts/polyfill.js +4 -0
  122. package/docs/api/scripts/prettify/Apache-License-2.0.txt +202 -0
  123. package/docs/api/scripts/prettify/lang-css.js +2 -0
  124. package/docs/api/scripts/prettify/prettify.js +28 -0
  125. package/docs/api/scripts/search.js +99 -0
  126. package/docs/api/state-manager.js.html +423 -0
  127. package/docs/api/styles/jsdoc.css +776 -0
  128. package/docs/api/styles/prettify.css +80 -0
  129. package/docs/examples.md +328 -0
  130. package/docs/getting-started.md +302 -0
  131. package/docs/installation.md +361 -0
  132. package/docs/templates.md +418 -0
  133. package/docs/validation-checklist.md +266 -0
  134. package/package.json +39 -12
  135. package/src/commands/cost.js +181 -0
  136. package/src/commands/create-story.js +283 -0
  137. package/src/commands/detect.js +104 -0
  138. package/src/commands/doctor.js +67 -0
  139. package/src/commands/generate.js +149 -0
  140. package/src/commands/init.js +69 -45
  141. package/src/commands/shard-spec.js +224 -0
  142. package/src/commands/sprint-status.js +250 -0
  143. package/src/commands/state.js +333 -0
  144. package/src/commands/sync.js +167 -0
  145. package/src/commands/update-pricing.js +206 -0
  146. package/src/commands/update.js +88 -13
  147. package/src/lib/complexity-analyzer.js +292 -0
  148. package/src/lib/cost-calculator.js +429 -0
  149. package/src/lib/design-system-generator.js +298 -0
  150. package/src/lib/state-manager.js +340 -0
  151. package/src/utils/file-copier.js +59 -0
  152. package/src/utils/version-checker.js +175 -0
@@ -0,0 +1,184 @@
1
+ # MORPH Clarify - FASE 3
2
+
3
+ Identifique ambiguidades na especificação e faça perguntas de clarificação para garantir que todos os edge cases estão cobertos.
4
+
5
+ ## Uso
6
+
7
+ ```
8
+ /morph-clarify {feature-name}
9
+ ```
10
+
11
+ ## Pré-requisitos
12
+
13
+ - [ ] FASE 2 (Design) concluída
14
+ - [ ] `spec.md` aprovado pelo usuário
15
+ - [ ] `contracts.cs` definidos
16
+
17
+ ## Workflow
18
+
19
+ ### Passo 1: Analisar Spec
20
+
21
+ Leia `.morph/project/outputs/{feature}/spec.md` em detalhes e identifique:
22
+
23
+ #### 1.1. Ambiguidades
24
+ - Requisitos vagos ou genéricos
25
+ - Termos sem definição clara
26
+ - Comportamentos não especificados
27
+
28
+ #### 1.2. Edge Cases Não Documentados
29
+ - O que acontece se...?
30
+ - Como lidar com entradas inválidas?
31
+ - Comportamento em caso de erro?
32
+ - Estados intermediários (loading, empty)
33
+
34
+ #### 1.3. Requisitos Conflitantes
35
+ - Duas funcionalidades que parecem incompatíveis
36
+ - Prioridades não claras (o que vem primeiro?)
37
+
38
+ #### 1.4. Dados Faltantes
39
+ - Validações de negócio não especificadas
40
+ - Limites e constraints (tamanhos, quantidades)
41
+ - Formatos de dados (datas, moedas, etc.)
42
+
43
+ ### Passo 2: Gerar Perguntas de Clarificação
44
+
45
+ Com base na análise, gere **3-7 perguntas** focadas e específicas:
46
+
47
+ **Formato de pergunta:**
48
+ ```markdown
49
+ ### Q{N}: {Categoria} - {Título}
50
+
51
+ **Context:** {Por que esta pergunta é importante}
52
+
53
+ **Question:** {Pergunta clara e objetiva}
54
+
55
+ **Options (if applicable):**
56
+ - A) {Opção 1}
57
+ - B) {Opção 2}
58
+ - C) {Deixar em aberto/usuário decidir}
59
+
60
+ **Impact:** {Como a resposta afeta a implementação}
61
+ ```
62
+
63
+ **Exemplo:**
64
+
65
+ ```markdown
66
+ ### Q1: Validação - Limite de Nome de Projeto
67
+
68
+ **Context:** O spec menciona "nome de projeto" mas não especifica limites.
69
+
70
+ **Question:** Qual o comprimento máximo do nome de projeto?
71
+
72
+ **Options:**
73
+ - A) 50 caracteres (padrão curto)
74
+ - B) 100 caracteres (padrão médio)
75
+ - C) 255 caracteres (padrão longo)
76
+ - D) Sem limite (validar apenas se não vazio)
77
+
78
+ **Impact:** Afeta validação do DTO, schema do banco, e UI (tamanho do input).
79
+ ```
80
+
81
+ ### Passo 3: Categorizar Perguntas
82
+
83
+ Organize perguntas por categoria:
84
+
85
+ | Categoria | Descrição | Exemplos |
86
+ |-----------|-----------|----------|
87
+ | **Validação** | Regras de negócio, constraints | Limites de tamanho, formatos aceitos |
88
+ | **Comportamento** | O que acontece quando... | Error handling, estados vazios |
89
+ | **Prioridade** | O que é must-have vs nice-to-have | MVP vs futuras iterações |
90
+ | **Integração** | Como interage com sistemas externos | APIs, webhooks, formato de dados |
91
+ | **Performance** | Requisitos de velocidade/volume | Quantos registros? Tempo de resposta? |
92
+ | **UX** | Experiência do usuário | Feedback visual, mensagens de erro |
93
+
94
+ ### Passo 4: Apresentar Perguntas ao Usuário
95
+
96
+ Liste todas as perguntas de forma clara e estruturada.
97
+
98
+ **IMPORTANTE:** Não prossiga para próxima fase até ter respostas!
99
+
100
+ ### Passo 5: Atualizar `spec.md` com Respostas
101
+
102
+ Após receber respostas do usuário, atualize o spec com:
103
+
104
+ 1. **Seção de Clarificações** no início do spec:
105
+ ```markdown
106
+ ## Clarifications (FASE 3)
107
+
108
+ ### Q1: {Título}
109
+ **Answer:** {Resposta do usuário}
110
+ **Date:** {YYYY-MM-DD}
111
+
112
+ ### Q2: {Título}
113
+ **Answer:** {Resposta do usuário}
114
+ **Date:** {YYYY-MM-DD}
115
+ ```
116
+
117
+ 2. **Atualizar seções relevantes** com detalhes adicionados:
118
+ - Requisitos funcionais mais específicos
119
+ - Validações documentadas
120
+ - Edge cases cobertos
121
+
122
+ ### Passo 6: Validar Edge Cases
123
+
124
+ Documente no spec como lidar com cada edge case identificado:
125
+
126
+ ```markdown
127
+ ## Edge Cases
128
+
129
+ ### EC001: {Nome do Edge Case}
130
+ **Scenario:** {Quando acontece}
131
+ **Expected Behavior:** {Como o sistema deve reagir}
132
+ **Implementation Notes:** {Dicas para implementação}
133
+
134
+ **Example:**
135
+ - Input: {exemplo de entrada problemática}
136
+ - Output: {comportamento esperado}
137
+ ```
138
+
139
+ ### Passo 7: Atualizar State
140
+
141
+ ```bash
142
+ # Marcar fase como clarify
143
+ node bin/state-manager.js set {feature-name} phase clarify
144
+
145
+ # State permanece in_progress até usuário responder todas as perguntas
146
+ ```
147
+
148
+ ## Outputs Gerados/Atualizados
149
+
150
+ - `.morph/project/outputs/{feature}/spec.md` - Atualizado com:
151
+ - Seção "Clarifications" com perguntas e respostas
152
+ - Edge cases documentados
153
+ - Requisitos mais específicos
154
+
155
+ ## ⛔ PAUSA OBRIGATÓRIA
156
+
157
+ Apresente perguntas de clarificação e aguarde respostas do usuário.
158
+
159
+ **Não prossiga até ter todas as respostas!**
160
+
161
+ Após receber respostas, atualizar spec e apresentar:
162
+
163
+ 1. ✅ **Aprovar clarificações e continuar para tasks**
164
+ Prosseguir para `/morph-tasks` (FASE 4)
165
+
166
+ 2. 🔄 **Fazer mais perguntas** (se ainda houver dúvidas)
167
+ Iterar novamente nesta fase
168
+
169
+ 3. 📋 **Revisar spec atualizado**
170
+ Validar que clarificações foram bem incorporadas
171
+
172
+ ## Critérios de Avanço
173
+
174
+ - [x] Perguntas de clarificação identificadas (3-7)
175
+ - [x] Perguntas apresentadas ao usuário
176
+ - [x] Respostas do usuário recebidas
177
+ - [x] `spec.md` atualizado com clarificações
178
+ - [x] Edge cases documentados
179
+ - [x] State atualizado
180
+ - [x] Nenhuma ambiguidade crítica remanescente
181
+
182
+ ---
183
+
184
+ **Feature:** $ARGUMENTS
@@ -0,0 +1,275 @@
1
+ # MORPH Design - FASE 2
2
+
3
+ Expanda a proposta em especificação técnica completa, contracts, decisões arquiteturais e estimativa de custos.
4
+
5
+ ## Uso
6
+
7
+ ```
8
+ /morph-design {feature-name}
9
+ ```
10
+
11
+ ## Pré-requisitos
12
+
13
+ - [ ] FASE 1 (Setup) concluída
14
+ - [ ] FASE 1.5 (UI/UX) concluída OU pulada (se não houver front-end)
15
+ - [ ] Proposta aprovada pelo usuário
16
+
17
+ ## Workflow
18
+
19
+ ### Passo 1: Carregar Contexto
20
+
21
+ Leia os arquivos existentes da feature:
22
+
23
+ ```bash
24
+ # Verificar outputs existentes
25
+ node bin/state-manager.js get {feature-name}
26
+ ```
27
+
28
+ Leia:
29
+ 1. `.morph/project/outputs/{feature}/proposal.md` - Proposta inicial
30
+ 2. `.morph/project/outputs/{feature}/ui-*.md` - UI/UX specs (se existirem)
31
+ 3. `framework/standards/` e `.morph/project/standards/` - Padrões aplicáveis
32
+
33
+ ### Passo 2: Gerar `spec.md`
34
+
35
+ Crie `.morph/project/outputs/{feature}/spec.md` com:
36
+
37
+ #### 2.1. Overview
38
+ - **Objetivo:** Resumo de 1-2 parágrafos
39
+ - **Usuários afetados:** Quem vai usar?
40
+ - **Problema resolvido:** Qual dor/necessidade?
41
+
42
+ #### 2.2. Functional Requirements
43
+ Lista detalhada de requisitos funcionais:
44
+ ```markdown
45
+ ### FR001: {Requisito}
46
+ **Description:** {O que deve fazer}
47
+ **Acceptance Criteria:**
48
+ - [ ] Critério 1
49
+ - [ ] Critério 2
50
+ **Priority:** High/Medium/Low
51
+ ```
52
+
53
+ #### 2.3. Non-Functional Requirements
54
+ - Performance (tempos de resposta esperados)
55
+ - Segurança (autenticação, autorização)
56
+ - Escalabilidade (volume de dados/usuários)
57
+ - Disponibilidade (uptime esperado)
58
+
59
+ #### 2.4. Technical Architecture
60
+ - **Camadas:** (Presentation, Application, Domain, Infrastructure)
61
+ - **Patterns:** (Repository, CQRS, DI, etc.)
62
+ - **Dependências:** Bibliotecas/serviços externos necessários
63
+
64
+ #### 2.5. Data Model
65
+ - Entities principais
66
+ - Relacionamentos (1:1, 1:N, N:N)
67
+ - Campos obrigatórios vs opcionais
68
+ - Validações de negócio
69
+
70
+ #### 2.6. Infrastructure Requirements
71
+ Se houver recursos Azure:
72
+ - Banco de dados (Azure SQL, Cosmos DB)
73
+ - Storage (Blob Storage)
74
+ - Compute (Container Apps, App Service)
75
+ - Monitoring (App Insights)
76
+
77
+ **SEMPRE usar Bicep para infra!**
78
+
79
+ ### Passo 3: Gerar `contracts.cs`
80
+
81
+ Crie `.morph/project/outputs/{feature}/contracts.cs` com:
82
+
83
+ ```csharp
84
+ // Interfaces, DTOs, Enums, Value Objects
85
+
86
+ namespace {ProjectName}.Features.{FeatureName};
87
+
88
+ // DTOs (Data Transfer Objects)
89
+ public record {Feature}CreateDto(
90
+ string Name,
91
+ DateTime Date
92
+ );
93
+
94
+ public record {Feature}ResponseDto(
95
+ Guid Id,
96
+ string Name,
97
+ DateTime Date,
98
+ DateTime CreatedAt
99
+ );
100
+
101
+ // Interfaces
102
+ public interface I{Feature}Service
103
+ {
104
+ Task<{Feature}ResponseDto> CreateAsync({Feature}CreateDto dto, CancellationToken ct);
105
+ Task<{Feature}ResponseDto?> GetByIdAsync(Guid id, CancellationToken ct);
106
+ }
107
+
108
+ // Enums
109
+ public enum {Feature}Status
110
+ {
111
+ Pending,
112
+ Active,
113
+ Completed
114
+ }
115
+ ```
116
+
117
+ **Padrões obrigatórios:**
118
+ - Records para DTOs (immutable)
119
+ - Interfaces para serviços
120
+ - CancellationToken em métodos async
121
+ - Nullable reference types habilitados
122
+
123
+ ### Passo 4: Iniciar `decisions.md`
124
+
125
+ Crie `.morph/project/outputs/{feature}/decisions.md` com ADRs relevantes:
126
+
127
+ ```markdown
128
+ # Architectural Decision Records (ADRs)
129
+
130
+ ## ADR-001: {Decisão Arquitetural}
131
+
132
+ **Status:** Proposed/Accepted/Deprecated
133
+
134
+ **Context:**
135
+ {Por que esta decisão foi necessária}
136
+
137
+ **Decision:**
138
+ {O que foi decidido}
139
+
140
+ **Consequences:**
141
+ **Pros:**
142
+ - Pro 1
143
+ - Pro 2
144
+
145
+ **Cons:**
146
+ - Con 1
147
+ - Con 2
148
+
149
+ **Alternatives Considered:**
150
+ - Alternativa 1: {Por que foi rejeitada}
151
+ - Alternativa 2: {Por que foi rejeitada}
152
+
153
+ **Date:** {YYYY-MM-DD}
154
+
155
+ ---
156
+ ```
157
+
158
+ **ADRs obrigatórios:**
159
+ - Escolha de biblioteca UI (se FASE 1.5 executou)
160
+ - Padrões arquiteturais (CQRS, Repository, etc.)
161
+ - Recursos Azure (se houver infra)
162
+ - Integrações externas (APIs, webhooks, etc.)
163
+
164
+ ### Passo 5: Estimar Custos
165
+
166
+ Se houver recursos Azure na spec (arquivos Bicep):
167
+
168
+ ```bash
169
+ # Calcular custos automaticamente
170
+ node bin/calculate-costs.js .morph/project/outputs/{feature}/infra/*.bicep --verbose
171
+ ```
172
+
173
+ O cost calculator:
174
+ - Parseia arquivos Bicep e extrai recursos + SKUs
175
+ - Calcula custo mensal baseado em pricing table do Azure
176
+ - Valida contra limites configurados em `.morph/config/config.json`
177
+ - Exit code 1 se exceder o limite `requiresADR` (padrão: $10)
178
+
179
+ **Limites configuráveis** (em config.json):
180
+ - `costs.limits.freeTierOnly`: $0 (apenas free tier)
181
+ - `costs.limits.withApproval`: $10 (requer confirmação do usuário)
182
+ - `costs.limits.requiresADR`: $10 (requer ADR documentado)
183
+
184
+ **Exemplo de output:**
185
+ ```
186
+ ╔════════════════════════════════════════════════╗
187
+ ║ MORPH-SPEC COST CALCULATOR ║
188
+ ╠════════════════════════════════════════════════╣
189
+ ║ sqlDatabase (Basic) $4.99/mo ║
190
+ ║ containerApp (Consumption) $0.00/mo ║
191
+ ║ appInsights (Free) $0.00/mo ║
192
+ ╠════════════════════════════════════════════════╣
193
+ ║ Total Monthly Cost: $4.99 ║
194
+ ║ Requires Approval: YES ║
195
+ ║ Requires ADR: NO ║
196
+ ╚════════════════════════════════════════════════╝
197
+ ```
198
+
199
+ **Documente custos em `decisions.md`:**
200
+
201
+ ```markdown
202
+ ## ADR-XXX: Infrastructure Costs
203
+
204
+ **Estimated Monthly Cost:** $X.XX
205
+
206
+ **Breakdown:**
207
+ - Azure SQL Basic: $5.00
208
+ - Container App (scale-to-zero): $0.00
209
+ - Storage LRS (1GB): $0.02
210
+ - App Insights Free: $0.00
211
+
212
+ **Total:** $5.02/month
213
+
214
+ **Approval Required:** {Yes/No - based on $10 threshold}
215
+
216
+ **Justification:**
217
+ {Se > $10, justificar aqui}
218
+ ```
219
+
220
+ 4. Atualizar state com custo:
221
+
222
+ ```bash
223
+ node bin/state-manager.js set {feature-name} costs.estimated {X.XX}
224
+ node bin/state-manager.js set {feature-name} costs.approved {true/false}
225
+ ```
226
+
227
+ ### Passo 6: Atualizar State
228
+
229
+ ```bash
230
+ # Marcar fase como design
231
+ node bin/state-manager.js set {feature-name} phase design
232
+
233
+ # Marcar outputs criados
234
+ node bin/state-manager.js mark-output {feature-name} spec
235
+ node bin/state-manager.js mark-output {feature-name} contracts
236
+ node bin/state-manager.js mark-output {feature-name} decisions
237
+ ```
238
+
239
+ ## Outputs Gerados
240
+
241
+ - `.morph/project/outputs/{feature}/spec.md` - Especificação técnica completa
242
+ - `.morph/project/outputs/{feature}/contracts.cs` - Interfaces, DTOs, Enums
243
+ - `.morph/project/outputs/{feature}/decisions.md` - ADRs (novo ou atualizado)
244
+ - State atualizado com custos estimados
245
+
246
+ ## ⛔ PAUSA OBRIGATÓRIA
247
+
248
+ Apresente ao usuário 3 ações sugeridas:
249
+
250
+ 1. ✅ **Aprovar design e continuar para clarificação**
251
+ Prosseguir para `/morph-clarify` (FASE 3)
252
+
253
+ 2. 🔄 **Ajustar escopo/complexidade**
254
+ Revisar spec.md para reduzir ou expandir funcionalidades
255
+
256
+ 3. 💰 **Revisar custos estimados** (se houver recursos Azure)
257
+ Ajustar SKUs ou recursos para ficar dentro do budget
258
+
259
+ 4. 📋 **Modificar contracts**
260
+ Ajustar interfaces/DTOs se necessário
261
+
262
+ **Formato:** Escolher 3 das opções acima, contextualizadas para a feature
263
+
264
+ ## Critérios de Avanço
265
+
266
+ - [x] `spec.md` completo com todos os requisitos
267
+ - [x] `contracts.cs` com interfaces e DTOs
268
+ - [x] `decisions.md` com ADRs relevantes
269
+ - [x] Custos estimados e documentados (se houver infra)
270
+ - [x] State atualizado
271
+ - [x] Usuário aprovou design
272
+
273
+ ---
274
+
275
+ **Feature:** $ARGUMENTS
@@ -5,56 +5,97 @@ Crie uma nova proposta de feature seguindo o workflow MORPH.
5
5
  ## Contexto
6
6
 
7
7
  Leia os seguintes arquivos para entender o projeto:
8
- - `.morph/project.md` - Contexto e convenções do projeto
9
- - `.morph/standards/` - Padrões técnicos
8
+ - `.morph/project/context/README.md` - Contexto do projeto
9
+ - `framework/standards/` e `.morph/project/standards/` - Padrões técnicos
10
10
  - `.morph/config/agents.json` - Agentes disponíveis
11
11
 
12
12
  ## Workflow
13
13
 
14
- 1. **Analise a solicitação** e identifique:
14
+ 1. **Detecte agentes automaticamente**:
15
+ ```bash
16
+ node bin/detect-agents.js "$ARGUMENTS"
17
+ ```
18
+ Isso retorna quais agentes devem ser ativados baseado em keywords.
19
+
20
+ 2. **Invoque skills dos agentes detectados**:
21
+ - Para agentes com `skillPath` em agents.json, invoque o Skill correspondente
22
+ - Exemplo: Se detectou `uiux-designer`, consulte `.claude/skills/specialists/ui-ux-designer.md`
23
+ - Skills contêm conhecimento especializado, workflows e prompts detalhados
24
+ - Use conhecimento dos skills para enriquecer a proposta
25
+
26
+ 3. **Analise a solicitação** e identifique:
15
27
  - Problema a resolver
16
28
  - Usuários afetados
17
29
  - Impacto esperado
18
30
 
19
- 2. **Crie a estrutura da feature**:
31
+ 4. **Crie a estrutura da feature**:
20
32
  ```
21
- .morph/features/{feature-name}/
33
+ .morph/project/outputs/{feature-name}/
22
34
  ├── proposal.md # Proposta inicial
23
35
  ├── spec.md # Especificação técnica (iniciar)
24
- └── tasks.md # Lista de tasks (iniciar)
36
+ └── tasks.json # Lista de tasks (iniciar)
25
37
  ```
26
38
 
27
- 3. **Preencha `proposal.md`** baseado em `.morph/templates/proposal.md`:
39
+ 5. **Preencha `proposal.md`** baseado em `framework/templates/proposal.md`:
28
40
  - Problem Statement
29
41
  - Proposed Solution
30
42
  - Success Metrics
31
43
  - Scope (In/Out)
32
44
  - Estimated Effort
33
45
  - Cost Impact
46
+ - **Agents Activated** (lista dos agentes detectados)
34
47
 
35
- 4. **Inicie `spec.md`** com:
48
+ 6. **Inicie `spec.md`** com:
36
49
  - User Stories principais
37
50
  - Arquitetura proposta
38
51
  - Data Model inicial
39
52
 
40
- 5. **Inicie `tasks.md`** com:
41
- - Tasks de alto nível identificadas
53
+ 7. **Inicie `tasks.json`** com:
54
+ - Tasks de alto nível identificadas (formato JSON)
42
55
  - Checkpoints sugeridos
43
56
 
44
- 6. **Ative agentes especializados** baseado nas keywords:
45
- - ⏰ Hangfire: scheduled, job, background
46
- - 🎨 UI/UX: wizard, dashboard, complex
47
- - 📋 PO/PM: unclear, requirements, priority
57
+ ## State Management
58
+
59
+ Após criar o proposal, **SEMPRE** registre a feature no state.json:
60
+
61
+ ```bash
62
+ # Criar entrada no state
63
+ node bin/state-manager.js set {feature-name} status draft
64
+ node bin/state-manager.js set {feature-name} phase proposal
65
+
66
+ # Marcar output como criado
67
+ node bin/state-manager.js mark-output {feature-name} proposal
68
+
69
+ # Adicionar agentes ativados (todos os detectados)
70
+ # Parsear output do detect-agents.js e adicionar cada um:
71
+ for agent in $(node bin/detect-agents.js --ids-only "$ARGUMENTS"); do
72
+ node bin/state-manager.js add-agent {feature-name} $agent
73
+ done
74
+ ```
75
+
76
+ **Exemplo completo:**
77
+ ```bash
78
+ # Detectar e registrar agentes
79
+ AGENTS=$(node bin/detect-agents.js --ids-only "implementar dashboard com charts")
80
+ # Retorna: standards-architect, azure-architect, ..., uiux-designer
81
+
82
+ # Para cada agente
83
+ echo "$AGENTS" | while read agent; do
84
+ node bin/state-manager.js add-agent my-feature "$agent"
85
+ done
86
+ ```
48
87
 
49
88
  ## Output
50
89
 
51
90
  Ao final, apresente:
52
91
  1. Resumo da proposta
53
- 2. Agentes ativados
92
+ 2. Agentes ativados (e registrados no state)
54
93
  3. Custo estimado
55
94
  4. Perguntas de clarificação (se houver)
56
95
  5. Solicitar aprovação para prosseguir para DESIGN
57
96
 
97
+ **IMPORTANTE:** Confirme que a feature foi registrada no state.json executando `node bin/state-manager.js list`.
98
+
58
99
  ---
59
100
 
60
101
  **Feature solicitada:** $ARGUMENTS
@@ -0,0 +1,100 @@
1
+ # MORPH Setup - FASE 1
2
+
3
+ Inicialize o contexto e prepare o ambiente para uma feature aprovada.
4
+
5
+ ## Uso
6
+
7
+ ```
8
+ /morph-setup {feature-name}
9
+ ```
10
+
11
+ ## Pré-requisitos
12
+
13
+ - [ ] Feature tem `proposal.md` criado (FASE 0 concluída)
14
+ - [ ] Proposal foi aprovado pelo usuário
15
+ - [ ] Agentes foram detectados e registrados no state
16
+
17
+ ## Workflow
18
+
19
+ ### Passo 1: Verificar State
20
+
21
+ Confirme que a feature existe no state:
22
+
23
+ ```bash
24
+ node bin/state-manager.js get {feature-name}
25
+ ```
26
+
27
+ Se não existir, volte para `/morph-proposal`.
28
+
29
+ ### Passo 2: Carregar Contexto do Projeto
30
+
31
+ Leia os seguintes arquivos para entender o projeto:
32
+
33
+ 1. **Contexto geral**:
34
+ - `.morph/project/context/README.md` - Overview do projeto
35
+ - `.morph/config.json` - Configurações
36
+
37
+ 2. **Standards do framework**:
38
+ - `framework/standards/coding.md` - Padrões de código
39
+ - `framework/standards/architecture.md` - Padrões de arquitetura
40
+ - `framework/standards/azure.md` - Padrões Azure e IaC
41
+
42
+ 3. **Standards do projeto** (sobrescrevem framework se existirem):
43
+ - `.morph/project/standards/coding.md`
44
+ - `.morph/project/standards/architecture.md`
45
+ - `.morph/project/standards/inferred.md` - Standards detectados
46
+
47
+ ### Passo 3: Confirmar Stack
48
+
49
+ Baseado no proposal e contexto, confirme:
50
+ - Stack tecnológica (Blazor Server, Next.js, Shopify, etc.)
51
+ - Padrões arquiteturais aplicáveis
52
+ - Componentes reutilizáveis existentes
53
+
54
+ ### Passo 4: Listar Agentes Ativos
55
+
56
+ Mostre os agentes detectados no proposal:
57
+
58
+ ```bash
59
+ node bin/state-manager.js get {feature-name}
60
+ ```
61
+
62
+ Parse o JSON e liste os `activeAgents` com seus emojis e responsabilidades (consulte `.morph/config/agents.json`).
63
+
64
+ ### Passo 5: Atualizar State
65
+
66
+ Marque a feature como na fase SETUP:
67
+
68
+ ```bash
69
+ node bin/state-manager.js set {feature-name} phase setup
70
+ node bin/state-manager.js set {feature-name} status in_progress
71
+ ```
72
+
73
+ ## Outputs
74
+
75
+ **Apresente ao usuário:**
76
+
77
+ 1. **Contexto carregado**:
78
+ - Nome do projeto
79
+ - Stack confirmado
80
+ - Standards aplicáveis
81
+
82
+ 2. **Agentes ativos**:
83
+ - Lista de agentes com emojis
84
+ - Responsabilidades de cada um
85
+
86
+ 3. **Próximos passos**:
87
+ - Se feature tem UI/UX keywords → `/morph-uiux` (FASE 1.5)
88
+ - Se NÃO tem UI/UX → `/morph-design` (FASE 2)
89
+
90
+ ## Critérios de Avanço
91
+
92
+ - [x] Contexto do projeto carregado
93
+ - [x] Standards identificados (framework + project)
94
+ - [x] Stack confirmado
95
+ - [x] Agentes listados
96
+ - [x] State atualizado para phase: setup
97
+
98
+ ---
99
+
100
+ **Feature:** $ARGUMENTS