image_sizes が空の場合、メディアのレビューがスキップされます

このバグは Skip review media groups(メディアグループのレビューをスキップ)設定に関するものです。

モバイル端末から画像を投稿すると、画像のアップロードは成功し、投稿本文には画像の参照が正しく含まれます(例:...)。

しかし、その後の POST /posts リクエストには以下が含まれています:

“image_sizes”: {}

サーバー側のメディアレビューチェックは、manager.args[:image_sizes].present? の場合のみ実行されます:

if manager.args[:image_sizes].present? &&
       !user.in_any_groups?(SiteSetting.skip_review_media_groups_map)
    return :contains_media
  end

Ruby では空のハッシュは present? とみなされないため、投稿はメディアを含むものとして認識されず、レビューに回されません。そのため、skip_review_media_groups のチェックは決して実行されません。

HAR(HTTP Archive)の証拠:

  • POST /uploads が成功(2xx)。
  • POST /posts ペイロードには、raw フィールドに画像の Markdown が含まれている。
  • 同じペイロードには “image_sizes”: {} が含まれている。
  • 投稿はレビュー待ちキューに追加されなかった。

Web コンポーザーは、エディターのプレビュー DOM 内の画像から image_sizes を構築します。これにより、メディアレビューはクライアントが提供するプレビューメタデータに依存することになり、モバイルクライアントやプレビュー画像が読み込まれていない場合などにデータが欠落する可能性があります。

期待される動作:アップロードまたは埋め込まれた画像を含む投稿は、クライアントが画像のサイズを送信するかどうかに関係なく、メディアレビューの対象となるべきです。

提案される修正:

  1. 投稿コンテンツからのサーバー側メディア検出 — クライアントが提供する image_sizes フィールドにのみ依存するのではなく、サーバー上で raw または cooked の投稿コンテンツ(またはアップロード参照)を検査することで、投稿がメディアを含んでいるかどうかを判断します。

  2. アップロードされたすべてのメディアファイルのレビュー(1より優れている) — 投稿内に出現するメディアファイルのみをレビューするのではなく、ユーザーがアップロードした すべての メディアファイルを直接レビューします。これにより、投稿レベルのメタデータへの依存を完全に排除し、使用されるクライアントやエンドポイントに関係なく、アップロードされたメディアがレビューキューをバイパスしないことを保証します。