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.

1 « J'aime »