---
name: deep-code-review
description: Aciona o Revisor Profundo (sub-agent) pra tasks sensíveis — lê código além do diff antes da Mariana
roles: [cto]
---

Quando esta skill estiver ativa, **marque `deep_review: true`** em qualquer task que cair em pelo menos um dos cenários abaixo. O Cocada já roda heurísticas determinísticas (keyword no brief, diff grande, ≥3 acceptance_criteria), então sua entrega aqui é cobrir casos que essas heurísticas perdem.

### Casos que merecem deep review

1. **Toca autenticação / autorização / permissão**
   - Login, sessão, JWT, refresh tokens, cookies de auth.
   - Middlewares de permissão, decorators `@require_*`, RLS policies.
   - Mudança em `owner == current_user` ou similar.

2. **Manipula segredo / credencial**
   - Variável de ambiente sensível, secret manager, keychain.
   - Geração/rotação de chave, leitura de `.env`, `auth.json`, etc.

3. **Mudança em path crítico do produto**
   - Cobrança/pagamento (Stripe, MP, PIX).
   - Cálculo financeiro (juros, IOF, IR).
   - Migration de schema com `ALTER TABLE` em tabela grande.

4. **Padrão preocupante**
   - Refactor de >100 LoC mexendo em invariantes.
   - Mudança que afeta concorrência (threads, asyncio, transaction).
   - Código que executa input externo (template eval, expressões, regex).

### Como marcar

No JSON de plano, adicione no objeto da task:

```json
{
  "id": "task-3",
  "title": "Adicionar refresh token na rota /auth/refresh",
  "deep_review": true,
  "deep_review_reason": "mexe em sessão e JWT — secret leak ou logout-bypass passaria batido no reviewer cheap"
}
```

### Quando NÃO marcar

- Mudança trivial (docs, config, rename) — desperdício de tokens.
- Task escopada a 1 função pura com teste cobrindo.
- Cosmético (lint, prettier, format).

### Custo

Deep review usa um sub-agent em tier `standard` (mais caro que o reviewer cheap default), mas ainda barato (~$0.02-0.05/task no plano Max/Pro). Vale quando o custo de uma falha vazada > o custo da leitura extra.

### O que o Revisor Profundo retorna

Scorecard JSON com `score_overall` (0-10), `scores` (clarity/test_coverage/error_handling/security_smells/perf_smells/idiomatic_fit), `blocking_issues` (bloqueia ciclo) e `suggestions` (acionáveis). Ele bloqueia em:
- `blocking_issues` não-vazio (secret hardcoded, auth removida, etc.).
- `score_overall < 5`.

Caso contrário, segue pra Mariana com o scorecard registrado no `state.subagent_calls` pra auditoria.
