Commits
La exportación a InDesign se cierra y llega a producción
La revisión de código del ticket 02 destapó dos problemas críticos —pypdf fuera de requirements y las imágenes sin escala—, se aplicaron, y la funcionalidad acabó desplegada en magazine.escandell.cat esa misma tarde.
Un día corto pero decisivo: el último ticket de la exportación a InDesign se cierra con una revisión de código que destapó dos problemas críticos, y la funcionalidad acaba desplegada en producción esa misma tarde.
El último ticket, con dos críticos en la revisión
El ticket 03 cierra la funcionalidad (01-03). La prueba e2e (las pruebas que simulan todo el proceso de usuario) de la interfaz validó todo: docx extraído sin IA, anuncio cerrado y la pieza que faltaba, la portada PDF del cliente. Una vez hecha la maquetación con "Portada sustituida", la exportación genera un archivo ZIP que contiene el archivo IDML, el script JSX y la carpeta Links al lado. La portada y el anuncio se tratan como imágenes de página completa escaladas (0,47) sin marcos debajo, y la foto del artículo queda ajustada a su marco con una escala de 0,45, manteniendo la proporción original. El ZIP final (revista-n90-final.zip) queda en .scratch a la espera del paso por el InDesign del usuario.
La revisión de código del ticket 02 dejó nueve observaciones y dos críticas, que apliqué antes de cerrar nada. La primera: la biblioteca pypdf no estaba en requirements.txt. Lo comprobé con un venv limpio —el contenedor de producción habría fallado con cualquier material cerrado—: un error heredado de multi-edición que el venv de desarrollo ocultaba. La segunda: las imágenes en el IDML quedaban a tamaño natural, recortadas en la esquina del marco. Ahora ItemTransform aplica una escala uniforme y centrada; la corrección destapó otro error: los bounds se estaban desempaquetando al revés. También pulí el resto: el fondo de portada como marco bajo el texto, un ZIP atómico y limpio en caso de error, un tiempo límite para la tarea que queda colgada, la exportación bloqueada mientras se maqueta (los dos vuelven a renderizarse), el diseño de WeasyPrint reutilizado (la exportación lo pagaba dos veces), las posiciones de sustitución con una única fuente de verdad y la ruta_zip compartida. La batería de pruebas terminó en verde con 136 pruebas.
Una lección de e2e que no hay que olvidar
Cuando validé la primera escala, el servidor todavía tenía el código antiguo cargado en memoria: un artefacto verificado contra un proceso obsoleto miente; siempre hay que reiniciar el servicio antes de validar. También quedó registrada una traba: el navegador integrado de Orca no conserva el archivo de entrada para subir la portada —la coloqué desde el disco—, porque la subida mediante la interfaz ya estaba probada en multi-edición.
Producción, con pypdf dentro del contenedor
Se hizo un merge fast-forward de feature/export-indesign a main (6 commits), push y docker compose up --build en fxserver, donde vive magazine.escandell.cat. Arranque limpio, estado de salud público en 200 y pypdf 6.21.4 verificado DENTRO del contenedor: la corrección crítica quedó confirmada donde importa. Sin ella, el primer número con material cerrado habría hecho fallar la tarea de exportación en producción. Solo queda la prueba del usuario con el ZIP real, en su InDesign.