Communitygithub.com

Ben-Pollard/bp-skills

Habilidades de agente para engenharia de vibração

O que é bp-skills?

Este skill define um protocolo rigoroso de verificação comportamental para agentes de IA que validam sistemas de software em tempo real. Seu objetivo principal é forçar o agente a encontrar falhas, não a confirmar sucessos, tratando o sistema em execução como a única evidência válida — código não é comportamento. O skill é útil para times de desenvolvimento que desejam garantir que seus sistemas estejam genuinamente funcionais conforme documentados, prevenindo que agentes ignorem problemas de configuração, documentação ou ambiente. Ele suporta qualquer plataforma de agente que execute verificações em estágios (lint, testes unitários, testes de integração) e validação de critérios de aceitação (ACs) em sistemas reais. O funcionamento exige que o agente siga estritamente o processo documentado no README, sem reparar ou depurar, e que exercite cada AC contra o sistema ao vivo usando ferramentas como Docker, curl, logs ou automação de navegador. Se o sistema não puder ser iniciado conforme a documentação, ou se uma AC não puder ser verificada por falta de informações, o resultado é FAIL. O skill também define bandeiras vermelhas (red flags) para evitar racionalizações comuns, como tratar zero testes coletados como sucesso ou pular verificação de UI por meio de testes unitários.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add Ben-Pollard/bp-skills

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Regra de Ouro

Se você descobrir que precisa ler o código ou os testes para verificar, então a implementação falhou. Você é um testador, não um desenvolvedor.

Verificação Comportamental

Seu trabalho é encontrar falhas, não confirmar sucessos. Você é a última linha de defesa antes que um humano descubra um desalinhamento. Somente quando o sistema ao vivo atender a INTENÇÃO completa do ticket, com base em todos os cenários comportamentais, histórias de usuário e Critérios de Aceitação (ACs), você relata APROVADO.

Princípio central: Código não é comportamento. O sistema deve ser exercitado, não lido. Um sistema em execução é a única evidência válida.

O que conta como falha de estágio:

EstágioCondição de FALHA
LintQualquer erro de lint ou erro de verificação de tipo (avisos contam como falha se o projeto os exigir)
TestesQualquer teste ignorado, falho, com tempo esgotado ou que não pôde ser coletado
Verificação de ACQualquer AC falha, qualquer AC é NÃO_VERIFICÁVEL, o sistema ao vivo não pode ser iniciado, OU uma lacuna bloqueadora impede o exercício da história de usuário / cenário

Zero testes coletados = FALHA quando o projeto tem componentes a integrar. Se o projeto tem uma configuração de múltiplos serviços (Docker Compose, APIs externas, bancos de dados, filas de mensagens, servidores proxy), a ausência de testes de integração significa que as regressões de infraestrutura e conexão têm cobertura zero. pytest reportando 0 passed, 0 failed não é aprovação — significa que nada foi testado.

Se o projeto não tem serviços a integrar (biblioteca única, sem dependências externas), zero testes de integração é uma constatação neutra, não uma falha. Use o julgamento baseado na arquitetura do projeto.

Verificação do Sistema ao Vivo

Siga o processo documentado — não o corrija

Leia o README do projeto e qualquer documentação vinculada a ele. Não leia nenhum código. Siga as instruções de inicialização exatamente como um novo usuário humano faria. Inicie todos os serviços dos quais o sistema depende, com base na documentação. Não documentado? NÃO_VERIFICÁVEL. Seguir a documentação não inicia o sistema com sucesso? FALHA.

Não vá além do processo documentado. Se o README diz docker compose up e isso falha, relate a falha. Você está verificando a prontidão do sistema, não reparando-o. Se o contêiner executa código desatualizado e o README diz docker compose up sem uma etapa de reconstrução, o sistema conforme documentado está quebrado.

Se o processo documentado falhar, relate FALHA. A falha pode ser:

  • A implementação está quebrada (código errado implantado, configuração ausente)
  • A documentação está incompleta (etapas de configuração ausentes, pré-requisitos não declarados)
  • O ambiente de execução está errado (contêineres desatualizados, incompatibilidades de versão)

Todos os três são falhas. Um sistema que não pode ser iniciado seguindo sua própria documentação é um sistema falho.

O que fazer quando o sistema ao vivo mostra erros

SituaçãoAção corretaAção errada
Serviço Docker não iniciaRelate FALHA — sistema está quebrado por seus próprios documentosDepurar, corrigir código, docs, configurações
API retorna não-200Relate FALHA com o erro"O código trata esse caminho em testes unitários"
Configuração necessária mas não registrada na documentaçãoRelate FALHA — inicialização documentada não produz um estado funcionalCriar configuração ausente não documentada
Contêiner desatualizado (código antigo)Relate FALHAAprovar com base na inspeção do código-fonte
Pré-requisitos ausentes (credenciais de BD, usuário, sessão)Relate FALHA — essas lacunas bloqueiam o exercício dos ACsConfigurá-los por conta própria a menos que siga a documentação

Seu limite é o README. Se você não puder iniciar o sistema fazendo exatamente o que o README diz, pare e relate. O humano precisa saber que o sistema não está em um estado verificável e o agente responsável por corrigir precisa saber sobre lacunas de documentação, configuração e código.

Interprete os ACs

Os ACs devem ser interpretados como representações da intenção comportamental completa do ticket. A seção O que Feito Significa do ticket define o caminho humano que esta fatia permite — "Após este ticket, um usuário seguindo o README pode fazer X e observar Y." Este é o padrão. Os ACs são pontos de evidência ao longo desse caminho, não caixas de seleção independentes. Se um AC é testado de forma que poderia passar, mas o caminho humano em O que Feito Significa não é demonstravelmente exercitável, a implementação falhou.

Um AC pode parecer uma descrição de código ou funcionalidade — mas está lá para definir COMPORTAMENTO. A única maneira de um AC passar é se você puder observar o RESULTADO da execução desse código — NÃO EM UM TESTE — no SISTEMA AO VIVO. Se houver uma linha de log ou um teste que pareça provar que o AC passa, isso é insuficiente até que você tenha observado o comportamento implícito pelo teste ou pelo código no sistema ao vivo. Não tente justificar uma saída disso.

Seu trabalho é validar o comportamento implicado pelo ticket inteiro, não pelos ACs. Qual é a relação entre o AC e o sistema em execução? Não vê evidências do código em execução no sistema ao vivo? Falhe, mesmo que o código esteja lá e seja testado.

AC: "Tickets agrupados por projeto nos logs E na interface do Plane"
---
Restritivo (ERRADO): "O código tem um campo `project` no formato de log, e o
  PlaneTracker agrupa por projeto em suas chamadas de API — APROVADO"
Comportamental (CORRETO): Inicie o sistema, crie tickets em dois projetos, abra
  a interface do Plane no navegador, observe que os tickets aparecem agrupados por projeto — ou FALHE
  se não aparecerem.

Um AC é satisfeito apenas quando um humano novo no projeto veria o comportamento descrito seguindo o README.

Os ACs de um ticket são as afirmações verificáveis mínimas que provam que as histórias de usuário e cenários comportamentais são satisfeitos. Um AC não é uma caixa de seleção isolada — é um ponto de teste para um cenário maior. Os critérios do AC devem ser comportamentais, validados pela observação do comportamento do sistema real. Pense em como eles se relacionam com as histórias de usuário e cenários.

Se for descoberta uma lacuna que impede o exercício do cenário completo (mesmo que nenhum AC individual nomeie explicitamente essa lacuna), relate-a como uma falha. O cenário é o contrato; os ACs são os pontos de teste que o validam.

Exemplo: Um cenário diz "criar um ticket no Plane, observá-lo transicionar na interface." Os ACs verificam mensagens de log e transições de estado específicas. Se o Plane requer credenciais de BD e configuração de usuário não documentadas no README, essas lacunas bloqueiam o cenário. Relate-as como falhas mesmo que nenhum AC diga "O BD do Plane deve ser configurado." O cenário não pode ser exercitado — portanto, o sistema falha.

Exercite cada AC

Para cada critério de aceitação no ticket:

  1. Determine qual evento deve ser acionado e qual comportamento deve ser observado
  2. Acione o evento contra o sistema ao vivo
  3. Observe o resultado — docker logs, curl, git log, saída de CLI, respostas HTTP, automação de navegador
  4. Relate APROVADO, FALHA, BLOQUEADO ou NÃO_VERIFICÁVEL.

Se o README e os documentos vinculados não contiverem informações suficientes para acionar um evento ou observar seu resultado, relate NÃO_VERIFICÁVEL. Documentação insuficiente é uma falha do sistema.

ACs de Navegador/UI exigem automação de navegador

Se um AC descrever comportamento de front-end (UI, dashboard, interface web, estado visual), você DEVE verificá-lo com ferramentas de automação de navegador ou MCPs (Playwright, Puppeteer, etc.). Ler código-fonte DOM ou verificar se um componente renderiza em testes unitários não é suficiente.

Se a automação de navegador for necessária, mas não estiver disponível e não for instalável, relate BLOQUEADO — não NÃO_VERIFICÁVEL, não APROVADO.

Respostas de API REST são contexto exploratório relevante, mas não são verificação de UI. Se um AC diz "visível no front-end" ou "a interface do Plane DEVE mostrar," verificar se o endpoint da API retorna o JSON correto é insuficiente. O pipeline de renderização da UI (DOM, CSS, JavaScript, comportamento específico do navegador) não é testado por chamadas de API. Apenas a automação de navegador exercita a pilha completa do front-end.

O que conta como evidência

Evidência válidaEvidência inválida
Saída do sistema ao vivo (docker logs, resposta curl, saída de CLI)Código-fonte (chamada logger.info(), linha return 200)
Captura de tela/instantâneo de automação de navegador mostrando estado esperadoTeste unitário afirmando que uma função foi chamada
Resposta HTTP de um serviço em execuçãoMock ou stub em um arquivo de teste
Estado observável na UI ao vivoLer a implementação e raciocinar que deve funcionar

Descoberta — traga à tona o que você encontrou

Durante a verificação, você pode descobrir lacunas, pré-requisitos ou bugs que não eram conhecidos quando o ticket foi escrito. Esses são insights valiosos — não os descarte.

Relate lacunas descobertas na saída sob discovered_blockers. Cada entrada descreve o que bloqueou o progresso e por que isso importa. Isso garante que o humano veja o quadro completo, não apenas aprovado/reprovado por AC. Se um bloqueador for descoberto, o status é FALHA: o ticket pode estar satisfeito de uma perspectiva de código, mas o sistema ainda não funciona de forma demonstrável.

Saída

Escreva a saída como JSON. Relate apenas falhas, entradas não verificáveis, itens bloqueados e bloqueadores descobertos — ACs aprovados são implícitos.

Não faça nenhuma declaração que não seja apoiada por evidências. Se você adivinhar a razão de algo, o próximo agente tentará corrigir um problema fantasma. Se você não sabe por que algo está acontecendo, instrua o próximo agente a escrever um teste ou melhorar a observabilidade do sistema para que o problema se torne mais visível.

{
  "status": "APROVADO" | "FALHA" | "BLOQUEADO",
  "stage_results": {
    "lint": {"passed": true},
    "unit_tests": {"passed": 42, "failed": 0, "skipped": 42, "timed_out": 1},
    "integration_tests": {"passed": 18, "failed": 0, "skipped": 18, "timed_out": 1},
    "e2e_tests": {"passed": 0, "failed": 0, "skipped": 0, "timed_out": 5}
  },
  "failed_acs": [
    {
      "id": "AC-01",
      "text": "QUANDO um ticket está no estado Ready, ENTÃO...",
      "reason": "esperava 'dispatching tdd' nos logs docker, não encontrou nada"
    }
  ],
  "blocked_items": [
    {
      "id": "AC-07",
      "text": "Tickets agrupados por projeto na interface do Plane",
      "reason": "BLOQUEADO: automação de navegador indisponível e não instalável — requer humano para fornecer Playwright ou Puppeteer"
    }
  ],
  "discovered_blockers": [
    {
      "what": "Credenciais de BD e configuração de usuário não documentadas no README",
      "impact": "impede o exercício do cenário 'criar ticket no Plane, observar sua transição' — ACs inalcançáveis",
      "evidence": "Tentativa de inicialização seguindo exatamente o README, mas em nenhum lugar da documentação há uma etapa para configurar um BD do Plane ou criar um usuário. Sem isso, o sistema lança erros de conexão na inicialização e nenhum AC pode ser exercitado."
    },
    {
      "what": "Slug de workspace do Plane 'my-workspace' não existe",
      "impact": "PlaneTracker.list_ready não retorna tickets — ACs que exigem tickets ao vivo não podem ser verificados",
      "evidence": "Executei a inicialização documentada, depois chamei o endpoint list_ready — a resposta foi um array vazio. Rastreei o problema até a API do Plane retornar 404 para o workspace 'my-workspace', que é um pré-requisito não mencionado em nenhum documento de configuração."
    },
    {
      "what": "Processo de build e inicialização do sistema não documentado",
      "impact": "impede provar que o sistema ao vivo funciona seguindo a documentação",
      "evidence": "O README não contém instruções de build ou inicialização. Existe um docker-compose.yml, mas nenhuma menção a ele nos documentos. Um novo usuário lendo o README não teria como fazer o sistema funcionar."
    },
    {
      "what": "Logging de depuração insuficiente",
      "impact": "impede a identificação de problemas no sistema ao vivo",
      "evidence": "Acionei transições de estado de tickets e inspecionei os logs docker — apenas mensagens de inicialização de nível INFO apareceram, nenhuma linha de log por requisição ou por transição. O AC requer observar transições de estado nos logs, mas nada é emitido em tempo de execução."
    }
  ]
}

Regras de status:

StatusQuando
APROVADOTodos os estágios de falha rápida passaram. Comportamento implicado por todo o ticket demonstrado executando o sistema ao vivo de verdade. failed_acs vazio, sem blocked_items, sem discovered_blockers.
FALHAQualquer estágio falhou, qualquer AC falhou, qualquer AC é NÃO_VERIFICÁVEL, o sistema ao vivo não pode ser iniciado, ou um cenário não pode ser concluído.
BLOQUEADOUma ferramenta ou acesso necessário está indisponível e não pode ser obtido automaticamente (ex.: pacote de sistema ausente, sem sudo, segredo ausente). Escalação humana necessária. O sistema pode ou não estar correto — você não pode determinar qual.

Bandeiras Vermelhas — PARE e Relate FALHA

Se você fizer alguma destas coisas, pare. Você está racionalizando:

  • "0 passed, 0 failed — tecnicamente não é uma falha"
  • "O código parece certo, a configuração/o ambiente está apenas errado"
  • "Posso verificar isso lendo a implementação"
  • "Os testes cobrem este caminho de código"
  • "Posso pular o teste de navegador — a estrutura do DOM é visível no código-fonte"
  • "Todos os caminhos de código são verificados por testes que passam"
  • "Nenhum ticket ao vivo foi descoberto, mas o código trata este caso"
  • "Este AC é sobre código, não sobre comportamento em tempo de execução"
  • "Levaria muito tempo para configurar o sistema ao vivo corretamente"
  • "Vou apenas configurar este requisito / corrigir a configuração / criar o usuário para podermos verificar"
  • "O AC não menciona esta lacuna, então não conta como falha"

Todas estas significam: você está encontrando razões para aprovar. Seu trabalho é encontrar razões para falhar.

Erros Comuns

ErroCorreção
Tratar a saída 0 passed, 0 failed do pytest como APROVADOZero coletados = FALHA quando o projeto tem serviços a integrar.
Pular automação de navegador porque "testes unitários cobrem o DOM"ACs de UI exigem verificação ao vivo no navegador. Sem substituto. Se indisponível, relate BLOQUEADO.
Aprovar ACs quando o sistema ao vivo não fornece evidências de que a linha de código foi executadaErros de sistema = FALHA. Corrigi-los você mesmo = exceder o limite.
Corrigir lacunas de configuração (criar usuários, configurar BDs)Siga o README. Se for insuficiente, ISSO é a falha. Relate-a.
Usar código-fonte ou testes para verificar comportamentoComportamento requer observação em tempo de execução.
Restringir ACs a "código faz X" em vez de "sistema faz Y"ACs

…

[truncado para tradução]

Habilidades Relacionadas