Отчёт об ошибке Discourse: регрессия события :post_edited в ветке latest-release
Затрагивает: ветку Discourse latest-release (release +122)
Статус: подтверждённая регрессия — воспроизводится
Дата: 15 января 2026 г.
Краткое описание
Событие :post_edited (DiscourseEvent) перестало публиковаться в последних сборках ветки latest-release. Редактирование постов проходит успешно, ревизии создаются, но событие, от которого зависят плагины, никогда не срабатывает. Это ломает все плагины, использующие триггер автоматизации post_created_edited, а также любые другие плагины, слушающие события :post_edited.
Воспроизведение (подтверждено)
Мы подтвердили, что это регрессия, протестировав две идентичные среды Azure AKS:
До обновления (работает)
- Версия:
v2026.1.0-latest(старая сборка) - Поведение:
События :post_editedсрабатывают корректно - Автоматизация:
Работает автоматически
После обновления (сломано)
- Версия:
latest-release +1221 час назад, 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: Слушатель событий (доказывает, что событие никогда не срабатывает)
# В консоли Rails
File.open('/tmp/post_edited_test.log', 'w') { |f| f.write("Тест начат в #{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 сработал! Пост #{post.id}\n")
end
end
Затем отредактируйте любой пост через веб-интерфейс и проверьте:
cat /tmp/post_edited_test.log
Результат на latest-release +122: показывается только «Тест начат» — событие никогда не срабатывает
Результат на старой сборке: показываются записи событий с временными метками и ID постов
Тест 2: Проверка создания ревизий
post = Post.find(ID_ПОСТА)
puts "Ревизии поста: #{post.revisions.count}"
post.revisions.last(3).each { |rev| puts " Ревизия #{rev.number}: #{rev.created_at}" }
Результат: Ревизии создаются корректно с правильными временными метками
Вывод: Редактирование обрабатывается успешно, но метод post_process_post не вызывается или событие не инициируется
Тест 3: Ручное триггерирование события (доказывает, что система событий работает)
post = Post.find(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(ID_АВТОМАТИЗАЦИИ)
post = Post.find(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 и все плагины, зависящие от событий редактирования постов.

