Saltar al contenido
Development

Una corrección de desfase de documentación que no fue tan aburrida como sonaba

Por Victor Da Luz
railsrubydev-logblog-manager

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

Development

El botón de commit del editor es un botón de deploy

Confirmar un borrador a main despliega el blog automáticamente. En cuanto eso quedó claro, sync vs. async dejó de ser una cuestión de estilo, más el caso especial de afiliado heredado que un validador nuevo casi rompió.

Leer