poka-yoke
Ajuda seu agente a criar código que é difícil de usar incorretamente. Isso evita erros comuns e torna o uso do código mais seguro e fácil.
O que ela faz
Poka-yoke é uma técnica para criar sistemas (como código de computador) que tornam impossível cometer erros. Em vez de avisar sobre um erro, ele impede que o erro aconteça.
Quando usar
- ✓Ao projetar uma nova interface ou sistema.
- ✓Ao revisar código antigo para encontrar pontos de falha.
- ✓Quando você quer garantir que os usuários não consigam colocar o sistema em um estado inválido.
Exemplo do que pedir para a IA
“Como posso tornar este formulário impossível de enviar com informações faltando?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ele funciona criando regras ou estruturas que fisicamente impedem ações incorretas. Pense em um cabo USB que só encaixa de um jeito: você não pode errar.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add github/awesome-copilot --skill poka-yokeOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/github/awesome-copilot/main/skills/poka-yoke/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Poka-Yoke: Torne o Erro Impossível de Dizer
As pessoas sempre cometerão erros. Esse não é o problema que vale a pena resolver. O problema é permitir que um erro se torne um defeito.
Shigeo Shingo, um engenheiro industrial japonês, descobriu isso em uma linha de montagem de interruptores em 1961. Os trabalhadores esqueciam uma mola. A solução não foi um lembrete: o trabalho foi dividido para que o trabalhador primeiro colocasse ambas as molas em um prato, depois as encaixasse do prato. Uma mola sobrando era o erro anunciando a si mesmo, antes que a unidade pudesse seguir em frente.
O prato é um dispositivo. "Por favor, lembre-se da mola" não é.
A linha que faz a maior parte do trabalho
Um comentário, uma docstring, uma página wiki, uma lista de verificação de revisão ou uma linha em um arquivo de instruções dizendo "não faça X" não é um poka-yoke. É treinamento, e o treinamento se degrada. Um dispositivo não. Se sua solução depende de alguém se lembrar de algo, continue.
Isso também se aplica às suas próprias instruções. Uma regra escrita em um arquivo de configuração compete pela atenção com todas as outras regras lá e perde um pouco mais à medida que o arquivo cresce. Uma verificação que falha a compilação não.
O que isso muda na saída
Dado um design, os modelos listarão prontamente o que corrigir. Raramente afirmam o que a correção torna impossível, e essa é a diferença entre um conselho com o qual você concorda e uma restrição na qual você pode confiar. Esse hábito é a maior parte do propósito desta habilidade.
A outra metade é recusar-se a aceitar um não-dispositivo como solução. "Adicionar validação", "ter cuidado com esta função", "documentar o invariante" são todos do nível zero. Cada um tem um dispositivo real por trás deles, e nomear esse dispositivo é o trabalho.
Eixo 1: o que acontece quando o erro ocorre
Classifique cada descoberta nesta escada e diga em qual degrau o código atual se encontra e em qual degrau sua solução chega.
| Degrau | Nome | Significado |
|---|---|---|
| 1 | Controle | A ação errada não pode ser realizada. Erro de tipo, restrição de banco de dados, permissão ausente. |
| 2 | Aviso | É possível, mas se anuncia quando acontece. Um linter, uma asserção em tempo de execução, uma confirmação que você não pode pular. |
| 3 | Detecção | Acontece, e você descobre depois. Testes, logs, monitoramento, revisão de código. |
| 0 | nível zero | Dizer às pessoas para terem cuidado. Documentos, comentários, "por favor, lembre-se de". |
Detecção não é falha; às vezes é tudo o que está disponível. Mas um plano que para na Detecção deve dizer isso, em vez de apresentá-lo como prevenção.
Eixo 2: como o dispositivo percebe
As três lentes de inspeção de Shingo. Elas são uma lista de verificação para encontrar perigos, não decoração:
- Contato — a coisa errada pode se encaixar fisicamente? Dois parâmetros adjacentes do mesmo tipo podem ser trocados silenciosamente. Um
stringque deveria ser um de quatro valores. Dinheiro como um float. - Valor fixo — o conjunto está completo? Um switch sem verificação de exaustividade. Uma configuração onde uma chave ausente significa silenciosamente "desligado". Um enum tratado em três de cinco lugares.
- Passo de movimento — a ordem está correta e cada passo aconteceu? Uma escrita em duas fases sem transação. Uma nova tentativa sem chave de idempotência. Um recurso adquirido em um caminho e liberado em outro.
Inspecione na origem
O lugar mais barato para capturar um erro é onde ele é cometido, não onde ele aparece. Uma validação que roda três camadas abaixo da entrada já permitiu que o valor ruim viajasse, e o rastreamento da pilha apontará para o módulo errado. Empurre a verificação para a fronteira que o valor cruza.
Projetando algo novo
A prova de erros é mais barata antes que o código tenha chamadores. Uma vez que os tenha, cada dispositivo é uma migração; antes de tê-los, um dispositivo é gratuito.
Trabalhe a partir do local da chamada. Uma assinatura que parece boa isoladamente muitas vezes parece terrível onde é usada:
# the mistake is expressible: nothing stops refunding an order that was never paid
def refund(order: dict) -> Refund:
return payments.refund(order["payment_id"])
# the mistake is no longer expressible
def refund(order: PaidOrder) -> Refund: ...
As etapas, aproximadamente em ordem de frequência de aplicação:
Torne estados inválidos irrepresentáveis. Uma bolsa de campos opcionais onde apenas certas combinações são legais se torna uma união discriminada onde as ilegais não podem ser construídas.
Analise, não valide. Converta a entrada não estruturada em um tipo que carrega prova na fronteira, uma vez, em vez de revalidar a mesma string em nove lugares.
Diferencie conceitos que compartilham um primitivo. transfer(from: str, to: str) aceita seu
Perguntas frequentes
Qual a diferença entre um aviso e um poka-yoke?
Um aviso diz 'cuidado, isso pode dar errado'. Um poka-yoke impede fisicamente que você faça algo errado, como um cabo que só encaixa de um jeito.
Por que é melhor impedir o erro do que avisar?
Pessoas esquecem ou ignoram avisos. Um sistema à prova de erros garante que o erro não aconteça, independentemente de atenção humana.
Isso é só para código de computador?
Não, a ideia original é de engenharia industrial para evitar erros na fabricação. Mas o conceito se aplica a qualquer sistema onde erros podem ocorrer.
Detalhes
Descrição original do autor
Mistake-proof code so misuse cannot be expressed, rather than warning against it. Use when designing an interface, schema, or state machine and the user wants it hard to get wrong ("make invalid states unrepresentable", "so callers cannot screw it up", "type-safe API", "pit of success"); when auditing existing code for footguns ("what could bite us here", "what is easy to misuse", "poka-yoke this
repo: github/awesome-copilot
Popularidade
- Estrelas no GitHub
- 40 mil
- Posição no ranking
- #5273
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
acquire-codebase-knowledge
Ajuda seu agente a entender e documentar um projeto de código existente. É útil para novas pessoas entrarem no projeto ou para ter uma visão geral da arquitetura.
github/awesome-copilot
acreadiness-assess
Faz seu agente avaliar a prontidão de um projeto para IA e gerar um relatório. É útil para entender o quão bem um projeto está preparado para usar ferramentas de IA.
github/awesome-copilot
acreadiness-generate-instructions
Ajuda seu agente a criar instruções para ferramentas de IA baseadas em uma avaliação. É útil para melhorar a forma como a IA interage com o código e fecha lacunas identificadas.
github/awesome-copilot
acreadiness-policy
Faz seu agente ajudar a definir ou aplicar políticas para avaliação de projetos de IA. É útil para padronizar a forma como os projetos são avaliados e garantir conformidade.
github/awesome-copilot
Skills parecidas
benchmark-optimization-loop
Faz seu agente melhorar a velocidade de algo de forma medida. Ele testa várias versões e escolhe a mais rápida que ainda funciona corretamente.
affaan-m/ECC
change-impact
Ajuda seu agente a analisar o impacto de mudanças no código antes de fazê-las. Ele compara o planejado com o real depois, cobrindo caminhos, dados, testes e documentação. É útil para mudanças arriscadas ou que afetam várias partes do sistema.
affaan-m/ECC
click-path-audit
Faz seu agente rastrear todos os botões e interações do usuário para achar bugs. Ele encontra problemas onde funções parecem funcionar sozinhas, mas falham juntas. Útil quando bugs persistem mesmo após depuração.
affaan-m/ECC