@polymorphism-tech/morph-spec 2.4.0 → 3.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 (218) hide show
  1. package/CLAUDE.md +158 -26
  2. package/LICENSE +72 -72
  3. package/bin/detect-agents.js +225 -225
  4. package/bin/morph-spec.js +8 -0
  5. package/bin/render-template.js +302 -302
  6. package/bin/semantic-detect-agents.js +246 -246
  7. package/bin/validate-agents-skills.js +251 -251
  8. package/bin/validate-agents.js +69 -69
  9. package/bin/validate-phase.js +263 -263
  10. package/content/.azure/README.md +293 -293
  11. package/content/.azure/docs/azure-devops-setup.md +454 -454
  12. package/content/.azure/docs/branch-strategy.md +398 -398
  13. package/content/.azure/docs/local-development.md +515 -515
  14. package/content/.azure/pipelines/pipeline-variables.yml +34 -34
  15. package/content/.azure/pipelines/prod-pipeline.yml +319 -319
  16. package/content/.azure/pipelines/staging-pipeline.yml +234 -234
  17. package/content/.azure/pipelines/templates/build-dotnet.yml +75 -75
  18. package/content/.azure/pipelines/templates/deploy-app-service.yml +94 -94
  19. package/content/.azure/pipelines/templates/deploy-container-app.yml +120 -120
  20. package/content/.azure/pipelines/templates/infra-deploy.yml +90 -90
  21. package/content/.claude/commands/morph-archive.md +79 -79
  22. package/content/.claude/commands/morph-deploy.md +529 -0
  23. package/content/.claude/commands/morph-infra.md +209 -209
  24. package/content/.claude/commands/morph-preflight.md +227 -227
  25. package/content/.claude/commands/morph-troubleshoot.md +122 -122
  26. package/content/.claude/settings.local.json +15 -15
  27. package/content/.claude/skills/infra/azure-deploy-specialist.md +699 -0
  28. package/content/.claude/skills/level-0-meta/README.md +7 -0
  29. package/content/.claude/skills/{checklists → level-0-meta}/morph-checklist.md +117 -117
  30. package/content/.claude/skills/level-1-workflows/README.md +7 -0
  31. package/content/.claude/skills/{workflows → level-1-workflows}/morph-replicate.md +213 -213
  32. package/content/.claude/skills/{workflows → level-1-workflows}/phase-clarify.md +131 -131
  33. package/content/.claude/skills/{workflows → level-1-workflows}/phase-design.md +213 -205
  34. package/content/.claude/skills/{workflows → level-1-workflows}/phase-setup.md +106 -92
  35. package/content/.claude/skills/{workflows → level-1-workflows}/phase-tasks.md +164 -164
  36. package/content/.claude/skills/{workflows → level-1-workflows}/phase-uiux.md +169 -138
  37. package/content/.claude/skills/level-2-domains/README.md +14 -0
  38. package/content/.claude/skills/{specialists → level-2-domains/quality}/testing-specialist.md +126 -126
  39. package/content/.claude/skills/level-3-technologies/README.md +7 -0
  40. package/content/.claude/skills/level-4-patterns/README.md +7 -0
  41. package/content/.claude/skills/specialists/prompt-engineer.md +189 -0
  42. package/content/.claude/skills/specialists/seo-growth-hacker.md +320 -0
  43. package/content/.morph/.morphversion +5 -5
  44. package/content/.morph/archive/.gitkeep +25 -25
  45. package/content/.morph/config/agents.json +742 -358
  46. package/content/.morph/config/config.template.json +33 -0
  47. package/content/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +392 -392
  48. package/content/.morph/docs/workflows/enforcement-pipeline.md +668 -0
  49. package/content/.morph/examples/api-nextjs/README.md +241 -241
  50. package/content/.morph/examples/api-nextjs/contracts.ts +307 -307
  51. package/content/.morph/examples/api-nextjs/spec.md +399 -399
  52. package/content/.morph/examples/api-nextjs/tasks.md +168 -168
  53. package/content/.morph/examples/micro-saas/README.md +125 -125
  54. package/content/.morph/examples/micro-saas/contracts.cs +358 -358
  55. package/content/.morph/examples/micro-saas/decisions.md +246 -246
  56. package/content/.morph/examples/micro-saas/spec.md +236 -236
  57. package/content/.morph/examples/micro-saas/tasks.md +150 -150
  58. package/content/.morph/examples/multi-agent/README.md +309 -309
  59. package/content/.morph/examples/multi-agent/contracts.cs +433 -433
  60. package/content/.morph/examples/multi-agent/spec.md +479 -479
  61. package/content/.morph/examples/multi-agent/tasks.md +185 -185
  62. package/content/.morph/examples/scheduled-reports/decisions.md +158 -158
  63. package/content/.morph/examples/scheduled-reports/proposal.md +95 -95
  64. package/content/.morph/examples/scheduled-reports/spec.md +267 -267
  65. package/content/.morph/examples/state-v3.json +188 -188
  66. package/content/.morph/features/.gitkeep +25 -25
  67. package/content/.morph/hooks/README.md +158 -0
  68. package/content/.morph/hooks/pre-commit-all.sh +48 -48
  69. package/content/.morph/hooks/pre-commit-specs.sh +49 -49
  70. package/content/.morph/hooks/pre-commit-tests.sh +60 -60
  71. package/content/.morph/hooks/task-completed.js +73 -0
  72. package/content/.morph/hooks/teammate-idle.js +68 -0
  73. package/content/.morph/project.md +160 -160
  74. package/content/.morph/schemas/agent.schema.json +296 -296
  75. package/content/.morph/schemas/tasks.schema.json +220 -220
  76. package/content/.morph/specs/.gitkeep +20 -20
  77. package/content/.morph/standards/agent-teams-workflow.md +474 -0
  78. package/content/.morph/standards/coding.md +377 -377
  79. package/content/.morph/standards/fluent-ui-setup.md +590 -590
  80. package/content/.morph/standards/migration-guide.md +514 -514
  81. package/content/.morph/standards/passkeys-auth.md +423 -423
  82. package/content/.morph/standards/vector-search-rag.md +536 -536
  83. package/content/.morph/state.json +17 -17
  84. package/content/.morph/templates/CONTEXT-FEATURE.md +276 -0
  85. package/content/.morph/templates/CONTEXT.md +170 -0
  86. package/content/.morph/templates/FluentDesignTheme.cs +149 -149
  87. package/content/.morph/templates/MudTheme.cs +281 -281
  88. package/content/.morph/templates/clarify-questions.md +159 -159
  89. package/content/.morph/templates/component.razor +239 -239
  90. package/content/.morph/templates/contracts/Commands.cs +74 -74
  91. package/content/.morph/templates/contracts/Entities.cs +25 -25
  92. package/content/.morph/templates/contracts/Queries.cs +74 -74
  93. package/content/.morph/templates/contracts/README.md +74 -74
  94. package/content/.morph/templates/contracts.cs +217 -217
  95. package/content/.morph/templates/design-system.css +226 -226
  96. package/content/.morph/templates/infra/.dockerignore.example +89 -89
  97. package/content/.morph/templates/infra/Dockerfile.example +82 -82
  98. package/content/.morph/templates/infra/README.md +286 -286
  99. package/content/.morph/templates/infra/app-insights.bicep +63 -63
  100. package/content/.morph/templates/infra/app-service.bicep +164 -164
  101. package/content/.morph/templates/infra/azure-pipelines-deploy.yml +480 -0
  102. package/content/.morph/templates/infra/container-app-env.bicep +49 -49
  103. package/content/.morph/templates/infra/container-app.bicep +156 -156
  104. package/content/.morph/templates/infra/deploy-checklist.md +426 -426
  105. package/content/.morph/templates/infra/deploy.ps1 +229 -229
  106. package/content/.morph/templates/infra/deploy.sh +208 -208
  107. package/content/.morph/templates/infra/key-vault.bicep +91 -91
  108. package/content/.morph/templates/infra/main.bicep +189 -189
  109. package/content/.morph/templates/infra/parameters.dev.json +29 -29
  110. package/content/.morph/templates/infra/parameters.prod.json +29 -29
  111. package/content/.morph/templates/infra/parameters.staging.json +29 -29
  112. package/content/.morph/templates/infra/sql-database.bicep +103 -103
  113. package/content/.morph/templates/infra/storage.bicep +106 -106
  114. package/content/.morph/templates/integrations/asaas-client.cs +387 -387
  115. package/content/.morph/templates/integrations/asaas-webhook.cs +351 -351
  116. package/content/.morph/templates/integrations/azure-identity-config.cs +288 -288
  117. package/content/.morph/templates/integrations/clerk-config.cs +258 -258
  118. package/content/.morph/templates/job.cs +171 -171
  119. package/content/.morph/templates/migration.cs +83 -83
  120. package/content/.morph/templates/repository.cs +141 -141
  121. package/content/.morph/templates/saas/subscription.cs +347 -347
  122. package/content/.morph/templates/saas/tenant.cs +338 -338
  123. package/content/.morph/templates/service.cs +139 -139
  124. package/content/.morph/templates/sprint-status.yaml +68 -68
  125. package/content/.morph/templates/story.md +143 -143
  126. package/content/.morph/templates/test.cs +239 -239
  127. package/content/.morph/templates/ui-design-system.md +286 -286
  128. package/content/.morph/templates/ui-flows.md +336 -336
  129. package/content/.morph/templates/ui-mockups.md +133 -133
  130. package/content/.morph/test-infra/example.bicep +59 -59
  131. package/content/README.md +79 -79
  132. package/detectors/config-detector.js +223 -223
  133. package/detectors/conversation-analyzer.js +163 -163
  134. package/detectors/index.js +84 -84
  135. package/detectors/standards-generator.js +275 -275
  136. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +977 -977
  137. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1048 -1048
  138. package/docs/api/scripts/collapse.js +38 -38
  139. package/docs/api/scripts/commonNav.js +28 -28
  140. package/docs/api/scripts/linenumber.js +25 -25
  141. package/docs/api/scripts/nav.js +12 -12
  142. package/docs/api/scripts/polyfill.js +3 -3
  143. package/docs/api/scripts/prettify/Apache-License-2.0.txt +202 -202
  144. package/docs/api/scripts/prettify/lang-css.js +2 -2
  145. package/docs/api/scripts/prettify/prettify.js +28 -28
  146. package/docs/api/scripts/search.js +98 -98
  147. package/docs/api/styles/jsdoc.css +776 -776
  148. package/docs/api/styles/prettify.css +80 -80
  149. package/docs/examples.md +328 -328
  150. package/docs/templates.md +418 -418
  151. package/package.json +1 -1
  152. package/scripts/postinstall.js +132 -132
  153. package/src/commands/advance-phase.js +83 -0
  154. package/src/commands/analyze-blazor-concurrency.js +193 -193
  155. package/src/commands/create-story.js +351 -351
  156. package/src/commands/deploy.js +780 -0
  157. package/src/commands/detect-agents.js +34 -6
  158. package/src/commands/detect.js +104 -104
  159. package/src/commands/generate-context.js +40 -0
  160. package/src/commands/generate.js +149 -149
  161. package/src/commands/lint-fluent.js +352 -352
  162. package/src/commands/rollback-phase.js +185 -185
  163. package/src/commands/session-summary.js +291 -291
  164. package/src/commands/shard-spec.js +224 -224
  165. package/src/commands/sprint-status.js +250 -250
  166. package/src/commands/state.js +333 -333
  167. package/src/commands/sync.js +167 -167
  168. package/src/commands/troubleshoot.js +222 -222
  169. package/src/commands/validate-blazor-state.js +210 -210
  170. package/src/commands/validate-blazor.js +156 -156
  171. package/src/commands/validate-css.js +84 -84
  172. package/src/commands/validate-phase.js +221 -221
  173. package/src/lib/blazor-concurrency-analyzer.js +288 -288
  174. package/src/lib/blazor-state-validator.js +291 -291
  175. package/src/lib/blazor-validator.js +374 -374
  176. package/src/lib/context-generator.js +513 -0
  177. package/src/lib/css-validator.js +352 -352
  178. package/src/lib/design-system-detector.js +187 -0
  179. package/src/lib/design-system-generator.js +298 -298
  180. package/src/lib/design-system-scaffolder.js +299 -0
  181. package/src/lib/hook-executor.js +256 -0
  182. package/src/lib/learning-system.js +520 -520
  183. package/src/lib/mockup-generator.js +366 -366
  184. package/src/lib/spec-validator.js +258 -0
  185. package/src/lib/standards-context-injector.js +287 -0
  186. package/src/lib/team-orchestrator.js +322 -0
  187. package/src/lib/troubleshoot-grep.js +194 -194
  188. package/src/lib/troubleshoot-index.js +144 -144
  189. package/src/lib/ui-detector.js +350 -350
  190. package/src/lib/validation-runner.js +65 -13
  191. package/src/lib/validators/architecture-validator.js +387 -387
  192. package/src/lib/validators/design-system-validator.js +231 -0
  193. package/src/lib/validators/package-validator.js +360 -360
  194. package/src/lib/validators/ui-contrast-validator.js +422 -422
  195. package/src/utils/file-copier.js +9 -1
  196. package/src/utils/logger.js +32 -32
  197. package/src/utils/version-checker.js +175 -175
  198. /package/content/.claude/skills/{checklists → level-0-meta}/code-review.md +0 -0
  199. /package/content/.claude/skills/{checklists → level-0-meta}/simulation-checklist.md +0 -0
  200. /package/content/.claude/skills/{specialists → level-2-domains/ai-agents}/ai-system-architect.md +0 -0
  201. /package/content/.claude/skills/{specialists → level-2-domains/architecture}/po-pm-advisor.md +0 -0
  202. /package/content/.claude/skills/{specialists → level-2-domains/architecture}/standards-architect.md +0 -0
  203. /package/content/.claude/skills/{specialists → level-2-domains/backend}/dotnet-senior.md +0 -0
  204. /package/content/.claude/skills/{specialists → level-2-domains/backend}/ef-modeler.md +0 -0
  205. /package/content/.claude/skills/{specialists → level-2-domains/backend}/hangfire-orchestrator.md +0 -0
  206. /package/content/.claude/skills/{specialists → level-2-domains/backend}/ms-agent-expert.md +0 -0
  207. /package/content/.claude/skills/{stacks/dotnet-blazor.md → level-2-domains/frontend/blazor-builder.md} +0 -0
  208. /package/content/.claude/skills/{stacks/dotnet-nextjs.md → level-2-domains/frontend/nextjs-expert.md} +0 -0
  209. /package/content/.claude/skills/{specialists → level-2-domains/frontend}/ui-ux-designer.md +0 -0
  210. /package/content/.claude/skills/{specialists → level-2-domains/infrastructure}/azure-architect.md +0 -0
  211. /package/content/.claude/skills/{infra → level-2-domains/infrastructure}/bicep-architect.md +0 -0
  212. /package/content/.claude/skills/{infra → level-2-domains/infrastructure}/container-specialist.md +0 -0
  213. /package/content/.claude/skills/{infra → level-2-domains/infrastructure}/devops-engineer.md +0 -0
  214. /package/content/.claude/skills/{integrations → level-2-domains/integrations}/asaas-financial.md +0 -0
  215. /package/content/.claude/skills/{integrations → level-2-domains/integrations}/azure-identity.md +0 -0
  216. /package/content/.claude/skills/{integrations → level-2-domains/integrations}/clerk-auth.md +0 -0
  217. /package/content/.claude/skills/{integrations → level-2-domains/integrations}/resend-email.md +0 -0
  218. /package/content/.claude/skills/{specialists → level-2-domains/quality}/code-analyzer.md +0 -0
@@ -1,227 +1,227 @@
1
- # Pre-Flight Check for Azure Deployment
2
-
3
- Validates project readiness before deploying to Azure.
4
-
5
- ## Uso
6
-
7
- ```
8
- /morph-preflight azure
9
- ```
10
-
11
- ## Objetivo
12
-
13
- Detectar problemas **antes** do deploy que causariam falhas em produção. Economiza tempo e evita debugging em ambiente Azure.
14
-
15
- ---
16
-
17
- ## Validações Executadas
18
-
19
- ### 1. Package Version Conflicts
20
-
21
- **O que verifica:**
22
- - `Azure.Identity` especificado explicitamente
23
- - Sem conflitos de versão (NU1605, NU1608)
24
- - Packages críticos com versões compatíveis
25
-
26
- **Como verificar:**
27
- ```bash
28
- dotnet restore --verbosity normal 2>&1 | grep -E "(NU1605|NU1608|warning)"
29
- ```
30
-
31
- **Fix comum:**
32
- ```xml
33
- <PackageReference Include="Azure.Identity" Version="1.14.2" />
34
- ```
35
-
36
- ---
37
-
38
- ### 2. EF Core Migrations
39
-
40
- **O que verifica:**
41
- - Sem pending model changes
42
- - Migrations aplicáveis existem
43
- - Migration scripts são válidos
44
-
45
- **Como verificar:**
46
- ```bash
47
- dotnet ef migrations has-pending-model-changes \
48
- --project src/Infrastructure \
49
- --startup-project src/Web
50
- ```
51
-
52
- **Fix comum:**
53
- ```bash
54
- dotnet ef migrations add <MigrationName> \
55
- --project src/Infrastructure \
56
- --startup-project src/Web
57
- ```
58
-
59
- ---
60
-
61
- ### 3. Dockerfile Validation (se Container Apps)
62
-
63
- **O que verifica:**
64
- - Dockerfile existe
65
- - Base image é válida
66
- - Multi-stage build configurado
67
- - EXPOSE ports corretos
68
- - ENTRYPOINT definido
69
-
70
- **Como verificar:**
71
- ```bash
72
- docker build --check .
73
- # Ou validação manual do Dockerfile
74
- ```
75
-
76
- ---
77
-
78
- ### 4. Blazor .NET 10 Assets
79
-
80
- **O que verifica:**
81
- - `RequiresAspNetWebAssets` está `true` (se Blazor + .NET 10)
82
- - Static web assets configurados corretamente
83
-
84
- **Como verificar:**
85
- ```bash
86
- grep -r "RequiresAspNetWebAssets" *.csproj
87
- ```
88
-
89
- **Fix:**
90
- ```xml
91
- <PropertyGroup>
92
- <RequiresAspNetWebAssets>true</RequiresAspNetWebAssets>
93
- </PropertyGroup>
94
- ```
95
-
96
- ---
97
-
98
- ### 5. Bicep Syntax Validation
99
-
100
- **O que verifica:**
101
- - Arquivos `.bicep` sem erros de sintaxe
102
- - Parâmetros obrigatórios definidos
103
- - Resources com nomes válidos
104
-
105
- **Como verificar:**
106
- ```bash
107
- az bicep build --file infra/main.bicep --stdout > /dev/null
108
- ```
109
-
110
- ---
111
-
112
- ### 6. Key Vault Configuration
113
-
114
- **O que verifica:**
115
- - Key Vault URI configurado em `appsettings.json` ou environment
116
- - Não condiciona Key Vault ao ambiente (bug comum)
117
- - Managed Identity habilitada
118
-
119
- **Como verificar:**
120
- ```bash
121
- grep -r "KeyVaultUri\|AzureKeyVault" appsettings*.json
122
- grep -r "IsDevelopment()" Program.cs | grep -i keyvault
123
- ```
124
-
125
- **Anti-pattern a detectar:**
126
- ```csharp
127
- // ❌ ERRADO - Não carrega Key Vault em dev!
128
- if (!builder.Environment.IsDevelopment())
129
- {
130
- builder.Configuration.AddAzureKeyVault(...);
131
- }
132
- ```
133
-
134
- ---
135
-
136
- ### 7. Connection Strings Security
137
-
138
- **O que verifica:**
139
- - Connection strings não hardcoded em código
140
- - Secrets em Key Vault ou User Secrets
141
- - Sem credentials em `appsettings.json` (exceto Development)
142
-
143
- **Como verificar:**
144
- ```bash
145
- # Detectar passwords em appsettings
146
- grep -rE "(Password=|Pwd=|Secret=)" appsettings*.json | grep -v Development
147
- ```
148
-
149
- ---
150
-
151
- ## Output Exemplo
152
-
153
- ```
154
- 🔍 MORPH Pre-Flight Check: Azure Deployment
155
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
156
-
157
- ✅ Packages: No version conflicts detected
158
- ✅ Migrations: No pending model changes
159
- ✅ Dockerfile: Valid multi-stage build
160
- ✅ Blazor Assets: RequiresAspNetWebAssets=true
161
- ✅ Bicep: Syntax valid
162
- ❌ Key Vault: URI not configured in appsettings.Production.json
163
- ⚠️ Connection Strings: Found password in appsettings.Staging.json
164
-
165
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
166
-
167
- 📋 Summary: 5 passed, 1 failed, 1 warning
168
-
169
- ❌ BLOCKED: Fix Key Vault configuration before deploy!
170
-
171
- Recommended fixes:
172
- 1. Add KeyVaultUri to appsettings.Production.json
173
- 2. Move password from appsettings.Staging.json to Key Vault
174
- ```
175
-
176
- ---
177
-
178
- ## Workflow de Uso
179
-
180
- ### Antes de criar PR para produção
181
-
182
- ```bash
183
- /morph-preflight azure
184
- ```
185
-
186
- ### No pipeline CI/CD
187
-
188
- ```yaml
189
- - script: |
190
- # Package check
191
- dotnet restore 2>&1 | grep -E "NU1605|NU1608" && exit 1
192
-
193
- # Migration check
194
- dotnet ef migrations has-pending-model-changes \
195
- --project src/Infrastructure \
196
- --startup-project src/Web
197
- if [ $? -ne 0 ]; then exit 1; fi
198
-
199
- # Bicep check
200
- az bicep build --file infra/main.bicep --stdout > /dev/null
201
- if [ $? -ne 0 ]; then exit 1; fi
202
-
203
- echo "Pre-flight checks passed!"
204
- displayName: 'Pre-flight validation'
205
- ```
206
-
207
- ---
208
-
209
- ## Validações Futuras (Roadmap)
210
-
211
- - [ ] Cost estimation validation (dentro do budget)
212
- - [ ] RBAC permissions check
213
- - [ ] Network security rules validation
214
- - [ ] Health probe endpoint exists
215
- - [ ] Application Insights configured
216
-
217
- ---
218
-
219
- ## Referências
220
-
221
- - [azure.md](../../standards/azure.md) - Padrões Azure
222
- - [dotnet10-migration.md](../../standards/dotnet10-migration.md) - Breaking changes .NET 10
223
- - [blazor-efcore.md](../../../../framework/standards/blazor-efcore.md) - EF Core patterns
224
-
225
- ---
226
-
227
- *MORPH-SPEC by Polymorphism Tech*
1
+ # Pre-Flight Check for Azure Deployment
2
+
3
+ Validates project readiness before deploying to Azure.
4
+
5
+ ## Uso
6
+
7
+ ```
8
+ /morph-preflight azure
9
+ ```
10
+
11
+ ## Objetivo
12
+
13
+ Detectar problemas **antes** do deploy que causariam falhas em produção. Economiza tempo e evita debugging em ambiente Azure.
14
+
15
+ ---
16
+
17
+ ## Validações Executadas
18
+
19
+ ### 1. Package Version Conflicts
20
+
21
+ **O que verifica:**
22
+ - `Azure.Identity` especificado explicitamente
23
+ - Sem conflitos de versão (NU1605, NU1608)
24
+ - Packages críticos com versões compatíveis
25
+
26
+ **Como verificar:**
27
+ ```bash
28
+ dotnet restore --verbosity normal 2>&1 | grep -E "(NU1605|NU1608|warning)"
29
+ ```
30
+
31
+ **Fix comum:**
32
+ ```xml
33
+ <PackageReference Include="Azure.Identity" Version="1.14.2" />
34
+ ```
35
+
36
+ ---
37
+
38
+ ### 2. EF Core Migrations
39
+
40
+ **O que verifica:**
41
+ - Sem pending model changes
42
+ - Migrations aplicáveis existem
43
+ - Migration scripts são válidos
44
+
45
+ **Como verificar:**
46
+ ```bash
47
+ dotnet ef migrations has-pending-model-changes \
48
+ --project src/Infrastructure \
49
+ --startup-project src/Web
50
+ ```
51
+
52
+ **Fix comum:**
53
+ ```bash
54
+ dotnet ef migrations add <MigrationName> \
55
+ --project src/Infrastructure \
56
+ --startup-project src/Web
57
+ ```
58
+
59
+ ---
60
+
61
+ ### 3. Dockerfile Validation (se Container Apps)
62
+
63
+ **O que verifica:**
64
+ - Dockerfile existe
65
+ - Base image é válida
66
+ - Multi-stage build configurado
67
+ - EXPOSE ports corretos
68
+ - ENTRYPOINT definido
69
+
70
+ **Como verificar:**
71
+ ```bash
72
+ docker build --check .
73
+ # Ou validação manual do Dockerfile
74
+ ```
75
+
76
+ ---
77
+
78
+ ### 4. Blazor .NET 10 Assets
79
+
80
+ **O que verifica:**
81
+ - `RequiresAspNetWebAssets` está `true` (se Blazor + .NET 10)
82
+ - Static web assets configurados corretamente
83
+
84
+ **Como verificar:**
85
+ ```bash
86
+ grep -r "RequiresAspNetWebAssets" *.csproj
87
+ ```
88
+
89
+ **Fix:**
90
+ ```xml
91
+ <PropertyGroup>
92
+ <RequiresAspNetWebAssets>true</RequiresAspNetWebAssets>
93
+ </PropertyGroup>
94
+ ```
95
+
96
+ ---
97
+
98
+ ### 5. Bicep Syntax Validation
99
+
100
+ **O que verifica:**
101
+ - Arquivos `.bicep` sem erros de sintaxe
102
+ - Parâmetros obrigatórios definidos
103
+ - Resources com nomes válidos
104
+
105
+ **Como verificar:**
106
+ ```bash
107
+ az bicep build --file infra/main.bicep --stdout > /dev/null
108
+ ```
109
+
110
+ ---
111
+
112
+ ### 6. Key Vault Configuration
113
+
114
+ **O que verifica:**
115
+ - Key Vault URI configurado em `appsettings.json` ou environment
116
+ - Não condiciona Key Vault ao ambiente (bug comum)
117
+ - Managed Identity habilitada
118
+
119
+ **Como verificar:**
120
+ ```bash
121
+ grep -r "KeyVaultUri\|AzureKeyVault" appsettings*.json
122
+ grep -r "IsDevelopment()" Program.cs | grep -i keyvault
123
+ ```
124
+
125
+ **Anti-pattern a detectar:**
126
+ ```csharp
127
+ // ❌ ERRADO - Não carrega Key Vault em dev!
128
+ if (!builder.Environment.IsDevelopment())
129
+ {
130
+ builder.Configuration.AddAzureKeyVault(...);
131
+ }
132
+ ```
133
+
134
+ ---
135
+
136
+ ### 7. Connection Strings Security
137
+
138
+ **O que verifica:**
139
+ - Connection strings não hardcoded em código
140
+ - Secrets em Key Vault ou User Secrets
141
+ - Sem credentials em `appsettings.json` (exceto Development)
142
+
143
+ **Como verificar:**
144
+ ```bash
145
+ # Detectar passwords em appsettings
146
+ grep -rE "(Password=|Pwd=|Secret=)" appsettings*.json | grep -v Development
147
+ ```
148
+
149
+ ---
150
+
151
+ ## Output Exemplo
152
+
153
+ ```
154
+ 🔍 MORPH Pre-Flight Check: Azure Deployment
155
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
156
+
157
+ ✅ Packages: No version conflicts detected
158
+ ✅ Migrations: No pending model changes
159
+ ✅ Dockerfile: Valid multi-stage build
160
+ ✅ Blazor Assets: RequiresAspNetWebAssets=true
161
+ ✅ Bicep: Syntax valid
162
+ ❌ Key Vault: URI not configured in appsettings.Production.json
163
+ ⚠️ Connection Strings: Found password in appsettings.Staging.json
164
+
165
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
166
+
167
+ 📋 Summary: 5 passed, 1 failed, 1 warning
168
+
169
+ ❌ BLOCKED: Fix Key Vault configuration before deploy!
170
+
171
+ Recommended fixes:
172
+ 1. Add KeyVaultUri to appsettings.Production.json
173
+ 2. Move password from appsettings.Staging.json to Key Vault
174
+ ```
175
+
176
+ ---
177
+
178
+ ## Workflow de Uso
179
+
180
+ ### Antes de criar PR para produção
181
+
182
+ ```bash
183
+ /morph-preflight azure
184
+ ```
185
+
186
+ ### No pipeline CI/CD
187
+
188
+ ```yaml
189
+ - script: |
190
+ # Package check
191
+ dotnet restore 2>&1 | grep -E "NU1605|NU1608" && exit 1
192
+
193
+ # Migration check
194
+ dotnet ef migrations has-pending-model-changes \
195
+ --project src/Infrastructure \
196
+ --startup-project src/Web
197
+ if [ $? -ne 0 ]; then exit 1; fi
198
+
199
+ # Bicep check
200
+ az bicep build --file infra/main.bicep --stdout > /dev/null
201
+ if [ $? -ne 0 ]; then exit 1; fi
202
+
203
+ echo "Pre-flight checks passed!"
204
+ displayName: 'Pre-flight validation'
205
+ ```
206
+
207
+ ---
208
+
209
+ ## Validações Futuras (Roadmap)
210
+
211
+ - [ ] Cost estimation validation (dentro do budget)
212
+ - [ ] RBAC permissions check
213
+ - [ ] Network security rules validation
214
+ - [ ] Health probe endpoint exists
215
+ - [ ] Application Insights configured
216
+
217
+ ---
218
+
219
+ ## Referências
220
+
221
+ - [azure.md](../../standards/azure.md) - Padrões Azure
222
+ - [dotnet10-migration.md](../../standards/dotnet10-migration.md) - Breaking changes .NET 10
223
+ - [blazor-efcore.md](../../../../framework/standards/blazor-efcore.md) - EF Core patterns
224
+
225
+ ---
226
+
227
+ *MORPH-SPEC by Polymorphism Tech*