From bug-diagnostics
Loop de diagnóstico para bugs difíceis e regressões de performance. Feedback loop → reprodução → hipóteses → instrumentação → fix + teste → cleanup. Use quando o usuário disser "diagnosticar"/"debugar isso", ou relatar algo quebrado/lançando exceção/falhando/lento.
How this skill is triggered — by the user, by Claude, or both
Slash command
/bug-diagnostics:bug-diagnosticsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Uma disciplina para bugs difíceis. Pule fases apenas quando justificado explicitamente.
Uma disciplina para bugs difíceis. Pule fases apenas quando justificado explicitamente.
Créditos: Baseado em
diagnosing-bugspor Matt Pocock. Adaptado para português BR pelo Lemon AI Hub.
Ao explorar o codebase, leia o CONTEXT.md (se existir) para construir um modelo mental claro dos módulos relevantes, e consulte ADRs na área que vai mexer.
Dois princípios não-negociáveis:
Esta é a habilidade. Todo o resto é mecânico. Se você tem um sinal de pass/fail tight para o bug — um que fica vermelho neste bug — você vai encontrar a causa; bisection, teste de hipóteses e instrumentação apenas o consomem. Se não tem, nenhuma quantidade de olhar código vai salvar.
Invista esforço desproporcional aqui. Seja agressivo. Seja criativo. Recuse-se a desistir.
git bisect run.scripts/hitl-loop.template.sh para que o loop ainda seja estruturado. Output capturado alimenta de volta para você.Construa o feedback loop certo, e o bug está 90% resolvido.
Trate o loop como um produto. Assim que tiver um loop, tighten:
Um loop flaky de 30 segundos é quase tão ruim quanto nenhum loop; um determinístico de 2 segundos é tight — um superpoder de debugging.
O objetivo não é uma repro limpa, mas sim uma taxa de reprodução mais alta. Loope o gatilho 100×, paralelize, adicione stress, estreite janelas de timing, injete sleeps. Um bug 50% flaky é debugável; 1% não é — continue elevando a taxa até ser debugável.
Pare e diga explicitamente. Liste o que tentou. Peça ao usuário por: (a) acesso a qualquer ambiente que reproduza, (b) um artifact capturado (HAR file, log dump, core dump, screen recording com timestamps), ou (c) permissão para adicionar instrumentação temporária em produção. Não prossiga para hipóteses sem um loop.
A Fase 1 está completa quando o loop é tight e red-capable: você consegue nomear um comando — um path de script, uma invocação de teste, um curl — que você já executou pelo menos uma vez (cole a invocação e seu output), e que é:
scripts/hitl-loop.template.sh.Se se pegar lendo código para construir uma teoria antes deste comando existir, pare — pular direto para hipótese é a falha exata que esta skill previne. Sem comando red-capable, sem Fase 2.
Rode o loop. Veja ficar vermelho — o bug aparece.
Confirme:
Assim que estiver vermelho, encolha a repro para o menor cenário que ainda fica vermelho. Corte inputs, callers, config, dados e steps um de cada vez, re-rodando o loop após cada corte — mantenha apenas o que é load-bearing para o failure.
Por que importa: uma repro mínima encolhe o espaço de hipóteses na Fase 3 (menos partes móveis para suspeitar) e se torna o teste de regressão limpo na Fase 5.
Completo quando todo elemento restante é load-bearing — remover qualquer um deles faz o loop ficar verde.
Não prossiga até ter reproduzido e minimizado.
Gere 3–5 hipóteses ranqueadas antes de testar qualquer uma. Geração de hipótese única ancora na primeira ideia plausível.
Cada hipótese deve ser falsificável: declare a predição que ela faz.
Formato: "Se é a causa, então vai fazer o bug desaparecer / vai piorar."
Se não consegue declarar a predição, a hipótese é um chute — descarte ou afie.
Mostre a lista ranqueada ao usuário antes de testar. Ele costuma ter conhecimento de domínio que re-ranqueia instantaneamente ("acabamos de deployar uma mudança em #3"), ou sabe hipóteses que já descartou. Checkpoint barato, grande economia de tempo. Não bloqueie — prossiga com seu ranking se o usuário estiver AFK.
Cada probe deve mapear para uma predição específica da Fase 3. Mude uma variável por vez.
Preferência de ferramenta:
Tagueie cada debug log com um prefixo único, ex.: [DEBUG-a4f2]. Cleanup no final vira um único grep. Logs sem tag sobrevivem; logs tagueados morrem.
Branch de performance. Para regressões de performance, logs estão geralmente errados. Em vez disso: estabeleça uma medição baseline (timing harness, performance.now(), profiler, query plan), depois faça bisection. Meça primeiro, conserte depois.
Escreva o teste de regressão antes do fix — mas apenas se existir um seam correto para ele.
Um seam correto é um onde o teste exercita o padrão real do bug como ocorre no call site. Se o único seam disponível é raso demais (teste de caller único quando o bug precisa de múltiplos callers, teste unitário que não consegue replicar a chain que disparou o bug), um teste de regressão ali dá falsa confiança.
Se nenhum seam correto existe, isso em si é o finding. Anote. A arquitetura do codebase está impedindo o bug de ser travado. Flague para a próxima fase.
Se um seam correto existe:
Obrigatório antes de declarar concluído:
[DEBUG-...] removida (grep no prefixo)Então pergunte: o que teria prevenido este bug? Se a resposta envolve mudança arquitetural (sem bom seam de teste, callers emaranhados, acoplamento escondido) encaminhe para a skill de melhoria de arquitetura com os specifics. Faça a recomendação depois do fix estar pronto, não antes — você tem mais informação agora do que quando começou.
npx claudepluginhub andersonlimahw/lemon-ai-hub --plugin bug-diagnosticsStep-by-step loop for diagnosing hard bugs, performance regressions, and non-deterministic failures. Guides building a tight pass/fail feedback loop before diving into code.
Provides a structured methodology for diagnosing hard bugs and performance regressions, focusing on building a tight feedback loop to isolate root causes.
Structured diagnosis loop for hard bugs and performance regressions: reproduce, minimise, hypothesise, instrument, fix, regression-test. Activated on bug reports or performance issues.