Uma breve atualização de progresso após analisar o código existente de exclusão permanente:
Descobri que o Discourse já possui o comportamento de exclusão em lote necessário aqui. Quando a primeira publicação é destruída permanentemente, o PostDestroyer já pode destruir recursivamente as demais publicações do tópico. A restrição está principalmente nas verificações de permissão/política, que atualmente exigem que as outras publicações sejam excluídas permanentemente primeiro.
Portanto, abandonei o enum de escopo global que sugeri acima e tenho uma implementação funcional usando um modelo de opt-in mais conservador:
- a configuração existente
can_permanently_deletepermanece como o interruptor principal - há uma porta adicional oculta no nível do operador, desativada por padrão
- quando ambas estiverem habilitadas, cada administrador pode optar individualmente em Preferências → Interface
- um administrador que opta por isso não altera o comportamento para nenhum outro administrador
- desativar a porta oculta restaura imediatamente o comportamento existente globalmente
- a confirmação de exclusão permanente existente e outras salvaguardas permanecem em vigor
A preferência está atualmente rotulada como:
Permitir que a exclusão permanente de um tópico exclua todas as publicações
com a explicação:
Ao excluir permanentemente um tópico, também exclua permanentemente todas as publicações restantes, em vez de exigir que sejam excluídas individualmente.
Adicionei testes de política/segurança no backend, cobertura do controlador confirmando que o tópico e todas as publicações restantes são realmente removidos permanentemente, cobertura do serializador/API e testes de aceitação no frontend para a visibilidade e salvamento da preferência. Esses testes estão passando.
Também estou analisando o registro de alterações neste opt-in por administrador nos Logs de Ações da Equipe, pois habilitar um modo de exclusão mais destrutivo parece valer a pena como um evento de auditoria com carimbo de data e hora.
Publicarei o PR no GitHub assim que terminar isso e a revisão final.