post_edited イベントの回帰問題の可能性?

Discourse バグレポート: latest-release における :post_edited イベントの回帰バグ

影響範囲: Discourse latest-release ブランチ (release +122)
ステータス: 回帰バグとして確認済み - 再現可能
日付: 2026年1月15日


概要

最近の latest-release ビルドで、:post_edited DiscourseEvent が発行されなくなりました。投稿の編集は正常に完了し、リビジョンも作成されますが、プラグインが依存しているイベントが発火しません。これにより、post_created_edited 自動化トリガーを使用するすべてのプラグインや、:post_edited イベントをリッスンするその他のプラグインが動作しなくなります。


再現手順(確認済み)

2つの同一の Azure AKS 環境でテストすることにより、これが回帰バグであることを確認しました。

アップデート前(動作していた時)

  • バージョン: v2026.1.0-latest (古いビルド)
  • 動作: :white_check_mark: :post_edited イベントが正しく発火する
  • 自動化: :white_check_mark: 自動的に動作する

アップデート後(壊れている時)

  • バージョン: latest-release +1221 hours ago, release +122
  • 動作: :cross_mark: :post_edited イベントが発火しない
  • 自動化: :cross_mark: 完全に動作しない

重要な発見: アップデート前は両方の環境で動作していました。アップデート後に両方とも壊れました。これは、最近導入された回帰バグであることを明確に証明しています。


環境詳細

  • Discourse バージョン: latest-release (release +122)
  • Rails バージョン: 8.0.4
  • インフラストラクチャ: Azure Kubernetes Service (AKS)
  • Docker イメージ: discourse/base:2.0.20260109-0020
  • デプロイ: 標準の Discourse Docker インストール

テスト手順

テスト 1: イベントリスナー (イベントが発火しないことの証明)

# 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

その後、Web インターフェースから任意の投稿を編集し、以下を確認します。

cat /tmp/post_edited_test.log

latest-release +122 での結果: “Test started” のみ表示され、イベントは発火しません。
古いビルドでの結果: タイムスタンプと投稿 ID を含むイベントエントリが表示されます。

テスト 2: リビジョンの作成確認

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

結果: リビジョンは適切なタイムスタンプとともに作成されています
結論: 編集は正常に処理されていますが、post_process_post が呼び出されていないか、イベントがトリガーされていません。

テスト 3: 手動イベントトリガー (イベントシステムが動作することの証明)

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

結果: イベントハンドラは正しく実行されます。
結論: イベントシステムは動作していますが、編集時の自動トリガーが壊れています。


期待される動作

投稿が Web インターフェースから編集された場合:

  1. 編集が正常に保存される :white_check_mark:
  2. 投稿リビジョンが作成される :white_check_mark:
  3. PostRevisor#post_process_post が呼び出される :cross_mark:
  4. :post_edited イベントがトリガーされる :cross_mark:
  5. イベントハンドラが実行される :cross_mark:

ステップ 1-2 のみ動作し、ステップ 3-5 は壊れています。


実際の動作

本番環境のログでは、編集の完了が正常に示されています。

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

エラーや例外はなく、:post_edited イベントは発行されません。

このイベントは /var/www/discourse/lib/post_revisor.rb の 759 行目でトリガーされるはずです。

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

このメソッドは 341 行目から呼び出されていますが、イベントが発火していません。


影響範囲

影響を受ける公式機能

  • Discourse Automation: post_created_edited トリガーが完全に動作しません。
  • 投稿の編集に依存するすべての自動化ワークフローがサイレントに失敗します。

影響を受けるプラグイン

:post_edited イベントをリッスンするすべてのプラグインが動作しません。

  • discourse-automation - 公式の自動化トリガー
  • discourse-ai - 編集済み投稿に対する AI モデレーション
  • discourse-doc-categories - ドキュメントインデックスの更新
  • discourse-topic-voting - 投票回収ワークフロー
  • 投稿編集イベントを使用するカスタムプラグイン全般

回帰のタイムライン

  1. 古いビルド: v2026.1.0-latest - :post_edited イベントは動作していた :white_check_mark:
  2. アップデート後: latest-release (release +122) - :post_edited イベントが壊れた :cross_mark:
  3. 確認済み: 2つの独立した本番環境(両方ともアップデート後に壊れた)

これは、最近の latest-release ビルドで回帰バグが導入されたことを明確に証明しています。


回避策

Rails コンソール経由での手動トリガーは動作します。

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

これにより、自動化システム自体は動作しており、自動イベントのトリガーのみが壊れていることが確認できます。


設定に関する注記

  • 確認済み設定: 編集関連の設定はすべて標準/デフォルトです。
  • 猶予期間: 猶予期間を過ぎた編集でもテストしました(影響なし)。
  • プラグイン: 50個のプラグインがインストールされています(標準の公式プラグイン)。
  • コアの変更なし: クリーンな Discourse インストールです。
  • 環境: 両方のテスト環境は同一の Azure AKS デプロイメントです。

主要な証拠

最も重要な発見:

古いビルドで動作していた開発環境がありました。latest-release +122 にアップデートした後、自動化が停止しました。これは、最近のリリースで回帰バグが導入されたことを確実に証明しています。

両方の環境は、同じバージョンになった後、現在では同一の壊れた動作を示しています。


再現性

100% 再現可能 - 2つの独立した環境でテスト済み:

  1. Discourse latest-release (release +122) をインストールする
  2. post_created_edited トリガーを持つ自動化を作成する
  3. 投稿を編集する
  4. 自動化がトリガーされないことを確認する
  5. テストリスナーを使用して :post_edited イベントが発火しないことを確認する

まとめ

これは latest-release (release +122) における確認済みの回帰バグです。以前のバージョンでは :post_edited イベントは動作していましたが、アップデート後に動作しなくなりました。2つの独立した環境が同じ動作を確認しています。これにより、コアの Discourse Automation 機能および投稿編集イベントに依存するすべてのプラグインが機能しなくなっています。

「いいね!」 1