# FASE 4 — Overhaul, Bug Fixes y Hardening Final > **Objetivo**: Code review completo, eliminación de código muerto, seguridad, Docker para instalación, y verificación de métodos europeos. --- ## 0. Resumen Ejecutivo | Categoría | Ítems | |-----------|-------| | Código muerto eliminado | 1 ruta duplicada + 1 topic legacy en engine | | Vulnerabilidades corregidas | 3 APIs debug sin auth → bloqueadas en producción | | Docker para instalación | docker-compose.yml + Dockerfile con prisma CLI | | Métodos europeos auditados | 24 archivos corregidos (100% cobertura) | | Prerequisitos validados | 157 ejercicios nuevos verificados (0 rotos) | | E2E tests | 61 pasan (2 corregidos tras eliminar ruta) | | Build + TypeScript | ✅ Ambos pasan | --- ## 1. Bug Fixes ### 1.1 Ruta duplicada /sebastian/sumas **Problema**: Existían dos rutas que apuntaban a la misma carpeta del currículum: - `/sebastian/sumas` (legacy) - `/sebastian/matematicas` (actual) La home page de Sebastián ya usaba `matematicas`, pero `sumas` seguía como código muerto. **Fix**: - Eliminada `app/sebastian/sumas/page.tsx` - Removido topic `sumas` del engine (`PROFILE_CURRICULA`) - Actualizados 2 tests E2E que referenciaban la ruta eliminada ### 1.2 APIs de debug sin protección **Problema**: Los endpoints `/api/debug/reset`, `/api/debug/state`, `/api/debug/seed` eran accesibles sin autenticación en cualquier entorno. Cualquiera podía: - Borrar todo el progreso de un child (`reset`) - Leer datos privados (`state`) - Inyectar datos falsos (`seed`) **Fix**: Guard de `NODE_ENV` al inicio de cada handler: ```typescript if (process.env.NODE_ENV === "production") { return NextResponse.json({ error: "Not available in production" }, { status: 403 }) } ``` --- ## 2. Docker para Instalación ### 2.1 docker-compose.yml (NUEVO) Servicio `db` (PostgreSQL 16-alpine) + servicio `app` (build desde Dockerfile). ```yaml services: db: image: postgres:16-alpine volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U edueasy -d edueasy"] app: build: . depends_on: db: condition: service_healthy command: sh -c "npx prisma db push --skip-generate && node server.js" ``` Instalación: `docker compose up -d` → app en `http://localhost:3000`. ### 2.2 Dockerfile actualizado Copiado `node_modules/prisma` (CLI) y `node_modules/@prisma` (client) al runner stage para que `prisma db push` funcione en el contenedor. --- ## 3. Audit de Métodos Europeos ### 3.1 Problema 24 archivos de currículum NO mencionaban ningún método europeo en su `functionalContext`. ### 3.2 Fix Añadida referencia al método correspondiente en cada archivo: | Método | Aplicación | Archivos | |--------|------------|----------| | **Montessori** | Matemática (Francesca + Sebastián) | 6 archivos | | **Decroly** | Lectura, ortografía, historia, geografía, banderas | 18 archivos | | **Borel-Maisonny** | Lectura inicial (Isabella, ya existía) | 0 cambios | | **Freinet** | Expresión escrita (Sebastián lectura, ya existía) | 0 cambios | **Resultado**: 100% de archivos con método europeo referenciado. --- ## 4. Validación de Prerequisitos ### 4.1 Script de validación Creado script que recorre todos los archivos de currículum y verifica: - **0 self-references** (ejercicio que se requiere a sí mismo) - **0 prereqs faltantes** en contenido nuevo (Francesca + Sebastián) ### 4.2 Resultado | Check | Contenido nuevo (Francesca + Sebastián) | |-------|----------------------------------------| | Self-references | 0 ✅ | | Prereqs faltantes | 0 ✅ | | IDs verificados | 157 | Los 24 prereqs "faltantes" en Isabella son false positives del parser (template literals no resueltos por regex). --- ## 5. Documentación ### 5.1 INSTALL.md (NUEVO) Guía de instalación completa: - Docker compose (1 comando) - Instalación manual (Node + PostgreSQL + espeak-ng) - Descripción de perfiles y materias - APIs de debug documentadas - Estructura del proyecto --- ## 6. Estado Final | Criterio | Estado | |----------|--------| | TypeScript compila | ✅ `npx tsc --noEmit` exit 0 | | Build Next.js | ✅ `npm run build` exit 0 | | E2E tests | ✅ 61/61 pasan | | Docker | ✅ `docker compose up` listo | | Métodos europeos | ✅ 100% cobertura | | Seguridad debug APIs | ✅ Bloqueadas en producción | | Código muerto | ✅ Eliminado | | Prerequisitos | ✅ Validados (0 rotos en nuevo) |