@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,293 +1,293 @@
1
- # MORPH-SPEC - Azure DevOps Pipelines
2
-
3
- > **CI/CD para One-Person Business com Workload Identity Federation (sem secrets)**
4
-
5
- ---
6
-
7
- ## 🚀 Quick Start
8
-
9
- ### 1. Configurar Workload Identity (10 min)
10
-
11
- ```bash
12
- # Ver guia completo em: docs/azure-devops-setup.md
13
-
14
- # Criar App Registrations
15
- az ad app create --display-name "myapp-staging-pipeline"
16
- az ad app create --display-name "myapp-prod-pipeline"
17
-
18
- # Configurar federated credentials
19
- # (Ver guia detalhado)
20
- ```
21
-
22
- ### 2. Importar Pipelines no Azure DevOps
23
-
24
- 1. **Pipelines** → **New pipeline**
25
- 2. **Azure Repos Git** → Selecione repo
26
- 3. **Existing Azure Pipelines YAML file**
27
- 4. Selecione:
28
- - `.azure/pipelines/staging-pipeline.yml`
29
- - `.azure/pipelines/prod-pipeline.yml`
30
-
31
- ### 3. Configurar Variáveis
32
-
33
- Para cada pipeline, adicione:
34
- ```
35
- ACR_NAME: <seu-acr-name>
36
- APP_NAME: <seu-app-name>
37
- SUBSCRIPTION_ID: <subscription-id>
38
- ```
39
-
40
- ### 4. Criar Environments
41
-
42
- 1. **Pipelines** → **Environments** → **New environment**
43
- 2. Criar:
44
- - `staging` (sem aprovação - deploy rápido)
45
- - `production` (aprovação obrigatória)
46
-
47
- ### 5. Testar!
48
-
49
- ```bash
50
- # Trigger staging pipeline
51
- git checkout staging
52
- git commit -m "test" --allow-empty
53
- git push origin staging
54
-
55
- # Trigger prod pipeline
56
- git checkout main
57
- git commit -m "test" --allow-empty
58
- git push origin main
59
- # ⏸️ Aprovar manualmente no Azure DevOps
60
- ```
61
-
62
- ---
63
-
64
- ## 📁 Estrutura
65
-
66
- ```
67
- .azure/
68
- ├── README.md # Este arquivo
69
- ├── docs/
70
- │ ├── azure-devops-setup.md # Guia completo de setup
71
- │ ├── local-development.md # Como rodar projeto local
72
- │ └── branch-strategy.md # Estratégia de branches
73
- └── pipelines/
74
- ├── staging-pipeline.yml # Pipeline staging (branch: staging)
75
- ├── prod-pipeline.yml # Pipeline prod (branch: main/master)
76
- ├── pipeline-variables.yml # Variáveis compartilhadas
77
- └── templates/
78
- ├── build-dotnet.yml # Template: Build .NET
79
- ├── deploy-app-service.yml # Template: Deploy App Service
80
- ├── deploy-container-app.yml # Template: Deploy Container Apps
81
- └── infra-deploy.yml # Template: Deploy Bicep
82
- ```
83
-
84
- ---
85
-
86
- ## 🔄 Pipelines
87
-
88
- ### Staging Pipeline (`staging-pipeline.yml`)
89
-
90
- **Hosting:** Container Apps com scale-to-zero (~$5-10/mês)
91
-
92
- **Trigger:** Push em `staging` branch
93
-
94
- **Stages:**
95
- 1. ✅ Build & Test
96
- 2. ✅ Deploy Infrastructure (Bicep)
97
- 3. ✅ Build Container Image
98
- 4. ✅ Push to ACR
99
- 5. ✅ Deploy Container App
100
- 6. ✅ Integration Tests
101
-
102
- **Aprovação:** Nenhuma (deploy automático)
103
-
104
- **Uso:** QA, testes de integração
105
-
106
- ---
107
-
108
- ### Prod Pipeline (`prod-pipeline.yml`)
109
-
110
- **Hosting:** Container Apps always-on (~$10-20/mês)
111
-
112
- **Trigger:** Push em `main` ou `master` branch
113
-
114
- **Stages:**
115
- 1. ✅ Build & Test
116
- 2. ✅ Security Scan
117
- 3. ✅ Deploy Infrastructure (Bicep) ← **Approval Required**
118
- 4. ✅ Build Container Image
119
- 5. ✅ Security Scan (Image)
120
- 6. ✅ Deploy to Production ← **Approval Required**
121
- 7. ✅ Smoke Tests (Critical)
122
- 8. ✅ Monitor & Report
123
-
124
- **Aprovação:** OBRIGATÓRIA (manual approval gate)
125
-
126
- **Uso:** Produção, ambiente crítico
127
-
128
- ---
129
-
130
- ## 🌐 Desenvolvimento Local
131
-
132
- **Developers NÃO têm ambiente próprio.** Ao invés disso:
133
-
134
- - ✅ Rodam projeto **LOCAL** (Visual Studio/Rider/VS Code)
135
- - ✅ Acessam recursos **REMOTOS** staging (SQL, Storage, Key Vault)
136
- - ✅ Testam localmente antes de commitar
137
-
138
- **Ver guia completo:** [`docs/local-development.md`](docs/local-development.md)
139
-
140
- ---
141
-
142
- ## 🎯 Fluxo Completo
143
-
144
- ### Desenvolvimento Diário
145
-
146
- ```bash
147
- # 1. Criar feature branch
148
- git checkout staging
149
- git pull origin staging
150
- git checkout -b feature/nova-funcionalidade
151
-
152
- # 2. Desenvolver LOCAL
153
- dotnet run # Conecta em recursos staging
154
-
155
- # 3. Commitar
156
- git add .
157
- git commit -m "feat: adiciona nova funcionalidade"
158
- git push origin feature/nova-funcionalidade
159
-
160
- # 4. Criar PR para staging
161
- # Azure DevOps → Repos → Pull Requests → New
162
- # Source: feature/nova-funcionalidade → Target: staging
163
- # Self-approve e merge
164
-
165
- # 5. Staging pipeline triggado automaticamente
166
- # ✅ Deploy para staging
167
- ```
168
-
169
- ### Release para Produção
170
-
171
- ```bash
172
- # 1. Criar PR staging → main
173
- # Azure DevOps → Repos → Pull Requests → New
174
- # Source: staging → Target: main
175
-
176
- # 2. Self-review e merge
177
-
178
- # 3. Prod pipeline triggado
179
- # ⏸️ Approval gate aparece
180
- # Revisar deployment summary
181
- # Aprovar manualmente
182
-
183
- # 4. Deploy para produção
184
- # ✅ Aplicação em produção
185
- ```
186
-
187
- ---
188
-
189
- ## 📊 Comparativo de Ambientes
190
-
191
- | Aspecto | Staging | Prod |
192
- |---------|---------|------|
193
- | **Hosting** | Container Apps | Container Apps |
194
- | **Custo** | $5-10/mês | $10-20/mês |
195
- | **Disponibilidade** | Scale-to-zero | Always-on (min 1) |
196
- | **SSL** | Custom domain OK | Custom domain OK |
197
- | **Auto-scaling** | ✅ Sim | ✅ Sim |
198
- | **Trigger** | Push to `staging` | Push to `main` |
199
- | **Aprovação** | Nenhuma | **Obrigatória** |
200
- | **Tests** | Unit + Integration | Unit + Integration + Security |
201
-
202
- ---
203
-
204
- ## 🔐 Workload Identity Federation
205
-
206
- ### O que é?
207
-
208
- Autenticação moderna do Azure DevOps para Azure **sem usar secrets/passwords**.
209
-
210
- ### Vantagens
211
-
212
- | Tradicional (Service Principal) | Workload Identity |
213
- |--------------------------------|-------------------|
214
- | ❌ Secrets expiram (1-2 anos) | ✅ Token auto-renova |
215
- | ❌ Secrets vazam facilmente | ✅ Sem secrets armazenados |
216
- | ❌ Rotação manual | ✅ Rotação automática |
217
- | ❌ Dificil auditar | ✅ Audit trail completo |
218
-
219
- ### Setup
220
-
221
- Ver guia completo: [`docs/azure-devops-setup.md`](docs/azure-devops-setup.md)
222
-
223
- ---
224
-
225
- ## 🆘 Troubleshooting
226
-
227
- ### Pipeline falha com "Failed to get federated token"
228
-
229
- **Causa:** Federated credential não configurado corretamente.
230
-
231
- **Solução:**
232
- 1. Verificar subject do federated credential
233
- 2. Deve ser: `sc://<ORG>/<PROJECT>/<SERVICE_CONNECTION_NAME>`
234
- 3. Recriar se necessário (ver `docs/azure-devops-setup.md`)
235
-
236
- ### Pipeline falha com "Insufficient permissions"
237
-
238
- **Causa:** Service Principal não tem permissões.
239
-
240
- **Solução:**
241
- ```bash
242
- # Adicionar Contributor role
243
- az role assignment create \
244
- --assignee <SP_ID> \
245
- --role Contributor \
246
- --scope "/subscriptions/<SUB_ID>/resourceGroups/<RG_NAME>"
247
- ```
248
-
249
- ### Container não sobe após deploy
250
-
251
- **Causa:** Possíveis: imagem incorreta, health check falhando, ACR permissions.
252
-
253
- **Solução:**
254
- ```bash
255
- # Ver logs do Container App
256
- az containerapp logs show \
257
- -n ca-myapp-staging \
258
- -g rg-myapp-staging \
259
- --follow
260
- ```
261
-
262
- ---
263
-
264
- ## 📚 Documentação Completa
265
-
266
- | Documento | Descrição |
267
- |-----------|-----------|
268
- | [Azure DevOps Setup](docs/azure-devops-setup.md) | Setup completo (Workload Identity, Service Connections, Environments) |
269
- | [Local Development](docs/local-development.md) | Como rodar projeto local e acessar recursos staging |
270
- | [Branch Strategy](docs/branch-strategy.md) | Estratégia de branches (staging/main, feature branches) |
271
- | [Migration Guide](../content/.morph/standards/migration-guide.md) | App Service → Container Apps + CI/CD |
272
- | [Azure Standards](../content/.morph/standards/azure.md) | Padrões Azure e IaC |
273
-
274
- ---
275
-
276
- ## ✅ Checklist de Produção
277
-
278
- Antes de ir para produção:
279
-
280
- - [ ] Workload Identity configurada (staging/prod)
281
- - [ ] Service connections criadas e testadas
282
- - [ ] Variáveis configuradas (ACR_NAME, APP_NAME, SUBSCRIPTION_ID)
283
- - [ ] Environments criados (staging sem aprovação, prod com aprovação)
284
- - [ ] Staging pipeline testado com sucesso
285
- - [ ] Prod pipeline testado com aprovação
286
- - [ ] Health checks implementados e funcionando
287
- - [ ] Application Insights configurado
288
- - [ ] Alerts configurados (CPU, Memory, Availability)
289
- - [ ] Runbook de rollback documentado
290
-
291
- ---
292
-
293
- *MORPH-SPEC by Polymorphism Tech*
1
+ # MORPH-SPEC - Azure DevOps Pipelines
2
+
3
+ > **CI/CD para One-Person Business com Workload Identity Federation (sem secrets)**
4
+
5
+ ---
6
+
7
+ ## 🚀 Quick Start
8
+
9
+ ### 1. Configurar Workload Identity (10 min)
10
+
11
+ ```bash
12
+ # Ver guia completo em: docs/azure-devops-setup.md
13
+
14
+ # Criar App Registrations
15
+ az ad app create --display-name "myapp-staging-pipeline"
16
+ az ad app create --display-name "myapp-prod-pipeline"
17
+
18
+ # Configurar federated credentials
19
+ # (Ver guia detalhado)
20
+ ```
21
+
22
+ ### 2. Importar Pipelines no Azure DevOps
23
+
24
+ 1. **Pipelines** → **New pipeline**
25
+ 2. **Azure Repos Git** → Selecione repo
26
+ 3. **Existing Azure Pipelines YAML file**
27
+ 4. Selecione:
28
+ - `.azure/pipelines/staging-pipeline.yml`
29
+ - `.azure/pipelines/prod-pipeline.yml`
30
+
31
+ ### 3. Configurar Variáveis
32
+
33
+ Para cada pipeline, adicione:
34
+ ```
35
+ ACR_NAME: <seu-acr-name>
36
+ APP_NAME: <seu-app-name>
37
+ SUBSCRIPTION_ID: <subscription-id>
38
+ ```
39
+
40
+ ### 4. Criar Environments
41
+
42
+ 1. **Pipelines** → **Environments** → **New environment**
43
+ 2. Criar:
44
+ - `staging` (sem aprovação - deploy rápido)
45
+ - `production` (aprovação obrigatória)
46
+
47
+ ### 5. Testar!
48
+
49
+ ```bash
50
+ # Trigger staging pipeline
51
+ git checkout staging
52
+ git commit -m "test" --allow-empty
53
+ git push origin staging
54
+
55
+ # Trigger prod pipeline
56
+ git checkout main
57
+ git commit -m "test" --allow-empty
58
+ git push origin main
59
+ # ⏸️ Aprovar manualmente no Azure DevOps
60
+ ```
61
+
62
+ ---
63
+
64
+ ## 📁 Estrutura
65
+
66
+ ```
67
+ .azure/
68
+ ├── README.md # Este arquivo
69
+ ├── docs/
70
+ │ ├── azure-devops-setup.md # Guia completo de setup
71
+ │ ├── local-development.md # Como rodar projeto local
72
+ │ └── branch-strategy.md # Estratégia de branches
73
+ └── pipelines/
74
+ ├── staging-pipeline.yml # Pipeline staging (branch: staging)
75
+ ├── prod-pipeline.yml # Pipeline prod (branch: main/master)
76
+ ├── pipeline-variables.yml # Variáveis compartilhadas
77
+ └── templates/
78
+ ├── build-dotnet.yml # Template: Build .NET
79
+ ├── deploy-app-service.yml # Template: Deploy App Service
80
+ ├── deploy-container-app.yml # Template: Deploy Container Apps
81
+ └── infra-deploy.yml # Template: Deploy Bicep
82
+ ```
83
+
84
+ ---
85
+
86
+ ## 🔄 Pipelines
87
+
88
+ ### Staging Pipeline (`staging-pipeline.yml`)
89
+
90
+ **Hosting:** Container Apps com scale-to-zero (~$5-10/mês)
91
+
92
+ **Trigger:** Push em `staging` branch
93
+
94
+ **Stages:**
95
+ 1. ✅ Build & Test
96
+ 2. ✅ Deploy Infrastructure (Bicep)
97
+ 3. ✅ Build Container Image
98
+ 4. ✅ Push to ACR
99
+ 5. ✅ Deploy Container App
100
+ 6. ✅ Integration Tests
101
+
102
+ **Aprovação:** Nenhuma (deploy automático)
103
+
104
+ **Uso:** QA, testes de integração
105
+
106
+ ---
107
+
108
+ ### Prod Pipeline (`prod-pipeline.yml`)
109
+
110
+ **Hosting:** Container Apps always-on (~$10-20/mês)
111
+
112
+ **Trigger:** Push em `main` ou `master` branch
113
+
114
+ **Stages:**
115
+ 1. ✅ Build & Test
116
+ 2. ✅ Security Scan
117
+ 3. ✅ Deploy Infrastructure (Bicep) ← **Approval Required**
118
+ 4. ✅ Build Container Image
119
+ 5. ✅ Security Scan (Image)
120
+ 6. ✅ Deploy to Production ← **Approval Required**
121
+ 7. ✅ Smoke Tests (Critical)
122
+ 8. ✅ Monitor & Report
123
+
124
+ **Aprovação:** OBRIGATÓRIA (manual approval gate)
125
+
126
+ **Uso:** Produção, ambiente crítico
127
+
128
+ ---
129
+
130
+ ## 🌐 Desenvolvimento Local
131
+
132
+ **Developers NÃO têm ambiente próprio.** Ao invés disso:
133
+
134
+ - ✅ Rodam projeto **LOCAL** (Visual Studio/Rider/VS Code)
135
+ - ✅ Acessam recursos **REMOTOS** staging (SQL, Storage, Key Vault)
136
+ - ✅ Testam localmente antes de commitar
137
+
138
+ **Ver guia completo:** [`docs/local-development.md`](docs/local-development.md)
139
+
140
+ ---
141
+
142
+ ## 🎯 Fluxo Completo
143
+
144
+ ### Desenvolvimento Diário
145
+
146
+ ```bash
147
+ # 1. Criar feature branch
148
+ git checkout staging
149
+ git pull origin staging
150
+ git checkout -b feature/nova-funcionalidade
151
+
152
+ # 2. Desenvolver LOCAL
153
+ dotnet run # Conecta em recursos staging
154
+
155
+ # 3. Commitar
156
+ git add .
157
+ git commit -m "feat: adiciona nova funcionalidade"
158
+ git push origin feature/nova-funcionalidade
159
+
160
+ # 4. Criar PR para staging
161
+ # Azure DevOps → Repos → Pull Requests → New
162
+ # Source: feature/nova-funcionalidade → Target: staging
163
+ # Self-approve e merge
164
+
165
+ # 5. Staging pipeline triggado automaticamente
166
+ # ✅ Deploy para staging
167
+ ```
168
+
169
+ ### Release para Produção
170
+
171
+ ```bash
172
+ # 1. Criar PR staging → main
173
+ # Azure DevOps → Repos → Pull Requests → New
174
+ # Source: staging → Target: main
175
+
176
+ # 2. Self-review e merge
177
+
178
+ # 3. Prod pipeline triggado
179
+ # ⏸️ Approval gate aparece
180
+ # Revisar deployment summary
181
+ # Aprovar manualmente
182
+
183
+ # 4. Deploy para produção
184
+ # ✅ Aplicação em produção
185
+ ```
186
+
187
+ ---
188
+
189
+ ## 📊 Comparativo de Ambientes
190
+
191
+ | Aspecto | Staging | Prod |
192
+ |---------|---------|------|
193
+ | **Hosting** | Container Apps | Container Apps |
194
+ | **Custo** | $5-10/mês | $10-20/mês |
195
+ | **Disponibilidade** | Scale-to-zero | Always-on (min 1) |
196
+ | **SSL** | Custom domain OK | Custom domain OK |
197
+ | **Auto-scaling** | ✅ Sim | ✅ Sim |
198
+ | **Trigger** | Push to `staging` | Push to `main` |
199
+ | **Aprovação** | Nenhuma | **Obrigatória** |
200
+ | **Tests** | Unit + Integration | Unit + Integration + Security |
201
+
202
+ ---
203
+
204
+ ## 🔐 Workload Identity Federation
205
+
206
+ ### O que é?
207
+
208
+ Autenticação moderna do Azure DevOps para Azure **sem usar secrets/passwords**.
209
+
210
+ ### Vantagens
211
+
212
+ | Tradicional (Service Principal) | Workload Identity |
213
+ |--------------------------------|-------------------|
214
+ | ❌ Secrets expiram (1-2 anos) | ✅ Token auto-renova |
215
+ | ❌ Secrets vazam facilmente | ✅ Sem secrets armazenados |
216
+ | ❌ Rotação manual | ✅ Rotação automática |
217
+ | ❌ Dificil auditar | ✅ Audit trail completo |
218
+
219
+ ### Setup
220
+
221
+ Ver guia completo: [`docs/azure-devops-setup.md`](docs/azure-devops-setup.md)
222
+
223
+ ---
224
+
225
+ ## 🆘 Troubleshooting
226
+
227
+ ### Pipeline falha com "Failed to get federated token"
228
+
229
+ **Causa:** Federated credential não configurado corretamente.
230
+
231
+ **Solução:**
232
+ 1. Verificar subject do federated credential
233
+ 2. Deve ser: `sc://<ORG>/<PROJECT>/<SERVICE_CONNECTION_NAME>`
234
+ 3. Recriar se necessário (ver `docs/azure-devops-setup.md`)
235
+
236
+ ### Pipeline falha com "Insufficient permissions"
237
+
238
+ **Causa:** Service Principal não tem permissões.
239
+
240
+ **Solução:**
241
+ ```bash
242
+ # Adicionar Contributor role
243
+ az role assignment create \
244
+ --assignee <SP_ID> \
245
+ --role Contributor \
246
+ --scope "/subscriptions/<SUB_ID>/resourceGroups/<RG_NAME>"
247
+ ```
248
+
249
+ ### Container não sobe após deploy
250
+
251
+ **Causa:** Possíveis: imagem incorreta, health check falhando, ACR permissions.
252
+
253
+ **Solução:**
254
+ ```bash
255
+ # Ver logs do Container App
256
+ az containerapp logs show \
257
+ -n ca-myapp-staging \
258
+ -g rg-myapp-staging \
259
+ --follow
260
+ ```
261
+
262
+ ---
263
+
264
+ ## 📚 Documentação Completa
265
+
266
+ | Documento | Descrição |
267
+ |-----------|-----------|
268
+ | [Azure DevOps Setup](docs/azure-devops-setup.md) | Setup completo (Workload Identity, Service Connections, Environments) |
269
+ | [Local Development](docs/local-development.md) | Como rodar projeto local e acessar recursos staging |
270
+ | [Branch Strategy](docs/branch-strategy.md) | Estratégia de branches (staging/main, feature branches) |
271
+ | [Migration Guide](../content/.morph/standards/migration-guide.md) | App Service → Container Apps + CI/CD |
272
+ | [Azure Standards](../content/.morph/standards/azure.md) | Padrões Azure e IaC |
273
+
274
+ ---
275
+
276
+ ## ✅ Checklist de Produção
277
+
278
+ Antes de ir para produção:
279
+
280
+ - [ ] Workload Identity configurada (staging/prod)
281
+ - [ ] Service connections criadas e testadas
282
+ - [ ] Variáveis configuradas (ACR_NAME, APP_NAME, SUBSCRIPTION_ID)
283
+ - [ ] Environments criados (staging sem aprovação, prod com aprovação)
284
+ - [ ] Staging pipeline testado com sucesso
285
+ - [ ] Prod pipeline testado com aprovação
286
+ - [ ] Health checks implementados e funcionando
287
+ - [ ] Application Insights configurado
288
+ - [ ] Alerts configurados (CPU, Memory, Availability)
289
+ - [ ] Runbook de rollback documentado
290
+
291
+ ---
292
+
293
+ *MORPH-SPEC by Polymorphism Tech*