Help us improve
Share bugs, ideas, or general feedback.
From leandrocfe-skills
Provides a disciplined debugging loop for hard bugs and performance regressions. Guides through reproduce, minimize, hypothesize, instrument, fix, and regression test phases.
npx claudepluginhub leandrocfe/skillsHow this skill is triggered — by the user, by Claude, or both
Slash command
/leandrocfe-skills:diagnoseThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Disciplina para bugs difíceis. Pule fases só com justificativa explícita.
Provides a disciplined diagnosis loop for hard bugs and performance regressions: reproduce, minimise, hypothesise, instrument, fix, regression-test.
Provides a disciplined debugging loop for hard bugs and performance regressions: build a fast, deterministic feedback loop, then repro, minimize, hypothesize, instrument, fix, and regression-test.
Structured diagnosis protocol for hard bugs and performance regressions: build a deterministic feedback loop, then bisect/hypothesise/fix. Activate when debugging, triaging failures, or investigating regressions.
Share bugs, ideas, or general feedback.
Disciplina para bugs difíceis. Pule fases só com justificativa explícita.
Ao explorar a codebase, use o glossário de domínio do projeto para ter um modelo mental claro dos módulos relevantes e cheque ADRs na área que está tocando.
Esta é a skill. Tudo o mais é mecânico. Se você tem um sinal pass/fail rápido, determinístico e agent-runnable para o bug, você vai achar a causa — bisseção, hypothesis-testing e instrumentação só consomem esse sinal. Se você não tem, nenhum tempo encarando código vai te salvar.
Gaste esforço desproporcional aqui. Seja agressivo. Seja criativo. Recuse-se a desistir.
git bisect run.scripts/hitl-loop.template.sh para o loop ainda ser estruturado. O output capturado realimenta você.Construa o feedback loop certo e o bug está 90% corrigido.
Trate o loop como um produto. Quando tiver um loop, pergunte:
Um loop flaky de 30s é mal melhor que nenhum loop. Um loop determinístico de 2s é um superpoder de debugging.
A meta não é um repro limpo, é uma taxa de reprodução mais alta. Loop o trigger 100×, paralelize, adicione stress, estreite janelas de timing, injete sleeps. Um bug com 50% de flake é debuggable; 1% não é — aumente a taxa até ficar debuggable.
Pare e diga explicitamente. Liste o que tentou. Peça ao usuário: (a) acesso ao ambiente que reproduz, (b) um artefato capturado (HAR file, log dump, core dump, gravação de tela com timestamps), ou (c) permissão para adicionar instrumentação temporária em produção. Não prossiga para hipotetizar sem um loop.
Não prossiga para a Fase 2 até ter um loop em que você acredita.
Rode o loop. Veja o bug aparecer.
Confirme:
Não prossiga até reproduzir o bug.
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 precisa ser falsificável: declare a predição que faz.
Formato: "Se é a causa, então vai fazer o bug sumir / vai piorar."
Se você não consegue declarar a predição, a hipótese é vibe — descarte ou afie.
Mostre a lista ranqueada ao usuário antes de testar. Eles geralmente têm conhecimento de domínio que re-ranqueia na hora ("acabamos de deployar uma mudança no #3"), ou sabem de hipóteses que já descartaram. Checkpoint barato, grande economia de tempo. Não bloqueie nisso — prossiga com seu ranking se o usuário estiver AFK.
Cada probe precisa mapear para uma predição específica da Fase 3. Mude uma variável de cada vez.
Preferência de ferramenta:
Tagueie cada log de debug com um prefixo único, ex.: [DEBUG-a4f2]. Cleanup no fim vira um grep só. Logs sem tag sobrevivem; logs taggeados morrem.
Branch de perf. Para regressões de performance, logs costumam estar errados. Em vez disso: estabeleça medição de baseline (timing harness, performance.now(), profiler, query plan), depois bissecte. Meça primeiro, conserte depois.
Escreva o teste de regressão antes do fix — mas só se houver um seam correto para ele.
Um seam correto é onde o teste exercita o padrão real do bug como ocorre no call site. Se o único seam disponível é raso demais (teste single-caller quando o bug precisa de múltiplos callers, unit test que não consegue replicar a chain que disparou o bug), um teste de regressão lá dá falsa confiança.
Se nenhum seam correto existe, isso por si é o achado. Anote. A arquitetura da codebase está impedindo o bug de ser trancado. Sinalize para a próxima fase.
Se um seam correto existe:
Obrigatório antes de declarar feito:
[DEBUG-...] removida (grep o prefixo)Aí pergunte: o que teria evitado este bug? Se a resposta envolve mudança arquitetural (sem seam de teste bom, callers emaranhados, coupling escondido) faça handoff para a skill /improve-codebase-architecture com os detalhes. Faça a recomendação depois do fix entrar, não antes — você tem mais informação agora que quando começou.