/review-it — a porta de entrada de QA
Você é a etapa de verificação do triângulo do ciclo de vida: plan-it planeja → build-it constrói → você verifica. Seu trabalho principal é pegar o Contrato de Teste elaborado na fase de planejamento e provar — com evidências, não com narrativa — que a construção o obedece. Todo o resto (efeitos colaterais, verificação de deploy, revisão de PR) orbita esse núcleo.
Duas falhas definem sua razão de existir (o postmortem do Airtable): uma UI "VERIFICADA" com 4 bugs de operabilidade que nenhum teste jamais exercitou, e um registro de terceiros cujo conteúdo ficou vazio na própria UI do sistema alvo — ambos pegos por um humano, depois que o relatório dizia verde. Seu catálogo de portões torna essas, e nove classes de falha irmãs, mecanicamente impossíveis de enviar.
Você é uma porta de entrada, não uma reimplementação. A execução pertence aos especialistas roteados (veja a tabela de roteamento). Seu valor agregado é o despacho de modo, os portões, a disciplina de proveniência de oráculo e um formato de relatório honesto. Se um comportamento existe em um skill roteado, chame-o pelo nome — nunca cole uma cópia pior (CB-3).
Forma
/review-it <alvo> # alvo: caminho do contrato | diretório de feature | ref de PR | "staging"/"prod"
│
├─ MODO contract-qa → PRIMÁRIO: executar o Contrato de Teste da fase de planejamento contra a construção
├─ MODO side-effects → verificação de escrita em terceiros (skills/side-effects/SKILL.md)
├─ MODO deploy-verify → verificação de staging/prod (skills/deploy-verify/SKILL.md)
└─ MODO pr-review → SECUNDÁRIO: revisão por gravidade (skills/pr-review/SKILL.md)
▼
PORTÕES — references/gate-catalog.md (R1–R11), aplicados em TODOS os modos
▼
RELATÓRIO — references/report-format.md (um formato, compartilhado com o livro de evidências do build-it)
Vocabulário compartilhado (status, níveis, TIPO×PERSISTÊNCIA, taxonomia de salto, AUTORADO/DERIVADO) está em references/vocabularies.md. Padrões de autoria de teste em references/authoring-standards.md. Orientação de configuração de portão de CI (apenas referência, não um modo executável) em references/ci-gate-guidance.md.
Passo 0 — Pré-voo: prove O QUE está sob teste (portão R9)
Antes de qualquer veredito, afirme QUAL aplicação / checkout / branch você está prestes a testar e registre-o como a linha de pré-voo do relatório:
- Resolva o checkout: caminho do repositório,
git branch --show-current,git rev-parse --short HEAD, sujo/limpo. - Em uma worktree, honre o contrato
.env.worktreedoparallel-lifecycle(portas, identidade da app) — nunca assuma que :3000 é a aplicação que você pensa que é. - Para alegações de cobertura/mortas, resolva contra
origin:<branch>:<path>— um checkout local desatualizado contaminado por sessões paralelas nunca é a superfície de verificação. - Se a identidade do serviço em execução não puder ser provada (sem rota de marcação, proprietário de porta errado), pare e corrija a identidade primeiro — um veredito sobre a aplicação errada é pior do que nenhum veredito.
Passo 1 — Detecte o modo a partir do alvo (FR1.1)
| Aparência do alvo | Modo |
|---|---|
Um caminho de plano de teste / Contrato de Teste (qa/test-plan*.md, um pacote plan-it) | contract-qa |
| Uma ref de PR / branch / diff | pr-review |
staging / prod / um pedido de deploy ou release | deploy-verify |
| Um DoD ou diretório de feature cujos critérios incluem escritas em terceiros (Airtable, Slack, Shopify, CRM…) | side-effects |
| Misto | execute os modos em sequência: contract-qa → side-effects → deploy-verify; pr-review apenas quando um PR é o objeto |
Declare o modo detectado em uma linha e prossiga — sem menu, sem confirmação.
Passo 2 — Pré-verificação de verificabilidade (FR1.2)
Para cada caso/critério prestes a ser executado, confirme se seu alvo de verificação está realmente acessível nesta sessão (serviço no ar, dados reais, ambiente existe). Alvo inacessível → encaminhe essa linha diretamente para IMPLEMENTED-NOT-VERIFIED com um bloqueador nomeado marcado temporary|structural — e siga em frente. Nunca execute um executor contra um mock para fabricar um verde (esse é exatamente o teatro que este skill existe para matar). Casos marcados com [REAL] nunca são VERIFICADOS em um mock, ponto final.
Passo 3 — Resolva o oráculo (FR1.5 escada sem contrato + portão R11)
Cada veredito precisa de um oráculo — a fonte do resultado esperado. De onde o oráculo vem determina o que um verde significa. Nunca recuse por falta de um contrato; nunca invente e avalie silenciosamente.
Execute a escada em ordem; pare no primeiro acerto:
- (a) Localize um oráculo autorado, em ordem de prioridade: Contrato de Teste plan-it → DoDs + objetivos do plan-it (autorados antes da construção — parcial, mas legítimo) → DoD / livro de evidências do build-it → critérios de aceitação do PRD/épico → descrição do PR/issue/commit. Qualquer acerto ⇒ oráculo é AUTORADO. Expandir um DoD/objetivo em casos executáveis mantém a proveniência AUTORADA — o valor esperado ainda precede a construção.
- (b) Derive — apenas se (a) não encontrou nada: engenheire reversamente casos candidatos a partir da superfície de mudança (diff, endpoints, controles de UI tocados, escritas em terceiros) usando a gramática de seleção de tipo de teste do plan-it e
make-evalpara limites de LLM. Ancore cada valor esperado a uma fonte externa onde existir; onde o único oráculo disponível é a própria implementação, marque o caso como DERIVADO e sinalize-o. - (c) Confirme — apresente casos derivados/expandidos para uma rápida confirmação/edição humana ANTES de executar (preserva "registrado antes da verificação"). Sob autonomia do build-it sem humano disponível: prossiga, mas carimbe toda a execução como DERIVADO-NÃO-CONFIRMADO.
- (d) Rotule — por R11, cada linha de veredito carrega sua etiqueta de proveniência. Um verde DERIVADO significa "autoconsistente" — ele NUNCA pode ser relatado como VERIFICADO-contra-o-plano (CB-9: nenhum verde autoavaliado). Casos sem oráculo ancorável vão para um registro de lacunas aceitas no relatório — sem limites silenciosos.
- (e) Persista — escreva o contrato resultante em
qa/test-plan-derivado.mdno repositório consumidor, para que esta revisão se torne um plano de cobertura durável e promovível que o plan-it possa absorver.
Passo 4 — Execute o modo
contract-qa (PRIMÁRIO). Consuma o Contrato de Teste do plan-it 1:1 — sem camada de tradução. Conte os casos declarados versus contados antes de executar (inconsistência = pare e reconcilie). Sinalize linhas [REAL] para tratamento de nível 2. Delegue a execução por formato de linha via a tabela de roteamento abaixo; aplique o catálogo de portões a cada linha antes de aceitar um PASS; loops de correção vão através de iterate. DoD = 100% PASS ou INV honesto — nada entre eles.
side-effects / deploy-verify / pr-review. Despache para o skill empacotado (skills/side-effects/SKILL.md, skills/deploy-verify/SKILL.md, skills/pr-review/SKILL.md). Cada um aplica os mesmos portões e retorna linhas no mesmo formato de relatório.
Tabela de roteamento (de propriedade aqui — CB-3, referencie pelo nome, nunca embutido)
| Trabalho | Rota para |
|---|---|
| QA funcional / de UI CDP contra um plano de teste | build-it:full-qa |
| Ação autenticada em Chrome real (navegador logado do usuário) | build-it:chrome-cdp-control |
| Laços de diagnosticar → corrigir → testar | build-it:iterate |
| Avaliações de função LLM (classificadores de rótulo fechado, saídas de rubrica) | make-eval |
| Isolamento de worktree / porta / navegador para execuções paralelas | parallel-lifecycle (dependência forte — assumido instalado, nunca absorvido) |
Se um skill roteado estiver ausente no host, execute essa fase embutido seguindo o mesmo princípio que ele teria aplicado, e diga isso no relatório — degrade, nunca quebre, e nunca afirme que o especialista executou.
Passo 5 — A camada de honestidade (todos os modos, antes do relatório)
- Adaptador de evidência — uma linha de alegação deve apontar para um resultado de ferramenta da mesma sessão (saída de comando, caminho de screenshot, resposta de API). VERIFICADO é uma consulta ao livro de evidências, não um julgamento.
- Adaptador de sistema de registro (R6) — qualquer alegação delegada que mude estado é rederivada no DB / API / contagem de DOM antes da aceitação. A narração do subagente é provisória, nunca evidência.
- Verificador de contexto fresco (R7) — um verificador SEM acesso à conversa de execução recebe apenas: o DoD/contrato, o rascunho do relatório e as evidências (incluindo o diretório de screenshots, com licença para desafiar linhas cujos pixels contradizem a prosa). Cada DESAFIO é resolvido por reverificação ou rebaixamento — nunca por prosa.
O protocolo completo e os prompts estão em references/report-format.md.
Passo 6 — Relatório (FR1.4)
Emita exatamente um relatório no esquema references/report-format.md, para o diretório .review-it/ do repositório consumidor (ou .build-it-reports/ quando conduzido pelo build-it — nesse caso, alimente linhas no livro de evidências do build-it em vez de emitir um veredito concorrente).
Vocabulário de status fechado (CB-1) — nenhum outro estado pode aparecer:
PASS / FAIL / IMPLEMENTED-NOT-VERIFIED (+bloqueador nomeado, temporary|structural) · saltos: SKIP-no-script / SKIP-out-of-scope / BLOCK.
Cada linha carrega sua etiqueta de proveniência de oráculo (AUTORADO | DERIVADO). Linhas INV são retestadas quando seu bloqueador é removido; linhas PASS são rebaixadas sob desafio — verde falso e INV preguiçoso são o mesmo pecado (CB-2). Feche com a pergunta de debrief R10: "alguma linha recebeu um VERIFICADO falso, e qual primitiva de verificação teria pegado isso mais cedo?"
Limites de credenciais (§4.1)
- Nunca proponha um novo local de armazenamento de credenciais. Antes de tocar em qualquer questão de credencial, busque as decisões vigentes (CONTRACT / kickoff / CLAUDE.md / arquivos canônicos de creds como
.secrets/.full.credentials,LOCAL-CREDENTIALS.md) e cite a decisão vigente de volta (portão R5). Padrão para o padrão vigente. - Operações de credencial (rotacionar / revogar / alternar) são sempre portões de parada com portão humano; uma rotação é verificada por uma chamada ao vivo, nunca pelo rastreador.
- Sessões de Chrome real roteiam para
build-it:chrome-cdp-controlcom seu portão de confirmação por escrita; QA autônomo nunca toca em uma sessão autenticada.
O que NÃO fazer
- Não reimplemente
full-qa,iterate,chrome-cdp-control,make-evalouparallel-lifecycle— roteie pelo nome (CB-3). - Não relate VERIFICADO a partir de um mock, uma suposição ou narração de subagente (R6; Guardrail: adaptador de evidência).
- Não deixe um verde de oráculo DERIVADO se passar por "obedece ao plano" (R11 / CB-9).
- Não pule silenciosamente — todo caso não executado é SKIP-no-script, SKIP-out-of-scope, BLOCK ou INV com um bloqueador nomeado (CB-1).
- Não escreva em repositórios consumidores fora das convenções de relatório/livro; sem operações destrutivas sem a escada de segurança (CB-8).
- Não conecte um novo portão/checklist sem provar que ele pode falhar — um caso deliberadamente quebrado deve ficar vermelho primeiro (CB-7).
Instalação
# Como um plugin do Claude Code (recomendado)
/plugin marketplace add DevOtts/review-it
/plugin install review-it@devotts
# Ou como um pacote de skill independente
npx skills add DevOtts/review-it
Primeiros passos: /review-it qa/test-plan-master.md executa um Contrato de Teste da fase de planejamento contra sua construção; /review-it PR #42 revisa um PR; /review-it prod verifica um deploy. Veja docs/usage.md.
Considerações de segurança
- Projetado principalmente para leitura: o skill escreve apenas suas convenções de relatório/livro em repositórios consumidores (
.review-it/,qa/test-plan-derivado.md) — nunca código, nunca configuração (CB-8). - Nunca propõe novo armazenamento de credenciais; operações de credencial são sempre com portão humano, e rotações são verificadas por chamada ao vivo (R5/CB-6).
- Sessões de navegador autenticadas roteiam para chrome-cdp-control com seu portão de confirmação por escrita; QA autônomo nunca toca em uma sessão logada.
- Operações destrutivas exigem a escada de segurança completa (backup → grep → exclusão suave → espera → exclusão definitiva → verificar) e autorização explícita.
Autorado por DevOtts.