@angus の「Custom Wizard Plugin」トピックを匿名ユーザーとして、ネストされた返信ビューで確認すると:https://meta.discourse.org/n/-/73345.json?page=0&sort=old
/n/-/73345.json?page=0&sort=old は 20 件のルート投稿を返しますが、すべてが削除プレースホルダーです——cooked(レンダリング済みコンテンツ)が空で、著者情報もなし、total_descendant_count: 0。つまり、最初のページ全体が空の「削除済み」行で埋め尽くされています。
同じ投稿のフラットビューでは何も表示されません(投稿 #2 は関連トピックにスキップします)。つまり、ここでは正しく非表示になっています。一方、ネストされたビューではそれらが保持され、ページ数にカウントされるため、この不一致が生じています。
ツリーローダーは意図的に削除された投稿を読み込んでいるようです(削除された親投稿の下にまだ有効な返信がある場合、親投稿を表示し続けるため)。しかし、表示される返信が残っていない削除済み投稿も保持しています。このように初期の返信がすべて削除されたトピックでは、実際のコンテンツの代わりに空のプレースホルダーでページが埋め尽くされてしまいます。
設定は確かに有効です——エンドポイントは 404 ではなく 200 を返しました。
原因は NestedReplies::TreeLoader の apply_visibility のように見えます。scope.unscope(where: :deleted_at) はすべての削除済み投稿をツリーに取り込みます。削除された親投稿の下にまだ有効な返信がある場合は理にかなっていますが、削除された葉ノードや完全に削除されたブランチも保持してしまい、それらが ROOTS_PER_PAGE ウィンドウの枠を占め(has_more_roots のカウントにも加算され)、問題を引き起こしています。
スタッフ以外の場合、少なくとも 1 つの削除されていない後続投稿がない限り、削除済み投稿を除外すべきです——つまり、表示される total_descendant_count > 0 の場合のみ保持します。NestedViewPostStat はすでに削除済み/whisper(ささやき)の後続投稿をそのカウントから除外しているため、追加のクエリは必要ありません。
ページが短くならないようにするため、ページを構築する 3 つの箇所——root_posts_scope、batch_preload_tree、およびページ埋め込み / has_more_roots の部分——に適用する必要があります。スタッフ用のパスは復旧のため現状のままにします。

