Ir al contenido

Actualización

Diez saltos, de los más recientes a los más antiguos. Empieza en el que esté por encima de tu versión actual y avanza hacia abajo; o, si vienes de la versión 0.12, empieza desde abajo y avanza hacia arriba.

Estás en Leer Qué efectos tiene
0.26 0.26 → 0.27 Una programación cron que restringe ambos campos de día se ejecuta con cualquiera de los dos, así que se ejecuta con más frecuencia, y se rechaza una programación con un número mal formado, así que ese trabajo deja de ejecutarse. Una clave cuya estrategia isId su tipo no puede cumplir detiene el arranque. En Rebase Cloud, un despliegue o una previsualización falla cuando un archivo de función o de cron no se carga.
0.25 0.25 → 0.26 Se rechazan una escritura que nombra una relación via multisalto, un nombre de rol que no es un solo rol, un token de página de almacenamiento local anterior a la actualización y un upstream de funciones que no puede funcionar. El inicio de sesión con OAuth resuelve una cuenta sin verificar en lugar de responder local-account-unverified, el servidor MCP ya no envía REBASE_TOKEN a la app, y los tipos generados omiten la clave de un belongsTo con excludeFromApi. En Rebase Cloud se retiran rebase cloud webhooks y --scale-to-zero true, y puede que haya que crear de nuevo los tokens antiguos.
0.24 0.24 → 0.25 ?count= en un listado REST pasa a ser el interruptor del conteo que hay detrás de meta.total, así que un filtro sobre una columna llamada count va dentro de ?where=; list_collections del MCP remoto envía su listado solo en el bloque de texto, sin structuredContent; y @rebasepro/app deja de exportar la tabla de traducciones al español es. Se rechazan un OPTIONS simple a una ruta sin manejador, los nombres de tabla que colisionan al arrancar, un upsert sobre la colección de usuarios, page junto con offset, una cadena vacía en un campo obligatorio y una contraseña elegida por un administrador que no cumple la política de contraseñas. Las sesiones duran por defecto 30 días de inactividad, client.cron llama a /api/admin/cron, las lecturas sin conexión que no pueden responderse por completo fallan con OFFLINE, y desaparecen algunas exportaciones internas y props sin uso.
0.23 0.23 → 0.24 El SQL que generan db push y db generate sale de drizzle/ y pasa a .rebase/sql/, que no se confirma; la opción --generate de rebase dev desaparece porque dev siempre regenera los tipos del SDK, y una edición de esquema en vivo no confirma SQL. Los permisos pasan a ser alcances: las superficies de administración piden un alcance en lugar del rol de administrador, las claves de API tienen alcances en lugar de una lista de permisos y un indicador admin, y schema-admin deja de ser administrador. Un --collections relativo se lee desde donde se ejecuta el comando, un upsert en una fila de la papelera y una actualización que cambia una clave se rechazan, el endpoint remoto de MCP toma los argumentos del SDK, y los sockets de tiempo real abiertos, los enlaces de verificación de correo electrónico, signUp y los códigos de recuperación de MFA cambian cómo tratan una sesión.
0.21 – 0.22 0.21 → 0.23 Una clave de API en una ruta anidada necesita read sobre sus padres, las variables numéricas y las duraciones de sesión ilegibles impiden el arranque, un repositorio de autenticación propio necesita unlinkUserIdentity, y convertir un invitado en cuenta exige el captcha de register. 0.22 no declara ningún cambio incompatible, así que es un solo salto desde 0.21.
0.18 – 0.20 0.18 → 0.21 context.client.data deja de compilar en un callback de colección —consulta a través de context.data— y selectedEntities da paso a una selección que puede representar filas que nadie ha cargado. 0.19 y 0.20 no declaran cambios incompatibles, por lo que este es un solo salto desde 0.18.
0.17 0.17 → 0.18 Once cambios incompatibles, la mayoría son errores de compilación en lugar de cambios silenciosos de comportamiento. rebase.data desaparece en tiempo de ejecución, los rangos de dependencias peer se restringen a intercalaciones (^), y la versión mínima de Node pasa a 22.22.0.
0.14 – 0.16 0.14 → 0.17 Los paquetes de administración se renombran, los recursos se declaran en lugar de configurarse y un bundle compilado antes no arrancará en un entorno de ejecución actual. 0.15 y 0.16 no rompen nada, por lo que este es un solo salto desde 0.14.
0.13 0.13 → 0.14 Cada clave en tránsito usa camelCase, y el inicio de sesión anónimo pasa a ser opcional (opt-in).
0.12 0.12 → 0.13 El salto más grande, y el único que cambia quién puede leer tus datos. Elimina el esquema auth, renombra paquetes, cambia el significado de id, descarta CJS, migra el panel de administración a react-router 8 y corrige tres formas en las que se podía conceder acceso no solicitado.

Las secciones de cada página están en el orden en que debes aplicarlas, y cada una indica el síntoma que de otro modo intentarías depurar por el extremo equivocado.

Luego, independientemente del salto que hayas dado:

[ ] grep for authenticated() and (auth|rebase).uid() IS NOT NULL in config/collections/
[ ] decide the intent of each rule; rewrite the ones that meant "public"
[ ] replace not(authenticated()) with serverContext()
[ ] if realtime.requireAuth was true with an AuthAdapter, treat the socket as
having been open — verify RLS on every subscribable collection (section 2)
[ ] SELECT ... FROM pg_policies — record the qual of every policy BEFORE
[ ] update package names and imports
[ ] grep for rebase.data — it is now rebase.dataAsAdmin (section 8)
[ ] grep for the other ten removed deprecated exports (section 8)
[ ] drop react-router-dom; import RouterProvider from "react-router/dom"
[ ] check node >= 22.22.0 and react >= 19.2.7 (react-router 8 requires both)
[ ] move defaultSecurityRules into config/collections/index.ts
[ ] grep for .userId
[ ] grep for row.id on tables not keyed on id
[ ] run db push
[ ] run rebase doctor --policies — expect no Insecure or Orphaned entries
[ ] SELECT ... FROM pg_policies again — confirm every intended change landed
[ ] exercise the app signed OUT, in a private window — watch the websocket too
--- 0.13 → 0.14 (part 2) ---
[ ] re-run rebase generate-sdk, then build — the compiler finds row.author_id
[ ] grep for snake_case where/orderBy keys; a stale one is a 400, not a warning
[ ] grep for raw fetch consumers reading row.<something>_id — these read
undefined and raise nothing
[ ] if the project was introspected, re-run rebase schema introspect
[ ] decide anonymous sign-in: set auth.allowAnonymous: true, or confirm you
never used it (grep for signInAnonymously)
[ ] drop @rebasepro/client-postgres from package.json
--- 0.14 → 0.17 (part 3) ---
[ ] rename @rebasepro/admin → @rebasepro/cms and admin-types → cms-types,
and RebaseAdmin → RebaseCMS
[ ] move dataSources / storageSources out of the backend config into
rebase.json and config/, then `rebase build` — an old bundle will not boot
[ ] grep collections for admin.titleProperty; it is refused at boot now
[ ] grep crons for ctx.client and for `userId` as an identity key
[ ] rename --legacy to --workspace wherever build/start is scripted
[ ] if you implement EmailService yourself, `send` must return a result

rebase doctor --policies es el que debes conectar a CI: finaliza con código distinto de cero si una política aún contiene la tautología permisiva o si una política anterior fue reemplazada por un push previo. Las lecturas de pg_policies antes y después siguen valiendo la pena el minuto invertido: te muestran las expresiones en sí mismas, que es la única forma de detectar una política que falla en modo abierto (fail-open) escrita con una sintaxis que el detector no reconoce. Ni los paquetes ni el sistema de tipos te lo advertirán: el cambio reside en la base de datos, y db push es lo único que lo aplica allí.