El contador de no leídos muestra No leídos (14) pero /unread está vacío

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
  • Afecta a: múltiples usuarios
  • Sitio: eurth.org

Qué he probado

Probé en el Modo Seguro:

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

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í.

1 me gusta

¡Ah, las no leídas fantasma han mordido tu sitio!

¿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.

2 Me gusta

Hola,

Somos conscientes de este error y estamos intentando resolverlo. A todos nos molesta :wink:

3 Me gusta

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 2026 v2026.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! :flushed_face: 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.

Captura de pantalla 2026-05-28 a las 13.52.18

1 me gusta

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.