Окей, так сегодня я и Мойн обсуждали этот случай, и она упомянула, что, возможно, есть баг при использовании параметра «ежемесячно», поскольку длина месяца варьируется? Конечно, она была права — отчасти… ![]()
В любом случае, я немного покопался ![]()
Мне не удалось найти скрипт автоматизации для schedule pm with data-explorer results в основной папке plugins/automation/lib/discourse_automation/scripts, значит, он где-то спрятан.
Однако я посмотрел на логику здесь для повторяющихся событий (предположительно, этот скрипт использует её) в файле plugins/automation/lib/discourse_automation/triggers/recurring.rb:
Я думаю, что базовый код для ежемесячных повторяющихся автоматизаций вычисляет N-й день недели вместо фактической календарной даты, и здесь возникает несоответствие логики с параметром Calendar day — при внедрении BYDAY=#{count}#{byday} в RRule автоматизация принудительно привязывается к дню недели, тогда как следовало бы использовать BYMONTHDAY вместо BYDAY.
Так, если вы настроите автоматизацию на запуск 15 апреля (который, кстати, является 3-й средой апреля), система интерпретирует правило как: запускать в 3-ю среду каждого месяца.
Когда наступает май, 3-я среда — это 20 мая, из-за чего расписание сдвигается на 5 дней.
Более того, если вы установите автоматизацию на 30-е или 31-е число месяца (например, «5-я вторник»), система будет искать 5-й вторник в следующем месяце. Если в этом месяце всего 4 вторника, автоматизация полностью не сможет найти валидную дату и тихо пропустит весь месяц.
У меня есть протестированное исправление, и я готовлю PR, если команда захочет его проверить. Оно меняет логику с N-го дня недели на точную календарную дату.
Вот несколько скриншотов моих тестов и отладки:
Два экземпляра: один без исправления, другой с моим исправлением логики.
Создайте идентичную автоматизацию в обоих (исправленная версия справа):
Обратите внимание на различия в баннерах с сообщением «Следующая автоматизация сработает в:» — сдвиг составляет 5 дней: неотредактированная версия смещается к третьей среде (20 мая), вместо 15 мая.
Например, месяцы могут полностью пропускаться, если система ищет 4-й четверг вместо конкретной даты.
Тот же результат можно проверить в консоли Rails.
Без исправления:
С исправлением:
PR здесь:
Редактирование: похоже, что баг затрагивает любой скрипт автоматизации, использующий триггер recurring, настроенный на запуск каждый месяц. ![]()
Я также могу воспроизвести иногда пустой баннер, например, если установить дату начала на 29 апреля 2026 года, то система не сможет найти 5-ю среду в мае, так как её не существует — автоматизация не сработает здесь (неисправленная версия слева, исправленная справа):
Похоже, что баг вызывает NoMethodError в Rails, когда не удаётся найти N-й день недели, как в примере выше; отсюда пустой баннер следующего запуска и сбой выполнения:






