6fab4be39f
Agrega POST /api/settings/smtp/test (superadmin, rate-limited) que envia un correo real usando los valores actuales del formulario y propaga el error real del servidor SMTP, a diferencia de sendMail() que nunca lanza. El panel de SMTP ahora tiene un campo de destinatario y boton "Enviar prueba" con el resultado real (exito o error), en vez de solo "Guardar" sin forma de verificar que la configuracion funcione. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
3.5 KiB
3.5 KiB
Changelog - project.linkedcorp.net
[1.3.0] - 2026-09-06
Added
- Configuración → Correo (SMTP): botón "Enviar prueba" con campo de destinatario. Ejecuta un envío
real (
POST /api/settings/smtp/test, solo superadmin, rate-limited) usando los valores actuales del formulario (aunque no se hayan guardado) y muestra el resultado real — éxito o el error tal cual lo devuelve el servidor SMTP — a diferencia desendMail()(correo de negocio), que nunca lanza para no romper flujos comoforgot-password.
Fixed
- La pantalla de SMTP no tenía forma de verificar que la configuración guardada funcionara de
verdad; un error de host/certificado/credenciales solo se detectaba cuando fallaba un correo real
de negocio, sin ningún diagnóstico. Regla agregada a
SEGURIDAD-Y-CALIDAD.mddel orquestador: toda config de servicio externo debe incluir una acción de prueba real.
[1.2.0] - 2026-09-06
Added
- Cambiar clave desde la app:
PUT /api/auth/change-password(exige la clave actual) + opción "Cambiar clave" en el menú de usuario (popup), disponible para cualquier usuario logueado.
[1.1.0] - 2026-09-06
Added
- Autorregistro público (
/registro) con verificación de correo (enlace de un solo uso, 24h) y aprobación posterior por Administrador/Superadministrador (/api/users/:id/approve|reject). - Recuperación de clave (
/olvide-clave→/restablecer-clave), respuesta siempre genérica. - Rol
superadmin: el usuario más antiguo del sistema (bootstrap automático al primer registro). - Configuración → Correo (SMTP), solo visible/editable por el superadmin; clave cifrada
(AES-256-GCM) en
system_settings, nunca expuesta por la API. Sin configurar, los correos de verificación/recuperación se loguean en vez de enviarse (modo dev, no rompe el flujo).
Fixed
- Bug real:
React.StrictModedisparaba dos veces el efecto deVerifyEmailPage, y la segunda llamada (token ya consumido) mostraba "enlace inválido" aunque la verificación sí había funcionado. Corregido con una guarda por token ya solicitado. - Reordenado el montaje de rutas del backend:
subtasksRoutes(mount genérico en/api) queda al final, para no interceptar con surequireAuthinterno una request sin token dirigida a un router más específico registrado después (ver deuda técnica de la v1.0.0).
[1.0.0] - 2026-09-06
Added
- Primer despliegue a producción:
https://project.linkedcorp.net(arquetipo B, dos servicios). create-admin.js: bootstrap del usuario Administrador de producción con clave fuerte generada.
Changed
seed-db.jssepara catálogos (universal) de datos de ejemplo (solo entornos no productivos).- Logo real de LinkedCorp (sidebar, login) en vez del placeholder "LC"; tamaño duplicado.
ComboBox/Flyoutse posicionan con portal adocument.body(ya no se recortan dentro de unExpanderoDetailPopup).- Master-detail de listados unificado en
DetailPopup(popup de tamaño fijo, no se cierra con clic afuera) en Proyectos, Actividades, Departamentos, Usuarios, Miembros y Catálogos. - "Miembros" del proyecto pasa a ser su propia pestaña (antes vivía dentro de "Info").
[0.1.0] - 2026-09-03
Added
- Estructura inicial del proyecto (backend Express + frontend React/Vite + MariaDB).
- Modelo de datos MVP: usuarios/roles, departamentos, proyectos, actividades, subtareas, dependencias, comentarios, adjuntos, notificaciones, auditoría, catálogos.
- Identidad UI/UX Fluent/Windows 11 (UI-UX-WINDOWS) adaptada a app web.