Saltar a contenido

0.7.0 (2026-09-29)

Release centrado en el editor y en la base del proyecto: el explorador de archivos y carpetas se rediseña por completo, cambiar de diagrama deja de parpadear, el frontend estrena una imagen de producción ligera y sin root, y el backend queda alineado a su arquitectura por capas.

⬆️ Notas de actualización

  • Escenario deploy/external-mongodb: el frontend ahora corre como sitio estático servido por Nginx (imagen de producción) en lugar del servidor de desarrollo de Vite. Sigue escuchando en el puerto 5173 y usa las mismas variables (VITE_API_URL, VITE_SENTRY_DSN, VITE_APP_ENV), que ahora se leen al arrancar el contenedor: para cambiarlas basta con recrearlo, sin reconstruir. Para actualizar, reconstruye la imagen (docker compose up -d --build). El contenedor ya no monta el código fuente del frontend.
  • El escenario deploy/local-full no cambia: sigue usando el servidor de desarrollo con recarga en caliente.

✨ Funcionalidades

Explorador de archivos y carpetas

  • Menú de acciones por diagrama (botón ⋯ o clic derecho): renombrar, duplicar, mover a una carpeta, mover a otro proyecto y eliminar. Antes el árbol solo permitía eliminar.
  • Renombrar en el lugar con F2 o doble clic, tanto diagramas como carpetas.
  • Mover a una carpeta sin arrastrar, desde el menú. Funciona también en móvil y con teclado.
  • Menú de carpeta: nuevo diagrama dentro de la carpeta, renombrar y eliminar. Las carpetas vacías muestran un acceso directo "Nuevo diagrama aquí".
  • Fijar el panel con la chincheta, la misma del panel de descripción: se queda abierto al hacer clic fuera y al recargar.
  • Ctrl/Cmd+B abre y cierra el explorador (dentro del editor de descripción conserva su función de negrita).
  • El explorador empuja el contenido en lugar de taparlo: el código, la vista previa y la barra inferior (estado de guardado, zoom, fecha y hora) siempre quedan visibles.
  • Ancho ajustable entre 200 y 480 px, arrastrando el borde o con el teclado; doble clic lo restablece. El ancho se recuerda.
  • Carpetas abiertas recordadas por proyecto.
  • Lectura más clara: carpetas primero, etiqueta por tipo de diagrama (MMD, PUML, D2, DBML, DRAW), título completo al pasar el mouse y contador de resultados al buscar ("3 de 24 diagramas").
  • Zona visible para sacar un diagrama de su carpeta mientras se arrastra.
  • Navegación con teclado: flechas para moverse y abrir o cerrar carpetas, Inicio/Fin, un solo punto de tabulación y Shift+F10 para abrir el menú de la fila.

Editor

  • Cambio de diagrama suave: al abrir otro diagrama desde el explorador, el área de trabajo se cubre con un indicador "Cargando diagrama…" centrado y se revela completa, con un fundido, cuando el nuevo diagrama ya está dibujado. Ya no se ve el editor completo desaparecer ni partes que cargan a destiempo.
  • Selector de idioma con el menú lateral colapsado: la bandera sigue visible y abre el menú de idiomas.

Despliegue

  • Imagen de producción del frontend: sitio estático servido por Nginx sin usuario root, con cabeceras de seguridad, compresión gzip, caché de recursos y healthcheck. Pesa 68 MB frente a 951 MB de la imagen de desarrollo.
  • Configuración en tiempo de ejecución: la URL del API y Sentry se inyectan al arrancar el contenedor, así que la misma imagen sirve para cualquier entorno. Compatible con DigitalOcean App Platform (Static Site).

🔒 Seguridad

  • El autocorrector de diagramas con IA verifica que el diagrama sea del usuario y responde 403 si no lo es.
  • Frontend sin root en producción (nginx-unprivileged), con cabeceras de seguridad. Se incluye un ejemplo de Content-Security-Policy (csp.conf.example), desactivado por defecto para habilitarlo por despliegue.

🐛 Correcciones

  • Arrastrar un diagrama a una carpeta podía dejarlo en la raíz: al soltar se enviaban dos peticiones en paralelo (carpeta y raíz) y ganaba cualquiera. El resaltado de la carpeta al pasar por encima tampoco se veía.
  • La búsqueda del explorador escondía resultados que estaban dentro de carpetas cerradas, y vaciaba las carpetas que coincidían por nombre.
  • El editor se redibujaba entero cada segundo por el reloj de la barra inferior, lo que afectaba la fluidez al escribir. La fecha y la hora ahora también respetan el idioma de la interfaz.
  • Crear, mover, renombrar o eliminar desde el explorador recargaba todo el editor con la pantalla de carga. Ahora el cambio se ve al instante y, si falla, se revierte con un aviso.
  • La vista previa quedaba en blanco un instante en cada redibujado, también al escribir código.
  • Con el menú lateral colapsado y el explorador fijado, los tooltips del menú no se veían, así que no había forma de saber qué era cada opción.
  • Con los paneles laterales abiertos, la barra inferior se partía en dos líneas.
  • Un token de una cuenta ya eliminada provocaba un error 500 en las rutas protegidas; ahora responde 401.
  • Aviso de error del editor: no se podía cerrar, no tenía modo oscuro y no desaparecía solo.

♻️ Refactors

  • Backend alineado a su arquitectura por capas en los 14 módulos: los servicios dependen de interfaces y no de repositorios concretos, ya no acceden directo a la base de datos ni al SDK de Stripe (todo pasa por IPaymentProvider), y la lógica de negocio salió de las rutas.
  • Dependencias de autenticación unificadas en app/api/deps.py, en lugar de copias en cada módulo.
  • Clientes de IA con un método público complete() común a los 5 proveedores.
  • Borrados en lote en lugar de bucles uno a uno (proyectos y carpetas).

📝 Documentación

  • INSTALL.md y deploy/README.md documentan la imagen de producción del frontend, la configuración en tiempo de ejecución y la variante de App Platform como Static Site.
  • Docstrings completados en todos los archivos tocados del backend.

🌐 Traducciones

  • Textos que estaban fijos en español ahora se traducen (español e inglés): modal de nueva carpeta, "Guardado hace…", fijar/desfijar panel, mensajes de error del explorador, título del selector de idioma y el indicador de carga del diagrama.

🧪 Pruebas

  • Pruebas de regresión para el 401 de cuentas eliminadas y para las consultas de links compartidos activos y planes activos.
  • Suite completa: 266 pruebas, cobertura 51.73% (umbral 45%).

🔧 Interno

  • ruff sin errores en todo el backend y 28 errores menos de mypy (238 frente a 266).