RSS-Polling: Erweiterungspunkte für Plugins (Feed-Formular-Ausgang, Feed-ID beim Import, Update-Pfad-Hook)

Wir haben ein kleines Companion-Plugin für das RSS-Polling entwickelt (discourse-rss-onebox): Importierte Blogartikel werden als Onebox des Artikels gerendert, mit optionalen Feed-Zusammenfassungen, YouTube-Beschreibungen und Titelformaten. Drei Lücken zwangen uns dazu, Kernmethoden zu kapseln, anstatt die dokumentierten Hooks zu verwenden.

  1. Kein Plugin-Ausgang im Feed-Formular. rss-polling-feed-form.gjs#L287-L351 enthält kein PluginOutlet, und der Update-Vertrag akzeptiert einen festen Satz von Attributen (update.rb#L9-L14). Ein Plugin kann keine Feed-spezifische Option hinzufügen, daher benötigte unseres eine separate Admin-Seite. Ein Ausgang plus eine Möglichkeit, zusätzliche Felder zu persistieren (z. B. Feed-Custom-Fields), würde dies abdecken.

  2. Die Feed-ID erreicht den Import nie. Der Poll-Job kennt die rss_feed_id, aber TopicEmbed.import (poll_feed.rb#L110) und der topic_embed_import_create_args-Modifier (topic_embed.rb#L108) erhalten sie nie. Wir kapseln den Poll-Job, um sie zu erfassen. Wenn sie als Option durchgereicht würde, könnten Plugins feed-spezifisch handeln.

  3. Kein Hook auf dem Update-Pfad. Wenn sich der Inhalt eines Feed-Elements ändert, revidiert TopicEmbed.import den Beitrag mit dem Feed-Inhalt (topic_embed.rb#L147-L152) und umgeht dabei alles, was der Create-Modifier getan hat. Ein Blogger, der einen Beitrag bearbeitet, verwandelt ein vom Plugin formatiertes Thema stillschweigend wieder in Feed-Text. Ein Modifier für die Update-Änderungen, der topic_embed_import_create_args spiegelt, würde dies schließen.

Die Workarounds für 2 und 3 bestehen darin, TopicEmbed.import und den Poll-Job voranzustellen (Prepend). Das ist brüchig: main hat seitdem ein truncate:-Schlüsselwort zu TopicEmbed.import hinzugefügt, was jede Kapselung bricht, die die Signatur von 2026.7 spiegelt – wir mussten ein Release veröffentlichen, nur um es durchzureichen. Dokumentierte Hooks würden diese Art von Brüchen vermeiden.