SkillProgramaçãoRevisão

Revisão de Lógica e Corretude

Verifica se a lógica implementada em um PR está correta, trata os casos esperados e não introduz bugs. Use como etapa de code review sempre que o PR alterar regra de negócio, algoritmos, transformações de dados ou fluxos de controle.

Ações
PerfilDev
ProfundidadeAlta
IdiomaInglês (skill original)
Objetivo

Em uma frase.

Verificar se a lógica implementada no PR está correta — cobrindo fluxos de controle, tratamento de estados nulos e inválidos, transformações de dados, contratos de interface e race conditions em código concorrente.

Aplicação

Quando
faz sentido.

Usar
  • Como segunda etapa do workflow de code review, após mapear o escopo do PR.
  • Sempre que o PR modificar lógica de negócio, algoritmos, transformações de dados ou fluxos de controle.
  • Quando há suspeita de que uma mudança pode introduzir comportamento incorreto em casos de borda.
Não usar
Prompt

Instruções
para a IA.

### Passo 1 — Leia cada função alterada por inteiro

Não revise apenas as linhas do diff highlight. Leia a função completa para entender o comportamento antes e depois da mudança — bugs costumam se esconder no contexto das linhas não alteradas.

### Passo 2 — Trace todos os caminhos de controle

Para cada bloco alterado, percorra explicitamente o happy path, os caminhos alternativos, os caminhos de erro e os de borda (valores limite, listas vazias, zero, strings vazias). Verifique se nenhum caminho deixa o sistema em estado inválido.

### Passo 3 — Verifique tratamento de nulo e estado inválido

Para cada valor que pode ser null, undefined, vazio ou inválido, confira se há verificação antes do uso e se o tratamento está no lugar certo.

### Passo 4 — Verifique transformações de dados

Confira se a transformação preserva a semântica, se os tipos são compatíveis, se as comparações usam o operador correto e se arredondamento, overflow, datas e timezones são tratados.

### Passo 5 e 6 — Contratos de interface e race conditions

Valide assinaturas, retornos e compatibilidade nos pontos de integração. Em código concorrente, busque ordem de execução não garantida, estado compartilhado sem sincronização e vulnerabilidades TOCTOU. Cada problema reportado deve incluir arquivo, linha, descrição, impacto e severidade; quando não houver nenhum, declare "No logic issues found."
Casos

Exemplos
de uso.

**Contexto:** um PR adiciona o método `getActiveSubscription` em um serviço de usuário.

```typescript
// src/services/UserService.ts
async getActiveSubscription(userId: string): Promise<Subscription> {
  const user = await this.userRepository.findById(userId);
  const subscriptions = await this.subscriptionRepository.findByUser(user.id);
  const active = subscriptions.filter(s => s.status === 'active');
  return active[0];
}
```

**Saída esperada do agente**

**Arquivo:** `src/services/UserService.ts` — Linha 4
**Problema:** `user` pode ser `null` se o `userId` não existir, mas `user.id` é acessado na linha seguinte sem verificação, causando `TypeError` em produção.
**Impacto:** crash em runtime para qualquer chamada com `userId` inválido ou de usuário deletado.
**Severidade:** alta
**Sugestão:** lançar `NotFoundError` quando `user` for nulo, após o `findById`.

**Arquivo:** `src/services/UserService.ts` — Linha 7
**Problema:** `active[0]` retorna `undefined` quando não há assinaturas ativas, mas o tipo declarado é `Promise<Subscription>` (não nullable).
**Impacto:** código que acessa o retorno sem verificar nulo quebra silenciosamente para usuários sem assinatura.
**Severidade:** alta
**Sugestão:** alterar o tipo para `Promise<Subscription | null>` e documentar o contrato, ou lançar exceção explícita.
Execução

Como usar
com IA.

  1. 01Copie a skill (botão "Copiar skill para IA", no topo): o texto copiado já é a skill completa, não um resumo.
  2. 02Abra o Claude ou Claude Code e cole — a IA recebe todas as instruções e fica pronta para a tarefa.
  3. 03Prefere usar como arquivo reutilizável? Baixe o .zip e coloque o SKILL.md em .claude/skills/ (Claude Code) ou anexe o arquivo no Claude (claude.ai).