Hipóteses, registros e busca binária
Assim que a IA propuser uma causa, não aceite de cara. Teste-a de forma barata. O teste mais barato geralmente é uma linha de log.
Peça à IA para adicionar registros temporários:
"Antes de mudarmos qualquer coisa, adicione um
console.log(ouuserlogo antes da linha 14, para vermos se ele está realmente indefinido."
Execute, cole a saída de volta. Agora você tem evidência, não uma teoria. Talvez user esteja indefinido — confirmando a hipótese. Talvez esteja tudo bem e o verdadeiro culpado esteja um nível acima. De qualquer forma, você avançou. Registre generosamente enquanto investiga: o valor da variável, e um rótulo dizendo qual é ela e onde o log está. Um console.log(user) nu que imprime undefined é muito menos útil do que console.log("user at validate.js:14 =", user). E lembre-se de remover os logs temporários assim que o bug for corrigido — ruído de depuração deixado para trás é uma bagunça pequena por si só.
Quando o bug vive em algum lugar de um processo longo e você não consegue saber onde, use busca binária. Corte a região suspeita ao meio: adicione um log no ponto médio.
A ideia: cada verificação descarta metade do que resta, então um espaço de busca enorme desmorona rápido. Aqui um bug se esconde em algum lugar entre o passo 1 e o passo 8 — três verificações o encurralam:
step: 1 2 3 4 5 6 7 8 a bug is somewhere in here
░░░░░░░░░░░░░░░░░░░░░░
check 1 ── log at 4 ── OK ──▶ bug is AFTER 4, drop 1–4
░░░░░░░░░░░ (5 6 7 8 left)
check 2 ── log at 6 ── BAD ─▶ bug is AT/BEFORE 6, drop 7–8
░░░░░ (5 6 left)
check 3 ── log at 5 ── OK ──▶ bug is at step 6 ✔ found
8 steps → 3 checks. 1000 steps → about 10 checks.
O valor parecia correto ali? Então o bug está depois dele — pesquise essa metade. Já parecia errado? O bug está antes — pesquise essa metade. Cada passo reduz o espaço de busca pela metade, então até um caminho de mil linhas se estreita em cerca de dez verificações. Diga explicitamente à IA: "Ajude-me a bisseccionar isso — qual é o ponto médio onde eu devo colocar um log?" A mesma técnica funciona no histórico, não só no código: se uma funcionalidade funcionava semana passada e quebrou hoje, bisseccione seus commits para encontrar a mudança exata que introduziu o bug.