Notei isso no menu de ações em massa (visível na página de busca, ao usar a seleção em massa para 1 ou mais publicações).
Há duas opções de exclusão:
Excluir tópico(s)
Excluir publicação(ões)
A confirmação para Excluir Publicações parece clara, mas a confirmação para Excluir Tópicos é confusa, na minha opinião.
Excluir permanentemente os tópicos selecionados. Esta ação não pode ser desfeita.
de: js.topic_bulk_actions.delete_topics.description
Se eu confirmar a exclusão do(s) tópico(s) selecionado(s), eles são excluídos normalmente (exclusão suave) e podem ser restaurados.
Isso ocorre com a configuração do site can_permanently_delete definida como falsa (padrão).
Além disso, não parece haver uma distinção visual entre resultados de busca que são tópicos ou publicações/respostas, além de passar o mouse sobre eles e olhar o final da URL. Isso torna o uso dessas duas opções de exclusão em massa um pouco não intuitivo para moderadores, na minha opinião.
3 curtidas
estamos no processo de melhorar as “ações” oferecidas no modo em lote, mas esta passou despercebida, pois ainda não está disponível.
main ← fix-bulk-delete-topics-copy
merged 07:46AM - 25 Aug 26 UTC
Reported in [Bulk actions confusion - Delete Topics](https://meta.discourse.org/… t/410444).
Selecting topics and choosing **Delete** asks you to confirm:
> Permanently delete the selected topics. This action cannot be undone.
…and then soft deletes them, so they can be recovered. Not search-specific — the same modal is used by every topic list.
There is no configuration where the copy is true. `TopicsBulkAction#delete` builds `PostDestroyer` with an empty options hash, so `permanent?` is never satisfied, and `PUT /topics/bulk` doesn't permit `force_destroy` in the first place. `can_permanently_delete` has no bearing on this path. The description was added with the copy pass in 4b6169028f and never matched the behaviour.
### Also fixed
Two long-standing bugs in the same six lines:
- `delete` was the only operation in `TopicsBulkAction` that never appended to `@changed_ids`, so the endpoint always answered `{"topic_ids":[]}`. A bulk delete where the guardian skipped every topic looked exactly like a successful one, toast included.
- `ordered_posts` is scoped by `Trashable`, so for a topic whose first post was already deleted it returned post 2. `is_first_post?` was then false, `@topic.trash!` never ran, and an unrelated reply was deleted while the topic stayed alive — reported as a success. `TopicsController#destroy` already gets this right with `ordered_posts.with_deleted.first`.
### Follow-ups, not in this PR
- `ordered_posts.first` feeding `PostDestroyer` carries the same latent bug at five other call sites: `Jobs::DeleteTopic`, three in `DestroyTask`, and `TopicGuardian#can_recover_topic?`. Worth a `Topic` accessor rather than a sixth hand-rolled copy.
- Search results give no hint whether a hit is a topic or a reply, which is the other half of the report. `post_number` is already serialized and `search.post_format` already exists, but is gated to the in-topic dropdown.
- Translations of this key still assert permanence until the pipeline catches up.
3 curtidas