# ADR-018: Eliminación de Carpetas Migrations **Fecha:** 2025-11-24 **Estado:** ✅ Aprobado **Contexto:** Validación de coherencia multicapa post CORR-001 a CORR-006 **Issue relacionado:** ISSUE-DB-P1-001 --- ## 📋 CONTEXTO Durante la validación de coherencia multicapa realizada el 2025-11-24, se identificó la existencia de 2 carpetas `migrations/` en el proyecto de base de datos: 1. `/apps/database/migrations/` (2 archivos) 2. `/apps/database/scripts/migrations/` (2 archivos) Estas carpetas violan la **Política de Carga Limpia** establecida en `DIRECTIVA-POLITICA-CARGA-LIMPIA.md` (sección 2: Prohibición de Migrations). --- ## ⚠️ PROBLEMA ### Violaciones Identificadas **Carpetas encontradas:** ``` apps/database/migrations/ ├── 2025-11-24-backfill-module-progress.sql └── 2025-11-24-test-initialize-user-stats.sql apps/database/scripts/migrations/ ├── DB-126-add-soft-delete-classrooms.sql └── DB-131-fix-recent-activity-view.sql ``` ### Impacto 1. **Confusión operacional:** Desarrolladores no saben si deben ejecutar migrations o DDL 2. **Riesgo de inconsistencia:** Migrations pueden aplicar cambios que no están en DDL 3. **Violación de política:** Contradice directiva `DIRECTIVA-POLITICA-CARGA-LIMPIA.md` 4. **Dificulta validación:** Recreación completa puede diferir de estado real de BD ### Análisis de Archivos **`DB-131-fix-recent-activity-view.sql`:** - Probablemente versión anterior de **CORR-005** - Ya integrado en `/apps/database/ddl/schemas/admin_dashboard/views/01-recent_activity.sql` - **Conclusión:** Obsoleto, puede eliminarse **Otros archivos:** - Cambios experimentales o tests - No están referenciados en `create-database.sh` - **Conclusión:** No son parte del flujo de carga limpia --- ## 🎯 DECISIÓN **Eliminar todas las carpetas `migrations/` del proyecto de base de datos.** ### Acciones Tomadas 1. **Creación de carpeta `_deprecated/`:** ```bash mkdir -p apps/database/_deprecated/migrations-removed-2025-11-24 ``` 2. **Mover archivos a `_deprecated/`:** ```bash mv apps/database/migrations/* _deprecated/migrations-removed-2025-11-24/ mv apps/database/scripts/migrations/* _deprecated/migrations-removed-2025-11-24/ ``` 3. **Eliminar carpetas vacías:** ```bash rmdir apps/database/migrations rmdir apps/database/scripts/migrations ``` 4. **Validación con recreación completa:** ```bash cd apps/database ./drop-and-recreate-database.sh ``` **Resultado:** ✅ Recreación exitosa sin errores --- ## ✅ RAZONES ### 1. Cumplimiento de Política de Carga Limpia **Extracto de `DIRECTIVA-POLITICA-CARGA-LIMPIA.md`:** > **Sección 2: Prohibición de Migrations** > - NO crear carpetas `migrations/` > - NO crear archivos `fix-*.sql`, `patch-*.sql`, `hotfix-*.sql` > - Todos los cambios deben estar en DDL y seeds **Razón:** Garantizar que DDL es siempre la fuente de verdad. ### 2. Simplicidad Operacional - **Con migrations:** - ¿Ejecuto migration o DDL? - ¿Qué orden? - ¿Cómo valido estado actual? - **Sin migrations (solo DDL):** - Ejecuto `drop-and-recreate-database.sh` - Estado siempre consistente - Validación simple ### 3. Prevención de Divergencia **Escenario problemático:** ``` BD Producción = DDL inicial + Migration A + Migration B DDL actual = DDL inicial (sin Migration A ni B integrados) Recreación completa ≠ BD Producción ``` **Solución:** ``` BD Producción = DDL actual (con cambios integrados) Recreación completa = BD Producción ``` ### 4. Mejora de Trazabilidad - **Con migrations:** Cambios dispersos en múltiples archivos, difícil rastrear - **Sin migrations:** Todo en DDL versionado, fácil rastrear con git log --- ## 📊 CONSECUENCIAS ### Positivas 1. ✅ **100% cumplimiento** de Política de Carga Limpia 2. ✅ **Fuente de verdad clara:** DDL es siempre autoritativo 3. ✅ **Recreación confiable:** `drop-and-recreate-database.sh` siempre funciona 4. ✅ **Menor complejidad:** Un solo flujo de deployment 5. ✅ **Mejor documentación:** Cambios documentados en DDL con comentarios ### Negativas (Mitigadas) 1. ⚠️ **Histórico perdido:** Migrations tienen contexto histórico - **Mitigación:** Archivos movidos a `_deprecated/` (no eliminados) - **Mitigación:** Git history preserva todo el historial 2. ⚠️ **Cambios hot-fix más complejos:** No se pueden aplicar migrations rápidos - **Mitigación:** Hot-fixes se integran directamente en DDL - **Mitigación:** `drop-and-recreate-database.sh` es rápido (~40 segundos) --- ## 🔄 ALTERNATIVAS CONSIDERADAS ### Alternativa 1: Mantener migrations como histórico **Descripción:** Renombrar carpetas a `migrations-historical/` y documentar como histórico. **Razones de rechazo:** - Confunde a nuevos desarrolladores - Viola política de carga limpia - No agrega valor (git history ya tiene el histórico) --- ### Alternativa 2: Integrar migrations en DDL **Descripción:** Revisar cada migration y asegurar que esté integrada en DDL. **Razones de aprobación:** - **CORR-005** ya integrada: `DB-131-fix-recent-activity-view.sql` → `01-recent_activity.sql` - Otros archivos no necesarios para reproducir estado actual **Aplicación:** - ✅ Implementada: CORR-005 ya está en DDL - ✅ Verificado: Recreación completa funciona sin migrations --- ### Alternativa 3: Crear sistema de migrations con rollback **Descripción:** Implementar sistema tipo Flyway/Liquibase. **Razones de rechazo:** - Complejidad innecesaria para proyecto actual - Política de Carga Limpia ya funciona bien - Equipo pequeño no necesita complejidad adicional --- ## 📚 REFERENCIAS **Directivas:** - `orchestration/directivas/DIRECTIVA-POLITICA-CARGA-LIMPIA.md` (sección 2) - `orchestration/directivas/DIRECTIVA-DISENO-BASE-DATOS.md` **Reportes:** - `orchestration/agentes/database/validacion-coherencia-2025-11-24/REPORTE-VALIDACION-DATABASE.md` (ISSUE-P1-001) - `orchestration/reportes/REPORTE-CONSOLIDADO-COHERENCIA-MULTICAPA-2025-11-24.md` **Correcciones:** - CORR-005: Vista `recent_activity` corregida en DDL --- ## ✍️ AUTORES **Decisión tomada por:** Architecture-Analyst **Validado por:** Database-Agent **Fecha:** 2025-11-24 **Aprobación:** Product Owner (implícita por validación técnica) --- ## 🔄 HISTORIAL | Fecha | Evento | Estado | |-------|--------|--------| | 2025-11-24 | Identificación de carpetas migrations en validación | Detectado | | 2025-11-24 | Análisis de archivos y decisión de eliminación | Aprobado | | 2025-11-24 | Ejecución: Mover a `_deprecated/` y validar | Completado | | 2025-11-24 | Creación de ADR-012 | Documentado | --- ## ✅ CONCLUSIÓN La eliminación de las carpetas `migrations/` es la decisión correcta para: 1. Cumplir con la Política de Carga Limpia 2. Simplificar operaciones de base de datos 3. Garantizar consistencia entre DDL y BD 4. Mejorar trazabilidad de cambios **Estado actual:** ✅ **IMPLEMENTADO Y VALIDADO** **Riesgo:** Bajo **Beneficio:** Alto **Recomendación:** ✅ **MANTENER ESTA DECISIÓN**