Regressione che causa notifiche email errate e non corrette inviate a tutti gli utenti nella coda di approvazione per oltre 60 giorni

In Discourse, è possibile specificare una modalità in cui gli account utente vengono creati al momento della registrazione, ma devono essere approvati da un membro dello staff prima che l’account venga attivato. Questo è comune, ad esempio, nei siti basati su abbonamento.

Ci sono stati due aspetti importanti del funzionamento di questo sistema:

  1. Non sono mai state inviate notifiche negative quando lo staff rifiutava gli account; veniva inviata una sola notifica positiva quando lo staff approvava gli account.

  2. Qualsiasi elemento nella coda di revisione, sia che si tratti di un post o di un account, viene automaticamente rifiutato dopo 60 giorni se un moderatore non interviene su quell’elemento entro tale periodo. Questa funzionalità è presente in molte versioni precedenti di Discourse, poiché è stata scelta per essere “sicura di default”.

Sfortunatamente, quando abbiamo aggiunto una nuova funzionalità richiesta per informare gli utenti sul motivo del rifiuto, non ci siamo resi conto che la combinazione dei punti #1 e #2 sopra citati avrebbe causato l’invio di singole notifiche negative a tutti gli utenti presenti nella coda di approvazione da più di 60 giorni!

Quelle notifiche email apparivano così:

e recitavano, sotto il marchio del cliente:

Un membro dello staff ha rifiutato il tuo account su {brand}.

L’invio di questo messaggio a così tanti account “rifiutati” ha creato problemi per i nostri clienti ospitati. Ci scusiamo profondamente per questo errore: è interamente colpa nostra presso Discourse, e tutta la responsabilità deve ricadere su di noi.

Stiamo attualmente lavorando con i nostri clienti per fare tutto il possibile per rimediare.

Vogliamo essere assolutamente chiari: questo è il nostro bug e abbiamo inviato un’email molto confusa e mal formulata a molti dei loro clienti, causando notevoli disagi e persino una possibile perdita di entrate a causa della cancellazione degli abbonamenti da parte dei clienti. Ci scusiamo molto per questo, e il minimo che possiamo fare è informare tutti che è un problema di Discourse, e che noi di Discourse abbiamo inviato erroneamente quell’email negativa. Siamo pienamente responsabili di questo bug e delle sue conseguenze. Se avete ricevuto quell’email, non è colpa di nessuno tranne che di noi — di Discourse.

Comprendiamo quanto sia grave la situazione. Continuiamo a lavorare a stretto contatto con il fornitore del servizio di gestione degli abbonamenti e con i nostri clienti interessati per assumerci la responsabilità delle nostre azioni e migliorare le cose affinché ciò non possa più accadere.

Stiamo inoltre offrendo il mese successivo dell’hosting di questo cliente gratuitamente, come compenso per i problemi causati. Ci scusiamo sinceramente per l’errore e per il modo in cui ha interessato i nostri clienti. Rivedremo assolutamente i nostri processi per garantire che questo tipo di problema si verifichi con meno probabilità in futuro.

Jeff Atwood
CEO, Discourse

28 Mi Piace

Ecco cosa abbiamo fatto per risolvere il problema ed evitare che si ripresenti:

Questo commit risolve tre problemi contemporaneamente, che hanno causato questo bug e ci hanno impedito di individuare rapidamente la causa principale.

  1. Abbiamo garantito che i “log delle email” non vengano cancellati quando un account utente viene eliminato. Se avessimo avuto i log delle email degli utenti cancellati, avremmo potuto vedere immediatamente tutte le email di rifiuto inviate.

  2. Abbiamo assicurato che in ogni punto del codice in cui un utente viene eliminato, venga impostato correttamente il “contesto”, in modo da poter individuare chiaramente dove e perché un utente è stato cancellato. C’erano diversi punti nel codice in cui il contesto non era impostato, quindi non sapevamo perché quegli utenti fossero stati eliminati e abbiamo dovuto esaminare il codice per scoprirlo.

  3. Abbiamo corretto il bug effettivo e non invieremo più email di rifiuto agli utenti di revisione eliminati automaticamente.

Tutte queste modifiche sono state accompagnate da test, in modo da essere sicuri di non introdurre regressioni.

18 Mi Piace