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 :
Les événements :post_editedse déclenchent correctement - Automatisation :
Fonctionne automatiquement
Après la mise à jour (Cassé)
- Version :
latest-release +1221 heures(release +122) - Comportement :
Les événements :post_editedne se déclenchent jamais - Automatisation :
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 :
- La modification est enregistrée avec succès

- Une révision de la publication est créée

PostRevisor#post_process_postest appelé
- L’événement
:post_editedest déclenché
- Les gestionnaires d’événements s’exécutent

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_editedest 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
- Version antérieure :
v2026.1.0-latest- les événements:post_editedfonctionnaient
- Mise à jour vers :
latest-release(release +122) - les événements:post_editedsont cassés
- 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 :
- Installer Discourse
latest-release(release +122) - Créer une automatisation avec le déclencheur
post_created_edited - Modifier une publication
- Observer que l’automatisation ne se déclenche jamais
- Confirmer que l’événement
:post_editedne 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.