Nesta bela manhã de quinta-feira, trago a vocês um interessante dilema. Estou vendo o que parece ser um contador de não lidos falso positivo no meu site.
O que acontece
A barra de navegação superior mostra Não lidos (14). Mas, ao clicar nela e ir para /unread, não há nenhum tópico não lido listado. A página diz que não há mais nada não lido.
Outros usuários que não são da equipe também estão vendo o mesmo problema, embora com contagens de não lidos diferentes.
No aplicativo Discourse no iOS, também vejo uma contagem de não lidos quando não há tópicos não lidos, novamente às vezes com um número diferente.
Plataforma: web para desktop e aplicativo Discourse no iOS
O problema ainda ocorre lá, então não parece ser causado por temas ou personalizações de plugins no lado do cliente. Não há sussurros em nenhum tópico, então provavelmente não é isso também.
Também não consigo usar Ignorar, porque não há nenhum botão Ignorar em /unread quando a lista de não lidos está vazia.
Comportamento esperado
Se a barra de navegação diz Não lidos (14), eu deveria ver 14 tópicos não lidos em /unread, ou pelo menos alguns tópicos não lidos visíveis.
Comportamento real
a barra de navegação diz Não lidos (14)
/unread está vazio
nenhum botão Ignorar está disponível
o problema persiste no Modo Seguro
Perguntas
Existe alguma maneira conhecida de reconstruir/reativar o estado de não lidos para um único usuário?
Existe alguma inconsistência no lado do servidor que possa fazer com que as contagens de não lidos persistam mesmo quando /unread está vazio?
Anteriormente, perguntei à IA em ask.discourse.org sobre o problema e, no final, ela aconselhou que eu publicasse um relatório de bug aqui.
Ah, o fantasma das mensagens não lidas atacou seu site!
Você mudou alguma permissão de categoria recentemente ou moveu alguns tópicos para uma categoria segura? Algo alterou o estado de acompanhamento.
Você não gostaria de redefinir isso para todos os usuários, já que outros estão enfrentando o mesmo problema?
Acho que isso pode ser corrigido para todos via console do Rails, mas é um pouco complicado e preciso investigar e testar primeiro. Estou no celular no momento, mas tentarei postar uma solução daqui a pouco, caso ninguém mais o faça.
Sim. Em particular, nossa equipe trabalhou em uma categoria semelhante à #documentação, que foi recentemente tornada pública assim que foi concluída.
Sim, com certeza. Minha ideia foi testar primeiro em mim mesmo e depois corrigir para todos. Como é um bug tão complicado de testar (pelo menos para mim), não quis levantar as esperanças de todos até haver uma solução funcional.
Obrigado pela confiança. Esta manhã, notei o lançamento mensal de maio de 2026v2026.05 e pensei que poderia resolver o problema, mas ele ainda persiste. Tenho certeza de que a equipe está trabalhando nisso. O Discourse é incrível.
Oh, caramba. Admito que revisei todos os relatórios de bugs relacionados. Por um momento, cheguei a considerar apenas ocultar a aba “Não lidas” da navegação e simplesmente ignorá-la. Mas isso não vai resolver nada, certo? Parece que ela até me segue aqui no Meta.
ok, este script do Rails funcionará como um “marcar tudo como lido” global e forçará a contagem de não lidos de volta para 0 para todos os usuários, então, infelizmente, isso apagará qualquer contagem legítima de não lidos, além de quaisquer não lidos fantasma. Podemos fazer isso com um comando SQL no Rails. Mas note que isso não corrige o bug raiz. Além disso, boa ideia se você tiver um backup recente à mão, mas eu testei isso no meu fórum de desenvolvimento e funcionou.
cd /var/discourse ./launcher enter app rails c
cole todo o bloco a seguir e pressione Enter
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) -- Acompanhando, Assistindo, Assistindo Primeira Postagem
SQL
# executar a atualização
result = ActiveRecord::Base.connection.execute(sql)
puts "Limpeza bem-sucedida de #{result.cmd_tuples} tópicos não lidos em todo o site."
# forçar os navegadores do cliente a descartar seu estado em cache e sincronizar com o banco de dados
MessageBus.publish("/topic-tracking-state", { clear: true })
os usuários podem precisar atualizar forçadamente para ver o estado não lido limpo.