@polymorphism-tech/morph-spec 1.0.4 → 2.1.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.
- package/CLAUDE.md +1381 -0
- package/LICENSE +72 -0
- package/README.md +89 -6
- package/bin/detect-agents.js +225 -0
- package/bin/morph-spec.js +120 -0
- package/bin/render-template.js +302 -0
- package/bin/semantic-detect-agents.js +246 -0
- package/bin/validate-agents-skills.js +239 -0
- package/bin/validate-agents.js +69 -0
- package/bin/validate-phase.js +263 -0
- package/content/.azure/README.md +293 -0
- package/content/.azure/docs/azure-devops-setup.md +454 -0
- package/content/.azure/docs/branch-strategy.md +398 -0
- package/content/.azure/docs/local-development.md +515 -0
- package/content/.azure/pipelines/pipeline-variables.yml +34 -0
- package/content/.azure/pipelines/prod-pipeline.yml +319 -0
- package/content/.azure/pipelines/staging-pipeline.yml +234 -0
- package/content/.azure/pipelines/templates/build-dotnet.yml +75 -0
- package/content/.azure/pipelines/templates/deploy-app-service.yml +94 -0
- package/content/.azure/pipelines/templates/deploy-container-app.yml +120 -0
- package/content/.azure/pipelines/templates/infra-deploy.yml +90 -0
- package/content/.claude/commands/morph-apply.md +118 -26
- package/content/.claude/commands/morph-archive.md +9 -9
- package/content/.claude/commands/morph-clarify.md +184 -0
- package/content/.claude/commands/morph-design.md +275 -0
- package/content/.claude/commands/morph-proposal.md +56 -15
- package/content/.claude/commands/morph-setup.md +100 -0
- package/content/.claude/commands/morph-status.md +47 -32
- package/content/.claude/commands/morph-tasks.md +319 -0
- package/content/.claude/commands/morph-uiux.md +211 -0
- package/content/.claude/skills/specialists/ai-system-architect.md +604 -0
- package/content/.claude/skills/specialists/ms-agent-expert.md +143 -89
- package/content/.claude/skills/specialists/ui-ux-designer.md +744 -9
- package/content/.claude/skills/stacks/dotnet-blazor.md +244 -8
- package/content/.claude/skills/stacks/dotnet-nextjs.md +2 -2
- package/content/.morph/.morphversion +5 -0
- package/content/.morph/config/agents.json +101 -8
- package/content/.morph/config/azure-pricing.json +70 -0
- package/content/.morph/config/azure-pricing.schema.json +50 -0
- package/content/.morph/config/config.template.json +15 -3
- package/content/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +392 -0
- package/content/.morph/hooks/README.md +239 -0
- package/content/.morph/hooks/pre-commit-agents.sh +24 -0
- package/content/.morph/hooks/pre-commit-all.sh +48 -0
- package/content/.morph/hooks/pre-commit-costs.sh +91 -0
- package/content/.morph/hooks/pre-commit-specs.sh +49 -0
- package/content/.morph/hooks/pre-commit-tests.sh +60 -0
- package/content/.morph/project.md +5 -4
- package/content/.morph/schemas/agent.schema.json +296 -0
- package/content/.morph/standards/agent-framework-setup.md +453 -0
- package/content/.morph/standards/architecture.md +142 -7
- package/content/.morph/standards/azure.md +218 -23
- package/content/.morph/standards/coding.md +47 -12
- package/content/.morph/standards/dotnet10-migration.md +494 -0
- package/content/.morph/standards/fluent-ui-setup.md +590 -0
- package/content/.morph/standards/migration-guide.md +514 -0
- package/content/.morph/standards/passkeys-auth.md +423 -0
- package/content/.morph/standards/vector-search-rag.md +536 -0
- package/content/.morph/state.json +18 -0
- package/content/.morph/templates/FluentDesignTheme.cs +149 -0
- package/content/.morph/templates/MudTheme.cs +281 -0
- package/content/.morph/templates/contracts.cs +55 -55
- package/content/.morph/templates/decisions.md +4 -4
- package/content/.morph/templates/design-system.css +226 -0
- package/content/.morph/templates/infra/.dockerignore.example +89 -0
- package/content/.morph/templates/infra/Dockerfile.example +82 -0
- package/content/.morph/templates/infra/README.md +286 -0
- package/content/.morph/templates/infra/app-service.bicep +164 -0
- package/content/.morph/templates/infra/deploy.ps1 +229 -0
- package/content/.morph/templates/infra/deploy.sh +208 -0
- package/content/.morph/templates/infra/main.bicep +41 -7
- package/content/.morph/templates/infra/parameters.dev.json +6 -0
- package/content/.morph/templates/infra/parameters.prod.json +6 -0
- package/content/.morph/templates/infra/parameters.staging.json +29 -0
- package/content/.morph/templates/proposal.md +3 -3
- package/content/.morph/templates/recap.md +3 -3
- package/content/.morph/templates/spec.md +9 -8
- package/content/.morph/templates/sprint-status.yaml +68 -0
- package/content/.morph/templates/state.template.json +222 -0
- package/content/.morph/templates/story.md +143 -0
- package/content/.morph/templates/tasks.md +1 -1
- package/content/.morph/templates/ui-components.md +276 -0
- package/content/.morph/templates/ui-design-system.md +286 -0
- package/content/.morph/templates/ui-flows.md +336 -0
- package/content/.morph/templates/ui-mockups.md +133 -0
- package/content/.morph/test-infra/example.bicep +59 -0
- package/content/CLAUDE.md +124 -0
- package/content/README.md +79 -0
- package/detectors/config-detector.js +223 -0
- package/detectors/conversation-analyzer.js +163 -0
- package/detectors/index.js +84 -0
- package/detectors/standards-generator.js +275 -0
- package/detectors/structure-detector.js +221 -0
- package/docs/README.md +149 -0
- package/docs/api/cost-calculator.js.html +513 -0
- package/docs/api/design-system-generator.js.html +382 -0
- package/docs/api/fonts/Montserrat/Montserrat-Bold.eot +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Bold.woff +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Regular.eot +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Regular.woff +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +978 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1049 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
- package/docs/api/global.html +5263 -0
- package/docs/api/index.html +96 -0
- package/docs/api/scripts/collapse.js +39 -0
- package/docs/api/scripts/commonNav.js +28 -0
- package/docs/api/scripts/linenumber.js +25 -0
- package/docs/api/scripts/nav.js +12 -0
- package/docs/api/scripts/polyfill.js +4 -0
- package/docs/api/scripts/prettify/Apache-License-2.0.txt +202 -0
- package/docs/api/scripts/prettify/lang-css.js +2 -0
- package/docs/api/scripts/prettify/prettify.js +28 -0
- package/docs/api/scripts/search.js +99 -0
- package/docs/api/state-manager.js.html +423 -0
- package/docs/api/styles/jsdoc.css +776 -0
- package/docs/api/styles/prettify.css +80 -0
- package/docs/examples.md +328 -0
- package/docs/getting-started.md +302 -0
- package/docs/installation.md +361 -0
- package/docs/templates.md +418 -0
- package/docs/validation-checklist.md +266 -0
- package/package.json +39 -12
- package/src/commands/cost.js +181 -0
- package/src/commands/create-story.js +283 -0
- package/src/commands/detect.js +104 -0
- package/src/commands/doctor.js +67 -0
- package/src/commands/generate.js +149 -0
- package/src/commands/init.js +69 -45
- package/src/commands/shard-spec.js +224 -0
- package/src/commands/sprint-status.js +250 -0
- package/src/commands/state.js +333 -0
- package/src/commands/sync.js +167 -0
- package/src/commands/update-pricing.js +206 -0
- package/src/commands/update.js +88 -13
- package/src/lib/complexity-analyzer.js +292 -0
- package/src/lib/cost-calculator.js +429 -0
- package/src/lib/design-system-generator.js +298 -0
- package/src/lib/state-manager.js +340 -0
- package/src/utils/file-copier.js +59 -0
- package/src/utils/version-checker.js +175 -0
|
@@ -0,0 +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*
|