Se você verificar o tópico do plugin Custom Wizard do @angus, como usuário anônimo, na visualização de respostas aninhadas: https://meta.discourse.org/n/-/73345.json?page=0&sort=old
/n/-/73345.json?page=0&sort=old retorna 20 raízes e cada uma delas é um espaço reservado excluído — cooked vazio, sem autor, total_descendant_count: 0. Então, a primeira página inteira fica com linhas vazias “removidas”.
A visualização plana das mesmas mensagens não mostra nada (a mensagem nº 2 simplesmente pula para tópicos relacionados), então elas estão corretamente ocultas lá. A visualização aninhada as mantém e as conta para a página, o que é a inconsistência.
Parece que o carregador de árvores (tree loader) busca mensagens excluídas propositalmente (para manter uma mensagem pai excluída visível quando ainda possui respostas ativas sob ela), mas também está mantendo mensagens excluídas que não possuem respostas visíveis restantes. Em um tópico como este, onde as respostas iniciais foram todas excluídas, você acaba com uma página cheia de espaços reservados vazios em vez de conteúdo real.
A configuração está definitivamente ativada — o endpoint retornou 200 em vez de 404.
O culpado parece ser apply_visibility em NestedReplies::TreeLoader — o scope.unscope(where: :deleted_at) traz todas as mensagens excluídas para a árvore. Faz sentido para uma mensagem pai excluída que ainda possui respostas ativas sob ela, mas também está mantendo folhas excluídas e ramos totalmente excluídos, e esses ocupam vagas na janela ROOTS_PER_PAGE (e contam para has_more_roots).
Para não membros da equipe, acho que você quer descartar uma mensagem excluída a menos que ela tenha pelo menos um descendente não excluído — mantenha-a apenas quando seu total_descendant_count visível for > 0. NestedViewPostStat já exclui descendentes excluídos/sussurrados dessa contagem, então não é necessária consulta adicional.
Seria necessário aplicar isso nos três pontos que constroem a página para não obter páginas curtas: root_posts_scope, batch_preload_tree e a parte de preenchimento de página / has_more_roots. O caminho para membros da equipe permanece como está para recuperação.

