Salta ai contenuti

Aggiornamento

Otto passaggi, a partire dal più recente. Inizia da quello immediatamente superiore alla versione che stai utilizzando e procedi verso il basso — oppure, se provieni dalla versione 0.12, inizia dal fondo e procedi verso l’alto.

Sei sulla Leggi Cosa comporta per te
0.24 0.24 → 0.25 ?count= su un elenco REST diventa l’interruttore del conteggio dietro meta.total, quindi un filtro su una colonna chiamata count va dentro ?where=; list_collections del MCP remoto invia l’elenco solo nel blocco di testo, senza structuredContent; e @rebasepro/app non esporta più la tabella di traduzione spagnola es. Vengono rifiutati un OPTIONS semplice verso una rotta senza handler, nomi di tabella che collidono all’avvio, un upsert sulla collection degli utenti, page insieme a offset, una stringa vuota in un campo obbligatorio e una password scelta da un amministratore che non rispetta la policy delle password. Le sessioni durano per impostazione predefinita 30 giorni di inattività, client.cron chiama /api/admin/cron, le letture offline a cui non si può rispondere per intero falliscono con OFFLINE, e spariscono alcuni export interni e prop inutilizzate.
0.23 0.23 → 0.24 L’SQL prodotto da db push e db generate si sposta da drizzle/ alla directory non committata .rebase/sql/, l’opzione --generate di rebase dev scompare perché dev rigenera sempre i tipi dell’SDK, e una modifica live dello schema non committa alcun SQL. I permessi diventano scope: le superfici di amministrazione chiedono uno scope invece del ruolo admin, le chiavi API hanno scope al posto di un elenco di permessi e di un flag admin, e schema-admin non è più un amministratore. Un --collections relativo viene letto a partire da dove viene eseguito il comando, un upsert su una riga nel cestino e un update che modifica una chiave vengono rifiutati, l’endpoint MCP remoto accetta gli argomenti dell’SDK, e i socket realtime aperti, i link di verifica email, signUp e i codici di recupero MFA cambiano il modo in cui trattano una sessione.
0.21 – 0.22 0.21 → 0.23 Una chiave API su un percorso annidato richiede read sui parent, variabili numeriche e durate di sessione illeggibili impediscono l’avvio, un repository di autenticazione personalizzato richiede unlinkUserIdentity, e trasformare un ospite in account richiede il captcha register. 0.22 non dichiara modifiche incompatibili, quindi è un solo passaggio da 0.21.
0.18 – 0.20 0.18 → 0.21 context.client.data non compila più all’interno di una callback di collection — esegui le query tramite context.data — e selectedEntities lascia il posto a una selezione che può rappresentare righe che nessuno ha caricato. Le versioni 0.19 e 0.20 non dichiarano breaking change, quindi questo è un singolo passaggio a partire da 0.18.
0.17 0.17 → 0.18 Undici breaking change, per la maggior parte errori di compilazione anziché modifiche silenziose del comportamento. rebase.data scompare a runtime, i range dei peer si restringono ai caret, e il requisito minimo di Node sale a 22.22.0.
0.14 – 0.16 0.14 → 0.17 I pacchetti admin vengono rinominati, le risorse sono dichiarate anziché configurate, e un bundle compilato in precedenza non si avvierà su un runtime attuale. La 0.15 e la 0.16 non interrompono nulla, quindi questo è un singolo passaggio a partire da 0.14.
0.13 0.13 → 0.14 Tutte le chiavi di rete sono in camelCase, e l’accesso anonimo è opt-in.
0.12 0.12 → 0.13 Il passaggio più ampio, e l’unico che modifica chi può leggere i tuoi dati. Rimuove lo schema auth, rinomina i pacchetti, cambia il significato di id, abbandona CJS, migra il pannello admin a react-router 8 e corregge tre modalità in cui poteva essere concesso l’accesso senza che fosse richiesto.

Le sezioni di ogni pagina sono ordinate secondo la sequenza in cui devi applicarle, e ciascuna indica il sintomo che altrimenti ti ritroveresti a dover diagnosticare partendo dal presupposto sbagliato.

Quindi, a prescindere dal passaggio effettuato:

[ ] 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 è quello da integrare nella CI: restituisce un exit code diverso da zero in presenza di una policy che include ancora la tautologia permissiva, o di una sostituita da un push precedente. Le letture di pg_policies prima e dopo meritano comunque quel minuto di attenzione — mostrano le espressioni stesse, l’unico modo per individuare una policy fail-open scritta con una sintassi non riconosciuta dal detector. Né i pacchetti né il sistema di tipi te lo segnaleranno: la modifica risiede nel database, e db push è l’unica operazione che la applica.

  • Changelog — le note di rilascio riassunte da ciascuna di queste sezioni
  • Compatibilità — i sei contratti, e quali possono essere interrotti da una versione
  • Comandi CLI — rebase doctor e i comandi eseguiti dalle checklist