Objetivo: ao final, o consultor transforma verificação em portão automático com stop hook, sabe como o Claude se autocorrige a partir de uma falha devolvida, e aplica a segunda opinião fria a entregável que importa.
exit 2 recusa o encerramento e devolve a falha ao Claude — que se corrige sozinho, sem você pedir. É verificação que cobra por você quando você não está na sala.PostToolUse pega problema a cada edição, e em headless o portão é o resultado JSON + exit code.{
"hooks": {
"Stop": [
{
"hooks": [
{ "type": "command", "command": "./.claude/scripts/portao-teste.sh" }
]
}
]
}
}
#!/usr/bin/env bash
# Recusa o encerramento se o teste de regressão falhar.
# ATENÇÃO: só exit 2 bloqueia. exit 1 NÃO bloqueia (aula 3.2.4).
if ! npm run test:regressao --silent; then
echo "Teste de regressão falhou. Corrija antes de encerrar." >&2
exit 2
fi
exit 0
O ciclo que isso produz, sem intervenção humana:
Stop roda os testesexit 2 → o stderr volta para o Claude como contextoexit 0 → a sessão encerraO passo 4 é o que diferencia isto de um alerta. Não é um aviso para você ler amanhã — é uma cobrança que o Claude atende agora.
| Camada | Cobre | Não cobre |
|---|---|---|
| Classificador do auto mode | Ação perigosa (produção, force push, vazamento) | Se o resultado está correto |
PostToolUse com lint e type-check |
Erro sintático e de tipo, a cada edição | Lógica errada que compila |
| Stop hook com teste | Regressão — o que funcionava e parou | O que nunca funcionou, e cenário sem teste |
| Verificação por JSON + exit code (headless) | Falha detectável pelo pipeline | Resultado plausível mas errado |
| Segunda opinião fria (subagente sem histórico) | O que nunca esteve certo e foi racionalizado | Nada automático — exige uma rodada a mais |
Nenhuma linha dessa tabela é redundante com outra. É por isso que "os testes passaram" não encerra a conversa.
A aula 2.8.T2 já listou para ABAP: comportamento de user exit ou BAdI sem teste unitário, autorização, integração com sistema externo indisponível em ambiente de teste. Some a isso o que não é código:
| Entregável | Existe teste de regressão? | O que verifica |
|---|---|---|
| Objeto CAP/Fiori | Sim | Suíte de teste + stop hook |
| Programa ABAP | Parcialmente | Teste unitário onde existe + revisão no ADT |
| Spec funcional | Não | Revisão humana + segunda opinião fria |
| Status report, proposta | Não | Segunda opinião fria + julgamento do PM (aulas 2.8.P1 e P2) |
| Documentação de landscape | Não | Tarefa agendada de comparação (aula 2.8.B3) |
Para as três últimas linhas, a segunda opinião fria é a verificação — não é um extra. Não existe portão automático para uma regra de alçada escrita errada.
O mecanismo é o da aula 2.7.3: um subagente sem histórico do processo revisa o entregável. Ele não sabe quais alternativas foram descartadas nem quais dúvidas foram resolvidas por cansaço, e é justamente por isso que ele acha o que a sessão original deixou passar.
Aplique em: FS antes de entrar no fluxo de aprovação do cliente (2.8.F2), refatoração antes de sair de DEV (2.8.T2), material de comitê antes da reunião (2.8.P3), e qualquer resultado de execução desassistida que vá para o cliente.
Regra Wayon Repositório de projeto de cliente com suíte de teste roda com stop hook de teste ativo — e o hook usa
exit 2, conferido na revisão de par (aula 3.2.4). Para entregável sem teste automático — spec, proposta, status report, documentação — a segunda opinião fria é obrigatória antes do envio ao cliente, e não é substituível por "os testes passaram", porque não há teste.
📖 Hooks — Stop e exit codes · A segunda opinião fria — módulo 2.7.3
exit 2. O que acontece em seguida?Correto. É o que transforma o hook de alerta em cobrança atendida na hora.
exit 2 recusa o encerramento; a falha não vai para o log esperando leitura futura.
Não há encerramento com erro: o turno continua, e é essa continuidade que permite a autocorreção.
Teste passar não diz nada sobre perigo: um force push ou um deploy em produção pode ocorrer com a suíte inteira verde.
Correto. Nenhuma substitui a outra.
Cobertura mede o quanto do código é exercitado, não se ações perigosas foram barradas.
Não existe teste de regressão para uma spec — não há o que o portão execute.
PostToolUse com lint, para garantir a consistência do documentoLint pega erro sintático de código; regra de negócio errada num documento passa intacta.
Correto. Não há portão automático para uma regra de alçada escrita errada.
Correto. Teste compara com o comportamento anterior; ele não questiona se a premissa estava certa desde o início.
Essa é exatamente a definição de regressão, que é o que o teste pega bem.
Isso o lint e o type-check do PostToolUse pegam antes, e mais barato.