El error que acusa al archivo equivocado
Cuando un error aparece lejos del cambio que lo provoco, leer el mensaje una y otra vez no sirve. La pregunta util es otra: que cambio en el ambiente.
Lectura: 6 minutos
El sintoma
Es comun que un sistema que arma textos en español —mensajes, documentos, correos— pierda tildes y acentos en Windows. Cuando un programa escribe un archivo sin declarar como se codifican las letras, la ñ termina siendo un simbolo raro. Es un problema viejo, molesto y silencioso.
La respuesta tipica es un blindaje: una pieza de codigo que se carga automaticamente al partir cualquier programa y fuerza la codificacion correcta. Chica, prolija, y verificable: las tildes dejan de romperse. Hasta ahi, todo razonable.
El diagnostico
El servicio principal —el que recibe los mensajes de los usuarios— deja de arrancar. Su registro muestra un error que no tiene nada que ver con tildes ni con codificaciones: apunta a un archivo interno del sistema. La primera reaccion natural es revisar ese archivo. Esta igual que siempre. El mensaje acusa a un archivo sano.
Ahi se pierde un buen rato. Un error que aparece lejos del culpable es una trampa clasica: si uno se queda mirando el mensaje, busca en el lugar equivocado durante horas.
La causa real
La pregunta correcta no es que pasa en ese archivo, sino que es lo distinto entre el sistema que falla y el que no. Y hay una sola diferencia posible: el blindaje, que se carga solo al partir.
Para interceptar la escritura de archivos, el blindaje habia reemplazado una pieza estandar del sistema —la clase que crea procesos— por una funcion propia. En Python, una funcion y una clase no son intercambiables: si algo hereda de esa pieza, heredar de una funcion es imposible y todo se cae. El sistema de tareas asincronas hereda justamente de ahi.
El detalle que vuelve traicionero el asunto: la manera elegante de reemplazar algo hace que la funcion parezca la clase original. Se ve igual, se comporta casi igual, pero no lo es. Por eso el error no aparece en el codigo propio: aparece en la primera linea que intenta heredar de eso, en un archivo del sistema.
| Prueba | Resultado | Que significa |
|---|---|---|
| Partir el programa normal | Falla | El problema esta presente. |
| Partir con la carga automatica desactivada | Funciona | El culpable es la carga automatica. |
La decision: en vez de reemplazar la pieza, extenderla. Una version propia que agrega lo que se quiere y conserva la original intacta. El cambio se deja versionado en el repositorio, para poder aplicarlo y revertirlo cuando haga falta.
El costo de esa decision es asumir una capa mas de codigo propio en el arranque del sistema. El beneficio es que la pieza original sigue siendo la original: cualquier herencia futura sigue funcionando.
La leccion
Un error que aparece lejos del culpable se persigue preguntando que cambio, no leyendo el mensaje una y otra vez.
Se ve igual no es es igual. Reemplazar algo por algo que lo imita funciona hasta que alguien hereda de eso.
Todo cambio que toca el arranque del sistema exige una prueba con y sin el cambio. Sin esa prueba, solo queda adivinar.
Bitácora de Thot-ecosystem · Post-mortem.