Files
qwen3-6-lora/data/raw/sanitized/plans/quiero-hacer-una-migracion-purrfect-goblet.md
T

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@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 <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.