4.8 KiB
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@latestfunciona sin instalación previa (resuelve a la v2.110.0). -
Ya hay sesión autenticada:
SUPABASE_ACCESS_TOKENestá exportado en~/.bashrc, por lo quenpx supabase projects listya respondió sin pedir login. -
Dos proyectos remotos (org
vercel_icfg_9zFCFZDSC4E6wody0k7rBxCB):Ambiente Nombre project-ref Production supabase-gfiber-prodhwxkegbdnbrzvekrqxbdPreview/Dev supabase-gfiber-devvshcimexazocttjmyrqy -
El link local actual (
supabase/.temp/project-ref) apunta a prod (hwxkegbdnbrzvekrqxbd,linked: true); dev aparecelinked: 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 pushciego a ambos proyectos rompería este estado divergente a propósito. Confirmé por grep que son las únicas dos migraciones con este marcador (_dev/_proden el nombre o comentario "DEV ONLY/PROD ONLY").
Plan de ejecución
-
Diagnóstico por ambiente (solo lectura, no destructivo):
npx supabase link --project-ref hwxkegbdnbrzvekrqxbd(si no sigue linkeado) ynpx supabase migration list→ lista de migraciones locales vs. aplicadas en prod.npx supabase link --project-ref vshcimexazocttjmyrqyynpx supabase migration list→ lo mismo para dev.- Esto requiere el password de la DB de cada proyecto (
SUPABASE_DB_PASSWORDestá en.envpara dev; para prod habrá que sacarlo del vault de 1Password "GFiber Pilot Extension" o devercel env pull --environment=production, como se hizo en el plan de finalización de junio). - Registrar qué migraciones aparecen como "pendientes" en cada proyecto.
-
Filtrar las migraciones dev/prod-only del diff genérico:
- Si
20260611210000_rollback_attendance_status_prod.sqlaparece pendiente en dev, no aplicarla ahí (es intencional que dev no la tenga). - Si
20260615120000_simplify_attendance_codes_dev.sqlaparece 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.
- Si
-
Aplicar el gap real:
npx supabase db push --project-ref <ref>en cada proyecto que tenga migraciones pendientes reales (excluyendo las dev/prod-only según el paso 2).- Confirmar con un segundo
migration listque ambos remotos quedan con el estado esperado (idéntico salvo las dos migraciones intencionalmente divergentes).
-
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 hwxkegbdnbrzvekrqxbdy... --project-ref vshcimexazocttjmyrqydespué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.