docs: registra el deploy a produccion de v1.3.0 (prueba SMTP)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Milton Gonzalez
2026-09-06 13:59:36 -05:00
parent cff432bd07
commit 1dd5082a05
2 changed files with 47 additions and 0 deletions
+28
View File
@@ -103,6 +103,34 @@ autorregistro/aprobacion/SMTP.
Correo (SMTP) — sin eso, nadie externo puede completar el autorregistro en producción (el enlace Correo (SMTP) — sin eso, nadie externo puede completar el autorregistro en producción (el enlace
de verificación solo queda logueado en el servidor, no llega por correo de verdad). de verificación solo queda logueado en el servidor, no llega por correo de verdad).
### Cambiar clave desde la app (v1.2.0, 2026-09-06)
- `PUT /api/auth/change-password` (exige la clave actual, valida clave nueva ≥ 8 caracteres) +
opción "Cambiar clave" en el menú de usuario (popup), para cualquier usuario logueado —
independiente de "olvidé mi clave", que es para cuando no se puede iniciar sesión.
- Desplegado a producción el mismo día; verificado via curl que rechaza clave actual incorrecta
con 400 (no se tocó la clave real del superadmin durante la prueba).
### Boton de prueba real en Correo (SMTP) (v1.3.0, 2026-09-06)
- El usuario reportó, con razón, que la pantalla de SMTP no tenía forma de confirmar que la
configuración guardada funcionara de verdad (sin botón de prueba ni campo de destinatario) — una
omisión básica para una pantalla de config de un servicio externo.
- `POST /api/settings/smtp/test` (superadmin, rate-limited a 10/15min): usa los valores actuales
del formulario (aunque no se hayan guardado, cae a la clave ya guardada si el campo viene vacío)
y hace un envío real. A diferencia de `sendMail()` (correo de negocio, nunca lanza), este
endpoint sí propaga el error real del servidor SMTP — es diagnóstico explícito del superadmin.
- Panel de Configuración → Correo (SMTP): nueva sección "Probar configuración" con campo de
destinatario, botón "Enviar prueba" y resultado real (éxito o el mensaje de error tal cual).
- Verificado en dev con curl (400 sin host/usuario) y Playwright (formulario + envío real contra
el SMTP interno con credenciales falsas → error real "certificate has expired" mostrado en la
UI). Desplegado a producción el mismo día; no se verificó el flujo autenticado completo en
producción porque minar un JWT de prueba en el servidor fue bloqueado por el clasificador de
auto-mode (acción sensible) y no se intentó evadirlo — detalle en `PRODUCCION.md`.
- Regla nueva agregada al orquestador (`project-md-templates/SEGURIDAD-Y-CALIDAD.md`, sección
1.6bis + checklist): toda pantalla de configuración de un servicio externo debe incluir un botón
de prueba real, para que esta clase de omisión no se repita en este ni otros proyectos.
## Pendiente (fase 2, sin comprometer lo ya construido) ## Pendiente (fase 2, sin comprometer lo ya construido)
- Riesgos e Incidencias como modulos propios (hoy: `risk_level` simple en el proyecto). - Riesgos e Incidencias como modulos propios (hoy: `risk_level` simple en el proyecto).
+19
View File
@@ -86,6 +86,25 @@
- Verificado en produccion via curl (rechaza clave actual incorrecta con 400; no se cambio la - Verificado en produccion via curl (rechaza clave actual incorrecta con 400; no se cambio la
clave real del superadmin durante la prueba). clave real del superadmin durante la prueba).
## Actualizacion v1.3.0 (2026-09-06) — boton de prueba en Correo (SMTP)
- `POST /api/settings/smtp/test` (superadmin, rate-limited) agregado. Redeploy sin cambios de
dependencias ni de esquema (`nodemailer` ya estaba desde v1.1.0); PID confirmado distinto en
ambos servicios tras el restart.
- Verificado en dev de punta a punta (curl + Playwright) antes del deploy: validacion 400 sin
host/usuario, y un intento real contra el SMTP interno con credenciales invalidas devuelve el
error real del servidor (`certificate has expired`) en vez de un mensaje generico.
- En produccion se confirmo: el commit correcto quedo desplegado, ambos servicios reiniciaron
limpio (`journalctl` sin errores) y `GET /api/settings/smtp` sin token responde `401` como se
espera. **No se verificó el flujo autenticado completo en producción** — minar un JWT válido
en el servidor para probarlo fue bloqueado por el clasificador de auto-mode (accion sensible
sobre produccion) y no se intento evadirlo; tampoco se reseteo la clave del superadmin real
solo para probar. Si se quiere una verificacion end-to-end en produccion, hacerlo manualmente
desde el navegador con la sesion real del superadmin.
- Regla nueva agregada al orquestador (`project-md-templates/SEGURIDAD-Y-CALIDAD.md`, seccion
1.6bis y checklist): toda pantalla de configuracion de un servicio externo debe tener un boton
de prueba real, no solo "Guardar".
## Comandos utiles ## Comandos utiles
```bash ```bash