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 이벤트를 청취하는 기타 플러그인이 모두 손상되었습니다.


재현 방법 (확인됨)

동일한 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: 완전히 손상됨

중요한 발견: 두 환경 모두 업데이트 전에는 정상적으로 작동했습니다. latest-release +122로 업데이트한 후 모두 손상되었습니다. 이는 회귀가 도입되었음을 명확하게 증명합니다.


환경 상세 정보

  • Discourse 버전: latest-release (release +122)
  • Rails 버전: 8.0.4
  • 인프라: Azure Kubernetes Service (AKS)
  • Docker 이미지: discourse/base:2.0.20260109-0020
  • 배포: 표준 Discourse Docker 설치

테스트 절차

테스트 1: 이벤트 리스너 (이벤트가 절대 트리거되지 않음을 증명)

# In Rails console
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

이후 웹 인터페이스를 통해 임의의 게시글을 수정하고 다음을 확인합니다:

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))

결과: 이벤트 핸들러가 정상적으로 실행됨
결론: 이벤트 시스템은 작동하지만, 수정 시 자동 트리거가 손상됨


예상 동작

웹 인터페이스를 통해 게시글이 수정될 때:

  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. 확인됨: 두 개의 독립적인 프로덕션 환경 (업데이트 후 모두 손상)

이는 최근 latest-release 빌드에 회귀가 도입되었음을 명확하게 증명합니다.


우회 방법

Rails 콘솔을 통한 수동 트리거는 작동합니다:

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

이는 자동화 시스템 자체는 작동하며, 자동 이벤트 트리거만 손상되었음을 확인시켜 줍니다.


설정 관련 참고 사항

  • 설정 확인: 모든 수정 관련 설정이 표준/기본값임
  • 유예 기간: 유예 기간을 훨씬 벗어나는 시점의 수정을 테스트함 (영향 없음)
  • 플러그인: 50개의 플러그인 설치 (표준 공식 플러그인)
  • 코어 수정 없음: 깨끗한 Discourse 설치
  • 환경: 두 테스트 환경 모두 동일한 Azure AKS 배포

주요 증거

가장 중요한 발견:

구버전 빌드에서 정상 작동하던 DEV 환경이 있었습니다. latest-release +122로 업데이트한 후 자동화가 작동하지 않았습니다. 이는 최근 릴리스에 회귀가 도입되었음을 확실히 증명합니다.

두 환경은 현재 동일한 버전에서 동일한 손상된 동작을 나타냅니다.


재현 가능성

100% 재현 가능 - 두 개의 독립적인 환경에서 테스트:

  1. Discourse latest-release (release +122) 설치
  2. post_created_edited 트리거가 있는 자동화 생성
  3. 게시글 수정
  4. 자동화가 절대 트리거되지 않음을 관찰
  5. 테스트 리스너를 사용하여 :post_edited 이벤트가 절대 트리거되지 않음을 확인

요약

이것은 latest-release (release +122)의 확인된 회귀입니다. :post_edited 이벤트는 이전 버전에서 작동하다가 업데이트 후 작동이 중단되었습니다. 두 개의 독립적인 환경에서 동일한 동작을 확인했습니다. 이는 Discourse Automation의 핵심 기능과 게시글 수정 이벤트에 의존하는 모든 플러그인을 손상시킵니다.