# Sincronizar migraciones de Supabase (dev + prod) ## Contexto El repo tiene 37 archivos de migración en `supabase/migrations/`, el más reciente del 2026-07-22. La última verificación documentada de que ambas bases estaban al día es `docs/plans/2026-06-08-supabase-dev-prod-finalization.md`, que confirma **9 migraciones aplicadas y verificadas en ambas DBs** a esa fecha. Desde entonces se agregaron ~28 migraciones nuevas que probablemente nunca se empujaron a uno o ambos proyectos remotos (streaks, ranking config, bonus settings, admin update policy, etc.). El objetivo es detectar el gap real por ambiente y aplicarlo, sin asumir que "aplicar todo a ambos" es seguro. ## Hallazgos clave (ya verificados, solo lectura) - **Supabase CLI no está instalado globalmente**, pero `npx supabase@latest` funciona sin instalación previa (resuelve a la v2.110.0). - **Ya hay sesión autenticada**: `SUPABASE_ACCESS_TOKEN` está exportado en `~/.bashrc`, por lo que `npx supabase projects list` ya respondió sin pedir login. - **Dos proyectos remotos** (org `vercel_icfg_9zFCFZDSC4E6wody0k7rBxCB`): | Ambiente | Nombre | project-ref | |---|---|---| | Production | `supabase-gfiber-prod` | `hwxkegbdnbrzvekrqxbd` | | Preview/Dev | `supabase-gfiber-dev` | `vshcimexazocttjmyrqy` | - El link local actual (`supabase/.temp/project-ref`) apunta a **prod** (`hwxkegbdnbrzvekrqxbd`, `linked: true`); dev aparece `linked: false`. Habrá que re-linkear entre pasos. - ⚠️ **Existen migraciones intencionalmente divergentes entre ambientes** — no todas las migraciones deben aplicarse a ambos proyectos: - `20260611210000_rollback_attendance_status_prod.sql` — deshace una migración anterior **solo en prod** (prod seguía usando los códigos viejos de asistencia). - `20260615120000_simplify_attendance_codes_dev.sql` — simplifica los códigos de asistencia **solo en dev** ("DEV ONLY... Production is NOT touched", literal en el comentario del archivo). Un `supabase db push` ciego a ambos proyectos rompería este estado divergente a propósito. Confirmé por grep que son las únicas dos migraciones con este marcador (`_dev`/`_prod` en el nombre o comentario "DEV ONLY/PROD ONLY"). ## Plan de ejecución 1. **Diagnóstico por ambiente** (solo lectura, no destructivo): - `npx supabase link --project-ref hwxkegbdnbrzvekrqxbd` (si no sigue linkeado) y `npx supabase migration list` → lista de migraciones locales vs. aplicadas en **prod**. - `npx supabase link --project-ref vshcimexazocttjmyrqy` y `npx supabase migration list` → lo mismo para **dev**. - Esto requiere el password de la DB de cada proyecto (`SUPABASE_DB_PASSWORD` está en `.env` para dev; para prod habrá que sacarlo del vault de 1Password "GFiber Pilot Extension" o de `vercel env pull --environment=production`, como se hizo en el plan de finalización de junio). - Registrar qué migraciones aparecen como "pendientes" en cada proyecto. 2. **Filtrar las migraciones dev/prod-only del diff genérico**: - Si `20260611210000_rollback_attendance_status_prod.sql` aparece pendiente en **dev**, no aplicarla ahí (es intencional que dev no la tenga). - Si `20260615120000_simplify_attendance_codes_dev.sql` aparece pendiente en **prod**, no aplicarla ahí (es intencional que prod no la tenga). - Todas las demás migraciones pendientes (streaks, ranking config, bonus settings, etc.) se tratan como gap real a cerrar en el proyecto donde falten. 3. **Aplicar el gap real**: - `npx supabase db push --project-ref ` en cada proyecto que tenga migraciones pendientes reales (excluyendo las dev/prod-only según el paso 2). - Confirmar con un segundo `migration list` que ambos remotos quedan con el estado esperado (idéntico salvo las dos migraciones intencionalmente divergentes). 4. **Dejar el link local en un estado conocido** al terminar (documentar a cuál de los dos quedó linkeado `supabase/.temp/project-ref`, ya que ambos comandos de push lo van reescribiendo). ## Verificación - `npx supabase migration list --project-ref hwxkegbdnbrzvekrqxbd` y `... --project-ref vshcimexazocttjmyrqy` después del push, comparando que ambas listas coincidan salvo las dos migraciones marcadas como divergentes a propósito. - Smoke check opcional: revisar en el dashboard de cada proyecto (Table Editor) que las tablas nuevas esperadas (`agent_streaks`, `ranking_config`, etc.) existan donde correspondan. ## Nota de ejecución Este trabajo (CLI de Supabase, migraciones de schema) cae dentro del scope del agente `vercel-helper` según `CLAUDE.md`. Se recomienda delegarle la ejecución de los pasos 1-4 con este contexto ya resuelto (refs de proyecto, y la lista de migraciones dev/prod-only a excluir), en vez de correr los comandos manualmente en la sesión principal.