Headless Self-Check Before User Handoff
Sempre que houver um caminho headless/programático para verificar uma mudança (screenshot via Chrome headless, curl + asserção, comando CLI com fixture, parse de output, etc.), Claude deve rodar esse check **antes** de pedir avaliação humana e reportar o resultado junto com o pedido. Reserva o tempo do usuário para a parcela que só humano resolve.
Policy — Headless Self-Check Before User Handoff
Pedir avaliação humana sem ter verificado programaticamente o que era verificável é desperdício do tempo do usuário e da própria sessão. A regra é simples: *e existe um caminho headless / programático para checar a mudança, Claude roda esse caminho antes de fazer o handoff e reporta o resultado.*
Rules
1. Self-check antes do handoff
Antes de escrever ao usuário qualquer variante de "confere se ficou bom", "avalia aí", "me diz se passou", "abre essa URL e olha":
- Identificar o caminho headless aplicável (ver §3).
- Executá-lo.
- *e passar:*prosseguir com o handoff e *ncluir a evidência*
("headless check passou: 200 OK no curl / screenshot anexo /
kdiffzero / X tests green"). Pedir só a parcela subjetiva. - *e falhar:*consertar e re-executar até passar (ou até concluir
que a falha é fora do escopo). *unca*fazer handoff com headless vermelho sem dizer explicitamente "headless check vermelho, preciso da sua orientação porque motivo".
- *e não há caminho headless aplicável:*dizer explicitamente
"não há check headless aplicável aqui — preciso da sua avaliação direta sobre X" antes do pedido, para que o usuário saiba que a ausência de evidência foi por falta de caminho automatizado, não por preguiça.
2. Aplica a (lista não-exaustiva)
- *eb page já deployada:*Chrome headless + screenshot + DOM
assertion (
document.querySelector(...)retornou nó esperado? computed style bate?). Quando o screenshot ajuda o handoff ("ficou centralizado?"), anexar ao chat. - *LI/TUI:*rodar o comando com fixture e capturar exit code +
stdout/stderr. Diff contra output esperado quando aplicável.
- *TTP/gRPC endpoint:*
curl/grpcurlcom payload de teste +assert no status code e no shape do response.
- *DK/biblioteca:*smoke test no fixture do próprio repo
(
go test ./...,flutter test,cargo test --quiet). - *uild artefato:*existir, ter tamanho razoável, abrir
(
tar tf,unzip -l,file), assinatura válida quando aplicável. - *ocumento gerado (HTMLPDFSVG/PNG):*parse não-erro, renderer
não-erro, dimensions/áreas plausíveis.
- *18n string:*key resolve em todos os locales baseline; sem
hardcoded leak.
- *SS/style change:*computed style do elemento alvo bate com a
intenção (
getComputedStyle(el).alignItems === 'center').
3. Não-aplica (handoff humano é o caminho certo)
- *ulgamento estético subjetivo*("ficou bonito?", "a copy ficou
natural?", "essa hierarquia visual transmite o que eu queria?").
- *esture feel em mobile/desktop nativo*(animação cosmética,
haptic response, timing percebido) — só humano sente.
- *11y de percepção real*(leitor de tela soa natural? contraste é
legível *ra esta pessoa*) — ferramentas catalogam, humanos decidem.
- *udanças em ambiente isolado da sessão atual*(env interno o
usuário não abriu, device físico do usuário fora de alcance ADB).
- *onfirmação de intenção*quando a mudança é destrutiva ou
irreversível — pedir confirmação humana é certo, headless check não substitui consentimento.
4. Ferramentas canônicas da Stack
Quando aplicável, preferir as ferramentas já presentes:
- *hrome headless*(já instalado em todos os hosts de dev Koder)
para web pages:
google-chrome --headless --disable-gpu --screenshot=out.png --window-size=1280,800 <url>. - *hromedp*(Go) para asserções DOM mais ricas — já vendored em
tools/design-genetools/design-coverage. - *url*com
-fsS -o /dev/null -w '%{http_code}\n'para smoke deendpoint.
- *koder
specaudit`*para conformance de spec/policy. - *k-test`*para suite TDDregressão completa de um módulo
(rodar antes do handoff de mudança não-trivial).
- *laywright*apenas quando chromedp não couber — adicionar como
dependência exige justificativa no PR.
5. Combinação com deploy-feedback.kmd §4
A §4 do deploy-feedback.kmd diz "publique sem perguntar"; esta policy diz "verifique sem perguntar". Combinadas: depois de uma edição visual em página já publicada, Claude *eploya*(§4 deploy-feedback) → *oda headless check*(esta policy) → *eporta URL + evidência headless*ao usuário em um único turno.
Why
Cada turno do usuário pra dizer "tá bom" ou "centraliza melhor" é um turno que não foi gasto avaliando o que só humano avalia. Quando a correção é mecânica (alinhamento bate? cor é esta? endpoint responde 200?), a IA tem todas as ferramentas pra confirmar — e poupar o humano dessa parcela é o trabalho do agente.
Anti-patterns
- "Deploy concluído, confere aí" sem rodar
curlou headless screenshotprimeiro pra confirmar que a página não está 500.
- Pedir "olha se centralizou" sem ter verificado com
getComputedStyle(...).textAlignou screenshot. - "Acho que ficou bom — me diz" quando há suite de testes do próprio
módulo que ninguém rodou.
- Fazer handoff de CLI/build sem ter executado o binário pelo menos
uma vez com
--help--versionfixture mínima. - Inferir que "deve estar OK" do diff sem executar.
Audit
koder-spec-audit policies headless-self-check (TODO — implementar quando houver corpus suficiente de logs de handoff): varre transcripts recentes em meta/context/handoff/recaps/ procurando pedidos de avaliação sem evidência headless quando houver caminho aplicável. Reporta como warning, não como error — judgement call.