Problème de régression possible de l'événement post_edited ?

Rapport de bogue Discourse : Régression de l’événement :post_edited dans latest-release

Affecte : Branche latest-release de Discourse (release +122)
Statut : Régression confirmée - reproductible
Date : 15 janvier 2026


Résumé

L’événement DiscourseEvent :post_edited n’est plus publié dans les versions récentes de latest-release. Les modifications de publication réussissent et les révisions sont créées, mais l’événement dont dépendent les plugins n’est jamais déclenché. Cela casse tous les plugins utilisant le déclencheur d’automatisation post_created_edited et tout autre plugin écoutant les événements :post_edited.


Reproduction (Confirmée)

Nous avons confirmé qu’il s’agit d’une régression en testant sur deux environnements Azure AKS identiques :

Avant la mise à jour (Fonctionnel)

  • Version : v2026.1.0-latest (version antérieure)
  • Comportement : :white_check_mark: Les événements :post_edited se déclenchent correctement
  • Automatisation : :white_check_mark: Fonctionne automatiquement

Après la mise à jour (Cassé)

  • Version : latest-release +1221 heures (release +122)
  • Comportement : :cross_mark: Les événements :post_edited ne se déclenchent jamais
  • Automatisation : :cross_mark: Complètement cassée

Constatation critique : Les deux environnements fonctionnaient avant la mise à jour. Les deux sont tombés en panne après la mise à jour vers latest-release +122. Cela prouve de manière définitive qu’une régression a été introduite.


Détails de l’environnement

  • Version de Discourse : latest-release (release +122)
  • Version de Rails : 8.0.4
  • Infrastructure : Azure Kubernetes Service (AKS)
  • Image Docker : discourse/base:2.0.20260109-0020
  • Déploiement : Installation Docker standard de Discourse

Procédure de test

Test 1 : Écouteur d’événement (Prouve que l’événement ne se déclenche jamais)

# Dans la console Rails
File.open('/tmp/post_edited_test.log', 'w') { |f| f.write("Test started at #{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 fired! Post #{post.id}\n")
  end
end

Ensuite, modifiez n’importe quelle publication via l’interface web et vérifiez :

cat /tmp/post_edited_test.log

Résultat sur latest-release +122 : Affiche uniquement “Test started” - l’événement ne se déclenche jamais
Résultat sur la version antérieure : Affiche des entrées d’événement avec des horodatages et des ID de publication

Test 2 : Vérifier la création des révisions

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

Résultat : Les révisions SONT créées correctement avec les horodatages appropriés
Conclusion : Les modifications sont traitées avec succès, mais post_process_post n’est pas appelé ou l’événement n’est pas déclenché

Test 3 : Déclenchement manuel de l’événement (Prouve que le système d’événements fonctionne)

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

Résultat : Les gestionnaires d’événements s’exécutent correctement
Conclusion : Le système d’événements fonctionne, mais le déclenchement automatique lors des modifications est cassé


Comportement attendu

Lorsqu’une publication est modifiée via l’interface web :

  1. La modification est enregistrée avec succès :white_check_mark:
  2. Une révision de la publication est créée :white_check_mark:
  3. PostRevisor#post_process_post est appelé :cross_mark:
  4. L’événement :post_edited est déclenché :cross_mark:
  5. Les gestionnaires d’événements s’exécutent :cross_mark:

Seules les étapes 1-2 fonctionnent. Les étapes 3-5 sont cassées.


Comportement actuel

Les journaux de production montrent une achèvement réussi de la modification :

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

Aucune erreur, aucune exception, mais aucun événement :post_edited publié.

L’événement devrait être déclenché à la ligne 759 de /var/www/discourse/lib/post_revisor.rb :

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

Cette méthode est appelée depuis la ligne 341 mais l’événement n’est pas déclenché.


Impact

Fonctionnalités officielles affectées

  • Automatisation Discourse : Le déclencheur post_created_edited est complètement cassé
  • Tous les flux de travail d’automatisation dépendant des modifications de publication échouent silencieusement

Plugins affectés

Tous les plugins écoutant les événements :post_edited sont cassés :

  • discourse-automation - Déclencheurs d’automatisation officiels
  • discourse-ai - Modération IA sur les publications modifiées
  • discourse-doc-categories - Mises à jour de l’index de documentation
  • discourse-topic-voting - Flux de travail de récupération de vote
  • Tous les plugins personnalisés utilisant les événements de modification de publication

Chronologie de la régression

  1. Version antérieure : v2026.1.0-latest - les événements :post_edited fonctionnaient :white_check_mark:
  2. Mise à jour vers : latest-release (release +122) - les événements :post_edited sont cassés :cross_mark:
  3. Confirmé sur : Deux environnements de production indépendants (les deux sont tombés en panne après la mise à jour)

Ceci prouve de manière définitive qu’une régression a été introduite dans les versions récentes de latest-release.


Solution de contournement

Le déclenchement manuel via la console Rails fonctionne :

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

Ceci confirme que le système d’automatisation lui-même fonctionne - seul le déclenchement automatique des événements est cassé.


Notes de configuration

  • Paramètres vérifiés : Tous les paramètres liés à l’édition sont standards/par défaut
  • Période de grâce : Testé avec des modifications bien en dehors de la période de grâce (aucun effet)
  • Plugins : 50 plugins installés (plugins officiels standards)
  • Aucune modification du cœur : Installation propre de Discourse
  • Environnement : Les deux environnements de test sont des déploiements Azure AKS identiques

Preuve clé

Constatation la plus importante :

Nous avions un environnement de DÉVELOPPEMENT fonctionnel sur une version antérieure. Après la mise à jour vers latest-release +122, l’automatisation a cessé de fonctionner. Cela prouve avec certitude qu’une régression a été introduite dans les versions récentes.

Les deux environnements présentent maintenant un comportement cassé identique après avoir été sur la même version.


Reproductibilité

Reproductible à 100 % - testé sur deux environnements indépendants :

  1. Installer Discourse latest-release (release +122)
  2. Créer une automatisation avec le déclencheur post_created_edited
  3. Modifier une publication
  4. Observer que l’automatisation ne se déclenche jamais
  5. Confirmer que l’événement :post_edited ne se déclenche jamais en utilisant l’écouteur de test

Résumé

Il s’agit d’une régression confirmée dans latest-release (release +122). L’événement :post_edited fonctionnait dans les versions précédentes et a cessé de fonctionner après la mise à jour. Deux environnements indépendants ont confirmé le même comportement. Cela casse la fonctionnalité principale d’Automatisation de Discourse et tous les plugins dépendant des événements de modification de publication.

Ce n’est pas comme cela que fonctionne DiscourseEvent - il n’est pas inter-processus mais intra-processus. Les événements ne sont donc capturés que par les écouteurs dans le même processus que celui qui les a déclenchés.

Dans le cas de l’automatisation de Discourse, je viens de tester en local avec les paramètres suivants

et j’ai modifié un message, et le message de discussion a été envoyé avec succès

Merci ! Je vais réexaminer cela car j’ai clairement mal compris. J’espère pouvoir faire fonctionner mon plugin avec ces informations. J’apprécie beaucoup,

Merci @zogstrip - nous avons également testé en surveillant les journaux de production lors de la modification via l’interface web :

Procédure de test :

  1. Refroidissement de l’automatisation effacé via la console
  2. Journaux observés : tail -f /var/www/discourse/log/production.log | grep "PDF Automation"
  3. Modification d’une publication via le navigateur web (même processus que l’automatisation)
  4. Résultat : La modification se termine avec succès (200 OK), mais l’automatisation ne se déclenche jamais

Nous avons deux environnements identiques (DEV et PROD sur Azure AKS) :

  • Avant la mise à jour : L’automatisation DEV fonctionnait parfaitement (des entrées dans le fichier journal apparaissent)
  • Après la mise à jour vers latest-release (+122) : Les automatisations DEV et PROD ont cessé de fonctionner
  • Testé via l’interface web : Aucun déclenchement d’automatisation non plus

Notre configuration d’automatisation :

  • Déclencheur : post_created_edited
  • Script : Scriptable personnalisé (run_pdf_generation)
  • Filtre : ID de catégorie 34, tag “hd96-24”

Y a-t-il quelque chose de spécifique aux scriptables personnalisés ou à notre environnement qui empêche le déclenchement de l’automatisation ? Le fait que cela ait fonctionné avant la mise à jour suggère que quelque chose a changé dans la manière dont les déclencheurs post_created_edited se déclenchent.

Pourriez-vous essayer avec une automatisation « plus simple » qui utilise le même déclencheur ? Quelque chose de potentiellement lié dans /logs ?

Bonne idée - Je vais créer un exemple minimal pour reproduire le problème et vous l’envoyer lundi. Passez un bon week-end :slight_smile:

Vous aviez absolument raison concernant le problème inter-processus avec DiscourseEvent - merci pour cette clarification !

Suite à vos commentaires, nous avons testé correctement avec une automatisation simple send_chat_message utilisant le même déclencheur post_created_edited. Lorsque nous avons modifié un message, l’automatisation S’EST DÉCLENCHÉE (nous l’avons vue se traiter dans les journaux et avons obtenu une erreur 500 due à une mauvaise configuration des paramètres de chat, et non au déclencheur lui-même).

Ceci confirme : Le déclencheur post_created_edited fonctionne correctement.

Notre confusion provenait de :

  1. Tester avec un écouteur de console Rails (faux - inter-processus)
  2. Notre script personnalisé pour PDF a été perdu lors d’une reconstruction et nous avions du mal à le réenregistrer de manière persistante

Le mécanisme de déclenchement lui-même fonctionne comme prévu. Désolé pour la confusion et merci pour votre aide !

Contento que todo funcione como se esperaba :+1:

Ahora la parte difícil, encontrar la causa raíz de por qué tu script personalizado run_pdf_generation ya no funciona :sweat_smile: