- Eliminada ruta duplicada /sebastian/sumas (código muerto) - Removido topic 'sumas' del engine (reemplazado por 'matematicas') - Creado docker-compose.yml (PostgreSQL + app, 1 comando install) - Dockerfile: copiado prisma CLI al runner stage para db push - APIs debug protegidas: 403 en producción (reset, state, seed) - Audit métodos europeos: 24 archivos corregidos al 100% - Montessori: matemática Francesca + Sebastián - Decroly: lectura, ortografía, historia, geografía, banderas - Borel-Maisonny: lectura inicial Isabella (ya existía) - Freinet: expresión escrita Sebastián (ya existía) - Validación prerequisitos: 0 rotos en contenido nuevo (157 ejercicios) - INSTALL.md: guía completa de instalación - fase4.md: documentación del overhaul - E2E: 2 tests corregidos, 61/61 pasan - TypeScript: exit 0, Build: exit 0
4.4 KiB
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
sumasdel 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:
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).
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) |