BL-024 Shipped

Image galleries (polymorphic)

shipped as a generic Image model (imageable_type/imageable_id, has_one_attached :file with thumb/card variants, caption, sort_order) so any future owner (Character, Adventure, Campaign, World, Stage) can adopt galleries with a three-line change. ImagePolicy delegates to the owner’s update?. ImagesController dispatches via an IMAGEABLE_PARAMS whitelist and a :imageable routing concern. 3 generic MCP tools (add_image, update_image, remove_image) gated by ALLOWED_IMAGEABLE_TYPES = %w[Article] — new owners plug in by name. Article wired first (Marta Vance poster child). Right-hand sidebar gallery on article show page with click-to-lightbox (custom lightbox_controller.js, Escape closes). Edit page image manager: multi-file upload, per-image caption/order, remove. get_article returns images array. 125 tools. 417 tests green (+18).