Si revisas el tema del plugin Custom Wizard de @angus como usuario anónimo, en la vista de respuestas anidadas: https://meta.discourse.org/n/-/73345.json?page=0&sort=old
/n/-/73345.json?page=0&sort=old devuelve 20 raíces y cada una es un marcador de posición eliminado: cooked vacío, sin autor, total_descendant_count: 0. Así que toda la primera página son filas «eliminadas» en blanco.
La vista plana de las mismas publicaciones no muestra nada en absoluto (la publicación #2 simplemente salta a temas relacionados), por lo que están correctamente ocultas allí. La vista anidada las mantiene y las cuenta para la página, lo cual es la discrepancia.
Parece que el cargador de árbol incorpora publicaciones eliminadas intencionalmente (para mantener visible un padre eliminado cuando aún tiene respuestas activas debajo), pero también está manteniendo publicaciones eliminadas que ya no tienen respuestas visibles. En un tema como este donde las respuestas iniciales fueron todas eliminadas, terminas con una página completa de marcadores de posición vacíos en lugar de contenido real.
La configuración definitivamente está activada: el endpoint devolvió 200 en lugar de 404.
El culpable parece ser apply_visibility en NestedReplies::TreeLoader: scope.unscope(where: :deleted_at) incorpora cada publicación eliminada al árbol. Tiene sentido para un padre eliminado que aún tiene respuestas activas debajo, pero también está manteniendo hojas eliminadas y ramas completamente eliminadas, y esas ocupan espacios en la ventana ROOTS_PER_PAGE (y cuentan para has_more_roots).
Para usuarios no del equipo, creo que quieres descartar una publicación eliminada a menos que tenga al menos un descendiente no eliminado: mantén solo cuando su total_descendant_count visible sea > 0. NestedViewPostStat ya excluye descendientes eliminados/susurrados de ese conteo, así que no se necesita una consulta adicional.
Se necesitaría aplicar en los tres lugares que construyen la página para que no queden páginas cortas: root_posts_scope, batch_preload_tree y la parte de llenado de página / has_more_roots. La ruta del equipo permanece igual para recuperación.

