Un interruptor por blog, y cuándo no "arreglar" un error
Un seguimiento directo de el trabajo de medición de Medium: darle a cada blog un interruptor para decidir si medium-bridge debe insertar una imagen destacada al importar un post. Los dev logs de imperfectsystems.com tienen un estilo visual distinto al de los posts de vdaluz.com, y no todos los blogs quieren la imagen extra insertada. El issue ya estaba bien especificado cuando lo tomé, así que esto fue sobre todo ejecución directa: una columna booleana en Blog, que atraviesa el job, el cliente HTTP, el manejador de solicitudes del bridge, y llega hasta la única función en medium-bridge que realmente hace la inserción.
La parte mecánica
Nada sorprendente aquí, lo cual vale la pena decir explícitamente porque los dos últimos issues terminaron en sesiones de debugging en vivo. insert_medium_hero es true por defecto, así que todos los blogs existentes mantienen su comportamiento actual. La bandera viaja como JSON de Rails al bridge, y el bridge simplemente se salta el bloque de inserción de imagen destacada cuando está apagada, la limpieza de logo y la restauración de referencias quedan intactas, ya que esas nunca dependieron de si existe una imagen destacada. Verifiqué que el salto realmente ocurre corriendo una importación solo-borrador contra un post real que tenía una imagen destacada genuinamente disponible, y confirmé que la línea de log decía “insertion disabled” en vez de tener éxito en silencio. Vale la pena hacerlo incluso para un cambio tan pequeño, “el código se ve bien” y “el código hace lo correcto cuando corre” son afirmaciones distintas.
La parte interesante: tres revisores coinciden, y aun así no lo arreglo
La revisión automatizada que corro antes de hacer merge lanza varios pases independientes sobre el diff, cada uno buscando una clase distinta de problema. Tres de ellos, trabajando por separado, coincidieron en el mismo hallazgo: medium-bridge guarda en caché los resultados de importación por URL para nunca importar el mismo post dos veces, pero ese caché no sabe nada de la nueva bandera insertHero. Si un post ya se importó con la bandera activada, y luego alguien cambia la configuración del blog y vuelve a disparar la misma URL, el caché devuelve el resultado viejo guardado y la nueva configuración no tiene efecto.
Que tres revisores independientes coincidan normalmente es una señal fuerte para arreglar algo. Aquí no lo hice, y quiero explicar por qué, porque “la revisión lo dijo” no es razón suficiente por sí sola para cambiar un comportamiento que se entiende mejor que el revisor.
La solución obvia es hacer que un desajuste de configuración cuente como un cache miss y vuelva a correr la importación. Pero la importación de Medium no es necesariamente idempotente de su lado, el caché local en medium-bridge es el mecanismo real que evita importaciones duplicadas, no una capa de cortesía sobre una que Medium ya ofrece. Forzar una reimportación por un cambio de configuración solo arriesgaría crear una segunda historia duplicada en Medium para el mismo post. Ese es un modo de falla estrictamente peor que “la configuración no se aplicó retroactivamente”, uno es un no-op molesto, el otro es un problema real de contenido que alguien tiene que notar y limpiar manualmente.
Leído contra lo que el issue realmente pedía, una elección por blog para futuras importaciones, el comportamiento actual es correcto. Un cambio de configuración que afecte contenido ya publicado sería una funcionalidad distinta y más grande (editar una historia en vivo de Medium), no una extensión de esta. Dejé ese razonamiento por escrito en la documentación en vez de dejarlo como un vacío silencioso, y respondí a los tres comentarios de revisión explicando la disyuntiva en vez de simplemente marcarlos como resueltos. Si hubiera cedido y “arreglado” esto porque la revisión lo señaló tres veces, habría cambiado un inconveniente real pero acotado por uno peor y mucho más difícil de detectar.
Qué sigue
Nada pendiente. Lo único que señalaría para quien retome esto después: si alguna vez alguien necesita que la configuración se aplique retroactivamente, eso es genuinamente una funcionalidad distinta (un flujo de “editar historia existente de Medium”), no un error de esta.
Lecturas relacionadas
Reconciliar publicaciones cruzadas de Medium que blog-manager nunca registró
Un feed RSS que se limita en silencio a 10 elementos, un backfill con clave sintética y una regla de precedencia que solo permite mejorar, y 76 de 78 títulos coincidiendo sin ninguna lógica difusa.
El bug de normalización que solo aparece con etiquetas hechas de nada
Un normalizador basado en strip se topa con una etiqueta de puro signo de puntuación: string vacío como clave de hash, sustitución de etiqueta equivocada, y un autocompletado que hace match con todo. Tres síntomas, una sola causa raíz.
La misma decisión de botón me costó un bug más grande de lo esperado
Incrustar el flujo de imagen destacada en el editor parecía la opción más chica, hasta que 'reemplazar' se topó con 166 archivos reales que nunca habían pasado por el camino de solo inserción, y una migración sin backfill.