# DH Inspección V2 — Fase A7 ## Versión ```text v0.7.0 · Fase A7 · Integración y cierre de Fase A ``` ## Objetivo A7 no agrega módulos funcionales ni modifica tablas. Cierra la Fase A mediante pruebas integradas sobre el despliegue real, controles de seguridad y un backup post-fase verificable. ## Aceptación autenticada `scripts/phase-a-acceptance.sh` solicita usuario y contraseña en la terminal. La contraseña se ingresa sin mostrarse, se utiliza para un único login y no se escribe en logs ni archivos persistentes. La prueba valida: 1. `401` sin sesión en dashboard, usuarios, roles y auditoría; 2. respuesta genérica ante un usuario inexistente; 3. login administrativo válido; 4. tres cookies con `Secure` y `SameSite=Strict`; 5. dos cookies de autenticación con `HttpOnly`; 6. `200` autenticado en `/auth/me`, dashboard, usuarios, roles y auditoría; 7. `403 CSRF_INVALID` en una escritura sin token CSRF; 8. logout válido con CSRF; 9. `401` después de revocar la sesión. La prueba no crea, edita ni elimina usuarios o roles. Sólo genera los eventos de autenticación y seguridad esperables en auditoría. ## Backup post-fase `scripts/backup-phase-a.sh` crea una carpeta privada bajo `/var/www/dh-backup/` con: ```text source.tar.gz database.dump .env nginx-site.conf o NGINX_CONFIG_NOT_FOUND.txt MANIFEST.txt SHA256SUMS ``` El TAR excluye `.env`, ZIP, `node_modules`, `dist` y archivos incrementales de TypeScript. El dump usa formato custom de PostgreSQL. ## Verificación `scripts/verify-backup.sh` es no destructivo y comprueba: - archivos obligatorios; - permisos `600` del `.env` respaldado; - todos los SHA-256; - integridad y exclusiones del TAR; - legibilidad del catálogo de `database.dump` mediante `pg_restore --list`. ## Migraciones A7 no incluye migraciones. El despliegue debe confirmar: ```text Pending migrations: no ```