Только что заметил, что когда были непрочитанные ответы, счетчик непрочитанных ответов в теме с анонсом PostgreSQL 12 показывал 303 (синий круг с цифрой 303). При открытии темы и просмотре последнего ответа счетчик изменился на 1.
Тема настроена на автоматическое удаление ответов старше 5 дней, сейчас в ней всего один ответ.
Похоже, что счетчик ответов в темах с автоматической очисткой, где есть непрочитанные посты, рассчитывается некорректно?
Это произошло на мобильном устройстве, я не подумал проверить версию для настольного компьютера перед открытием темы и отметкой её как прочитанной.
Да, это известная проблема, которая существует в Discourse практически с версии 1. Множество удалений, за которыми следует ответ, всегда приводят к этому рассогласованию до следующего посещения темы. Неважно, автоматические это удаления или ручные.
Чтобы закрыть этот вопрос: исправление здесь будет крайне неприятным и сложным. Бэкенд никогда не подсчитывает точно, сколько у вас непрочитанных постов; он опирается на разницу между highest_post_number и последним post_number, который вы посетили в теме.
Если бы мне пришлось оценить это числом: если бы моей единственной задачей было исправить эту ошибку, это заняло бы у меня несколько месяцев, и мне пришлось бы изобрести собственное хранилище данных, чтобы это заработало. Запуск запроса count(*) для каждой непрочитанной темы совершенно не подходит.