Ir al contenido

Actualización

Cinco 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.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í.