Go conserva el fallo de orden de versiones corregido en TypeScript por #6038
@7ttp is already working on this.
Since Sep 20, 2026.
Assessment
This issue has not been assessed yet.
Description
Affected area
Migrations — paquete Go github.com/supabase/cli/pkg/migration y confirmación de la ruta utilizada por Hosted Branching.
Supabase CLI version
Inspección de código en v2.117.0 y en develop, commit 75b9e8156d4653f8f4ba04f3441c10ee38d51ef0. No se ejecutó db push ni SQL remoto para este reporte.
Operating system
macOS; el caso mínimo depende únicamente del orden de strings, no del sistema operativo.
Installation method
Checkout del repositorio oficial para inspección estática.
Problema
El issue #6036 se cerró mediante #6038. Ese PR corrigió la ruta TypeScript y declara explícitamente que no modifica Go. La función FindPendingMigrations de apps/cli-go/pkg/migration/apply.go conserva el merge de dos listas con órdenes incompatibles:
ListLocalMigrationsdevuelve paths ordenados por nombre completo mediantefs.ReadDir.ListRemoteMigrationsdevuelve versiones ordenadas medianteORDER BY version.FindPendingMigrationscompara las versiones extraídas sin reordenar los paths locales.
No reporto una regresión del fix TypeScript: solicito triage de la implementación Go todavía presente y confirmación de si sigue siendo consumida por Hosted Branching u otros servicios.
Reproducción mínima sin base de datos
La siguiente invocación usa únicamente entradas sintéticas y llama a la función pura de Go:
local := []string{
"201_legacy.sql",
"20260101000000_new.sql",
"202_legacy.sql",
"203_legacy.sql",
}
remote := []string{"201", "202", "20260101000000", "203"}
pending, err := migration.FindPendingMigrations(local, remote)
fmt.Printf("pending=%v err=%v\n", pending, err)
Los paths están en el orden que devuelve fs.ReadDir; todas las versiones remotas tienen un archivo local. Por inspección del código, el resultado es:
pending=[202] err=Remote migration versions not found in local migrations directory.
El cursor remoto consume 202 al compararlo con 20260101000000; cuando alcanza 202_legacy.sql ya perdió la coincidencia. Este fragmento se ofrece como reproducción para el mantenedor: no afirmo haber compilado ni ejecutado el paquete Go en este checkout.
Expected behavior
Si todas las versiones están presentes en ambos lados, el comparador debe devolver cero pendientes y ningún error. Debe seguir rechazando versiones realmente ausentes y migraciones genuinamente fuera de orden; no debería sugerir modificar el historial para compensar una falsa ausencia.
Alcance que necesita decisión del mantenedor
- ¿El paquete Go continúa consumido por Hosted Branching? ¿Qué implementación y versión usa la reconciliación administrada actualmente? Un fix del cliente TypeScript no prueba que haya cambiado ese servicio.
- Si Go sigue soportado, ¿aceptarían portar la corrección de #6038 y sus regresiones? También habría que revisar consumidores que calculen offsets para
--include-all, sin cambiar globalmente el orden usado para hashes o caches. - Para un historial secuencial corto seguido de timestamps, ordenar lexicográficamente por versión elimina la falsa ausencia pero no garantiza el orden de dependencias: con
remote = ["201", "202", "203"], el timestamp cae antes de203y pasa a serErrMissingRemote; desde vacío, quedaría entre202y203. ¿Existe una ruta soportada para esa transición sin renumerar historial ni relajar las comprobaciones? No propongo cambiar silenciosamente la semántica global a orden numérico.
Puedo preparar un parche y regresiones una vez que el alcance esté aceptado y el issue tenga open-for-contribution, conforme a CONTRIBUTING.md. No se ha iniciado un parche ni abierto un PR.
Referencias
- Fix previo TypeScript #6038
- Comparador Go, SHA inspeccionado
- Listado local Go
- Orden del historial remoto
No se adjuntan datos de proyectos, credenciales, logs privados ni SQL de aplicaciones. Todos los nombres y versiones del ejemplo son sintéticos.
- Dominant language
- TypeScript
- Stars
- 2.4k
- Forks
- 523
- Avg merge
- 20h 47m
- Merged PRs (30d)
- 243
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from supabase/cli
-
🐛 Bug supabase/cli
-
🐛 Bug supabase/cli
-
Local Kong keeps idle upstream connections longer than PostgREST, causing sporadic 502 on POST/PATCH Open🐛 Bug supabase/cli
-
✨ Feature supabase/cli
-
🐛 Bug supabase/cli
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
copse-dev/agent-pane#2953 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
Eynzof/Hermes-CN-Desktop#610 ·
-
bug clawsweeper:linked-pr-open clawsweeper:needs-live-repro clawsweeper:no-new-fix-pr impact:message-loss issue-rating: 🐚 platinum hermit P2 regression
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
calcite-components needs triage refactor
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
Esri/calcite-design-system#15203 ·