TRILHA 4 · Pré-req: Trilha 2

🔬 Avançado — Revisor de PRs com Claude Code

Construa do zero um plugin Claude Code que revisa pull requests com isolamento via git worktree, loop de personas (Author, Reviewer, Security) e relatório estruturado por severidade. Cinco prompts incrementais, verificados um a um.

6
Módulos
36
Tópicos
~5h
Duração
Avançado
Nível
Conteúdo Detalhado
4.1 ~40 min

🎯 O Projeto e o SPEC

Definição do escopo, arquitetura em 3 camadas e o SPEC.md completo antes de qualquer código.

O que é:

Um plugin Claude Code que recebe um número de PR como input, faz checkout isolado via git worktree e entrega um relatório Markdown estruturado com findings por severidade.

Por que aprender:

Revisões de código automáticas economizam horas de revisão humana. Compreender o escopo evita feature creep durante o build incremental.

Conceitos-chave:

Plugin scope, input/output contract, PR number como parâmetro, relatório como artefato.

O que é:

git worktree permite criar um segundo checkout do repositório em um diretório temporário sem interferir no working tree principal — ideal para revisar uma branch de PR enquanto você trabalha em outra.

Por que aprender:

Fazer checkout do PR na branch atual contamina seu trabalho em progresso. O worktree resolve isso sem stash ou commit temporário.

Conceitos-chave:

git worktree add, diretório /tmp/pr-review-NNN, EXIT trap para cleanup garantido, isolamento de branches.

O que é:

Camada 1 — Isolamento: worktree setup e cleanup. Camada 2 — Análise: loop de revisão com 3 personas e estado YAML. Camada 3 — Relatório: consolidação de findings e integração GitHub.

Por que aprender:

Separar responsabilidades em camadas permite testar e iterar cada uma independentemente. Se o worktree falha, a lógica de análise não é afetada.

Conceitos-chave:

Separation of concerns, camadas independentes, contratos entre camadas, testabilidade por camada.

O que é:

O SPEC.md define: ciclo de vida do revisor (SETUP→REVIEWING→SUMMARIZING→DONE), schema do estado YAML, estrutura de arquivos esperada, invariantes de segurança e contrato dos hooks.

Por que aprender:

O SPEC serve como fonte de verdade para todos os 5 prompts de build. Sem ele, cada prompt reimagina a arquitetura.

Conceitos-chave:

Fonte de verdade, ciclo de vida, schema YAML, invariantes, contrato de hook.

O que é:

O file tree completo do plugin: claude.json, hooks/stop-hook.sh, scripts/setup-worktree.sh, scripts/cleanup-worktree.sh, state/review.yaml, .claudex/reviews/.

Por que aprender:

Saber o destino antes de começar evita decisões de naming inconsistentes entre prompts. Cada arquivo tem uma responsabilidade única.

Conceitos-chave:

File tree, responsabilidade por arquivo, convenções de naming, separação de scripts e estado.

O que é:

Checklist para validar o SPEC antes do primeiro prompt: ciclo de vida coberto? Schema com todos os campos? Invariantes explícitas? File tree definido? Contrato dos hooks documentado?

Por que aprender:

Um SPEC incompleto gera ambiguidades que o Claude resolve de formas diferentes a cada prompt, criando inconsistências.

Conceitos-chave:

SPEC completeness, checklist de validação, ambiguidade vs decisão explícita, revisão do SPEC.

Ver Completo
4.2 ~50 min

🌳 Prompt 01 — Scaffold e Worktree

O primeiro prompt que cria a estrutura do plugin e o setup de git worktree com cleanup garantido.

O que é:

O Prompt 01 entrega o scaffold completo: claude.json com hooks registrados, stub do stop-hook com fail-open, scripts de setup e cleanup do worktree.

Por que aprender:

O scaffold define o contrato externo. Acertar aqui evita reescritas de estrutura nos prompts 2 a 5.

Conceitos-chave:

Plugin scaffold, claude.json manifest, fail-open stub, setup/cleanup scripts.

O que é:

O texto exato do primeiro prompt de build, com todas as instruções de entrega, restrições e verificações que o Claude deve seguir.

Por que aprender:

Ver o prompt real mostra como estruturar instruções para Claude: o que entregar, restrições claras e como verificar antes de avançar.

Conceitos-chave:

Estrutura de prompt de build, seções Entregue/Restrições/Verificação, prompts atômicos.

O que é:

claude.json define os hooks registrados. hooks/stop-hook.sh é o stub fail-open. scripts/setup-worktree.sh cria o worktree. scripts/cleanup-worktree.sh remove via EXIT trap.

Por que aprender:

Cada arquivo tem responsabilidade única. Claude.json é o manifest; os scripts são lógica de infraestrutura separada do hook.

Conceitos-chave:

claude.json, hook registration, script separation, manifest-driven plugins.

O que é:

`git worktree add /tmp/pr-review-$PR_NUMBER origin/pr-branch` cria um segundo working tree. O EXIT trap chama cleanup-worktree.sh para `git worktree remove --force` mesmo se o script falhar.

Por que aprender:

Sem o EXIT trap, worktrees órfãos acumulam em /tmp e o repositório fica em estado inconsistente.

Conceitos-chave:

git worktree add/remove, EXIT trap, cleanup garantido, --force para remoção.

O que é:

O setup-worktree.sh verifica com `git worktree list` antes de criar. Se já existe, reutiliza. Se criação falha por qualquer motivo, retorna exit 0 (fail-open) e loga o erro.

Por que aprender:

Idempotência evita falhas em reruns. Fail-open evita que um erro de infraestrutura bloqueie o desenvolvedor.

Conceitos-chave:

Idempotência, fail-open, verificação antes de criar, reuse vs recreate.

O que é:

Checklist: `claude --version` carrega o plugin, `bash -n hooks/stop-hook.sh` passa, `bash scripts/setup-worktree.sh 123` cria worktree em /tmp/pr-review-123, script de cleanup remove corretamente.

Por que aprender:

Verificar o Prompt 01 antes de avançar garante que a base está sólida. Bugs de scaffold são baratos aqui e caros depois.

Conceitos-chave:

Verificação por camada, smoke test de scaffold, lint de bash, test de worktree manual.

Ver Completo
4.3 ~50 min

⚛️ Prompt 02 — A Máquina de Estados

Estado YAML atômico, CAS e lockfile — a base que garante que o revisor nunca corre em paralelo.

O que é:

O Prompt 02 cria o sistema de estado persistente: state/review.yaml com schema completo, helpers de leitura/escrita atômica, CAS e lockfile para exclusão mútua.

Por que aprender:

O estado precisa existir e estar correto antes que o hook possa tomar decisões. Construir estado primeiro é o padrão correto.

Conceitos-chave:

Estado persistente, YAML schema, helpers de I/O, CAS, lockfile.

O que é:

O texto exato do segundo prompt de build, com instruções para criar o schema YAML, os helpers de escrita atômica e o mecanismo de CAS.

Por que aprender:

A forma como você pede CAS e escrita atômica determina se Claude implementa correto. Prompts explícitos produzem implementações explícitas.

Conceitos-chave:

Prompt explícito, instruções de CAS, atomic write spec, schema-first.

O que é:

Campos: pr_number (int), worktree_path (string), status (SETUP|REVIEWING|SUMMARIZING|DONE), round (int), max_rounds (int), findings (list), started_at (epoch).

Por que aprender:

Um schema bem definido evita que cada prompt interprete o estado de forma diferente. Cada campo tem tipo e propósito explícito.

Conceitos-chave:

YAML schema, campos tipados, status enum, round tracking, findings list.

O que é:

Escrita atômica: escrever em .review.yaml.tmp e renomear. CAS: ler versão atual, verificar que não mudou, depois escrever. Se versão mudou, abort com erro.

Por que aprender:

Claude Code pode ser interrompido a qualquer momento. CAS garante que duas instâncias paralelas não corrompem o estado simultaneamente.

Conceitos-chave:

Atomic rename, compare-and-swap, version field, concurrent write protection.

O que é:

`flock -n state/review.lock` tenta adquirir lock exclusivo. Se já existe, retorna imediatamente com erro — não espera. O lock é liberado via EXIT trap.

Por que aprender:

Sem lockfile, abrir duas abas do Claude Code no mesmo repo dispara dois revisores em paralelo que corrompem o estado um do outro.

Conceitos-chave:

flock, exclusão mútua, lock não-bloqueante, stale lock detection.

O que é:

Testes: escrever estado, ler de volta, confirmar que campos batem. Simular conflito de CAS (modificar versão entre ler e escrever), confirmar abort. Testar lockfile com duas chamadas simultâneas.

Por que aprender:

CAS e atomicidade são difíceis de debugar depois. Testar agora, com o sistema simples, é muito mais eficiente.

Conceitos-chave:

Teste de CAS, conflict simulation, concurrent lock test, verificação de estado.

Ver Completo
4.4 ~55 min

🔄 Prompt 03 — O Stop Hook e o Loop

O Stop Hook que controla a máquina de estados: SETUP → REVIEWING → SUMMARIZING → DONE.

O que é:

O Prompt 03 substitui o stub pelo engine real: o Stop Hook lê o estado YAML e decide BLOCK (continuar loop) ou APPROVE (encerrar sessão) com base na fase atual.

Por que aprender:

Este hook é o coração do revisor. Sem ele, o sistema executa uma única revisão — não um loop controlado por estado.

Conceitos-chave:

Stop Hook, BLOCK vs APPROVE, reason como instrução, ciclo de vida controlado.

O que é:

O texto exato do terceiro prompt de build com as instruções para implementar o case statement por fase, a lógica de BLOCK com reason estruturado e o ERR trap obrigatório.

Por que aprender:

Ver como especificar um case statement de hook mostra o padrão para controle de fluxo baseado em estado persistente.

Conceitos-chave:

Case statement por fase, ERR trap, JSON reason, prompt spec para hooks.

O que é:

SETUP: cria worktree e inicializa estado. REVIEWING: loop de N rodadas com personas. SUMMARIZING: consolida findings em relatório. DONE: cleanup e APPROVE.

Por que aprender:

Estados explícitos evitam transições implícitas que criam loops infinitos ou pulos de fase. Cada transição tem uma condição clara.

Conceitos-chave:

State machine, transições explícitas, condições de transição, estado terminal DONE.

O que é:

O hook escreve um runner script em .claudex/runners/PR-NNN-round-N.sh que monta o diff do PR, o contexto da persona e invoca `claude --print` com o prompt de revisão.

Por que aprender:

Separar o runner do hook permite testar cada rodada de revisão independentemente, sem precisar disparar o hook completo.

Conceitos-chave:

Runner script, claude --print, diff injection, contexto de persona, separação hook/runner.

O que é:

`gh pr view $PR_NUMBER --json title,body,files` captura metadados. `git diff origin/main...HEAD` no worktree captura o diff. Ambos são injetados no prompt do runner.

Por que aprender:

O contexto completo (título, descrição, diff, arquivos modificados) é o que permite ao Claude fazer revisão significativa em vez de genérica.

Conceitos-chave:

gh cli, pr metadata, git diff no worktree, context injection, prompt enrichment.

O que é:

Criar repo de teste com branch de PR sintético. Disparar o hook manualmente. Verificar: SETUP→REVIEWING, runner escrito, BLOCK com reason. Disparar novamente: round incrementa. Estado final DONE = APPROVE.

Por que aprender:

O loop é a parte mais complexa do sistema. Testar com PR sintético (sem custo de API) valida a lógica de transição antes de usar créditos reais.

Conceitos-chave:

PR sintético, smoke test manual, verificação de transições, teste sem API call.

Ver Completo
4.5 ~45 min

👤 Prompt 04 — Personas e Relatório

Rotação de 3 personas (Author, Reviewer, Security) e geração do relatório estruturado com severidade.

O que é:

O Prompt 04 adiciona rotação de personas ao runner (round 1 = Author, round 2 = Reviewer, round 3 = Security) e o código que consolida os findings em PR-NNN.md.

Por que aprender:

Personas transformam uma revisão genérica em três perspectivas especializadas. O relatório estruturado torna os findings acionáveis.

Conceitos-chave:

Persona rotation, round-based context, findings consolidation, relatório estruturado.

O que é:

O texto exato do quarto prompt com as instruções para implementar os system prompts das 3 personas, a extração de findings estruturados e o template do relatório final.

Por que aprender:

A especificação das personas determina a qualidade da revisão. Prompts de persona bem escritos ativam heurísticas diferentes no modelo.

Conceitos-chave:

System prompt por persona, findings schema, structured extraction, template de relatório.

O que é:

Author (round 1): avalia intenção e completude da implementação. Reviewer (round 2): procura bugs, edge cases e violações de contrato. Security (round 3): foca em vulnerabilidades, injection, autenticação.

Por que aprender:

Cada persona ativa um conjunto diferente de heurísticas. Author encontra coisas que Reviewer nunca procuraria, e vice-versa.

Conceitos-chave:

Author perspective, bug hunting, security review, multi-perspective coverage, perspectiva complementar.

O que é:

Relatório com: sumário executivo, findings agrupados por arquivo, cada finding com severidade (CRITICAL/HIGH/MEDIUM/LOW), linha, descrição e sugestão de fix. Métricas no final.

Por que aprender:

Um relatório sem estrutura é um dump de texto. Severidade + agrupamento por arquivo + sugestão de fix tornam a revisão acionável imediatamente.

Conceitos-chave:

Severity levels, file grouping, actionable findings, sumário executivo, métricas de revisão.

O que é:

O relatório é salvo em .claudex/reviews/PR-NNN.md com timestamp no nome para histórico. Pode ser versionado no repo ou listado pelo comando /pr-reviewer:list.

Por que aprender:

Salvar como artefato permite comparar revisões ao longo do tempo e compartilhar com o time sem precisar manter a sessão do Claude Code aberta.

Conceitos-chave:

Artefato persistente, timestamp naming, histórico de revisões, relatório compartilhável.

O que é:

Rodar o revisor em um PR de teste com bugs conhecidos intencionais. Verificar: as 3 personas rodaram? Os bugs conhecidos aparecem no relatório? Severidades corretas? Relatório salvo em .claudex/reviews/?

Por que aprender:

Validar com bugs conhecidos é o teste mais confiável: se o revisor não encontra o que você plantou, há problema nas personas ou no diff injection.

Conceitos-chave:

PR de teste com bugs plantados, verificação de cobertura de personas, validação de formato do relatório.

Ver Completo
4.6 ~50 min

🔒 Prompt 05 — Safety Pass e Produção

Auditoria das 6 primitivas de segurança, integração GitHub e configuração por repositório.

O que é:

O Prompt 05 é o safety pass final: audita o código contra as 6 primitivas de segurança, adiciona o comando `gh pr comment` para postar o relatório e cria o arquivo de configuração por repo.

Por que aprender:

Todo sistema que vai para produção precisa de um safety pass explícito. Sem ele, basta uma edge case não coberta para o plugin corromper dados ou bloquear trabalho.

Conceitos-chave:

Safety pass, auditoria de primitivas, production readiness, gh pr comment.

O que é:

O texto exato do quinto prompt com as instruções para auditar cada script contra as 6 primitivas, adicionar gh pr comment e criar review-config.yaml.

Por que aprender:

A estrutura do safety pass — auditar por primitiva, corrigir, adicionar integrações — é um padrão reutilizável para qualquer plugin.

Conceitos-chave:

Audit por primitiva, safety checklist, integration layer, config file.

O que é:

6 primitivas: (1) ERR trap em todos os scripts, (2) CAS em todas as escritas de estado, (3) lockfile não-bloqueante, (4) varredor de stale locks, (5) validação de path absoluto, (6) timeout em subprocessos.

Por que aprender:

Cada primitiva cobre uma classe de falha diferente. Sem o varredor de stale locks, um crash deixa o sistema permanentemente travado.

Conceitos-chave:

ERR trap, CAS universal, stale lock sweeper, path traversal prevention, subprocess timeout.

O que é:

`gh pr comment $PR_NUMBER --body-file .claudex/reviews/PR-NNN.md` posta o relatório diretamente no PR do GitHub. O comentário inclui badge de severidade no topo.

Por que aprender:

Postar automaticamente elimina o passo manual de copiar o relatório. A revisão aparece no contexto onde o time já está trabalhando.

Conceitos-chave:

gh pr comment, --body-file, badge de severidade, integração automatizada, PR comment thread.

O que é:

.claude/review-config.yaml permite configurar: max_rounds, personas ativas, paths a ignorar, severidade mínima para comment no PR, timeout por rodada.

Por que aprender:

Hardcoded defaults não funcionam para todos os repos. Configuração por repo permite que times ajustem o revisor ao seu contexto sem modificar o plugin.

Conceitos-chave:

Config por repo, YAML config, override de defaults, gitignore vs versionado, config discovery.

O que é:

Teste E2E completo: criar PR de teste no GitHub, rodar o plugin com `/pr-reviewer 123`, verificar que as 3 rodadas completam, relatório salvo e postado como comentário no PR real.

Por que aprender:

O teste E2E é o único que valida a integração ponta a ponta: Claude Code → hooks → worktree → runner → relatório → GitHub. Cada ponto de integração pode falhar.

Conceitos-chave:

E2E test, integração ponta a ponta, PR de teste no GitHub, validação do ciclo completo.

Ver Completo
← Trilha 3: Avançado Começar Módulo 4.1 →