@polymorphism-tech/morph-spec 1.0.2 → 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 +114 -12
  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 +71 -46
  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 +63 -0
  152. package/src/utils/version-checker.js +175 -0
@@ -0,0 +1,392 @@
1
+ # Story-Driven Development - Guia do Usuário
2
+
3
+ > **O que você faz quando implementa uma feature usando MORPH-SPEC**
4
+
5
+ ---
6
+
7
+ ## 📋 Você Está Aqui
8
+
9
+ Você acabou de terminar as fases 0-4 do MORPH:
10
+ - ✅ Criou `spec.md` (especificação técnica)
11
+ - ✅ Criou `contracts.cs` (interfaces/DTOs)
12
+ - ✅ Criou `tasks.json` (lista de tasks)
13
+ - ✅ Aprovou tudo
14
+
15
+ **Agora você vai implementar. Este guia mostra como.**
16
+
17
+ ---
18
+
19
+ ## 🚀 Passo a Passo Completo
20
+
21
+ ### Cenário: Feature "scheduled-reports" com 10 tasks
22
+
23
+ ```bash
24
+ # ============================================================================
25
+ # ETAPA 1: PREPARAÇÃO (1x por feature)
26
+ # ============================================================================
27
+
28
+ # 1.1 - Dividir spec.md em partes menores (opcional, mas recomendado)
29
+ morph-spec story shard scheduled-reports
30
+
31
+ # Isso cria:
32
+ # .morph/project/outputs/scheduled-reports/spec/
33
+ # ├── index.md
34
+ # ├── entity-design.md
35
+ # ├── service-layer.md
36
+ # └── ui-components.md
37
+
38
+ # 1.2 - Criar primeira story
39
+ morph-spec story create scheduled-reports SR-001 \
40
+ --title "Create ScheduledReport entity" \
41
+ --tasks "Create entity,Configure EF mapping,Create migration,Write tests"
42
+
43
+ # Isso cria:
44
+ # .morph/project/outputs/scheduled-reports/stories/SR-001.md
45
+ # (arquivo com TODO o contexto que você precisa)
46
+
47
+ # 1.3 - Criar demais stories
48
+ morph-spec story create scheduled-reports SR-002 \
49
+ --title "Implement ReportService" \
50
+ --tasks "Create interface,Implement service,Add DI,Write tests"
51
+
52
+ morph-spec story create scheduled-reports SR-003 \
53
+ --title "Create report UI component" \
54
+ --tasks "Create razor component,Add to router,Style with Fluent UI"
55
+
56
+ # ... criar SR-004, SR-005, etc.
57
+
58
+ # 1.4 - Ver todas as stories criadas
59
+ morph-spec story status scheduled-reports show
60
+
61
+ # Output:
62
+ # 📊 Sprint Status: scheduled-reports
63
+ # Progress: 0% (0/10 stories done)
64
+ # Stories:
65
+ # ✅ SR-001: Create ScheduledReport entity (ready)
66
+ # ✅ SR-002: Implement ReportService (ready)
67
+ # ✅ SR-003: Create report UI component (ready)
68
+ # ...
69
+
70
+
71
+ # ============================================================================
72
+ # ETAPA 2: IMPLEMENTAR STORY SR-001 (repetir para cada story)
73
+ # ============================================================================
74
+
75
+ # 2.1 - Marcar que você vai começar a trabalhar nela
76
+ morph-spec story status scheduled-reports start SR-001
77
+
78
+ # 2.2 - Abrir a story
79
+ cat .morph/project/outputs/scheduled-reports/stories/SR-001.md
80
+
81
+ # Você vai ver:
82
+ # - Context (resumo do que fazer)
83
+ # - Dev Notes (dicas automáticas tipo "use Primary Constructor")
84
+ # - Tasks (lista de tarefas)
85
+ # - Acceptance Criteria (como validar se tá certo)
86
+
87
+ # 2.3 - Ler SÓ a parte relevante do spec (não o spec inteiro)
88
+ cat .morph/project/outputs/scheduled-reports/spec/entity-design.md
89
+
90
+ # 2.4 - Implementar o código
91
+ # (você vai escrever o código da entity, testes, etc.)
92
+
93
+ # 2.5 - Editar a story para adicionar suas notas
94
+ nano .morph/project/outputs/scheduled-reports/stories/SR-001.md
95
+
96
+ # Procurar a seção "### Dev Notes (Added by Dev Agent)"
97
+ # Adicionar algo tipo:
98
+ ### Dev Notes (Added by Dev Agent)
99
+ ```
100
+ ✅ Implementado ScheduledReport.cs (linha 12)
101
+ ✅ EF mapping em ReportDbContext.cs (linha 45)
102
+ ✅ Migration: 20251209_AddScheduledReports.cs
103
+ ✅ Testes: ScheduledReportTests.cs (12 tests)
104
+ ⚠️ RecurrencePattern usa regex complexo
105
+ ```
106
+
107
+ # 2.6 - Marcar que terminou e está pronto para revisar
108
+ morph-spec story status scheduled-reports qa SR-001
109
+
110
+ # 2.7 - Commitar código
111
+ git add .
112
+ git commit -m "feat(SR-001): create ScheduledReport entity"
113
+
114
+
115
+ # ============================================================================
116
+ # ETAPA 3: REVISAR STORY SR-001 (QA)
117
+ # ============================================================================
118
+
119
+ # 3.1 - Ver status
120
+ morph-spec story status scheduled-reports show
121
+
122
+ # Output:
123
+ # 👀 SR-001: Create ScheduledReport entity (ready_for_qa)
124
+
125
+ # 3.2 - Abrir a story (agora com as notas do Dev)
126
+ cat .morph/project/outputs/scheduled-reports/stories/SR-001.md
127
+
128
+ # Você vai ver as Dev Notes que foram adicionadas:
129
+ # "✅ Implementado ScheduledReport.cs (linha 12)"
130
+ # "⚠️ RecurrencePattern usa regex complexo"
131
+
132
+ # 3.3 - Revisar o código
133
+ cat src/Domain/Entities/ScheduledReport.cs
134
+ cat tests/Unit/ScheduledReportTests.cs
135
+
136
+ # 3.4 - Se precisar refatorar, refatore
137
+
138
+ # 3.5 - Editar a story para adicionar notas de revisão
139
+ nano .morph/project/outputs/scheduled-reports/stories/SR-001.md
140
+
141
+ # Procurar a seção "### QA Notes (Added by QA Agent)"
142
+ # Adicionar algo tipo:
143
+ ### QA Notes (Added by QA Agent)
144
+ ```
145
+ ✅ Código OK, segue padrões
146
+ ✅ Refatorei ValidateRecurrence() (linha 89)
147
+ ✅ Adicionei 3 testes de edge cases
148
+ ✅ Todos os acceptance criteria validados
149
+ ```
150
+
151
+ # 3.6 - Marcar como concluída
152
+ morph-spec story status scheduled-reports done SR-001
153
+
154
+ # Output:
155
+ # ✅ Story SR-001 marked as DONE
156
+ # 📋 Next Story: SR-002
157
+
158
+ # 3.7 - Commitar mudanças (se fez refactoring)
159
+ git add .
160
+ git commit -m "refactor(SR-001): extract ValidateRecurrence method"
161
+
162
+
163
+ # ============================================================================
164
+ # ETAPA 4: PRÓXIMA STORY (SR-002)
165
+ # ============================================================================
166
+
167
+ # Repetir ETAPA 2 e 3 para SR-002:
168
+ morph-spec story status scheduled-reports start SR-002
169
+ cat .morph/project/outputs/scheduled-reports/stories/SR-002.md
170
+ cat .morph/project/outputs/scheduled-reports/spec/service-layer.md
171
+ # ... implementar ...
172
+ # ... adicionar Dev Notes ...
173
+ morph-spec story status scheduled-reports qa SR-002
174
+ # ... revisar ...
175
+ # ... adicionar QA Notes ...
176
+ morph-spec story status scheduled-reports done SR-002
177
+
178
+ # Repetir para SR-003, SR-004, ..., SR-010
179
+
180
+
181
+ # ============================================================================
182
+ # ETAPA 5: FINALIZAÇÃO
183
+ # ============================================================================
184
+
185
+ # Ver progresso geral
186
+ morph-spec story status scheduled-reports show
187
+
188
+ # Output:
189
+ # 📊 Sprint Status: scheduled-reports
190
+ # Progress: 100% (10/10 stories done)
191
+ # 🎉 All stories completed!
192
+
193
+ # Pronto! Feature implementada.
194
+ ```
195
+
196
+ ---
197
+
198
+ ## 📝 Comandos que Você Usa
199
+
200
+ ### Criar stories (início da feature)
201
+ ```bash
202
+ morph-spec story shard <feature-name>
203
+ morph-spec story create <feature-name> <story-id> --title "..." --tasks "..."
204
+ ```
205
+
206
+ ### Ver status
207
+ ```bash
208
+ morph-spec story status <feature-name> show
209
+ ```
210
+
211
+ ### Marcar que vai começar
212
+ ```bash
213
+ morph-spec story status <feature-name> start <story-id>
214
+ ```
215
+
216
+ ### Marcar que terminou (vai para QA)
217
+ ```bash
218
+ morph-spec story status <feature-name> qa <story-id>
219
+ ```
220
+
221
+ ### Marcar como concluída
222
+ ```bash
223
+ morph-spec story status <feature-name> done <story-id>
224
+ ```
225
+
226
+ ### Ver próxima story
227
+ ```bash
228
+ morph-spec story status <feature-name> next
229
+ ```
230
+
231
+ ---
232
+
233
+ ## 🔄 Seu Dia a Dia
234
+
235
+ ### Segunda-feira: Criar as stories
236
+ ```bash
237
+ morph-spec story shard my-feature
238
+ morph-spec story create my-feature MF-001 --title "..." --tasks "..."
239
+ morph-spec story create my-feature MF-002 --title "..." --tasks "..."
240
+ morph-spec story create my-feature MF-003 --title "..." --tasks "..."
241
+ ```
242
+
243
+ ### Terça-feira: Implementar MF-001
244
+ ```bash
245
+ morph-spec story status my-feature start MF-001
246
+ cat .morph/project/outputs/my-feature/stories/MF-001.md
247
+ cat .morph/project/outputs/my-feature/spec/entity-design.md
248
+ # [implementar código]
249
+ # [adicionar Dev Notes na story]
250
+ morph-spec story status my-feature qa MF-001
251
+ git commit ...
252
+ ```
253
+
254
+ ### Terça à tarde: Revisar MF-001
255
+ ```bash
256
+ cat .morph/project/outputs/my-feature/stories/MF-001.md # ver Dev Notes
257
+ # [revisar código]
258
+ # [adicionar QA Notes na story]
259
+ morph-spec story status my-feature done MF-001
260
+ git commit ...
261
+ ```
262
+
263
+ ### Quarta-feira: Implementar MF-002
264
+ ```bash
265
+ morph-spec story status my-feature start MF-002
266
+ # ... repetir workflow
267
+ ```
268
+
269
+ ---
270
+
271
+ ## ❓ Perguntas Comuns
272
+
273
+ ### "Preciso shardar o spec?"
274
+ **Não é obrigatório.** Só recomendado se seu `spec.md` for grande (5+ seções).
275
+
276
+ Se for pequeno, pule o `shard-spec.js` e vá direto para `create-story.js`.
277
+
278
+ ---
279
+
280
+ ### "Quantas tasks por story?"
281
+ **4-8 tasks** é ideal. Se tiver mais, quebre em sub-stories.
282
+
283
+ Exemplo:
284
+ - ❌ Ruim: Story com 20 tasks (muito grande)
285
+ - ✅ Bom: Story com 5 tasks (1 dia de trabalho)
286
+
287
+ ---
288
+
289
+ ### "O que são Dev Notes e QA Notes?"
290
+ **Dev Notes:** Você (Dev) escreve o que implementou, para o QA saber.
291
+
292
+ **QA Notes:** Você (QA) escreve o que revisou/refatorou.
293
+
294
+ **Exemplo:**
295
+ ```markdown
296
+ ### Dev Notes (Added by Dev Agent)
297
+ ```
298
+ ✅ Implementei X.cs na pasta Domain/
299
+ ⚠️ Cuidado: usa regex complexo na linha 67
300
+ ```
301
+
302
+ ### QA Notes (Added by QA Agent)
303
+ ```
304
+ ✅ Revisei e está OK
305
+ ✅ Refatorei método ValidateX() para ficar mais claro
306
+ ```
307
+ ```
308
+
309
+ ---
310
+
311
+ ### "Onde adiciono Dev/QA Notes?"
312
+ **No arquivo da story.**
313
+
314
+ 1. Abra: `.morph/project/outputs/my-feature/stories/MF-001.md`
315
+ 2. Procure a seção `### Dev Notes (Added by Dev Agent)`
316
+ 3. Substitua `[VOCÊ VAI PREENCHER AQUI APÓS IMPLEMENTAR]` pelas suas notas
317
+ 4. Salve
318
+
319
+ ---
320
+
321
+ ### "E se eu esquecer de adicionar Dev Notes?"
322
+ Sem problema. Edite a story manualmente:
323
+
324
+ ```bash
325
+ nano .morph/project/outputs/my-feature/stories/MF-001.md
326
+ # Adicione as notas na seção correta
327
+ # Salve
328
+ ```
329
+
330
+ ---
331
+
332
+ ### "Posso implementar várias stories na mesma sessão?"
333
+ **Não recomendado.**
334
+
335
+ Cada story = nova sessão do Claude (se usar Claude Code).
336
+
337
+ Por quê? Evita confusão e economiza tokens.
338
+
339
+ ---
340
+
341
+ ## ✅ Checklist Rápido
342
+
343
+ **No início da feature:**
344
+ - [ ] Roda `shard-spec.js` (opcional)
345
+ - [ ] Roda `create-story.js` para cada story
346
+ - [ ] Roda `show` para ver todas criadas
347
+
348
+ **Para cada story:**
349
+ - [ ] `start` → Marcar que vai começar
350
+ - [ ] Ler story file (`.morph/project/outputs/.../stories/XX.md`)
351
+ - [ ] Ler spec shard (`.morph/project/outputs/.../spec/xxx.md`)
352
+ - [ ] Implementar código
353
+ - [ ] Adicionar Dev Notes na story
354
+ - [ ] `qa` → Marcar que terminou
355
+ - [ ] Commit código
356
+ - [ ] Revisar código
357
+ - [ ] Adicionar QA Notes na story
358
+ - [ ] `done` → Marcar como concluída
359
+ - [ ] Commit mudanças
360
+
361
+ **No final:**
362
+ - [ ] `show` → Ver que 100% completo
363
+ - [ ] Todas stories têm Dev Notes e QA Notes preenchidas
364
+
365
+ ---
366
+
367
+ ## 📚 Referência Rápida
368
+
369
+ ```bash
370
+ # Ver ajuda de qualquer comando
371
+ morph-spec story --help
372
+ morph-spec story shard --help
373
+ morph-spec story create --help
374
+ morph-spec story status --help
375
+
376
+ # Estrutura de pastas (após criar stories)
377
+ .morph/project/outputs/my-feature/
378
+ ├── spec/ # Spec dividido em partes
379
+ │ ├── index.md
380
+ │ ├── entity-design.md
381
+ │ └── service-layer.md
382
+ ├── stories/ # Stories auto-contidas
383
+ │ ├── MF-001.md
384
+ │ ├── MF-002.md
385
+ │ └── MF-003.md
386
+ └── sprint-status.yaml # Progresso automático
387
+ ```
388
+
389
+ ---
390
+
391
+ *MORPH-SPEC Framework - Guia do Usuário*
392
+ *Use este guia como referência rápida durante o desenvolvimento*
@@ -0,0 +1,239 @@
1
+ # MORPH-SPEC Git Hooks
2
+
3
+ Pre-commit hooks for automatic validation before committing.
4
+
5
+ ## Available Hooks
6
+
7
+ | Hook | Description | Action |
8
+ |------|-------------|--------|
9
+ | `pre-commit-agents.sh` | Validates agents.json with JSON Schema | ❌ Blocks commit |
10
+ | `pre-commit-costs.sh` | Validates Azure costs don't exceed limits | ❌ Blocks commit |
11
+ | `pre-commit-specs.sh` | Validates spec.md has required sections | ❌ Blocks commit |
12
+ | `pre-commit-tests.sh` | Checks if new code has tests | ⚠️ Warns only |
13
+ | `pre-commit-all.sh` | Runs all hooks in sequence | ❌ Blocks if any fail |
14
+
15
+ ## Installation
16
+
17
+ ### Option 1: Install Individual Hooks
18
+
19
+ ```bash
20
+ # Install cost validation
21
+ ln -s ../../content/.morph/hooks/pre-commit-costs.sh .git/hooks/pre-commit
22
+
23
+ # Or symlink all at once
24
+ ln -s ../../content/.morph/hooks/pre-commit-all.sh .git/hooks/pre-commit
25
+ ```
26
+
27
+ ### Option 2: Copy Hooks
28
+
29
+ ```bash
30
+ # Copy master hook
31
+ cp content/.morph/hooks/pre-commit-all.sh .git/hooks/pre-commit
32
+ chmod +x .git/hooks/pre-commit
33
+ ```
34
+
35
+ ### Option 3: Use Existing Hooks
36
+
37
+ If you already have `.git/hooks/pre-commit`, add this to the end:
38
+
39
+ ```bash
40
+ # Run MORPH-SPEC validations
41
+ bash content/.morph/hooks/pre-commit-all.sh || exit 1
42
+ ```
43
+
44
+ ## What Each Hook Does
45
+
46
+ ### pre-commit-agents.sh
47
+
48
+ **Validates:** `agents.json` configuration
49
+
50
+ **Checks:**
51
+ - JSON Schema compliance
52
+ - Required fields (id, name, emoji, type, etc.)
53
+ - Keyword patterns (alphanumeric + hyphens/underscores)
54
+ - No duplicate keywords
55
+ - autoActivation for specialist agents
56
+
57
+ **Example Output:**
58
+ ```
59
+ 🤖 Validating agent configuration...
60
+ Detected changes to agents.json
61
+
62
+ === MORPH-SPEC Agent Validator ===
63
+
64
+ Version: 1.0.0
65
+ Core Agents: 6
66
+ Specialist Agents: 4
67
+
68
+ ✓ Validation PASSED
69
+ ```
70
+
71
+ ### pre-commit-costs.sh
72
+
73
+ **Validates:** Bicep files for Azure costs
74
+
75
+ **Checks:**
76
+ - Parses modified `.bicep` files
77
+ - Calculates monthly costs
78
+ - Blocks if > `requiresADR` limit (default: $10)
79
+ - Checks if ADR exists in decisions.md
80
+
81
+ **Example Output:**
82
+ ```
83
+ 💰 Calculating Azure costs...
84
+
85
+ ╔════════════════════════════════════════════════╗
86
+ ║ sqlDatabase (Basic) $4.99/mo ║
87
+ ║ containerApp (Consumption) $0.00/mo ║
88
+ ╠════════════════════════════════════════════════╣
89
+ ║ Total: $4.99 ║
90
+ ║ Requires ADR: NO ║
91
+ ╚════════════════════════════════════════════════╝
92
+
93
+ ✓ Cost validation passed
94
+ ```
95
+
96
+ ### pre-commit-specs.sh
97
+
98
+ **Validates:** `spec.md` files have required sections
99
+
100
+ **Checks:**
101
+ - `## 📋 Metadata`
102
+ - `## 🎯 Overview`
103
+ - `## 🏗️ Technical Design`
104
+ - `## ✅ Acceptance Criteria`
105
+ - Warns if no user stories found
106
+
107
+ **Example Output:**
108
+ ```
109
+ 🔍 Validating spec files...
110
+ Checking: .morph/outputs/my-feature/spec.md
111
+ ✓ All required sections found
112
+ ✓ All spec files are valid
113
+ ```
114
+
115
+ ### pre-commit-tests.sh
116
+
117
+ **Validates:** New C# code has corresponding tests
118
+
119
+ **Checks:**
120
+ - Finds modified `.cs` files (excluding tests)
121
+ - Looks for `*Tests.cs` or `Test*.cs`
122
+ - Skips trivial files (DTOs, records, models)
123
+ - **Warns only, doesn't block**
124
+
125
+ **Example Output:**
126
+ ```
127
+ 🧪 Checking test coverage...
128
+ ✓ Test found for: Services/UserService.cs
129
+ ⚠️ No test found for: Services/PaymentService.cs
130
+
131
+ ⚠️ WARNING: Some files don't have tests
132
+ Override with: git commit --no-verify
133
+ ```
134
+
135
+ ### pre-commit-all.sh (Master Hook)
136
+
137
+ **Runs:** All hooks in sequence
138
+
139
+ **Output:**
140
+ ```
141
+ ╔════════════════════════════════════════════════╗
142
+ ║ MORPH-SPEC PRE-COMMIT VALIDATION ║
143
+ ╚════════════════════════════════════════════════╝
144
+
145
+ ─────────────────────────────────────────────────
146
+ 🤖 Validating agent configuration...
147
+ ✓ No changes to agents.json
148
+
149
+ ─────────────────────────────────────────────────
150
+ 💰 Calculating Azure costs...
151
+ ✓ No Bicep files modified
152
+
153
+ ─────────────────────────────────────────────────
154
+ 🔍 Validating spec files...
155
+ ✓ No spec files modified
156
+
157
+ ─────────────────────────────────────────────────
158
+ 🧪 Checking test coverage...
159
+ ✓ Test found for: Services/UserService.cs
160
+
161
+ ═════════════════════════════════════════════════
162
+ ✅ ALL PRE-COMMIT VALIDATIONS PASSED
163
+ ```
164
+
165
+ ## Bypassing Hooks
166
+
167
+ If you need to commit without validation (e.g., WIP commit):
168
+
169
+ ```bash
170
+ git commit --no-verify -m "WIP: work in progress"
171
+ ```
172
+
173
+ **⚠️ Use sparingly** - hooks exist to prevent errors.
174
+
175
+ ## Customizing Hooks
176
+
177
+ ### Adjust Cost Limits
178
+
179
+ Edit `content/.morph/config/config.json`:
180
+
181
+ ```json
182
+ {
183
+ "costs": {
184
+ "limits": {
185
+ "requiresADR": 15 // Change from $10 to $15
186
+ }
187
+ }
188
+ }
189
+ ```
190
+
191
+ ### Disable Specific Hooks
192
+
193
+ Edit `.git/hooks/pre-commit` and comment out unwanted hooks:
194
+
195
+ ```bash
196
+ HOOKS=(
197
+ "pre-commit-agents.sh"
198
+ # "pre-commit-costs.sh" # Disabled
199
+ "pre-commit-specs.sh"
200
+ "pre-commit-tests.sh"
201
+ )
202
+ ```
203
+
204
+ ## Troubleshooting
205
+
206
+ ### Hook Not Running
207
+
208
+ ```bash
209
+ # Check if hook exists
210
+ ls -la .git/hooks/pre-commit
211
+
212
+ # Check if executable
213
+ chmod +x .git/hooks/pre-commit
214
+
215
+ # Test manually
216
+ bash .git/hooks/pre-commit
217
+ ```
218
+
219
+ ### Hook Fails Unexpectedly
220
+
221
+ ```bash
222
+ # Run individual hook for debugging
223
+ bash content/.morph/hooks/pre-commit-costs.sh
224
+
225
+ # Check hook output
226
+ bash -x content/.morph/hooks/pre-commit-costs.sh
227
+ ```
228
+
229
+ ## Benefits
230
+
231
+ - ✅ **Prevents Errors:** Catches issues before commit
232
+ - ✅ **Enforces Quality:** Requires tests, specs, ADRs
233
+ - ✅ **Cost Control:** Blocks expensive infrastructure
234
+ - ✅ **Fast Feedback:** Fails early in dev workflow
235
+ - ✅ **Consistent:** Same validation for entire team
236
+
237
+ ---
238
+
239
+ *MORPH-SPEC Framework - Git Hooks*
@@ -0,0 +1,24 @@
1
+ #!/bin/bash
2
+ # MORPH-SPEC Pre-Commit Hook: Agent Configuration Validation
3
+ # Uses validate-agents.js to check agents.json
4
+
5
+ echo "🤖 Validating agent configuration..."
6
+
7
+ # Check if agents.json is being modified
8
+ if git diff --cached --name-only | grep -q 'agents\.json$'; then
9
+ echo "Detected changes to agents.json"
10
+
11
+ # Run validator
12
+ if ! node bin/validate-agents.js; then
13
+ echo ""
14
+ echo "❌ COMMIT BLOCKED: agents.json validation failed"
15
+ echo " Fix errors above before committing"
16
+ exit 1
17
+ fi
18
+
19
+ echo "✓ agents.json is valid"
20
+ else
21
+ echo "✓ No changes to agents.json"
22
+ fi
23
+
24
+ exit 0
@@ -0,0 +1,48 @@
1
+ #!/bin/bash
2
+ # MORPH-SPEC Master Pre-Commit Hook
3
+ # Runs all validation hooks in sequence
4
+
5
+ echo "╔════════════════════════════════════════════════╗"
6
+ echo "║ MORPH-SPEC PRE-COMMIT VALIDATION ║"
7
+ echo "╚════════════════════════════════════════════════╝"
8
+ echo ""
9
+
10
+ HOOKS_DIR="$(dirname "$0")"
11
+
12
+ # Run all hooks in order
13
+ HOOKS=(
14
+ "pre-commit-agents.sh"
15
+ "pre-commit-costs.sh"
16
+ "pre-commit-specs.sh"
17
+ "pre-commit-tests.sh"
18
+ )
19
+
20
+ HAS_FAILURES=false
21
+
22
+ for hook in "${HOOKS[@]}"; do
23
+ HOOK_PATH="$HOOKS_DIR/$hook"
24
+
25
+ if [ ! -f "$HOOK_PATH" ]; then
26
+ echo "⚠️ Hook not found: $hook (skipping)"
27
+ continue
28
+ fi
29
+
30
+ echo "─────────────────────────────────────────────────"
31
+ if ! bash "$HOOK_PATH"; then
32
+ HAS_FAILURES=true
33
+ echo "❌ Hook failed: $hook"
34
+ fi
35
+ echo ""
36
+ done
37
+
38
+ echo "═════════════════════════════════════════════════"
39
+
40
+ if [ "$HAS_FAILURES" = true ]; then
41
+ echo "❌ PRE-COMMIT VALIDATION FAILED"
42
+ echo " Fix errors above before committing"
43
+ echo " Or use: git commit --no-verify to skip"
44
+ exit 1
45
+ fi
46
+
47
+ echo "✅ ALL PRE-COMMIT VALIDATIONS PASSED"
48
+ exit 0