A verificação de “revisão de mídia” (configuração do site skip_review_media_groups) é aplicada apenas no momento da criação da postagem, no NewPostManager. As edições passam pelo PostRevisor, que nunca executa a verificação de mídia. Portanto, um usuário pode primeiro publicar apenas texto (passando pela revisão) e, em seguida, adicionar imagens por meio de uma edição — e a postagem nunca entra na fila de revisão.
Pior ainda, se a edição ocorrer dentro do editing_grace_period (padrão: 5 minutos) e a diferença for menor que editing_grace_period_max_diff (padrão: 100 caracteres — uma única linha de markdown de imagem carregada tem cerca de 40–60 caracteres), a edição não cria nenhuma revisão nem ícone de lápis, tornando a contorno completamente invisível na interface.
Passos para reproduzir
Configure skip_review_media_groups de modo que usuários comuns (por exemplo, TL0/TL1) não estejam isentos — postagens com mídia devem exigir aprovação.
Como usuário comum, crie uma postagem contendo apenas texto. Ela é aprovada/publicada normalmente (sem mídia → sem revisão).
Dentro do período de graça, edite a postagem e insira uma imagem carregada.
Esperado
A postagem (agora contendo mídia) deve ser enviada para a fila de revisão, ou pelo menos a edição deve estar sujeita à mesma verificação de mídia que a criação da postagem.
Real
n
A postagem é publicada com a imagem e nunca entra na fila de revisão.
Nenhum registro de revisão é criado, nenhum indicador de edição é exibido.
Postagem apenas de texto criada às 07:33:28, imagem adicionada por uma edição cerca de 32 segundos depois — sem histórico de edição visível, sem revisão.
Código relevante
lib/new_post_manager.rb — post_needs_approval? retorna :contains_media via contains_embedded_media?, mas isso só é executado para novas postagens.
app/models/post_analyzer.rb#embedded_media_count — a lógica de contagem de mídia.
PostRevisor — nenhuma verificação de mídia equivalente na edição.
Correção sugerida
Execute a verificação contains_media no PostRevisor também (quando a edição introduz mídia e o editor não está em skip_review_media_groups / não é membro da equipe), enfileirando um ReviewablePost para a postagem editada.
Tentei implantar este PR e notei uma assimetria nos mecanismos de moderação de mídia entre novas publicações e edições, e gostaria de levantar esta questão:
Novas publicações com mídia — ReviewableQueuedPost (revisão antes da publicação)
A publicação não é criada; o conteúdo fica na carga útil passível de revisão até ser aprovado
O autor vê a seção “aguardando aprovação” (pending_posts) na página do tópico
A publicação só se torna visível para todos após um moderador aprová-la (perform_approve_post → PostCreator)
Em caso de rejeição, o conteúdo é descartado — ele nunca foi público
Edições que adicionam mídia — ReviewablePost (publicação primeiro, revisão depois)
A edição entra em vigor imediatamente; a nova versão (incluindo a imagem) fica instantaneamente visível para todos
Não há nenhum aviso de “em revisão” para o autor — e, no caso de edições dentro do período de graça, nem mesmo uma revisão é criada, então o conteúdo original não deixa nenhum rastro na interface
Em caso de rejeição, a publicação é excluída (perform_reject_and_delete), podendo ser recuperada por meio da revisão anterior
A preocupação
Com a abordagem atual, a imagem problemática se torna publicamente visível antes que qualquer moderador possa agir, potencialmente por um longo tempo, dependendo do tempo de processamento da revisão. Isso parece enfraquecer todo o propósito do skip_review_media_groups — a descrição da configuração diz que as publicações que contêm mídia são “enviadas à equipe para revisão”, o que sugere que elas não deveriam ser públicas enquanto isso.
Possível melhoria
Colocar o conteúdo editado na fila em vez de aplicá-lo. (Acho que é melhor) Quando uma edição introduz nova mídia, mantenha a publicação inalterada, notifique o autor de que a nova edição está aguardando revisão e aplique o conteúdo editado à publicação apenas após a aprovação de um moderador — descarte-o em caso de rejeição. Isso espelha o comportamento de novas publicações da forma mais próxima possível. (Do ponto de vista da implementação, isso exigiria uma variante passível de revisão cuja aprovação executasse um revise na publicação existente, em vez de criar uma nova.)
Ocultar a publicação quando uma edição introduz nova mídia, para que apenas o autor a veja com um aviso de “aguardando aprovação”, e use a ação existente perform_approve_and_unhide na aprovação — as ações do ReviewablePost já suportam isso.