We built a small companion plugin for RSS Polling (discourse-rss-onebox): imported blog posts render as a onebox of the article, with optional feed summaries, YouTube descriptions and title formats. Three gaps forced us into wrapping core methods instead of using documented hooks.
-
No plugin outlet in the feed form. rss-polling-feed-form.gjs#L287-L351 has no
PluginOutlet, and the update contract accepts a fixed set of attributes (update.rb#L9-L14). A plugin cannot add a per-feed option, so ours needed a separate admin page. An outlet plus a way to persist extra fields (feed custom fields, for example) would cover it. -
The feed ID never reaches the import. The poll job knows
rss_feed_id, butTopicEmbed.import(poll_feed.rb#L110) and thetopic_embed_import_create_argsmodifier (topic_embed.rb#L108) never receive it. We wrap the poll job to capture it. Passing it through as an option would let plugins act per feed. -
No hook on the update path. When a feed item’s content changes,
TopicEmbed.importrevises the post with the feed content (topic_embed.rb#L147-L152), bypassing whatever the create modifier did. A blogger editing a post silently turns a plugin-shaped topic back into feed text. A modifier on the update changes, mirroringtopic_embed_import_create_args, would close this.
The workaround for 2 and 3 is prepending TopicEmbed.import and the poll job. That’s brittle: main has since added a truncate: keyword to TopicEmbed.import, which breaks any wrapper that mirrors the 2026.7 signature - we had to ship a release just to pass it through. Documented hooks would avoid that class of breakage.