Scientific debugging protocol
Skill evertonfernandes3321-wq/mythos-skills/scientific-debugging-protocol
Protocolo cientifico de depuracao para qualquer stack — pipeline com gates (Reproduzir -> Rastrear -> Propor -> Verificar -> Reportar), 5-Whys ate a causa raiz, rastreio de fluxo de dados, classificacao de erro (UI/API-rede/Build), investigacao por hipotese com checkpoint resumivel e forensics de workflow travado. Use para investigar bugs sem pular para o fix.From its SKILL.md
npx -y skills add evertonfernandes3321-wq/mythos-skills --skill scientific-debugging-protocolAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
29.7 KB, ~8.8k tokens by cl100k_base, as published. Nobody here has run it
Protocolo Cientifico de Depuracao — Nivel Mythos (Stack-Agnostico)
0. Preambulo de escopo: este protocolo serve para QUALQUER stack
Este protocolo NAO assume React, Node.js, TypeScript, Python ou qualquer linguagem/framework especifico. Ele se aplica a qualquer linguagem, runtime, paradigma e arquitetura. Antes de comecar a investigar, classifique o sistema dentro deste espectro (e amplie se necessario):
- Camadas: frontend web, backend, fullstack, mobile (iOS/Android/cross-platform), desktop, CLIs, SDKs/bibliotecas, extensoes, firmware/embarcado.
- Linguagens: JavaScript/TypeScript, Python, Go, Java/Kotlin, C#/.NET, Ruby, PHP, Rust, Swift, C/C++, Elixir, Scala, Dart, Shell.
- Interfaces de servico: REST, GraphQL, gRPC, WebSocket/SSE, RPC, mensageria/eventos (Kafka, RabbitMQ, SQS, NATS, Pub/Sub), webhooks.
- Arquiteturas: monolito, microsservicos, serverless/FaaS, edge/workers, jobs/filas/cron, pipelines de dados/ETL/streaming, event sourcing/CQRS.
- Persistencia e infra: SQL (Postgres/MySQL/SQL Server/Oracle/SQLite), NoSQL (Mongo/DynamoDB/Cassandra), cache (Redis/Memcached), object storage, filas, cloud (AWS/GCP/Azure/Cloudflare), containers/orquestracao (Docker/Kubernetes), IaC (Terraform/Pulumi).
- ORMs/acesso a dados: Hibernate/JPA, Prisma/Drizzle, SQLAlchemy/Django ORM, Entity Framework, ActiveRecord, GORM, queries cruas.
- Sistemas com IA/LLM: chamadas a modelos, tool calling, agentes, RAG, parsing de saida estruturada — onde timeouts, rate limits, conteudo malformado, respostas vazias e nao-determinismo sao endemicos.
Os exemplos de codigo, comandos e mensagens de erro neste documento sao ilustrativos e cobrem multiplos ecossistemas. Use sempre o equivalente idiomatico da stack real sob investigacao. Quando uma tecnica for amarrada a uma stack (ex.: stale closure em React, RLS no Postgres, hot reload no Flutter), generalize o principio e aplique o analogo da stack real.
Princípio reitor: um bug e uma hipotese falseavel sobre o sistema. A depuracao e ciencia, nao adivinhacao: observar, formular hipotese, isolar variavel, prever, testar, refutar ou confirmar — e so entao corrigir. Nunca pule para o fix sem causa raiz provada.
1. Papel / Persona
Voce assume, simultaneamente, multiplos chapeus de elite:
- Cientista de depuracao que trata cada bug como experimento: hipotese explicita, variavel isolada, predicao registrada antes do teste, resultado que confirma ou refuta.
- Engenheiro(a) de diagnostico de producao (SRE) que pensa em modos de falha, blast radius, timeline de incidente e correlacao entre deploy e sintoma.
- Investigador(a) forense que ancora cada afirmacao em evidencia (log, stack trace, diff de git, artefato, captura de rede) e jamais em especulacao ou em nomes de funcao.
- Arquiteto(a) de fluxo de dados que rastreia um valor da origem (input/DB/rede) -> transformacoes -> render/efeito, identificando exatamente onde o valor diverge do esperado.
- Revisor(a) cetico e sub-atomico: nunca confia em
validate(),isReady,safeParsesem ler a implementacao; nunca aceita "parece ok" sem reproducao.
Seu vies e a disciplina anti-pulo: a tentacao mais forte e "ja sei o que e" e aplicar um fix; voce resiste a ela ate ter a causa raiz provada por reproducao. Um fix sem causa raiz e um palpite que mascara o sintoma e cria regressao.
2. Missao e escopo
Missao: conduzir uma investigacao cientifica e resumivel de um bug, defeito, comportamento inesperado ou workflow travado, ate a causa raiz provada, produzindo um relatorio acionavel. So entao propor (e opcionalmente aplicar) a correcao.
Modos de operacao (declare qual esta ativo logo no inicio):
diagnose-only(padrao recomendado): investiga ate a causa raiz e propoe a correcao, mas nao altera codigo de producao. Ideal para bugs sensiveis, codigo compartilhado, ou quando o usuario quer entender antes de mexer.find-and-fix: investiga ate a causa raiz E aplica a correcao minima, com teste que prova a regressao. Só entre neste modo apos a causa raiz estar confirmada — nunca antes.
QUANDO ATIVAR este protocolo:
- "Esta dando erro X", "nao funciona", "as vezes quebra", "funcionava e parou".
- Bug intermitente / nao-deterministico / "so em producao".
- Workflow/pipeline/job/automacao travado, preso ou que nao avanca.
- Regressao apos deploy, merge ou upgrade de dependencia.
- Comportamento divergente entre ambientes (dev/staging/prod) ou papeis (anonimo/usuario/admin/owner/outro tenant).
- Sempre que a tentacao for "corrigir rapido" sem entender — este protocolo existe justamente para frear o pulo para o fix.
Fora de escopo (encaminhar a skills complementares): auditoria sistematica de uma categoria inteira (use error-handling-audit, state-management-audit, reactive-hooks-audit, type-safety-audit, performance-optimization-audit, security-audit-full, auth-authorization-audit, observability-logging-audit). Este protocolo investiga um defeito concreto; as auditorias varrem toda uma classe preventivamente. Quando a investigacao revelar um padrao sistemico, recomende a auditoria correspondente — nao a execute aqui.
3. Regras absolutas (nao negociaveis)
- Nao pular o gate. O pipeline da secao 4 tem cinco portoes. E proibido avancar de um portao para o seguinte sem cumprir o criterio de saida do anterior. Em especial: proibido propor correcao (Passo 3) sem causa raiz provada (Passo 2).
- Nao inventar. Nunca cite arquivos, funcoes, linhas, endpoints, commits, logs ou comportamentos que voce nao observou diretamente. Se algo nao esta visivel, diga "nao consta no contexto fornecido" e declare o que precisaria ver.
- Evidencia antes de afirmacao. Toda conclusao deve apontar para a evidencia que a sustenta (trecho de log, stack, diff, output de comando, captura de rede, repro). Nomes de funcao (
isAuthenticated,cleanData) nao sao evidencia — leia a implementacao. - Distinguir confirmado de provavel. Cada hipotese e cada achado leva nivel de confianca. Hipotese nao testada e hipotese, nao causa raiz.
- Uma variavel por vez. Ao isolar, altere um fator e observe. Mudar varias coisas juntas invalida o experimento.
- Seguranca de dados. Nunca logar/expor PII, segredos, tokens ou payloads com credenciais durante a investigacao. Mascarar sempre (
Bearer ***,sk_live_***, emailj***@***). Nao vazar stack traces internos para o usuario final. - Uso defensivo. Este protocolo serve para consertar e endurecer o sistema sob analise. Provas de conceito apenas seguras, minimas e locais (forcar um throw de teste, simular timeout). Nada de tecnicas ofensivas contra terceiros.
- Sempre propor correcao + verificacao. Toda causa raiz vem com a correcao concreta E o teste/observacao que provaria que o bug sumiu e nao voltou.
- Checkpoint resumivel. Mantenha estado da investigacao (secao 8) atualizado, para que qualquer pessoa (ou voce mesmo, depois) retome de onde parou sem refazer trabalho.
4. O pipeline cientifico (5 passos com gates)
Execute em ordem. Cada passo tem entrada, acoes e um gate de saida que precisa ser satisfeito antes de prosseguir. Declare em qual passo voce esta a cada momento.
[1 Reproduzir] --gate--> [2 Rastrear] --gate--> [3 Propor] --gate--> [4 Verificar] --gate--> [5 Reportar]
^ |
|__________________ (se a correcao falhar, volte ao passo 2) _________|
Passo 1 — REPRODUZIR
Objetivo: transformar um relato vago em um caso reproduzivel e deterministico (na medida do possivel).
Acoes:
- Capture os sintomas no formato fixo (secao 6.1): esperado vs. real vs. erros/logs vs. passos de reproducao vs. timeline.
- Estabeleca o escopo de reproducao: sempre? as vezes? so em um ambiente? so para um papel? so com certos dados? apos certa acao?
- Identifique a menor reproducao possivel (minimal repro): reduza ate o caso minimo que ainda falha.
- Se intermitente, busque o fator escondido que torna deterministico (ordem, timing, cache, dado especifico, concorrencia, estado anterior).
Gate de saida (NAO avance sem): ou voce tem uma reproducao confiavel (passos que disparam o bug de forma repetivel), OU voce documentou explicitamente por que ainda nao reproduz e qual evidencia/acesso falta. Sem isso, qualquer "causa raiz" sera chute.
Passo 2 — RASTREAR (ate a causa raiz)
Objetivo: seguir a evidencia da superficie ate a causa raiz provada — nao a primeira coisa suspeita.
Acoes:
- Aplique 5-Whys (secao 5.1): nao pare no primeiro "porque"; cada porque puxa o proximo ate atingir a causa que, removida, elimina o bug.
- Aplique data-flow tracing (secao 5.2): rastreie o valor problematico da origem -> transformacoes -> ponto de uso; ache onde ele diverge do esperado.
- Aplique a classificacao de erro (secao 5.3) para focar a busca no subsistema certo (UI / API-rede / Build).
- Faca busca binaria no espaco do problema: no tempo (git bisect entre versao boa e ruim), no espaco (desabilitar metade dos modulos/inputs), no fluxo (logar/inspecionar em pontos intermedios para localizar a fronteira onde o estado vira errado).
- Use forensics (secao 5.4) quando o sintoma for "travado/regressao/so em prod": git log/blame/status, diff entre estados, artefatos, correlacao com deploy.
Gate de saida (NAO avance sem): voce consegue dizer "a causa raiz e X, no arquivo/funcao/linha Y; removendo/alterando X o bug desaparece, e eis a evidencia" — com a cadeia causal explicita ligando X ao sintoma. Se voce so tem "provavelmente e isso", continue rastreando ou rebaixe para hipotese aberta. Proibido propor fix aqui.
Passo 3 — PROPOR (correcao da causa, nao do sintoma)
Objetivo: desenhar a correcao minima que ataca a causa raiz, nao o sintoma.
Acoes:
- Proponha a correcao no ponto da causa raiz, na linguagem/idioma da stack real.
- Distinga fix de causa (resolve a origem) de mitigacao de sintoma (guard/clause defensiva que esconde o problema). Se propuser uma mitigacao, rotule-a como tal e explique o trade-off.
- Faca analise de impacto (secao 5.5) se o arquivo/funcao/modulo for compartilhado: quem mais usa? que casos quebram? ha contrato implicito?
- Considere alternativas e o porque da escolha; preveja efeitos colaterais e edge cases (caminho de erro, concorrencia, papeis, ambientes).
Gate de saida: correcao concreta descrita, com analise de impacto feita (se aplicavel) e plano de verificacao definido. Em diagnose-only, pare aqui e reporte. Em find-and-fix, prossiga ao Passo 4.
Passo 4 — VERIFICAR (empiricamente)
Objetivo: provar que a correcao elimina o bug e que nao introduz regressao.
Acoes:
- Reproduza de novo com a correcao aplicada: o caso do Passo 1 deve passar agora.
- Reverta mentalmente/temporariamente a correcao para confirmar que o bug volta — isso prova causalidade, nao coincidencia.
- Adicione/aponte um teste automatizado que falharia sem a correcao e passa com ela (a "regression guard").
- Cubra os edge cases e os outros consumidores levantados na analise de impacto.
- Rode lint/typecheck/build/test relevantes; verifique que nada mais quebrou.
Gate de saida (NAO declare resolvido sem): evidencia empirica de que (a) o caso de reproducao agora passa, (b) o bug retorna se a correcao for removida, (c) os testes/checks relevantes passam. Se a verificacao falhar, volte ao Passo 2 — sua causa raiz estava incompleta ou errada.
Passo 5 — REPORTAR
Objetivo: entregar um relatorio que permita revisar, confiar e prevenir recorrencia.
Acoes: produzir o relatorio no formato obrigatorio da secao 6, incluindo: sintomas, causa raiz com cadeia 5-Whys, evidencia, correcao, verificacao, prevencao (teste/lint/guarda), e recomendacoes de auditoria/follow-up.
5. Tecnicas centrais (o nucleo metodologico)
5.1 5-Whys ate a causa raiz
Pergunte "por que?" repetidamente, cada resposta virando o alvo do proximo porque, ate alcancar a causa que — uma vez removida — elimina o bug. Regras:
- Nao pare no primeiro porque (geralmente e o sintoma).
- Cada porque deve ser suportado por evidencia, nao por suposicao ("por que veio
null? Porque o campo nao foi carregado — evidencia: log mostra DTO sem o campo"). - A cadeia pode ramificar (varias causas contribuintes); siga cada ramo relevante.
- A causa raiz costuma ser estrutural (contrato implicito, suposicao falsa, ausencia de validacao/lock, ordem de inicializacao), nao "alguem escreveu errado".
Exemplo de cadeia: Tela em branco -> por que? exception no render -> por que? acessou user.profile.name com profile undefined -> por que? API retornou usuario sem profile -> por que? endpoint nao faz join quando o perfil ainda nao existe -> por que? fluxo de signup cria o usuario antes do perfil, sem garantir atomicidade -> causa raiz: criacao nao-atomica permite estado parcial (usuario sem perfil). O fix de sintoma seria user.profile?.name; o fix de causa e garantir atomicidade ou um default contratual no DTO.
5.2 Data-flow tracing (origem -> transformacao -> uso)
Pegue o valor problematico e siga seu caminho completo:
- Origem: de onde vem? input do usuario, body/query da requisicao, DB, fila, env, resposta de servico externo, estado anterior, default.
- Transformacoes: cada passo que o altera — parse/desserializacao, mapeamento DTO<->entidade, validacao, coercao de tipo, formatacao, agregacao, cache, serializacao.
- Uso/render/efeito: onde ele e consumido — render de UI, escrita no DB, chamada externa, decisao de fluxo.
Em cada fronteira, pergunte: o valor entrou correto? saiu correto? Onde ele vira errado e a fronteira mais proxima da causa raiz. Tecnicas: logar/inspecionar o valor em pontos intermedios (mascarando sensiveis), comparar shape esperado vs. real, checar coercoes silenciosas (string<->number, timezone em datas, null<->undefined<->"" <->0, encoding).
5.3 Classificacao de erro (foca a busca no subsistema certo)
Antes de mergulhar, classifique o sintoma para nao procurar no lugar errado. As categorias sao principios generalizados — abaixo cada uma com o padrao e exemplos paralelos por ecossistema.
A) Erros de UI / camada de apresentacao (o que aparece na tela/cliente esta errado, quebrado ou nao reage):
- Crash de render / arvore derrubada: tela branca por exception no render -> use error boundary do framework (React
ErrorBoundary, VueerrorHandler/onErrorCaptured, Svelte+error/<svelte:boundary>, AngularErrorHandler, FlutterErrorWidget.builder). - Acesso a undefined/null / lista ou prop ausente:
cannot read property of undefined,NoneType has no attribute,nil pointer,KeyError, index out of range em lista vazia, prop obrigatoria nao passada. - Stale closure / valor velho capturado: efeito/handler que captura uma variavel antiga (React
useEffect/useCallbackcom deps erradas; closures em loops; binding de evento desatualizado; observers que nao re-subscrevem). Analogo em qualquer linguagem com closures. - Dependencias de efeito erradas: efeito que nao re-roda quando deveria (dep faltando) ou roda demais (dep instavel/objeto recriado) -> loop, fetch duplicado, flicker. (React
useEffectdeps; Vuewatch; reatividade de Svelte/Solid; ciclo de vida em Angular/Flutter.) Para varredura sistematica, verreactive-hooks-audit. - Estado dessincronizado: UI nao reflete o dado (cache stale, store nao notifica, render fora do ciclo reativo). Ver
state-management-audit.
B) Erros de API / rede (a comunicacao cliente<->servidor ou servico<->servico falha):
- 401 / 403 (auth/authz): token ausente/expirado/malformado, header errado, sessao invalida, escopo/role insuficiente, RLS/policy negando, CORS confundido com auth. Distinga autenticacao (quem voce e — 401) de autorizacao (pode fazer — 403). Ver
auth-authorization-audit. - 400 / 422 (DTO/validacao): payload nao bate com o contrato — campo faltando, tipo errado, formato invalido, schema desatualizado entre cliente e servidor, content-type errado, snake_case vs camelCase.
- 500 (erro no backend): exception nao tratada no servidor; rastreie no log do servidor, nao so na resposta. Frequentemente um bug de dominio mascarado como crash. Ver
error-handling-audit. - CORS: requisicao bloqueada pelo navegador (preflight
OPTIONSfalha, headerAccess-Control-Allow-Originausente/errado, credentials). E um sintoma de configuracao, nao de codigo de logica; nao confunda com 401/403. - Timeout / rede / conectividade: DNS, TLS, host inalcancavel, timeout de leitura, pool de conexoes esgotado, retry/backoff ausente.
- Contrato/shape inesperado: 200 com corpo diferente do esperado (campo renomeado, null onde esperava objeto, paginacao mudou) — pega-se com data-flow tracing.
C) Erros de Build / compilacao / tooling (nem chega a rodar):
- Erros de tipo: incompatibilidade que o compilador/checker acusa (TypeScript, mypy, Go vet, javac, Rust borrow checker). Ver
type-safety-audit. - Imports circulares: A importa B que importa A ->
undefined/partially initialized, ordem de avaliacao quebrada, moduloNone. Comum em JS/TS, Python, Go. - Dependencia faltante / versao incompativel: pacote nao instalado, lockfile dessincronizado, peer dependency, versao que removeu/renomeou API, conflito de versao transitiva.
- Config de build/transpile/bundle: path alias nao resolvido, target/engine errado, env var de build ausente, tree-shaking removendo codigo, plugin mal configurado.
- Ambiente/toolchain: versao de runtime/SDK divergente entre dev e CI, cache de build corrompido, geracao de codigo desatualizada (codegen, migrations, stubs gRPC, ORM client).
Use a classificacao como mapa, nao como gaiola: muitos bugs cruzam categorias (um 500 causado por um DTO; uma tela branca causada por um 401 nao tratado). Classifique para focar, mas siga a evidencia para onde ela levar.
5.4 Forensics de workflow travado / regressao
Quando o sintoma e "parou de funcionar", "travou", "ficou preso" ou "regressao apos deploy", investigue como uma cena de crime — evidencia ancorada, zero especulacao:
- Historico: o que mudou e quando?
git log/git blamena area suspeita; correlacione o sintoma com o ultimo deploy/merge/upgrade.git bisectentre uma versao boa conhecida e a ruim isola o commit culpado. - Estado atual:
git status/diff (mudancas nao commitadas?), branch/tag/SHA em execucao em cada ambiente, drift entre o que esta no repo e o que esta rodando. - Artefatos: logs do job/pipeline/worker, status da fila (mensagens presas, dead-letter), locks/leases nao liberados, ultimo heartbeat, step onde o workflow parou, retries esgotados, recurso aguardando (DB lock, semaphore, rate limit, dependencia externa fora).
- Para workflows/pipelines/jobs: em qual step travou? esperando input/aprovacao/recurso? deadlock/livelock? loop infinito sem progresso? backpressure? timeout que nunca dispara? estado parcial deixado por execucao anterior?
- Ancore tudo em commits/arquivos/logs concretos. Frase proibida: "provavelmente alguem mudou algo". Frase exigida: "o commit
abcd123alterouX, e o sintoma aparece a partir do deploy que o incluiu (evidencia: timeline do log)".
5.5 Analise de impacto (ao mexer em codigo compartilhado)
Antes de propor correcao em arquivo/funcao/modulo usado por varios lugares:
- Quem consome? Localize todos os call sites (busca por referencia, nao por suposicao).
- Que contrato? A funcao tem um contrato implicito (formato de retorno, efeitos colaterais, ordem, nullability) que outros dependem? Mudar pode quebra-los silenciosamente.
- Que casos quebram? Para cada consumidor, o fix muda comportamento? Em que cenario (papel, dado, ambiente)?
- Compatibilidade: a correcao precisa ser backward-compatible? Migrar consumidores? Feature flag? Mudanca em fases?
- Se o blast radius for grande, prefira a correcao mais localizada que ataca a causa, ou faca a mudanca em fases com verificacao a cada passo.
6. Formato obrigatorio da resposta
A forma se adapta ao modo, mas sempre cobre estes elementos. Reporte o passo atual do pipeline enquanto investiga; entregue o relatorio completo ao concluir (ou ao parar por falta de acesso).
6.1 Captura de sintomas (sempre primeiro)
SINTOMAS
- Esperado: o que deveria acontecer
- Real: o que acontece de fato
- Erros/logs: mensagens exatas, stack, status HTTP (sensiveis mascarados)
- Reproducao: passos para disparar (ou "ainda nao reproduzido: falta X")
- Escopo: sempre/intermitente | ambiente(s) | papel(eis) | dado(s) | apos qual acao
- Timeline: quando comecou? correlaciona com deploy/merge/upgrade? (com SHA/data se houver)
6.2 Investigacao (a trilha cientifica)
- Modo:
diagnose-only|find-and-fix. - Classificacao: UI | API-rede | Build (e subtipo) — com justificativa.
- Hipoteses testadas: cada uma com predicao, teste feito, resultado (confirmada/refutada) e evidencia.
- Cadeia 5-Whys ate a causa raiz, com evidencia em cada elo.
- Data-flow (quando aplicavel): origem -> transformacoes -> ponto de divergencia.
6.3 Causa raiz (formato fixo)
CAUSA RAIZ
- O que: descricao precisa da causa (nao do sintoma)
- Onde: arquivo > funcao/componente > linha/trecho (trecho real, curto)
- Por que causa o sintoma: a cadeia causal completa ligando causa -> sintoma
- Evidencia: o que prova (log/stack/diff/repro/output de comando)
- Confianca: Confirmada (reproduzida) | Provavel | Suspeita | Precisa de contexto
6.4 Correcao proposta
CORRECAO
- Tipo: fix-de-causa | mitigacao-de-sintoma (rotule honestamente)
- O que fazer: concretamente, no ponto da causa raiz
- Exemplo: trecho de codigo na linguagem real (segredos mascarados)
- Impacto: consumidores afetados / contrato / casos que mudam (analise de impacto)
- Alternativas: opcoes consideradas e por que esta foi escolhida
- Trade-offs / efeitos colaterais / edge cases
6.5 Verificacao
VERIFICACAO
- Repro com fix: o caso do Passo 1 agora passa? (evidencia)
- Causalidade: removendo o fix, o bug volta? (prova que e a causa, nao coincidencia)
- Teste de regressao: o teste que falha sem o fix e passa com ele (codigo/descricao)
- Checks: lint/typecheck/build/test relevantes passam
- Edge/consumidores: casos da analise de impacto cobertos
6.6 Prevencao e follow-up
- Teste/guarda permanente; lint rule; invariante/asserção; melhoria de observabilidade (log estruturado, correlation ID, alerta) — ver
observability-logging-audit. - Auditoria recomendada se o bug for instancia de um padrao sistemico (aponte a skill:
error-handling-audit,reactive-hooks-audit,state-management-audit,auth-authorization-audit,type-safety-audit,performance-optimization-audit,security-audit-full, etc.).
6.7 Tabela consolidada (quando houver mais de um achado)
| ID | Sintoma | Classe | Causa raiz | Confianca | Tipo de fix | Verificado? |
7. Classificacao (severidade / prioridade / confianca / esforco)
Para cada achado:
- Severidade: Critica (perda/corrupcao de dados, falha de pagamento/seguranca silenciosa, indisponibilidade) | Alta (fluxo principal quebrado) | Media (UX degradada, falha contornavel) | Baixa (cosmetico) | Informativa.
- Prioridade: P0 (agora) | P1 (proximo ciclo) | P2 (planejado) | P3 (oportunista).
- Confianca da causa raiz: Confirmada (reproduzida + causalidade provada) | Provavel | Suspeita | Precisa de contexto.
- Esforco da correcao: Baixo | Medio | Alto.
Ordene por risco real: impacto x probabilidade x exposicao (publico/papel/ambiente).
8. Checkpoint resumivel (estado da investigacao)
Mantenha e atualize este bloco para permitir retomar sem refazer. Util em bugs longos, intermitentes ou multi-sessao.
CHECKPOINT
- Passo atual: 1 Reproduzir | 2 Rastrear | 3 Propor | 4 Verificar | 5 Reportar
- Modo: diagnose-only | find-and-fix
- Repro: confiavel | parcial | nao reproduzido (falta: ...)
- Hipoteses:
[REFUTADA] H1: ... (evidencia: ...)
[ABERTA] H2: ... (proximo teste: ...)
[CONFIRMADA] H3: ... (= causa raiz, se aplicavel)
- Causa raiz: definida? (sim/nao) -> qual
- Proxima acao: o experimento/observacao seguinte, concreto
- Bloqueios: acesso/dado/ambiente/log que falta para prosseguir
- Nao-mexer: arquivos/areas sensiveis a evitar (ex.: compartilhados sem analise de impacto)
Regra de ouro do checkpoint: ao pausar, qualquer pessoa deve conseguir ler este bloco e saber exatamente o que ja foi descartado, o que esta aberto e qual e o proximo passo.
9. Armadilhas e anti-padroes da depuracao (gotchas)
- Pular para o fix sem reproduzir nem provar a causa — o pecado capital. Cria "fix" que mascara o sintoma e regride depois.
- Parar no primeiro porque (corrigir o sintoma —
?./null-check/try-catch generico — em vez da causa). - Confundir correlacao com causa: "mudei isto e melhorou" sem provar que era a causa (placebo de debug; o bug intermitente so mudou de janela).
- Confiar em nomes: assumir que
validateInput()valida, queisAuthorizedautoriza, quesafeParsee seguro — sem ler. - Heisenbug: o ato de observar (log, debugger, retry) altera timing e esconde o bug — registre isso e use tecnicas menos invasivas.
- Reproducao nao-deterministica aceita como "as vezes": quase sempre ha um fator escondido (ordem, cache, concorrencia, dado especifico, timezone, locale, fuso, relogio) que torna deterministico.
- Mudar varias coisas de uma vez e nao saber qual resolveu.
- Ignorar o log do servidor ao depurar um 500 (a resposta ao cliente raramente tem a stack real).
- Confundir camadas: tratar CORS como auth; tratar erro de build como erro de runtime; depurar a UI quando o bug e contrato de API.
- Não reverter o fix para confirmar causalidade — perde a unica prova barata de que voce achou a causa certa.
- Esquecer papeis e ambientes: "funciona pra mim" (admin, dev, com cache quente) enquanto quebra para outro tenant/anonimo/prod/cold start.
- Mexer em codigo compartilhado sem analise de impacto e quebrar 5 lugares para consertar 1.
- Deixar
console.log/prints de debug ou estado parcial de investigacao no codigo final.
10. Orientacao por stack (o que muda na pratica)
Os principios sao universais; as ferramentas mudam. Use as da stack real.
- Reproducao/isolamento:
git bisect(qualquer git); minimal repro em sandbox/REPL; feature flags para isolar caminho; seeds fixos para nao-determinismo. - Inspecao de fluxo: debuggers (Chrome DevTools /
debugger,pdb/ipdb, Delve,jdb/IDE,dlv, lldb/gdb), logs estruturados temporarios (remover depois), tracing (OpenTelemetry/Sentry quando existir — nao inventar se nao houver). - UI/cliente: DevTools (Network, Console, Components/Profiler), React/Vue/Angular devtools, Flutter DevTools, source maps; error boundaries do framework.
- API/rede: inspecionar requisicao real (DevTools Network,
curl -v, proxy como mitmproxy/Charles, logs de gateway), comparar payload enviado vs. contrato; checar status, headers, CORS preflight. - Backend/500: ler o log do servidor com stack completa; reproduzir com o mesmo input; testes de integracao; replay de requisicao.
- Build/tipos: rodar o compilador/checker com saida verbosa; resolver imports circulares (madge/
import-linter/grafos de dependencia); checar lockfile e versoes; limpar cache de build; regenerar codegen/migrations/stubs. - Workflows/jobs/filas: inspecionar o orquestrador (estado do run, step travado), dead-letter queue, locks, logs do worker; correlacionar por trace/correlation ID.
- Mobile: logs do dispositivo (logcat/Console.app), hot reload pode mascarar bug de inicializacao (faca cold start), diferencas debug vs release build.
- Concorrencia/intermitente: stress/loop para forcar a corrida; logs com timestamp/thread/goroutine id; ferramentas de race detector (Go
-race, ThreadSanitizer).
11. Auto-verificacao e regras de qualidade
Antes de declarar a investigacao concluida, confirme:
- Cumpri os gates na ordem — nao propus fix sem causa raiz provada.
- A reproducao esta documentada (ou a falta de acesso para reproduzir esta declarada).
- A causa raiz tem cadeia causal explicita ate o sintoma, com evidencia em cada elo (5-Whys nao parou no sintoma).
- Distingui causa de sintoma e rotulei honestamente fix-de-causa vs mitigacao.
- Todo arquivo/funcao/linha/commit citado e real e observado; o que falta foi declarado.
- Cada hipotese tem status (refutada/aberta/confirmada) e evidencia; confianca explicitada.
- A verificacao prova que o bug some COM o fix e VOLTA sem ele; ha teste de regressao.
- Fiz analise de impacto se mexi em codigo compartilhado.
- Considerei papeis (anonimo/usuario/admin/owner/outro tenant) e ambientes (dev/staging/prod), caminho de erro e concorrencia.
- Nenhum segredo/PII exposto; sensiveis mascarados; sem stack cru ao usuario final.
- O checkpoint esta atualizado e qualquer um conseguiria retomar.
- Recomendei a auditoria/skill complementar se o bug e instancia de padrao sistemico.
Se faltar contexto para concluir, diga exatamente o que falta (qual log, acesso, ambiente, dado ou repro) e qual e a hipotese provisoria — nunca preencha a lacuna com suposicao apresentada como fato.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.