diagnosing-bugs (Matt Pocock)
Conduz um ciclo de diagnóstico de bugs difíceis e regressões de desempenho antes de propor correções.
mattpocock diagnosing-bugs: uma versão de uma frase da sua regra “construa primeiro o loop de feedback” teve o mesmo desempenho da skill completa, com 0.95x o custo da skill
Codex CLI · gpt-6-astra
22.9 / 30
Ganho sobre sem skill: +0.28 · Situacional · 18 execuções
Situacional: o ganho +0.28 está abaixo de +1.0. Para ser recomendado, é preciso total de 22/30, qualidade da saída de 3.5 e ganho de +1.0.
SOTA
AprovadoTestado com Codex.
Cobre Codex, Claude Code
Codex CLI 0.166 (nível SOTA): 18 execuções avaliadas. Uma aprovação aqui também vale para o Claude Code pela nossa regra de níveis; ela não diz nada sobre o segundo nível.
Notas
Cada dimensão vai de 0 a 5, e as seis somam o total de 30. 5 é melhor em todas as dimensões. Custo 5 significa barato e rápido. Instalação 5 significa fácil.
- Confiabilidade do acionamento
- 5.0
- Ganho sobre sem skill
- 2.3
- Qualidade da saída
- 4.6
- Custo de tokens e tempo
- 2.0
- Instalação e portabilidade
- 4.0
- Segurança
- 5.0
Revisão de segurança
SeguroVarredura estática: 0 CRÍTICO / 0 ALTO / 0 MÉDIO. Revisão manual: seguro para executar em sandbox sem rede (nenhum achado). Uma varredura limpa não prova que a skill é segura.
Instalar
npx skills@latest add mattpocock/skills --skill diagnosing-bugs
Commit fixado: 4ae2317ddb22b046e26455e4f9c9b3aaaf62212d
Testado: 2026-11-02
O que testamos
- Erro de off-by-one em uma função pequena — moving_average em movavg.py retorna números errados: moving_average([2, 4, 6, 8, 10], 3) deveria ser [2, 3, 4, 6, 8], mas os valores seguintes saem errados. Encontre a causa e corrija. Testes: python3 -m unittest.
- Bug de data entre arquivos — Os cabeçalhos do nosso relatório semanal mostram datas erradas perto do ano novo, por exemplo header('2026-W01') deveria ser 'Week 2026-W01: Dec 29 - Jan 04, 2026'. Encontre a causa e corrija.
- Falha de teste dependente de ordem — Os testes em tests/test_settings.py passam sozinhos, mas test_b falha quando o arquivo inteiro roda, e as configurações parecem carregar tags de chamadas anteriores. Diagnostique e corrija.
Prós
- A skill foi acionada sem ser nomeada: o arquivo da skill foi lido em 6/6 execuções de tratamento.
- Qualidade absoluta alta com a skill: 4.58 de 5.
Contras
- Nenhum ganho mensurável em relação ao grupo sem skill (+0.28, dentro do ruído).
- Um prompt de uma frase tirou 4.72, contra 4.58 com a skill (-0.14).
- Usa 1.71x os tokens do grupo sem skill.
- n=2 por tarefa por braço; diferenças abaixo de cerca de 1 ponto são ruído.
Avaliação
Codex CLI 0.166 (gpt-6-astra, raciocínio baixo) em uma máquina de teste Mac, um projeto temporário novo e HOME/TMPDIR/caches temporários por execução, skill instalada (tratamento), ausente (controle) ou ausente com o requisito central da skill condensado em uma frase anexada ao prompt (grupo de uma frase), 2 execuções por grupo por tarefa, rede desligada, gravações em /tmp bloqueadas. Os prompts nunca mencionam a skill. A pontuação é programática (testes ocultos / recall de problemas inseridos / verificações de restrição / render+OCR quando relevante), de 0 a 5 por execução. Nenhum juiz LLM decidiu qualquer nota.
Comparação entre os braços
| Braço | Nota média (0-5) | Tokens por execução |
|---|---|---|
| Sem a skill | 4.31 | 77k |
| Prompt de uma frase | 4.72 | 126k |
| Com a skill | 4.58 | 133k |
Medido com Codex CLI em 18 execuções, com pontuação por verificações baseadas em regras e sem juiz LLM. Total 22.9 / 30, veredito Situacional.
Veredicto: Situacional (22.9 / 30). Fonte: mattpocock/skills, skills/engineering/diagnosing-bugs, fixado no commit 4ae2317. Instalação: npx skills@latest add mattpocock/skills --skill diagnosing-bugs. Licença: MIT (LICENSE do repositório).
O que é
A skill diagnosing-bugs do repositório de skills de Matt Pocock (engenharia). Uma disciplina para bugs difíceis: a fase 1 é "construir um ciclo de feedback de passa/falha enxuto" (teste que falha, script curl, diff de CLI, navegador headless, trace reproduzido), depois hipóteses ranqueadas testadas uma de cada vez, instrumentação, um teste de regressão e limpeza. Cerca de 1.000 palavras de Markdown, um template auxiliar hitl-loop.template.sh e uma regra para mascarar segredos antes de mostrar a saída. Ela é acionada por "diagnose", "debug this" ou "something is broken/failing".
Como testamos
Codex CLI 0.166 (gpt-6-astra, raciocínio baixo) em uma máquina de teste Mac, com um projeto temporário novo e HOME/TMPDIR/caches temporários a cada execução, skill instalada (tratamento), ausente (controle) ou ausente com o requisito central da skill comprimido em uma frase anexada ao prompt (grupo de uma frase), 2 execuções por grupo por tarefa, rede desligada, gravações em /tmp bloqueadas. Os prompts nunca mencionam a skill.
- Erro de off-by-one em uma função pequena —
moving_averageem movavg.py retorna números errados: moving_average([2, 4, 6, 8, 10], 3) deveria ser [2, 3, 4, 6, 8], mas os valores seguintes saem errados. Encontre a causa e corrija. Testes:python3 -m unittest. - Bug de data entre arquivos — Os cabeçalhos do nosso relatório semanal mostram datas erradas perto da virada do ano, por exemplo, header('2026-W01') deveria ser 'Week 2026-W01: Dec 29 - Jan 04, 2026'. Encontre a causa e corrija.
- Falha de teste dependente de ordem — Os testes em tests/test_settings.py passam sozinhos, mas
test_bfalha quando o arquivo inteiro roda, e as configurações parecem carregar tags de chamadas anteriores. Diagnostique e corrija.
A pontuação é programática (testes ocultos / identificação de problemas plantados / verificações de restrições / renderização + OCR quando aplicável), de 0 a 5 por execução. Nenhum juiz LLM decidiu qualquer pontuação.
Resultados
A frase única dada ao terceiro grupo: "Primeiro construa um ciclo de feedback de passa/falha rápido e determinístico que fique vermelho com este bug exato (um teste que falha é o melhor), depois formule hipóteses ranqueadas e teste uma de cada vez com evidências antes de corrigir, e rode o ciclo de novo para confirmar a correção."
| Tarefa | Pontuação do controle | Uma frase | Com a skill | Tokens do controle | Tokens de uma frase | Tokens com a skill | Skill lida |
|---|---|---|---|---|---|---|---|
| t1-moving-average | 4.17 | 4.58 | 4.17 | 60k | 102k | 87k | 2/2 |
| t2-weekly-dates | 4.17 | 4.58 | 5.0 | 86k | 120k | 136k | 2/2 |
| t3-shared-state | 4.58 | 5.0 | 4.58 | 84k | 154k | 173k | 2/2 |
Pontuação média: 4.31 sem a skill vs. 4.58 com a skill (delta +0.28). Tokens por execução: 77k vs. 133k (1.71x); tempo 38s vs. 51s. Grupo de uma frase: 4.72 (ganho da skill sobre a frase única: -0.14; ganho da própria frase única sobre sem skill: +0.42); 126k tokens por execução no grupo de uma frase, então a skill custa 1.05x a frase única.
O que aconteceu
- A correção final foi a mesma nos três grupos: os testes ocultos passaram em 18/18 execuções e todo diff ficou dentro do limite de diff pequeno. Esses três bugs plantados (off-by-one, lógica de data entre arquivos, poluição de estado entre testes dependente de ordem) são fáceis o bastante para o Codex sem skill corrigi-los.
- A única coisa que mudou foi a verificação de processo "rodou os testes antes de editar o código", ou seja, reproduzir primeiro. Sem a skill, 1/6 execuções fez isso; com a versão de uma frase da primeira regra da skill, 4/6; com a skill instalada, 4/6. Então a frase única reproduziu o efeito inteiro.
- A skill foi lida em 6/6 execuções de tratamento, embora nenhum prompt a mencionasse (ela dispara com "debug this"). Ela fez o agente trabalhar mais: 18 comandos por execução contra 8 sem a skill e 13 com a frase única.
- Custo: 133k tokens por execução com a skill contra 77k sem (1.71x) e 126k com a frase única (1.05x). O próprio grupo de uma frase custou 1.64x o controle, porque dizer ao agente para construir um ciclo primeiro o faz executar mais etapas.
- Uma execução de tratamento (tarefa de estado compartilhado) corrigiu o bug e passou nos testes ocultos, mas sua resposta não correspondeu à nossa verificação de causa raiz (que procura a causa ser nomeada), a única execução de qualquer grupo que falhou nisso.
Pontuação por dimensão
| Dimensão | Pontuação | Por quê |
|---|---|---|
| 1_output_quality | 4.58 | Pontuação média de 4.58/5 com a skill (verificações programáticas; consulte a tabela por tarefa). |
| 2_lift_vs_no_skill | 2.2800000000000002 | +0.28 ponto vs. 4.31 sem a skill (n=2 por tarefa; abaixo de ~1 ponto é ruído). |
| 3_trigger | 5.0 | Arquivo da skill lido em 6/6 execuções com a skill. |
| 4_instructions_portability | 4 | Markdown simples; lê GLOSSARY.md/ADRs opcionais se existirem; as opções de ciclo HTTP/navegador precisam de ferramentas que um sandbox pode não ter. |
| 5_efficiency | 2 | 1.71x tokens (133k vs. 77k por execução) e 1.35x tempo (51s vs. 38s). |
| 6_safety_hygiene | 5 | Markdown mais um template de shell local (pede entrada, imprime; sem rede, sem gravações). A skill instrui o agente a mascarar segredos antes de mostrar a saída. |
Limites deste teste
- Três bugs pequenos de Python em um único arquivo, encontráveis lendo o código. A skill foi feita para bugs difíceis (intermitentes, regressões de desempenho, bugs que exigem um harness); nada disso foi testado.
- As outras ferramentas da skill (ciclos HTTP/navegador, replay de trace, bisseção, tags de instrumentação) não podem rodar em um sandbox sem rede e sem app para controlar.
- A verificação "rodou testes antes de editar" compara a ordem do primeiro comando de teste e da primeira escrita no log de eventos; ela não julga a qualidade da reprodução.
- n = 2 por grupo por tarefa: diferenças abaixo de cerca de 1 ponto são ruído.
- A pontuação por regras mede o que as verificações conseguem ver; não julga bom gosto nem se o resultado é o melhor possível.
Segurança
Consulte security.md. Scan: 0 CRITICAL / 0 HIGH / 0 MEDIUM. Veredicto: segura para execução (sandbox sem rede). Um scan limpo não prova que uma skill é segura.
Conclusão
A ideia central da skill é um bom hábito, e o Codex o segue quando instruído; mas uma frase dela obteve o mesmo comportamento de reproduzir primeiro e a mesma taxa de aprovação com aproximadamente o mesmo custo, e em bugs fáceis o agente corrige de qualquer jeito. Mantenha-a instalada se você depura bugs difíceis e intermitentes e quer a disciplina completa; em bugs pequenos, você consegue o benefício colocando a primeira regra no seu prompt.
Transcrição
Log de execuções: diagnosing-bugs (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) Colunas: tarefa, grupo-execução, nota (0-5), tokens, segundos, verificações aprovadas, arquivos da skill abertos pelo agente. t1-moving-average control-1: nota 4.17, tokens 60541, s 27.1, verificações 3/4, nada aberto t1-moving-average control-2: nota 4.17, tokens 60464, s 29.1, verificações 3/4, nada aberto t1-moving-average oneliner-1: nota 5.0, tokens 93708, s 49.0, verificações 4/4, nada aberto t1-moving-average oneliner-2: nota 4.17, tokens 111338, s 39.8, verificações 3/4, nada aberto t1-moving-average treatment-1: nota 4.17, tokens 87669, s 36.8, verificações 3/4, abriu diagnosing-bugs t1-moving-average treatment-2: nota 4.17, tokens 87501, s 36.0, verificações 3/4, abriu diagnosing-bugs t2-weekly-dates control-1: nota 4.17, tokens 95094, s 43.4, verificações 3/4, nada aberto t2-weekly-dates control-2: nota 4.17, tokens 78531, s 38.2, verificações 3/4, nada aberto t2-weekly-dates oneliner-1: nota 4.17, tokens 129649, s 49.4, verificações 3/4, nada aberto
18 execuções, 3 artefatos
Resultado de exemplo
SOTA · With the skill: movavg.py (t1-moving-average, run 1, Codex)
def moving_average(values, window): """Trailing moving average. Output i is the mean of the last `window` values ending at index i. For i < window - 1 only the values available so far are used. Raises ValueError if window < 1. """ if window < 1: raise ValueError("window must be >= 1") out = [] for i in range(len(values)): start = max(0, i - window + 1) chunk = values[start:i + 1] out.append(sum(chunk) / len(chunk)) return out