Резюме
Проверка «review media» (настройка сайта skip_review_media_groups) применяется только при создании сообщения, в классе NewPostManager. Редактирования проходят через PostRevisor, который никогда не выполняет проверку медиа. Таким образом, пользователь может сначала опубликовать обычный текст (пройдя проверку), а затем добавить изображения через редактирование — и сообщение никогда не попадет в очередь на проверку.
Что хуже, если редактирование происходит в течение editing_grace_period (по умолчанию 5 минут) и разница меньше editing_grace_period_max_diff (по умолчанию 100 символов — одна строка markdown с загруженным изображением занимает ~40–60 символов), то редактирование не создает ревизию и не отображает значок карандаша, поэтому обход полностью незаметен в интерфейсе.
Шаги для воспроизведения
- Настройте
skip_review_media_groupsтак, чтобы обычные пользователи (например, TL0/TL1) не были освобождены от проверки — сообщения с медиа должны требовать одобрения. - Создайте сообщение, содержащее только текст, от имени обычного пользователя. Оно будет одобрено/опубликовано в обычном режиме (нет медиа → нет проверки).
- В течение grace period отредактируйте сообщение и вставьте загруженное изображение.
Ожидаемый результат
Сообщение (теперь содержащее медиа) должно быть отправлено в очередь на проверку, или хотя бы редактирование должно проходить ту же проверку медиа, что и при создании сообщения.
Фактический результат
- Сообщение публикуется с изображением и никогда не попадает в очередь на проверку.
- Запись ревизии не создается, индикатор редактирования не отображается.
Подтверждение (производственная среда)
p.version # => 1
PostRevision.where(post_id: p.id).count # => 0
p.created_at # => 2026-07-30 07:33:28 UTC
p.updated_at # => 2026-07-30 07:34:00 UTC
UploadReference.where(target: p).pluck(:created_at)
# => [2026-07-30 07:34:01 UTC]
Сообщение только с текстом создано в 07:33:28, изображение добавлено редактированием примерно через 32 секунды — нет видимой истории редактирования, нет проверки.
Соответствующий код
- lib/new_post_manager.rb — post_needs_approval? возвращает :contains_media через contains_embedded_media?, но это выполняется только для новых сообщений.
- app/models/post_analyzer.rb#embedded_media_count — логика подсчета медиа.
- PostRevisor — нет аналогичной проверки медиа при редактировании.
Предлагаемое исправление
Выполните проверку contains_media также в PostRevisor (когда редактирование добавляет медиа, а редактор не входит в skip_review_media_groups / не является сотрудником), помещая в очередь ReviewablePost для отредактированного сообщения.