En esta agradable mañana de jueves, les presento un interesante dilema. Estoy viendo lo que parece ser un contador de no leídos con un falso positivo en mi sitio.
Qué sucede
La barra de navegación superior muestra No leídos (14). Pero cuando hago clic en ella y voy a /unread, no se listan ningún tema no leído. La página indica que no hay nada más sin leer.
Otros usuarios que no son personal también están experimentando el mismo problema, aunque con diferentes conteos de no leídos.
En la aplicación de Discourse para iOS, también veo un contador de no leídos cuando no hay temas sin leer, a veces con un número diferente.
Plataforma: web de escritorio y aplicación de Discourse en iOS
El problema persiste allí, por lo que parece no ser causado por temas o personalizaciones de plugins del lado del cliente. No hay susurros en ningún tema, así que probablemente tampoco sea eso.
Tampoco puedo usar Descartar, porque no hay ningún botón de Descartar en /unread cuando la lista de no leídos está vacía.
Comportamiento esperado
Si la barra de navegación dice No leídos (14), debería ver 14 temas no leídos en /unread, o al menos algunos temas no leídos visibles.
Comportamiento real
la barra de navegación dice No leídos (14)
/unread está vacío
no hay botón de Descartar disponible
el problema persiste en Modo Seguro
Preguntas
¿Existe alguna forma conocida de reconstruir/restablecer el estado de no leídos para un usuario?
¿Existe alguna inconsistencia del lado del servidor que pueda hacer que los conteos de no leídos persistan incluso cuando /unread está vacío?
Anteriormente, pregunté a la IA en ask.discourse.org sobre este problema, y al final me aconsejó que publicara un informe de error aquí.
¿Has cambiado recientemente permisos de categorías o movido algunos temas a una categoría segura? Algo ha alterado el estado de seguimiento.
¿No querrías restablecerlo para todos los usuarios si otros están teniendo el mismo problema?
Creo que esto se puede solucionar para todos mediante la consola de Rails, pero es un poco complicado y primero tengo que averiguarlo y probarlo. Estoy en un dispositivo móvil en este momento, pero intentaré publicar una solución en un momento si nadie más lo hace.
Sí. En privado, nuestro equipo trabajó en una categoría similar a #documentación, la cual se hizo pública recientemente una vez que estuvo terminada.
Sí, efectivamente. Mi idea era probarlo primero en mí mismo y luego solucionarlo para todos. Dado que es un error tan complicado de probar (al menos para mí), no quería levantar falsas esperanzas en todos hasta tener una solución funcional.
Gracias por la confianza. Esta mañana noté la versión mensual de mayo de 2026v2026.05 y pensé que podría solucionar el problema, pero aún persiste. Estoy seguro de que el equipo está trabajando en ello. Discourse es increíble.
¡Oh, cielos! Reconozco que he revisado todos los informes de errores relacionados. Por un momento, incluso consideré simplemente ocultar la pestaña «No leídos» de la navegación e ignorarla. Pero eso no va a solucionar nada, ¿verdad? Parece que incluso me está siguiendo por aquí en Meta.
ok, este script de Rails actuará como un “marcar todo como leído” global y forzará el recuento de no_leídos de nuevo a 0 para todos los usuarios, por lo que, lamentablemente, borrará cualquier recuento legítimo de no leídos además de los no leídos fantasma. Podemos hacer esto con un comando SQL en Rails. Pero ten en cuenta que no soluciona el error raíz. Además, es buena idea si tienes una copia de seguridad reciente a mano, pero lo probé en mi foro de desarrollo y funcionó.
cd /var/discourse ./launcher enter app rails c
pega el siguiente bloque completo y presiona 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) -- Seguimiento, Observando, Observando primer mensaje
SQL
# ejecutar la actualización
result = ActiveRecord::Base.connection.execute(sql)
puts "Se limpiaron correctamente #{result.cmd_tuples} temas no leídos en todo el sitio."
# forzar a los navegadores cliente a descartar su estado en caché y sincronizarse con la base de datos
MessageBus.publish("/topic-tracking-state", { clear: true })
los usuarios pueden tener que hacer una recarga forzada para ver el estado de no_leídos eliminado.