---
name: scanner
description: Varredura completa de frontend + backend + integracao. Detecta imports quebrados, rotas orfas, secrets expostos, console.log, API mismatch. Ativa com /scanner ou "faz uma varredura".
---

# Scanner — Varredura de Codigo Front + Back + Integracao

## Quando ativar
- Quando o usuario digitar `/scanner`
- Quando disser: "faz uma varredura", "checa tudo", "tem algo quebrado?", "analisa o codigo"

## O que fazer ao ativar

### Passo 1: Identificar o projeto
Detectar projeto pela pasta atual. Ler CLAUDE.md do projeto se existir.

### Passo 2: Detectar stack
Ler package.json (ou registry.json) pra saber:
- Framework backend (Express, Fastify)
- Framework frontend (React, Vue)
- Banco de dados (better-sqlite3, etc)
- Portas configuradas

### Passo 3: Executar varredura

#### BACKEND — 10 checks

1. **Imports quebrados** — Grep todos os `import` e verificar se o arquivo/modulo existe
```bash
grep -rn "^import\|require(" src/ --include="*.ts" --include="*.js"
```

2. **Rotas orfas** — Endpoints definidos no back que ninguem chama no front
```bash
# Back: listar endpoints
grep -rn "router\.\(get\|post\|put\|delete\|patch\)\|app\.\(get\|post\|put\|delete\)" src/ --include="*.ts"
# Front: verificar se cada endpoint aparece em fetch/axios/api calls
```

3. **ENV faltando** — `process.env.X` usado no codigo mas ausente do .env.example
```bash
grep -rn "process\.env\." src/ --include="*.ts" | grep -oP "process\.env\.\K[A-Z_]+"
```

4. **Erros nao tratados** — async handlers sem try/catch
```bash
grep -rn "async.*req.*res" src/ --include="*.ts"
```

5. **SQL injection** — Query com concatenacao de string
```bash
grep -rn "db\.\(prepare\|run\|get\|all\)" src/ --include="*.ts" | grep -v "?"
```

6. **Secrets hardcoded** — API key, token, senha no codigo
```bash
grep -rni "apikey\|api_key\|secret\|password\|token" src/ --include="*.ts" | grep -v "process\.env\|\.env\|config\."
```

7. **Dependencias fantasma** — import de pacote que nao ta no package.json
```bash
# Comparar imports de node_modules com dependencies do package.json
```

8. **TypeScript any** — Uso excessivo de `any`
```bash
grep -rn ": any\|as any\|<any>" src/ --include="*.ts" --include="*.tsx"
```

9. **TODO/FIXME/HACK** — Debito tecnico marcado
```bash
grep -rn "TODO\|FIXME\|HACK\|XXX" src/ --include="*.ts" --include="*.tsx"
```

10. **Arquivos grandes** — Arquivos com mais de 500 linhas (sinal de refactor)
```bash
find src/ -name "*.ts" -o -name "*.tsx" | xargs wc -l | sort -rn | head -20
```

#### FRONTEND — 10 checks

1. **Componentes orfaos** — .tsx que ninguem importa
```bash
# Listar todos .tsx, verificar se cada um e importado por outro arquivo
```

2. **Links quebrados** — `<Link to="/x">` ou `navigate("/x")` sem rota correspondente
```bash
grep -rn 'to="/\|to={"/\|navigate("/\|href="/' src/ --include="*.tsx"
```

3. **Console.log** — Logs esquecidos em producao
```bash
grep -rn "console\.\(log\|debug\|info\)" src/ --include="*.tsx" --include="*.ts"
```

4. **Estado morto** — useState/useEffect declarado mas nao usado
```bash
grep -rn "useState\|useEffect\|useMemo\|useCallback" src/ --include="*.tsx"
```

5. **Assets faltando** — src de imagem/icone que nao existe
```bash
grep -rn 'src="/\|src={' src/ --include="*.tsx" | grep -v "http"
```

6. **Acessibilidade basica** — img sem alt, button sem type
```bash
grep -rn "<img " src/ --include="*.tsx" | grep -v "alt="
grep -rn "<button " src/ --include="*.tsx" | grep -v "type="
```

7. **Fetch sem error handling** — chamada API sem catch
```bash
grep -rn "fetch(\|axios\.\|api\." src/ --include="*.tsx" | grep -v "catch\|try"
```

8. **Keys faltando** — .map() sem key prop
```bash
grep -rn "\.map(" src/ --include="*.tsx"
```

9. **Inline styles** — style={{}} excessivo (deveria ser Tailwind)
```bash
grep -rn "style={{" src/ --include="*.tsx"
```

10. **Responsividade** — componentes sem classes mobile (sm: md: lg:)
```bash
grep -rL "sm:\|md:\|lg:" src/components/ --include="*.tsx" 2>/dev/null
```

#### INTEGRACAO — 5 checks

1. **API mismatch** — Frontend chama endpoint que nao existe no back
```bash
# Cruzar rotas do back com fetch/axios do front
```

2. **Portas corretas** — Frontend apontando pra porta certa do backend
```bash
grep -rn "localhost:\|127\.0\.0\.1:" src/ --include="*.ts" --include="*.tsx"
```

3. **CORS** — Backend permite origem do frontend
```bash
grep -rn "cors\|Access-Control" src/ --include="*.ts"
```

4. **WebSocket sync** — Eventos emitidos no back sao ouvidos no front e vice-versa
```bash
# Back: grep "emit(" | Front: grep "on(" — cruzar nomes de eventos
```

5. **Auth flow** — Rotas protegidas no back tem token sendo enviado no front
```bash
grep -rn "authenticate\|authMiddleware\|requireAuth" src/ --include="*.ts"
grep -rn "Authorization\|Bearer\|token" src/ --include="*.tsx"
```

### Passo 4: Classificar resultados

Cada problema encontrado recebe severidade:

| Severidade | Criterio |
|-----------|---------|
| CRITICAL | Seguranca (secrets, SQL injection), funcionalidade quebrada (import/rota faltando) |
| WARNING | Qualidade (console.log, any, TODO), manutencao (arquivo grande, componente orfao) |
| INFO | Boas praticas (acessibilidade, responsividade, inline styles) |

### Passo 5: Gerar relatorio

Salvar em `~/.claude/shield/reports/{projeto}-scan-{data}.json`

Mostrar ao usuario:
```
SCANNER — {Projeto}
====================
CRITICAL: {N}
  - [file:line] descricao do problema
WARNING: {N}
  - [file:line] descricao do problema
INFO: {N}
  - [file:line] descricao do problema

Top 3 prioridades:
  1. ...
  2. ...
  3. ...

Quer que eu corrija os criticals agora?
```

## Integracao com Guardian
- Antes de corrigir qualquer problema, verificar snapshot do Guardian
- Nunca "corrigir" deletando funcionalidade — apenas adicionar o que falta
- Salvar resultado do scan para o Health Score usar
