Pular para o conteúdo
Skillpedia
Código em geral40 mil · #5273

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

https://github.com/github/awesome-copilot/blob/main/skills/poka-yoke/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/github/awesome-copilot/blob/main/skills/poka-yoke/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
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-yoke

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/github/awesome-copilot/main/skills/poka-yoke/SKILL.md -o SKILL.md
Conteú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 string que 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

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas