Possível problema de regressão no evento post_edited?

Relatório de Bug do Discourse: Regressão do Evento :post_edited no latest-release

Afeta: Branch latest-release do Discourse (release +122)
Status: Regressão confirmada - reprodutível
Data: 15 de janeiro de 2026


Resumo

O DiscourseEvent :post_edited parou de ser publicado nas compilações recentes do latest-release. As edições de postagem são concluídas com sucesso e as revisões são criadas, mas o evento do qual os plugins dependem nunca é disparado. Isso quebra toda a automação de plugins que usam o gatilho post_created_edited e quaisquer outros plugins que escutam os eventos :post_edited.


Reprodução (Confirmada)

Confirmamos que esta é uma regressão testando em dois ambientes Azure AKS idênticos:

Antes da Atualização (Funcionando)

  • Versão: v2026.1.0-latest (compilação mais antiga)
  • Comportamento: :white_check_mark: Eventos :post_edited são disparados corretamente
  • Automação: :white_check_mark: Funciona automaticamente

Após a Atualização (Quebrado)

  • Versão: latest-release +1221 hours ago, release +122
  • Comportamento: :cross_mark: Eventos :post_edited nunca são disparados
  • Automação: :cross_mark: Completamente quebrada

Descoberta Crítica: Ambos os ambientes funcionavam antes da atualização. Ambos quebraram após a atualização para latest-release +122. Isso prova definitivamente que uma regressão foi introduzida.


Detalhes do Ambiente

  • Versão do Discourse: latest-release (release +122)
  • Versão do Rails: 8.0.4
  • Infraestrutura: Azure Kubernetes Service (AKS)
  • Imagem Docker: discourse/base:2.0.20260109-0020
  • Implantação: Instalação Docker padrão do Discourse

Procedimento de Teste

Teste 1: Listener de Evento (Prova que o Evento Nunca é Disparado)

# No console do Rails
File.open('/tmp/post_edited_test.log', 'w') { |f| f.write("Teste iniciado em #{Time.now}\n") }

DiscourseEvent.on(:post_edited) do |post, topic_changed, revisor|
  File.open('/tmp/post_edited_test.log', 'a') do |f|
    f.write("[#{Time.now}] :post_edited disparado! Post #{post.id}\n")
  end
end

Em seguida, edite qualquer postagem pela interface da web e verifique:

cat /tmp/post_edited_test.log

Resultado no latest-release +122: Mostra apenas “Teste iniciado” - o evento nunca é disparado
Resultado na compilação mais antiga: Mostra entradas de evento com carimbos de data/hora e IDs de postagem

Teste 2: Verificar Criação de Revisões

post = Post.find(POST_ID)
puts "Revisões da postagem: #{post.revisions.count}"
post.revisions.last(3).each { |rev| puts "  Revisão #{rev.number}: #{rev.created_at}" }

Resultado: As revisões SÃO criadas corretamente com carimbos de data/hora apropriados
Conclusão: As edições são processadas com sucesso, mas post_process_post não está sendo chamado ou o evento não está sendo acionado

Teste 3: Disparo Manual do Evento (Prova que o Sistema de Eventos Funciona)

post = Post.find(POST_ID)
DiscourseEvent.trigger(:post_edited, post, false, PostRevisor.new(post))

Resultado: Os manipuladores de evento são executados corretamente
Conclusão: O sistema de eventos funciona, mas o disparo automático durante as edições está quebrado


Comportamento Esperado

Quando uma postagem é editada pela interface da web:

  1. Edição salva com sucesso :white_check_mark:
  2. Revisão da postagem criada :white_check_mark:
  3. PostRevisor#post_process_post é chamado :cross_mark:
  4. Evento :post_edited disparado :cross_mark:
  5. Manipuladores de evento executados :cross_mark:

Apenas as etapas 1-2 funcionam. As etapas 3-5 estão quebradas.


Comportamento Atual

Os logs de produção mostram a conclusão bem-sucedida da edição:

Started PUT "/posts/3631" for 88.97.179.124 at 2026-01-15 13:06:19 +0000
Processing by PostsController#update as JSON
Completed 200 OK in 676ms

Sem erros, sem exceções, mas nenhum evento :post_edited publicado.

O evento deveria ser acionado em /var/www/discourse/lib/post_revisor.rb linha 759:

def post_process_post
  @post.invalidate_oneboxes = true
  @post.trigger_post_process
  DiscourseEvent.trigger(:post_edited, @post, self.topic_changed?, self)
end

Este método é chamado a partir da linha 341, mas o evento não está sendo disparado.


Impacto

Recursos Oficiais Afetados

  • Automação do Discourse: O gatilho post_created_edited está completamente quebrado
  • Quaisquer fluxos de trabalho de automação que dependem de edições de postagem falham silenciosamente

Plugins Afetados

Todos os plugins que escutam eventos :post_edited estão quebrados:

  • discourse-automation - Gatilhos de automação oficiais
  • discourse-ai - Moderação de IA em postagens editadas
  • discourse-doc-categories - Atualizações de índice de documentação
  • discourse-topic-voting - Fluxos de trabalho de recuperação de votos
  • Quaisquer plugins personalizados que usam eventos de edição de postagem

Linha do Tempo da Regressão

  1. Compilação mais antiga: v2026.1.0-latest - eventos :post_edited funcionavam :white_check_mark:
  2. Atualizado para: latest-release (release +122) - eventos :post_edited quebrados :cross_mark:
  3. Confirmado em: Dois ambientes de produção independentes (ambos quebraram após a atualização)

Isso prova definitivamente que uma regressão foi introduzida nas compilações recentes do latest-release.


Solução Alternativa (Workaround)

O acionamento manual via console Rails funciona:

automation = DiscourseAutomation::Automation.find(AUTOMATION_ID)
post = Post.find(POST_ID)
automation.trigger!({"post" => post})

Isso confirma que o sistema de automação em si funciona - apenas o disparo automático de eventos está quebrado.


Notas de Configuração

  • Configurações verificadas: Todas as configurações relacionadas à edição são padrão/padrão
  • Período de carência: Testado com edições bem fora do período de carência (sem efeito)
  • Plugins: 50 plugins instalados (plugins oficiais padrão)
  • Sem modificações no core: Instalação limpa do Discourse
  • Ambiente: Ambos os ambientes de teste são implantações idênticas no Azure AKS

Evidência Chave

Descoberta Mais Importante:

Tínhamos um ambiente DEV funcionando em uma compilação mais antiga. Após a atualização para latest-release +122, a automação parou de funcionar. Isso prova com certeza que uma regressão foi introduzida em compilações recentes.

Ambos os ambientes agora exibem comportamento quebrado idêntico após estarem na mesma versão.


Reprodutibilidade

100% reprodutível - testado em dois ambientes independentes:

  1. Instalar o Discourse latest-release (release +122)
  2. Criar automação com o gatilho post_created_edited
  3. Editar uma postagem
  4. Observar que a automação nunca é acionada
  5. Confirmar que o evento :post_edited nunca é disparado usando o listener de teste

Resumo

Esta é uma regressão confirmada no latest-release (release +122). O evento :post_edited funcionava em versões anteriores e parou de funcionar após a atualização. Dois ambientes independentes confirmaram o mesmo comportamento. Isso quebra a funcionalidade principal de Automação do Discourse e todos os plugins que dependem de eventos de edição de postagem.