In questa bella mattina di giovedì, vi presento un interessante dilemma. Sto notando quello che sembra essere un contatore di non letti con un falso positivo sul mio sito.
Cosa succede
La barra di navigazione superiore mostra Non letti (14). Ma quando ci clicco e vado su /unread, non ci sono argomenti non letti elencati. La pagina dice che non ci sono più elementi non letti.
Anche altri utenti non appartenenti allo staff riscontrano lo stesso problema, sebbene con conteggi di non letti diversi.
Nell’app Discourse su iOS, vedo anch’io un conteggio di non letti quando non ci sono argomenti non letti, a volte con un numero diverso.
Il problema si verifica anche lì, quindi non sembra essere causato da temi o personalizzazioni dei plugin lato client. Non ci sono sussurri in nessun argomento, quindi probabilmente non è nemmeno quello.
Inoltre, non posso usare Ignora, perché non c’è nessun pulsante Ignora su /unread quando l’elenco dei non letti è vuoto.
Comportamento atteso
Se la barra di navigazione indica Non letti (14), dovrei vedere 14 argomenti non letti su /unread, o almeno alcuni argomenti non letti visibili.
Comportamento effettivo
la barra di navigazione indica Non letti (14)
/unread è vuoto
non è disponibile alcun pulsante Ignora
il problema persiste in Modalità Sicura
Domande
Esiste un modo noto per ricostruire/reimpostare lo stato dei non letti per un singolo utente?
Esiste un’incongruenza lato server che può causare la persistenza dei conteggi dei non letti anche quando /unread è vuoto?
In precedenza, ho chiesto all’AI su ask.discourse.org riguardo a questo problema, e alla fine mi ha consigliato di pubblicare un rapporto di bug qui.
Ah, i fantasma dei messaggi non letti hanno colpito il tuo sito!
Hai modificato recentemente le autorizzazioni di qualche categoria o spostato alcuni argomenti in una categoria sicura? Qualcosa ha modificato lo stato di tracciamento.
Non vorresti reimpostarlo per tutti gli utenti se anche altri stanno riscontrando lo stesso problema?
Penso che si possa risolvere per tutti tramite la console di Rails, ma è un po’ complicato e devo prima capire come fare e testarlo. Al momento sono da mobile, ma proverò a pubblicare una soluzione tra un attimo se nessuno altro lo fa prima di me.
Sì. In privato il nostro staff ha lavorato su una categoria simile a Documentation, che è stata resa pubblica di recente una volta completata.
Sì, assolutamente. La mia idea era di testarlo prima su me stesso e poi risolvere il problema per tutti. Dato che si tratta di un bug molto complesso da testare (almeno per me), non volevo creare false aspettative a tutti prima di avere una soluzione funzionante.
Grazie per la fiducia. Questa mattina ho notato il rilascio mensile di maggio 2026v2026.05 e ho pensato che potesse risolvere il problema, ma persiste ancora. Sono certo che il Team ci stia lavorando. Discourse è fantastico.
Oh, cielo. Ammetto di aver letto tutti i report relativi a bug. Per un attimo ho persino pensato di nascondere semplicemente la scheda «Non letti» dalla navigazione e ignorarla. Ma questo non risolverebbe nulla, vero? Sembra che mi stia seguendo persino qui su Meta.
ok, questo script di Rails agirà come un “segna tutto come letto” globale e forzerà il conteggio dei non letti a 0 per tutti gli utenti, quindi purtroppo cancellerà qualsiasi conteggio legittimo di non letti oltre a eventuali non letti fantasma. Possiamo farlo con un comando SQL in Rails. Ma nota che non risolve il bug alla radice. Inoltre, è una buona idea se hai un backup recente a portata di mano, ma l’ho testato sul mio forum di sviluppo e ha funzionato.
cd /var/discourse ./launcher enter app rails c
incolla l’intero blocco seguente e premi invio
sql = <<~SQL
UPDATE topic_users
SET last_read_post_number = topics.highest_post_number
FROM topics
WHERE topics.id = topic_users.topic_id
AND COALESCE(topic_users.last_read_post_number, 0) < topics.highest_post_number
AND topic_users.notification_level IN (2, 3, 4) -- Tracking, Watching, Watching First Post
SQL
# esegui l'aggiornamento
result = ActiveRecord::Base.connection.execute(sql)
puts "Puliti con successo #{result.cmd_tuples} argomenti non letti a livello di sito."
# forza i browser client a eliminare il loro stato memorizzato nella cache e sincronizzarsi con il database
MessageBus.publish("/topic-tracking-state", { clear: true })
Gli utenti potrebbero dover eseguire un aggiornamento forzato per vedere lo stato dei «non letti» cancellato.