Family Quest entra al catálogo y descubrimos por qué los deploys llevaban dos días en silencio
Tres PRs en sixsevenapps. La estrella es Family Quest — el quinto producto del portfolio — pero el rato divertido fue descubrir que el prebuild llevaba dos días petando en CI sin que nadie lo viera. Y aprovechamos para reescribir /lab.
Día con tres PRs en sixsevenapps y una verdad incómoda escondida en medio.
Family Quest aterriza en el catálogo
Family Quest ya tiene tarjeta propia en la home, página de detalle bilingüe y screenshot en /es/apps/family-quest. Es la quinta app del portfolio y la primera pensada deliberadamente para jugarse offline, alrededor de la mesa: configuras un equipo de hasta ocho peques (y opcionalmente dos adultos), eliges avatar y edad de cada uno, y el sistema genera una aventura de rol guiada para esa combinación concreta.
La página de detalle lleva su propio formulario con el call to action "¿quieres un juego personalizado para tu familia?" que routea al pipeline de contacto existente (Resend + Slack con tag ⚔️ Family Quest). Es la misma plumbing que ya usaba la página de SOFI para la demo — extender la categoría a custom-quest fueron literalmente diez líneas. Por una vez, la infra interna nos ahorró trabajo en lugar de pedirlo.
El prebuild llevaba dos días peteando y nadie lo había mirado
Cuando intentamos mergear Family Quest y desplegar a producción, el GitHub Action de Cloudflare Pages devolvió error 1. Mirando el log: scripts/build-roadmap-data.mjs escribía a una ruta absoluta hardcoded que solo existe en mi servidor (/home/jesus/ai-platform/projects/sixsevenapps/data/roadmap.generated.json). En el runner de GitHub Actions el directorio padre no existe, fs.writeFile revienta con ENOENT, y el deploy entero se cae.
El detalle sucio: lleva dos días así. Los commits anteriores eran del cron diario del journal — cambios que pasan CI local pero que el deploy de producción rechazaba sin que nadie mirase los logs. La web seguía sirviendo la última build que sí pasó. Nadie notó nada porque el contenido cambiaba poco y los visitantes no comparan con el repo. Es exactamente el tipo de fallo silencioso que más nos jode: si no lo cazas explícitamente, descubre tres semanas después que llevas semanas sin desplegar.
Fix de una línea — path.resolve(SCRIPT_DIR, "..", "data", ...) en lugar del path absoluto — y el deploy verde a la primera. Como pago de la deuda, el roadmap regenerado tenía 132 items (el JSON commiteado estaba obsoleto desde quién sabe cuándo).
/lab reescrito: lo que sirve, lo que va a abrirse
Aprovechando que estábamos en la web, refactor de la sección El Laboratorio. Tres movimientos:
- Quitamos Mission Control. El dashboard de orquestación se retiró en FEAT-023 hace dos semanas; tenerlo en la web era marketing falso. Su slug ahora 404ea limpio.
- Reescribimos OpenClaw para reflejar que es un snapshot congelado desde abril, con el contexto de por qué (Anthropic cerró la puerta a que la suscripción Max viviera dentro de gateways de terceros) y apuntando a su sucesor real:
claude-channel-daemon. - Dividimos la página en dos secciones: "Herramientas internas" (las seis que están vivas) y "Camino a código abierto", donde caen Builders in a Box y SOFI. Ambos proyectos están sin terminar y el plan es publicarlos en abierto cuando crucen su listón mínimo de utilidad.
El segundo bloque es el más útil para alguien que llegue de fuera: separa "esto lo usamos en serio" de "esto lo vamos a regalar cuando esté listo". Honestidad sobre el estado real evita dos cosas — fingir que todo está terminado y vender humo de open source que aún no existe.
Mañana toca seguir con el siguiente bug silencioso. Siempre hay uno.