Счетчик непрочитанных показывает «Непрочитанные (14)», но /unread пуст

В этот прекрасный четверг я обращаюсь к вам с интересной загадкой. На моём сайте, похоже, отображается ложный счётчик непрочитанных сообщений.

Что происходит

В верхней навигационной панели отображается Непрочитанные (14). Однако при нажатии на неё и переходе на страницу /unread там нет ни одной непрочитанной темы. На странице сообщается, что непрочитанных сообщений больше нет.

Аналогичную проблему наблюдают и другие пользователи, не являющиеся сотрудниками, хотя у них счётчики непрочитанных сообщений отличаются.

В приложении Discourse для iOS я также вижу счётчик непрочитанных сообщений, когда непрочитанных тем нет; иногда число в нём тоже отличается.

  • Платформа: десктопный веб и приложение Discourse для iOS
  • Затрагивает: несколько пользователей
  • Сайт: eurth.org

Что я проверил

Я протестировал ситуацию в безопасном режиме:

  • https://eurth.org/?safe_mode=no_themes,no_plugins
  • https://eurth.org/unread?safe_mode=no_themes,no_plugins

Проблема сохраняется и там, поэтому, похоже, она не вызвана темами или кастомизациями клиентских плагинов. В любой теме нет «шёпотов», так что, скорее всего, дело не в них.

Также я не могу использовать функцию Отклонить, потому что на странице /unread, когда список непрочитанных пуст, кнопки «Отклонить» нет.

Ожидаемое поведение

Если в навигации указано Непрочитанные (14), на странице /unread должно быть показано 14 непрочитанных тем, или хотя бы какие-то видимые непрочитанные темы.

Фактическое поведение

  • в навигации указано Непрочитанные (14)
  • страница /unread пуста
  • кнопка «Отклонить» отсутствует
  • проблема сохраняется в безопасном режиме

Вопросы

  • Есть ли известный способ восстановить/сбросить состояние непрочитанных сообщений для одного пользователя?
  • Существует ли серверная несогласованность, из-за которой счётчики непрочитанных сообщений могут сохраняться, даже когда страница /unread пуста?

Ранее я обращался к ИИ на ask.discourse.org по этому вопросу, и в итоге он порекомендовал мне опубликовать отчёт об ошибке здесь.

2 лайка

А, «фантомные непрочитанные» снова ударили по вашему сайту!

Вы недавно меняли права доступа к категориям или перемещали какие-то темы в защищённую категорию? Что-то изменило состояние отслеживания.

Раз уж у других та же проблема, разве не нужно сбросить это для всех?

Думаю, это можно исправить для всех через консоль Rails, но это немного непросто: мне нужно сначала разобраться и протестировать решение. Сейчас я с телефона, но постараюсь опубликовать решение через некоторое время, если никто другой не сделает этого раньше.

2 лайка

Здравствуйте,

Мы знаем об этой ошибке и пытаемся её исправить. Нас всех это раздражает :wink:

8 лайков

Да. В частном порядке наш персонал работал над категорией, аналогичной Documentation, которая недавно стала публичной после завершения.

Да, конечно. Моя идея заключалась в том, чтобы сначала протестировать это на себе, а затем исправить для всех. Поскольку это настолько сложный баг для тестирования (по крайней мере, для меня), я не хотел поднимать всем ожидания, пока не будет готово рабочее решение.

Спасибо за уверенность. Сегодня утром я заметил ежемесячный релиз за май 2026 года v2026.05 и подумал, что он может исправить проблему, но она всё ещё сохраняется. Я уверен, что команда работает над этим. Discourse — это здорово.

О, боже. :flushed_face: Честно говоря, я просмотрел все соответствующие отчёты о багах bug. На мгновение я даже подумал просто скрыть вкладку «Непрочитанные» из навигации и просто игнорировать проблему. Но это ничего не решит, верно? Похоже, она даже следует за мной здесь, на Meta.

Screenshot 2026-05-28 at 13.52.18

1 лайк

Хорошо, этот скрипт Rails будет действовать как глобальная функция «Отметить все как прочитанное» и принудительно сбросит счётчик unread до 0 для всех пользователей, поэтому, к сожалению, он очистит любые корректные непрочитанные сообщения, а также любые фиктивные непрочитанные. Мы можем сделать это с помощью SQL-команды в Rails. Но имейте в виду, что это не исправляет корневую ошибку. Также это хорошая идея, если у вас есть свежая резервная копия, но я протестировал это на своём тестовом форуме, и всё сработало.

cd /var/discourse
./launcher enter app
rails c

Вставьте весь следующий блок и нажмите 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) -- Отслеживание, Наблюдение, Наблюдение за первым сообщением
SQL

# выполнить обновление
result = ActiveRecord::Base.connection.execute(sql)
puts "Успешно очищено #{result.cmd_tuples} непрочитанных тем на всём сайте."

# принудительно заставить браузеры клиентов сбросить кэшированное состояние и синхронизироваться с базой данных
MessageBus.publish("/topic-tracking-state", { clear: true })

Пользователям, возможно, придётся выполнить жёсткую перезагрузку, чтобы увидеть очищённое состояние unread.

3 лайка

Выполнить резервное копирование. Скачать резервную копию. Подключиться к серверу по SSH. Запустить скрипт.

South Park: And It's Gone Meme

:white_check_mark: Проблема решена.

Огромное спасибо @Lilly. Я бы отметил это как решение, если бы такая возможность была. Вместо этого придётся ограничиться бустом. :rocket: Хорошего дня!

1 лайк

Обратите внимание: ложные непрочитанные сообщения исчезнут после завершения развёртывания:

Надеемся, это займёт недолго.

6 лайков

Под «призрачными непрочитанными» вы имеете в виду, что на самом деле ничего непрочитанного нет, просто неверный счётчик?
Недавно я наблюдал обратную ситуацию на нескольких экземплярах Discourse: непрочитанные сообщения точно были, счётчик был верным, но страница «Непрочитанные» их просто не показывала.

Похоже, это другая ошибка, чем та, о которой идёт речь здесь, но мой отчёт об ошибке был закрыт как дубликат этого.

Это та же проблема…

Мы скрываем небольшие действия, но наша реализация пока лишь наполовину завершена.

Так что, скорее всего, речь идёт о темах, где в конце находится небольшое действие (например, закрытие и т. п.).

1 лайк

Нет, те отсутствующие темы, о которых я упоминал в своём отчёте об ошибке, действительно содержат новые сообщения. Как я уже писал в отчёте:

«Непрочитанное» помогает мне следить за обсуждениями, поэтому эта ошибка создаёт высокий риск того, что я могу полностью пропустить сообщение, на которое мне следует ответить.

Меня мало волнует пропуск уведомления о «закрытии темы», но эта ошибка рискует привести к тому, что я пропущу реальные сообщения.

Хочу добавить, что я тоже столкнулся с этой проблемой с среды (27 мая) как пользователь на форуме сообщества OpenAI — и на iOS, и на десктопе.

GIF_2852759167

Дополнение: эта видеозапись экрана здесь кажется очень медленной. Извините за это.

3 лайка

Извините за это. @zogstrip работает над исправлением, это не займёт много времени.

@RalfJung, давайте пока воздержимся от действий. Как только мы внедрим исправление, если оно не решит вашу проблему, мы продолжим отладку.

2 лайка

Не волнуйтесь! Я просто хотел привлечь внимание к этой ошибке, так как столкнулся с той же проблемой и на сообществе OpenAI. Рад слышать, что работа над исправлением уже ведётся.

1 лайк

@zogstrip исправил регрессию, которая вызвала эту проблему:

OpenAI только что развёрнут (осталось 2 минуты).

4 лайка

Сегодня утром в моем списке непрочитанных появилось 21 тема, закрытая сотрудниками OpenAI, хотя я уже видел(а) и прочитал(а) их ранее.

3 лайка