إذا قمت بالتحقق من موضوع @angus Custom Wizard Plugin كمستخدم مجهول، في عرض الردود المتداخلة: https://meta.discourse.org/n/-/73345.json?page=0&sort=old
/n/-/73345.json?page=0&sort=old يعيد 20 منشوراً جذرياً، وكل واحد منها هو عنصر نائب محذوف — محتوى مطبوخ فارغ، بدون مؤلف، وtotal_descendant_count: 0. لذلك فإن الصفحة الأولى بأكملها تتكون من صفوف «مزالة» فارغة.
لا يظهر العرض المسطح لنفس المنشورات أي شيء على الإطلاق (ينقل المنشور رقم 2 مباشرة إلى المواضيع ذات الصلة)، لذا فإن إخفائها هناك صحيح. يحافظ العرض المتداخل عليها ويحسبها ضمن الصفحة، وهو ما يشكل التباين.
يبدو أن محمل الشجرة يجلب المنشورات المحذوفة عمداً (لإبقاء الوالد المحذوف مرئياً عندما لا يزال لديه ردود نشطة تحته)، لكنه أيضاً يحافظ على المنشورات المحذوفة التي لا توجد لها ردود مرئية متبقية. في موضوع من هذا النوع حيث تم حذف الردود المبكرة جميعها، ينتهي بك الأمر بصفحة كاملة من العناصر النائبة الفارغة بدلاً من المحتوى الفعلي.
الإعداد مفعل بالتأكيد — أعاد نقطة النهاية رمز 200 بدلاً من 404.
يبدو أن السبب هو apply_visibility في NestedReplies::TreeLoader — حيث يقوم scope.unscope(where: :deleted_at) بجلب كل منشور محذوف إلى الشجرة. هذا منطقي لوالد محذوف لا يزال لديه ردود نشطة تحته، لكنه أيضاً يحافظ على الأوراق المحذوفة والفروع المحذوفة بالكامل، وتستهلك هذه الأماكن في نافذة ROOTS_PER_PAGE (وتحسب ضمن has_more_roots).
بالنسبة للمستخدمين غير المسؤولين، أعتقد أنك تريد إزالة المنشور المحذوف ما لم يكن لديه نسل غير محذوف واحد على الأقل — احتفظ به فقط عندما يكون total_descendant_count المرئي > 0. يستبعد NestedViewPostStat بالفعل النسل المحذوف/المهموس من هذا العدد، لذا فلا حاجة إلى استعلام إضافي.
سيكون من الضروري تطبيق ذلك في الأماكن الثلاثة التي تبني الصفحة حتى لا تحصل على صفحات قصيرة: root_posts_scope، وbatch_preload_tree، وجزء ملء الصفحة / has_more_roots. يبقى مسار المسؤولين كما هو لأغراض الاسترداد.

