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

それは DiscourseEvent の動作方法ではありません。プロセス間ではなく、プロセス内での動作です。したがって、イベントはイベントをトリガーしたのと同じプロセス内のリスナーによってのみキャプチャされます。

Discourseオートメーションの場合、以下の設定でローカルでテストしたところ、

投稿を編集すると、チャットメッセージが正常に送信されました。

「いいね!」 1

ありがとうございます!私が誤解していたようですので、改めて確認させていただきます。この情報でプラグインが動作することを願っています。大変感謝いたします。

@zogstrip さん、ありがとうございます。ウェブインターフェース経由で編集しながら、本番環境のログを監視することでもテストを行いました。

テスト手順:

  1. コンソール経由でオートメーションのクールダウンをクリア
  2. ログを監視: tail -f /var/www/discourse/log/production.log | grep "PDF Automation"
  3. ウェブブラウザ経由で投稿を編集(オートメーションと同じプロセス)
  4. 結果: 編集は正常に完了(200 OK)しますが、オートメーションはトリガーされません

Azure AKS 上に同一の環境が 2 つあります(DEV と PROD)。

  • アップデート前: DEV のオートメーションは完璧に動作していました(ログファイルのエントリが表示される)。
  • latest-release (+122) へのアップデート後: DEV と PROD の両方でオートメーションが動作しなくなりました。
  • ウェブインターフェース経由でテスト: やはりオートメーションのトリガーはありません。

当社のオートメーション設定:

  • トリガー: post_created_edited
  • スクリプト: カスタムスクリプタブル (run_pdf_generation)
  • フィルター: カテゴリ ID 34、「hd96-24」タグ

カスタムスクリプタブルや当社の環境に特有の、オートメーションのトリガーを妨げている可能性のあるものはありますか?アップデート前に動作していたという事実は、post_created_edited トリガーの動作方法に変更があったことを示唆しています。

「よりシンプルな」自動化で、同じトリガーを使用してみてください。/logs に何か関連するものはありますか?

「いいね!」 1

良い考えです。問題を再現するためのごく基本的な例を作成し、月曜日に送ります。良い週末を過ごしてください :slight_smile:

DiscourseEvent に関するプロセス間での問題について、あなたの指摘は完全に正しかったとのこと、明確にしていただきありがとうございます!

あなたのフィードバックを受けて、同じ post_created_edited トリガーを使用した単純な send_chat_message 自動化で適切にテストしました。投稿を編集したところ、自動化はトリガーされました(ログで処理中であるのを確認し、トリガー自体ではなくチャット設定の誤設定により 500 エラーが発生しました)。

これにより、post_created_edited トリガーは正しく機能していることが確認できました。

混乱の原因は次のとおりでした。

  1. Railsコンソールリスナーでのテスト(間違い - プロセス間)
  2. カスタムPDFスクリプト可能機能がリビルド中に失われ、永続的に再登録するのに苦労していた

トリガーメカニズム自体は期待どおりに機能しています。混乱させてしまい申し訳ありませんでした。助けてくれてありがとう!

すべてが期待どおりに動作しているようでよかったです :+1:

さて、ここからが大変な部分です。カスタムの run_pdf_generation スクリプトが動作しなくなった根本原因を突き止めましょう :sweat_smile:

「いいね!」 1