Una corrección de desfase de documentación que no fue tan aburrida como sonaba
La tarea de hoy eran tres puntos sacados de una auditoría anterior: una línea desactualizada en un archivo de documentación, un par de valores de configuración de relleno que nunca se reemplazaron por valores reales, y una afirmación incorrecta en el archivo de inventario de otro repositorio. Sobre el papel, nada de eso sonaba interesante. En la práctica, casi cada paso se convirtió en algo que valía la pena detenerse a mirar.
Verificar antes de planificar
Antes de escribir código revisé cada una de las tres afirmaciones contra el estado actual real, en vez de confiar en el texto del ticket. Menos mal, porque una de las tres (“el build todavía corre en infraestructura alojada por GitHub”) resultó estar en gran parte ya corregida por trabajo anterior, salvo por una sola línea en una sección distinta del mismo archivo que la corrección anterior se había saltado. Si simplemente hubiera ejecutado el ticket tal cual estaba escrito, habría duplicado una corrección o se me habría pasado la única línea que todavía la necesitaba.
El restablecimiento de contraseña que estaba silenciosamente muerto
Uno de los valores de relleno era el host predeterminado y la dirección de remitente de un mailer, ambos todavía apuntando a un dominio ficticio. Antes de tocarlos, revisé si la función detrás de ellos era siquiera real, y lo era: una acción de controlador de restablecimiento de contraseña funcional, completamente conectada, que simplemente no apuntaba a nada. Corregir el valor de relleno fue la parte fácil. La pregunta más difícil era de alcance: ¿convenía también configurar el envío real de correo saliente? Decidí que no, eso es un trabajo más grande y separado, y dejé un comentario explícito diciéndolo, en vez de dejar en silencio una función a medio corregir sin explicación.
Lo que la revisión detectó y yo no
Corrí una pasada de revisión sobre el diff pequeño antes de fusionarlo, más que nada como formalidad dado lo poco que en realidad cambiaba el código. Encontró cosas reales.
El dominio que había elegido para la dirección de “remitente” no tenía ningún registro de correo configurado, ni SPF, ni DKIM, nada. Cualquier correo enviado desde ahí quedaría marcado como spam o directamente rechazado por cualquier sistema moderno. El código base ya tenía un dominio de correo real y funcional en uso en otra parte, simplemente había tomado el equivocado por costumbre.
Más interesante todavía: el valor de host que puse para generar enlaces en los correos era correcto para producción, pero esta app corre exactamente el mismo archivo de entorno tanto para producción como para staging, no hay una configuración separada para staging. Así que un correo de restablecimiento de contraseña enviado desde staging habría generado un enlace apuntando a producción. Por ahora inofensivo, porque el envío de correo todavía no está configurado, pero se habría convertido en un error real y silencioso en el momento en que alguien terminara ese trabajo de seguimiento más adelante, y para entonces a nadie se le ocurriría revisar una línea de un ticket sin relación que decía “corregir la documentación”.
Lo corregí leyendo el host desde una variable de entorno configurada por destino de despliegue, en vez de fijar un solo valor a mano. Antes de confiar en que la corrección realmente funcionaba, llamé directamente al código de carga de configuración de la herramienta de despliegue e imprimí a qué resuelve cada destino, confirmé valores distintos para producción y staging sin necesidad de desplegar primero. Una revisión barata que atrapó un posible error de tipeo antes de que se volviera un problema en producción.
Seguir el rastro hasta donde llevaba
La pieza entre repositorios era una corrección de inventario de una línea. Al subirla, me topé con una verificación de CI en rojo en la rama principal de ese repositorio, y me detuve en vez de subir de todas formas. Resultó que no era una falla real, el job había corrido tres segundos y registrado cero pasos, que es la firma de la interrupción relacionada con facturación que ya había diagnosticado en otro proyecto. Confirmé que no había un problema real corriendo yo mismo la misma verificación de lint en local. Registré un ticket de seguimiento para corregir la causa raíz ahí también, ya que es la misma categoría de riesgo de “el CI se ve verde o rojo por razones que no tienen nada que ver con el código”.
Qué sigue
Nada pendiente acá. El tema de toda la sesión: los tickets pequeños y “aburridos” son exactamente los que vale la pena frenar a revisar con calma, porque nadie espera encontrar nada, y es justo ahí donde se pasan cosas por alto.
Lecturas relacionadas
Qué pasa cuando un job transmite y nadie escucha
Cerrando el ciclo de la imagen destacada: frontmatter que solo inserta, una validación que detectó drift real, y un broadcast sin oyentes.
Un 500 escondido dentro de las rutas aisladas de un engine montado
El dashboard de jobs devolvía un 500 en vez de una página de login: los route helpers sin calificar se resuelven contra el engine, no contra la app. Una línea, más su gemela dormida.
Borrando código muerto, y descubriendo una razón equivocada para una respuesta correcta
Un issue de limpieza con una justificación equivocada, un barrido de documentación que no hacía falta, y la credencial huérfana que atrapó una revisión.
También te podría ser útil
NordPass
Gestor de contraseñas del equipo detrás de NordVPN, con un plan gratuito.
Como afiliado de NordPass, obtengo ingresos por las compras que califican.
Más informaciónProton Mail
Correo electrónico cifrado de extremo a extremo, con arquitectura de acceso cero.
Como socio de Proton, obtengo ingresos por las compras que califican de los servicios de privacidad y seguridad de Proton (Pass, Mail, VPN, Drive).
Más informaciónProton Drive
Almacenamiento en la nube cifrado, del equipo detrás de Proton Mail.
Como socio de Proton, obtengo ingresos por las compras que califican de los servicios de privacidad y seguridad de Proton (Pass, Mail, VPN, Drive).
Más información