Saltar al contenido
weekly06 de septiembre de 2026·4 min

La semana en que le pusimos candado a media casa

Semana con más parches de seguridad que features nuevas: Chordna dejó de filtrar IPs y de fiarse de cabeceras falseables, Sofi blindó su API y el WhatsApp entrante, Ganga24 arregló un bug que sustituía títulos por precios, y el piloto de Instagram de SixSeven ya compone cómics de verdad.

Esta semana el patrón no fue "feature nueva", fue "esto no debería estar abierto así". 63 commits repartidos en seis proyectos, y una buena parte de ellos son agujeros que llevaban ahí un rato sin que nadie los mirara de cerca.

Chordna: la privacidad no es un checkbox, es un header mal leído

El bug más incómodo de la semana: Chordna estaba publicando la IP de quien pedía un análisis de canción (#200). No por malicia, por descuido de diseño — el dato viajaba a un sitio donde no tenía que estar visible. Al tirar del hilo apareció uno peor: el endpoint confiaba en X-Forwarded-For sin comprobar quién había escrito esa cabecera. Un proxy legítimo va añadiendo IPs a la cadena, pero si el que llama directamente también puede escribir ahí, puede mentir sobre quién es. El fix (#204) deja de fiarse de la mitad de la cabecera que controla el cliente. En el mismo barrido se puso un allow-list explícito a la superficie pública de /api/analyze (#201), que hasta ahora exponía más de lo que debía.

Con la casa más ordenada, sí hubo hueco para producto: los visitantes ya pueden reportar acordes, tonalidad, álbum o año mal etiquetados (FEAT-056, #203), y el catálogo puede seguir creciendo sin bloquearse en el quality gate (FEAT-055). Y una corrección casi de risa: la auditoría de calidad semanal llevaba tiempo sin ejecutarse de verdad — el fix se titula literalmente "que corra, y que diga la verdad" (#206).

Ganga24: cuando el precio se come el título

Aquí el bug del año en miniatura: en algún punto del pipeline de scraping, los precios estaban sustituyendo a los títulos de producto (#122). Un producto entraba con nombre y salía etiquetado como "19,99 €". Al lado, otro fallo con menos gracia y más impacto: el fallback de scraping de precios llamaba a AffiliateResult.clean_url, un atributo que no existe en esa clase — reventaba en silencio cada vez que el camino principal fallaba (#123).

Con eso resuelto llegó FEAT-052: seguimiento diario de precios sembrado a partir de las ofertas de Amazon España ya publicadas, así que el histórico de precios deja de depender de que alguien vuelva a visitar cada producto. Y dos ajustes de infraestructura: el túnel WireGuard ahora se autorrepara desde el watcher de uptime en vez de esperar a que alguien lo note (#127), y las llamadas de clasificación rápida corren sin "thinking" extendido — menos latencia y menos coste en una tarea que no lo necesita (#126).

Sofi: blindar el perímetro y no perder trabajo a medias

FEAT-071 endurece el perímetro de la API y mete una puerta de entrada explícita al WhatsApp entrante, que hasta ahora aceptaba tráfico con menos fricción de la deseable. FEAT-072 es la pieza más interesante técnicamente: el procesamiento con IA ahora es durable y reanudable. Si un análisis se corta a mitad de camino — caída, timeout, lo que sea — no vuelve a empezar desde cero, retoma por donde iba, con niveles de análisis reales en vez de un todo-o-nada. Y un fix menor pero típico de este tipo de sprint: los tokens de Gmail se leían de una ruta que ya no era la correcta tras el cambio anterior, así que había que repararlo antes de cerrar la semana.

SixSeven: Expediente SixSeven ya compone cómics

El piloto de Instagram (FEAT-013/014/015) pasó de generar guion a generar el cómic entero: un compositor que convierte escenas en viñetas y episodios que ahora son datos tipados en vez de texto suelto. Ese detalle importa más de lo que parece — un episodio tipado se puede validar, versionar y reutilizar sin tener que releer prosa para saber qué pasó en la escena tres. También sale el Reel del piloto, que es la pieza que de verdad se sube a Instagram.

Juntale: que jueguen los que todavía no leen

FEAT-034 le da a cada jugador un avatar único, incluso curando partidas que ya estaban en marcha para que no se quede nadie con el avatar repetido. Pero la pieza que más nos gusta es FEAT-033: una guarda de runtime determinista para el reto pensado para el "no-lector" — niños que todavía no dominan la lectura y necesitan que el juego funcione sin depender de que entiendan un texto. Cerrada y verificada en producción, no solo en local.

Ninguna de estas cosas es glamurosa. Son las que hacen que lo demás siga funcionando sin que nadie tenga que enterarse.