feat: fase 4 — overhaul, docker, seguridad, métodos europeos

- 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
This commit is contained in:
renato97
2026-07-25 22:34:05 -03:00
parent a3360ec6e4
commit 07929b6c60
36 changed files with 367 additions and 80 deletions
+1 -1
View File
@@ -78,7 +78,7 @@ for (let i = 0; i < ejercicios.length; i++) {
skillCode: `seb-suma-${i + 1}`,
type: 'eleccion',
prerequisites: i === 0 ? [] : [ejercicios[i - 1].id],
functionalContext: 'Sumas de 2-3 dígitos nivel inicial.',
functionalContext: 'Sumas de 2-3 dígitos nivel inicial.. Método Montessori.',
errorType: 'discriminacion-auditiva',
})
}
+1 -1
View File
@@ -53,7 +53,7 @@ for (let i = 0; i < problems.length; i++) {
{ label: e.wrong2, correct: false, id: `w2-${i}` },
].sort(() => Math.random() - 0.5),
},
functionalContext: "Resolver problemas de varios pasos que requieren 2-3 operaciones combinadas.",
functionalContext: "Resolver problemas de varios pasos que requieren 2-3 operaciones combinadas.. Método Montessori.",
errorType: "discriminacion-auditiva",
})
}
+2 -2
View File
@@ -38,7 +38,7 @@ for (const p of perims) {
{ label: `${p.peri - 5} cm`, correct: false, id: `w2-${idx}` },
].sort(() => Math.random() - 0.5),
},
functionalContext: "Calcular perímetros de cuadrados y rectángulos en problemas geométricos.",
functionalContext: "Calcular perímetros de cuadrados y rectángulos en problemas geométricos.. Método Montessori.",
errorType: "confusion-letra",
})
idx++
@@ -79,7 +79,7 @@ for (const a of areas) {
{ label: `${a.area - 5} cm²`, correct: false, id: `w2-${idx}` },
].sort(() => Math.random() - 0.5),
},
functionalContext: "Calcular áreas de cuadrados y rectángulos en problemas geométricos básicos.",
functionalContext: "Calcular áreas de cuadrados y rectángulos en problemas geométricos básicos.. Método Montessori.",
errorType: "confusion-letra",
})
idx++
+1 -1
View File
@@ -83,7 +83,7 @@ for (let i = 0; i < ejercicios.length; i++) {
type: e.type as any,
prerequisites: i === 0 ? ['seb-suma-1'] : [ejercicios[i - 1].id],
...e.content,
functionalContext: 'Ejercicios interactivos de sumas con objetos cotidianos.',
functionalContext: 'Ejercicios interactivos de sumas con objetos cotidianos.. Método Montessori.',
errorType: 'discriminacion-auditiva',
})
}
+1 -1
View File
@@ -43,7 +43,7 @@ for (let i = 0; i < pctExercises.length; i++) {
{ label: e.wrong2, correct: false, id: `w2-${i}` },
].sort(() => Math.random() - 0.5),
},
functionalContext: "Calcular porcentajes básicos (50%, 25%, 10%) aplicados a descuentos, propinas y situaciones cotidianas.",
functionalContext: "Calcular porcentajes básicos (50%, 25%, 10%) aplicados a descuentos, propinas y situaciones cotidianas.. Método Montessori.",
errorType: "confusion-letra",
})
}