Post-mortem: undici ore di Seantral sul backend sbagliato

· 4 min · post-mortem, seantral, deploy, supabase

Il 21 settembre 2026 un deploy di ripiego ha costruito il bundle di Seantral senza le variabili del suo backend. Cronologia, causa, diagnosi e la guardia che ora ferma il build.

Cronologia

Il 21 settembre 2026 la CI su GitHub era ferma per un problema di fatturazione dell’account, e il rilascio di Seantral è passato dal deploy di ripiego da terminale, npm run deploy:seantral. Quel build è partito senza le variabili del backend di Seantral nell’ambiente. Per undici ore seantral.com ha mostrato «Restricted access», zero località, nessuna foto, e le statistiche non rispondevano.

Il ripristino è stato un nuovo build con l’ambiente di Seantral caricato, rilasciato dallo stesso canale di ripiego. La guardia che impedisce di ripetere l’errore è entrata nel repo la sera stessa, alle 23:42, con il commit e5640f4.

Causa

Il client legge indirizzo e chiave del backend dalle variabili di build. Se mancano, ripiega sull’indirizzo scritto nel codice, che è quello del backend di RiftSeed. Dal 1 settembre Seantral vive su un backend suo, e sul vecchio le tabelle ws_* non esistono più. La CI conosce le variabili giuste perché stanno nei suoi segreti; il terminale no, e il ripiego del client non diceva niente.

Come è stato visto

Dall’app stessa: il sintomo era a schermo. Le sonde automatiche erano verdi, e avevano ragione a esserlo: la sonda di disponibilità controlla che seantral.com risponda e che la pipeline delle previsioni sia sana sul backend di Seantral, e tutte e due le cose erano vere. Era soltanto il bundle servito a parlare con il backend sbagliato.

La diagnosi è passata da due controlli sul prodotto servito, senza leggere il codice. Il primo: interrogare via REST le tabelle con la chiave pubblica contenuta nel bundle vivo. La risposta era PGRST205, cioè tabella assente dallo schema, che è una cosa diversa da un permesso negato. Il secondo: leggere il riferimento del progetto dentro il JavaScript servito, che era quello di RiftSeed.

Correzione

Un nuovo build con le variabili di Seantral caricate dal file d’ambiente locale, e un nuovo deploy. Nessun dato perso: il backend di Seantral non era mai stato toccato, era solo irraggiungibile dal bundle.

Cricchetto aggiunto

scripts/guardia-backend-seantral.mjs è ora il primo passo di build:seantral. Il build si ferma se l’indirizzo del backend manca, se non è quello di Seantral o se manca la chiave pubblica, e il messaggio dice quale comando lanciare. Quattro test in scripts/guardia-backend-seantral.test.ts tengono ferma la regola. Il ripiego da terminale passa dallo stesso build, quindi dalla stessa guardia: l’errore del 21 settembre oggi fa fallire il build invece di andare online.

Tutti gli articoli · RiftSeed