Un build había empezado a tardar casi el doble de lo habitual, en algún momento de las últimas semanas, y no tenía idea de cuándo. Pasé varias noches adivinando —revirtiendo una actualización de dependencia, después un cambio de configuración, después revirtiendo la reversión cuando ninguno ayudó— antes de acordarme de que git bisect existe específicamente para no tener que adivinar.
Dejar que la herramienta haga el trabajo
git bisect start, marcar el commit actual como malo, marcar un commit de hace seis semanas como bueno, y dejar que camine la búsqueda binaria por mí en lugar de mi memoria:
git bisect start
git bisect bad HEAD
git bisect good HEAD~80
git bisect run npm run build -- --timing
A los cuatro pasos, aterrizó en el culpable real: un patrón glob de colección de contenido que había ampliado meses antes para atrapar un caso extremo de nombrado de archivos, que ahora también coincidía con una carpeta de borradores que guardaba localmente pero nunca commiteaba —salvo que sí los había commiteado una vez, brevemente, antes de marcarlos como borrador, y el glob seguía tocando su historial en cada build incremental.
Por qué no lo había hecho antes
Bisectear se sentía como una exageración para lo que asumía era un problema chico de configuración, así que primero recurrí a adivinar manualmente, lo cual tomó cuatro noches para no llegar a ningún lado. El bisect real tomó cuatro minutos una vez que lo empecé. La lección no es realmente sobre git —es que “esto se siente una herramienta demasiado simple para mi problema que se siente complicado” es una mala razón para saltearse la herramienta simple.