# Apply MORPH Feature Implementation - FASE 5

Implemente a feature especificada seguindo as tasks definidas.

## Uso

```
/morph-apply {feature-name}
```

## Pré-requisitos

### CRÍTICO: Validar Fases Anteriores

**SEMPRE verifique que fases anteriores foram concluídas:**

```bash
# Obter estado da feature
npx morph-spec state get {feature-name}
```

**Validações obrigatórias:**

1. **FASE 0 (Proposal):**
   - [ ] Output `proposal` criado
   - [ ] Agentes detectados e registrados

2. **FASE 1 (Setup):**
   - [ ] Phase passou por "setup"
   - [ ] Contexto carregado

3. **FASE 1.5 (UI/UX) - SE APLICÁVEL:**
   - [ ] Se `uiux-designer` está nos activeAgents → outputs ui-* devem existir
   - [ ] Se NÃO tem uiux-designer → pode pular

4. **FASE 2 (Design):**
   - [ ] Output `spec` criado
   - [ ] Output `contracts` criado
   - [ ] Output `decisions` criado

5. **FASE 3 (Clarify):**
   - [ ] Phase passou por "clarify"
   - [ ] Spec atualizado com clarificações

6. **FASE 4 (Tasks):**
   - [ ] Output `tasks` criado
   - [ ] `tasks.json` tem array de tasks
   - [ ] `tasks.total` > 0 no state

**Se QUALQUER validação falhar:**
```
❌ ERRO: Fase {X} não foi concluída!

Para completar as fases de planejamento, execute:
/morph-proposal {feature-name}
(Resume automaticamente da fase atual: {current_phase})
```

**NÃO prossiga com implementação até todas as fases estarem completas!**

### Arquivos Necessários

- [ ] Feature existe em `.morph/project/outputs/{feature}/`
- [ ] `spec.md` está aprovado
- [ ] `tasks.json` tem tasks definidas
- [ ] `contracts.cs` define as interfaces

## Workflow

1. **Carregue o contexto**:
   - Leia `.morph/project/outputs/{feature}/spec.md`
   - Leia `.morph/project/outputs/{feature}/tasks.json`
   - Leia `.morph/project/outputs/{feature}/contracts.cs`
   - Leia framework/standards/ e .morph/project/standards/ para padrões

2. **Inicialize state tracking**:
   ```bash
   # Atualizar fase para implement
   npx morph-spec state set {feature} phase implement
   npx morph-spec state set {feature} status in_progress

   # Definir total de tasks (baseado em tasks.json)
   npx morph-spec state set {feature} tasks.total {N}
   ```

3. **Execute tasks em ordem**:
   - Marque task como in progress: `npx morph-spec task start {feature} {task-id}`
   - Implemente seguindo os padrões e contracts.cs
   - Complete task: `npx morph-spec task done {feature} {task-id}`
   - **Validators run automatically** on task-done. If validation fails:
     - Read the error messages and fix violations
     - Re-run `task done` — do NOT use `--skip-validation` unless user authorizes
   - Framework auto-manages checkpoints (every 3 tasks, includes validation summary)

4. **Phase advancement**:
   ```bash
   # Advance to next phase (validates → advances → shows next steps)
   npx morph-spec phase advance {feature}
   ```

5. **Marcar outputs criados**:
   Sempre que gerar um arquivo de output:
   ```bash
   npx morph-spec state mark-output {feature} spec
   npx morph-spec state mark-output {feature} contracts
   npx morph-spec state mark-output {feature} tasks
   # etc.
   ```

6. **Ao finalizar**:
   - Generate recap automatically: `npx morph-spec generate recap {feature}`
   - Atualize state: `npx morph-spec state set {feature} status done`
   - Marque recap: `npx morph-spec state mark-output {feature} recap`
   - Liste arquivos criados/modificados
   - Calcule custo real vs estimado

## Padrões Obrigatórios

Siga sempre (priorize project/standards/ se houver):
- `framework/standards/coding.md` - Padrões base do MORPH
- `.morph/project/standards/coding.md` - Padrões específicos do projeto
- `.morph/project/standards/architecture.md` - Estrutura de projeto
- `.morph/project/standards/azure.md` - Recursos e custos

---

## Checklist Pré-Deploy Azure

**ANTES de fazer deploy para Azure, execute `/morph-preflight azure` ou verifique manualmente:**

### Packages e Build

- [ ] Packages sem conflitos de versão (`dotnet restore` sem warnings NU1605/NU1608)
- [ ] `Azure.Identity` especificado explicitamente no `.csproj`
- [ ] Build passa sem erros (`dotnet build`)

### EF Core Migrations

- [ ] Sem pending model changes (`dotnet ef migrations has-pending-model-changes`)
- [ ] Migration criada para todas as mudanças de schema
- [ ] Migration script revisado (`dotnet ef migrations script --idempotent`)

### Blazor .NET 10 (se aplicável)

- [ ] `.csproj` contém `<RequiresAspNetWebAssets>true</RequiresAspNetWebAssets>`
- [ ] Static assets funcionando localmente

### Container/Docker (se Container Apps)

- [ ] Dockerfile válido e testado localmente
- [ ] `docker build` funciona sem erros
- [ ] Container roda localmente (`docker run`)

### Infraestrutura Azure

- [ ] Bicep sem erros de sintaxe (`az bicep build`)
- [ ] Key Vault URI configurado em `appsettings.Production.json`
- [ ] Connection strings em Key Vault (não hardcoded)
- [ ] Managed Identity habilitada nos recursos

### Segurança

- [ ] Sem secrets em código ou `appsettings.json` (exceto Development)
- [ ] HTTPS enforçado
- [ ] CORS configurado corretamente

### Comandos de Verificação

```bash
# 1. Package conflicts
dotnet restore 2>&1 | grep -E "NU1605|NU1608"

# 2. Pending migrations
dotnet ef migrations has-pending-model-changes \
  --project src/Infrastructure \
  --startup-project src/Web

# 3. Bicep validation
az bicep build --file infra/main.bicep --stdout > /dev/null

# 4. Docker build
docker build -t myapp:test .

# 5. Secret scan (basic)
grep -rE "(Password=|Pwd=|Secret=)" appsettings*.json | grep -v Development
```

### Se QUALQUER item falhar

```
❌ BLOQUEADO: Não faça deploy até resolver!

Use /morph-preflight azure para diagnóstico detalhado.
```

## Validações

Antes de marcar task como completa:
- [ ] Código compila
- [ ] Segue padrões de nomenclatura
- [ ] Testes unitários (se aplicável)
- [ ] Sem hardcoded secrets

## Output

Ao final de cada task, mostre:
1. Task completada
2. Arquivos criados/modificados
3. Próxima task
4. Progresso geral (X/Y tasks) - usar `npx morph-spec state get {feature}`

Ao final de cada checkpoint:
```bash
npx morph-spec state list
```

Isso mostra o progresso atualizado automaticamente.

---

**Feature:** $ARGUMENTS
