Todas as skills

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

SituacionalSeguro

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

Aprovado

Testado 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

Seguro

Varredura 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

Fonte

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çoNota média (0-5)Tokens por execução
Sem a skill4.3177k
Prompt de uma frase4.72126k
Com a skill4.58133k

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.

  1. 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.
  2. 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.
  3. 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.

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."

TarefaPontuação do controleUma fraseCom a skillTokens do controleTokens de uma fraseTokens com a skillSkill lida
t1-moving-average4.174.584.1760k102k87k2/2
t2-weekly-dates4.174.585.086k120k136k2/2
t3-shared-state4.585.04.5884k154k173k2/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ãoPontuaçãoPor quê
1_output_quality4.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_skill2.2800000000000002

+0.28 ponto vs. 4.31 sem a skill (n=2 por tarefa; abaixo de ~1 ponto é ruído).

3_trigger5.0Arquivo da skill lido em 6/6 execuções com a skill.
4_instructions_portability4

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_efficiency21.71x tokens (133k vs. 77k por execução) e 1.35x tempo (51s vs. 38s).
6_safety_hygiene5

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

Ver o Pro