Possibile problema di regressione dell'evento post_edited?

Segnalazione Bug di Discourse: Regressione dell’evento :post_edited in latest-release

Interessa: Branch latest-release di Discourse (release +122)
Stato: Regressione confermata - riproducibile
Data: 15 gennaio 2026


Riepilogo

L’evento DiscourseEvent :post_edited ha smesso di essere pubblicato nelle recenti build di latest-release. Le modifiche ai post vengono completate con successo e le revisioni vengono create, ma l’evento da cui dipendono i plugin non viene mai attivato. Ciò interrompe tutte le automazioni dei plugin che utilizzano il trigger post_created_edited e qualsiasi altro plugin in ascolto degli eventi :post_edited.


Riproduzione (Confermata)

Abbiamo confermato che si tratta di una regressione testando su due ambienti Azure AKS identici:

Prima dell’aggiornamento (Funzionante)

  • Versione: v2026.1.0-latest (build precedente)
  • Comportamento: :white_check_mark: Gli eventi :post_edited vengono attivati correttamente
  • Automazione: :white_check_mark: Funziona automaticamente

Dopo l’aggiornamento (Non funzionante)

  • Versione: latest-release +1221 ore fa, release +122
  • Comportamento: :cross_mark: Gli eventi :post_edited non vengono mai attivati
  • Automazione: :cross_mark: Completamente interrotta

Riscontro Critico: Entrambi gli ambienti funzionavano prima dell’aggiornamento. Entrambi si sono interrotti dopo l’aggiornamento a latest-release +122. Questo dimostra in modo definitivo che è stata introdotta una regressione.


Dettagli dell’Ambiente

  • Versione di Discourse: latest-release (release +122)
  • Versione di Rails: 8.0.4
  • Infrastruttura: Azure Kubernetes Service (AKS)
  • Immagine Docker: discourse/base:2.0.20260109-0020
  • Deployment: Installazione Docker standard di Discourse

Procedura di Test

Test 1: Listener di Eventi (Dimostra che l’evento non viene mai attivato)

# Nella console di Rails
File.open('/tmp/post_edited_test.log', 'w') { |f| f.write("Test iniziato alle #{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 attivato! Post #{post.id}\n")
  end
end

Quindi modifica qualsiasi post tramite l’interfaccia web e controlla:

cat /tmp/post_edited_test.log

Risultato su latest-release +122: Mostra solo “Test iniziato” - l’evento non viene mai attivato
Risultato sulla build precedente: Mostra voci di eventi con timestamp e ID di post

Test 2: Verifica della Creazione delle Revisioni

post = Post.find(POST_ID)
puts "Revisioni del post: #{post.revisions.count}"
post.revisions.last(3).each { |rev| puts "  Revisione #{rev.number}: #{rev.created_at}" }

Risultato: Le revisioni VENGONO create correttamente con i timestamp appropriati
Conclusione: Le modifiche vengono elaborate correttamente, ma post_process_post non viene chiamato o l’evento non viene attivato

Test 3: Attivazione Manuale dell’Evento (Dimostra che il sistema di eventi funziona)

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

Risultato: I gestori di eventi vengono eseguiti correttamente
Conclusione: Il sistema di eventi funziona, ma l’attivazione automatica durante le modifiche è interrotta


Comportamento Atteso

Quando un post viene modificato tramite l’interfaccia web:

  1. Salvataggio della modifica riuscito :white_check_mark:
  2. Creazione della revisione del post :white_check_mark:
  3. PostRevisor#post_process_post viene chiamato :cross_mark:
  4. Evento :post_edited attivato :cross_mark:
  5. I gestori di eventi vengono eseguiti :cross_mark:

Solo i passaggi 1-2 funzionano. I passaggi 3-5 sono interrotti.


Comportamento Attuale

I log di produzione mostrano il completamento della modifica con successo:

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

Nessun errore, nessuna eccezione, ma nessun evento :post_edited pubblicato.

L’evento dovrebbe essere attivato in /var/www/discourse/lib/post_revisor.rb riga 759:

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

Questo metodo viene chiamato dalla riga 341 ma l’evento non viene attivato.


Impatto

Funzionalità Ufficiali Interessate

  • Automazione di Discourse: Il trigger post_created_edited è completamente interrotto
  • Tutti i flussi di lavoro di automazione che dipendono dalle modifiche ai post falliscono silenziosamente

Plugin Interessati

Tutti i plugin in ascolto degli eventi :post_edited sono interrotti:

  • discourse-automation - Trigger di automazione ufficiali
  • discourse-ai - Moderazione AI sui post modificati
  • discourse-doc-categories - Aggiornamenti dell’indice della documentazione
  • discourse-topic-voting - Flussi di lavoro di recupero dei voti
  • Qualsiasi plugin personalizzato che utilizza eventi di modifica dei post

Cronologia della Regressione

  1. Build precedente: v2026.1.0-latest - gli eventi :post_edited funzionavano :white_check_mark:
  2. Aggiornato a: latest-release (release +122) - gli eventi :post_edited sono interrotti :cross_mark:
  3. Confermato su: Due ambienti di produzione indipendenti (entrambi interrotti dopo l’aggiornamento)

Questo dimostra in modo definitivo che una regressione è stata introdotta nelle recenti build di latest-release.


Soluzione alternativa (Workaround)

L’attivazione manuale tramite console Rails funziona:

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

Ciò conferma che il sistema di automazione funziona di per sé: solo l’attivazione automatica degli eventi è interrotta.


Note di Configurazione

  • Impostazioni verificate: Tutte le impostazioni relative alla modifica sono standard/predefinite
  • Periodo di grazia: Testato con modifiche ben al di fuori del periodo di grazia (nessun effetto)
  • Plugin: 50 plugin installati (plugin ufficiali standard)
  • Nessuna modifica al core: Installazione pulita di Discourse
  • Ambiente: Entrambi gli ambienti di test sono distribuzioni AKS di Azure identiche

Prova Chiave

Riscontro Più Importante:

Avevamo un ambiente DEV funzionante su una build precedente. Dopo l’aggiornamento a latest-release +122, l’automazione ha smesso di funzionare. Questo dimostra con certezza che una regressione è stata introdotta nelle build recenti.

Entrambi gli ambienti ora mostrano un comportamento interrotto identico dopo essere stati sulla stessa versione.


Riproducibilità

Riproducibile al 100% - testato su due ambienti indipendenti:

  1. Installa Discourse latest-release (release +122)
  2. Crea un’automazione con il trigger post_created_edited
  3. Modifica un post
  4. Osserva che l’automazione non viene mai attivata
  5. Conferma che l’evento :post_edited non viene mai attivato utilizzando il listener di test

Riepilogo

Si tratta di una regressione confermata in latest-release (release +122). L’evento :post_edited funzionava nelle versioni precedenti e ha smesso di funzionare dopo l’aggiornamento. Due ambienti indipendenti hanno confermato lo stesso comportamento. Ciò interrompe la funzionalità principale di Automazione di Discourse e tutti i plugin che dipendono dagli eventi di modifica dei post.

1 Mi Piace

Non è così che funziona DiscourseEvent: non è inter-processo ma intra-processo. Quindi gli eventi vengono catturati solo dagli ascoltatori nello stesso processo di quello che li ha attivati.

Nel caso dell’automazione di Discourse, l’ho appena testata localmente con le seguenti impostazioni

e ho modificato un post e ha inviato con successo il messaggio di chat

1 Mi Piace

Grazie! Rivedrò questo dato, poiché chiaramente ho frainteso. Spero di riuscire a far funzionare il mio plugin con queste informazioni. Molto apprezzato,

Grazie @zogstrip - abbiamo anche testato osservando i log di produzione durante la modifica tramite l’interfaccia web:

Procedura di test:

  1. Raffreddamento dell’automazione azzerato tramite console
  2. Log osservati: tail -f /var/www/discourse/log/production.log | grep "PDF Automation"
  3. Modificato un post tramite browser web (stesso processo dell’automazione)
  4. Risultato: La modifica viene completata con successo (200 OK), ma l’automazione non si attiva mai

Abbiamo due ambienti identici (DEV e PROD su Azure AKS):

  • Prima dell’aggiornamento: L’automazione DEV funzionava perfettamente (le voci del file di log appaiono)
  • Dopo l’aggiornamento a latest-release (+122): Le automazioni DEV e PROD hanno smesso di funzionare
  • Testato tramite interfaccia web: Ancora nessuna attivazione dell’automazione

La nostra configurazione di automazione:

  • Trigger: post_created_edited
  • Script: Script personalizzato (run_pdf_generation)
  • Filtro: ID categoria 34, tag “hd96-24”

Ci potrebbe essere qualcosa di specifico riguardo agli script personalizzati o al nostro ambiente che impedisce l’attivazione dell’automazione? Il fatto che funzionasse prima dell’aggiornamento suggerisce che qualcosa sia cambiato nel modo in cui vengono attivati i trigger post_created_edited.

Potresti provare con un’automazione “più semplice” che utilizzi lo stesso trigger? C’è qualcosa di potenzialmente correlato in /logs?

1 Mi Piace

Buona idea: creerò un esempio essenziale per riprodurre il problema e te lo invierò lunedì. Buon fine settimana :slight_smile:

Avevi assolutamente ragione riguardo al problema interprocesso con DiscourseEvent - grazie per quella chiarificazione!

Dopo il tuo feedback, abbiamo testato correttamente con un semplice automatismo send_chat_message utilizzando lo stesso trigger post_created_edited. Quando abbiamo modificato un post, l’automatismo SI è attivato (l’abbiamo visto elaborare nei log e abbiamo ricevuto un errore 500 a causa della errata configurazione delle impostazioni della chat, non del trigger stesso).

Questo conferma: Il trigger post_created_edited funziona correttamente.

La nostra confusione è derivata da:

  1. Test con un listener della console Rails (sbagliato - interprocesso)
  2. Il nostro script personalizzato per PDF è andato perso durante una ricostruzione e abbiamo avuto difficoltà a registrarlo nuovamente in modo persistente

Il meccanismo di trigger stesso funziona come previsto. Scusate per la confusione e grazie per l’aiuto!

Sono contento che tutto funzioni come previsto :+1:

Ora la parte difficile, trovare la causa principale del perché il tuo script personalizzato run_pdf_generation non funzioni più :sweat_smile:

1 Mi Piace