Cazando un heisenbug en el build de Windows de Stim

Fuentes: Unfathomable bugs #10: The Broken Windows Build

Este artículo narra la odisea de depuración que vivió el desarrollador de Stim, una biblioteca en C++ para simulación de circuitos cuánticos, cuando los builds de Windows en integración continua empezaron a fallar con un críptico 'access violation' tras un cambio menor en el manejo de flujos. El problema, inicialmente atribuido a un pull request, reveló ser un fallo más profundo que bloqueaba todas las compilaciones en Windows y que no se podía reproducir localmente.

El texto describe las dificultades estructurales de construir paquetes de Python multiplataforma, desde la dependencia de cibuildwheel y auditwheel hasta las complicaciones con vswhere.exe y vcvarsall.bat en Windows, y por qué un fallo así puede tener múltiples causas imposibles de aislar sin acceso al entorno. Para avanzar, el autor aplica una estrategia de 'tierra quemada': eliminar de forma agresiva partes no relacionadas del código (diagramas, modelos de error de detectores, documentación, tests, serialización) hasta reducir el repositorio a una fracción mínima que aún reproduce el error.

La pista decisiva surge al simplificar el test: un heisenbug que desaparece al añadir instrucciones más simples y aparece de nuevo al restaurar la instrucción MPP. Tras añadir trazas de depuración, el método sospechoso queda identificado en CircuitInstruction::count_measurement_results, una función aparentemente inocente del 10% restante del código, cuya interacción con el compilador de Windows provoca la violación de acceso solo en el entorno de CI. El artículo termina planteando el siguiente paso: aislar la función para entender su comportamiento y cerrar definitivamente el bug.