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(구버전 빌드) - 동작:
:post_edited이벤트가 정상적으로 트리거됨 - 자동화:
자동으로 정상 작동
업데이트 후 (오작동)
- 버전:
latest-release +1221 hours ago, release +122 - 동작:
:post_edited이벤트가 절대 트리거되지 않음 - 자동화:
완전히 손상됨
중요한 발견: 두 환경 모두 업데이트 전에는 정상적으로 작동했습니다. 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))
결과: 이벤트 핸들러가 정상적으로 실행됨
결론: 이벤트 시스템은 작동하지만, 수정 시 자동 트리거가 손상됨
예상 동작
웹 인터페이스를 통해 게시글이 수정될 때:
- 수정이 성공적으로 저장됨

- 게시글 리비전이 생성됨

PostRevisor#post_process_post가 호출됨
:post_edited이벤트가 트리거됨
- 이벤트 핸들러가 실행됨

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 - 표 재획득 워크플로우
- 기타 커스텀 플러그인 - 게시글 수정 이벤트를 사용하는 플러그인
회귀 타임라인
- 구버전 빌드:
v2026.1.0-latest-:post_edited이벤트 정상 작동
- 업데이트됨:
latest-release(release +122) -:post_edited이벤트 손상
- 확인됨: 두 개의 독립적인 프로덕션 환경 (업데이트 후 모두 손상)
이는 최근 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% 재현 가능 - 두 개의 독립적인 환경에서 테스트:
- Discourse
latest-release(release +122) 설치 post_created_edited트리거가 있는 자동화 생성- 게시글 수정
- 자동화가 절대 트리거되지 않음을 관찰
- 테스트 리스너를 사용하여
:post_edited이벤트가 절대 트리거되지 않음을 확인
요약
이것은 latest-release (release +122)의 확인된 회귀입니다. :post_edited 이벤트는 이전 버전에서 작동하다가 업데이트 후 작동이 중단되었습니다. 두 개의 독립적인 환경에서 동일한 동작을 확인했습니다. 이는 Discourse Automation의 핵심 기능과 게시글 수정 이벤트에 의존하는 모든 플러그인을 손상시킵니다.

