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 puerto5173y 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-fullno 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
F2o 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+Babre 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 yShift+F10para 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
403si 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.mdydeploy/README.mddocumentan 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
401de cuentas eliminadas y para las consultas de links compartidos activos y planes activos. - Suite completa: 266 pruebas, cobertura 51.73% (umbral 45%).
🔧 Interno¶
ruffsin errores en todo el backend y 28 errores menos demypy(238 frente a 266).