RSS 폴링: 플러그인을 위한 확장 포인트(피드 폼 아웃렛, 가져오기 시 피드 ID, 업데이트 경로 훅)

RSS Polling을 위한 작은 companion 플러그인(discourse-rss-onebox)을 만들었습니다: 가져온 블로그 포스트는 해당 기사의 onebox로 렌더링되며, 피드 요약, YouTube 설명 및 제목 형식은 선택적으로 사용할 수 있습니다. 세 가지 결함으로 인해 문서화된 훅을 사용하는 대신 코어 메서드를 래핑해야 했습니다.

  1. 피드 폼에 플러그인 아웃렛이 없음. rss-polling-feed-form.gjs#L287-L351에는 PluginOutlet이 없으며, 업데이트 계약은 고정된 속성 집합만 허용합니다(update.rb#L9-L14). 플러그인이 피드별 옵션을 추가할 수 없으므로, 우리는 별도의 관리자 페이지가 필요했습니다. 아웃렛과 추가 필드를 영속화하는 방법(예: 피드 커스텀 필드)이 있다면 이를 해결할 수 있습니다.

  2. 피드 ID가 가져오기에 전달되지 않음. 폴링 잡은 rss_feed_id를 알고 있지만, TopicEmbed.import(poll_feed.rb#L110)와 topic_embed_import_create_args 수정자(topic_embed.rb#L108)는 이를 절대 받지 못합니다. 우리는 폴링 잡을 래핑하여 이를 포착합니다. 이를 옵션으로 전달하면 플러그인이 피드별로 동작할 수 있게 됩니다.

  3. 업데이트 경로에 훅이 없음. 피드 항목의 내용이 변경되면, TopicEmbed.import가 피드 내용으로 게시물을 개정(revise)합니다(topic_embed.rb#L147-L152). 이는 생성 수정자가 수행한 작업을 우회합니다. 블로거가 게시물을 편집하면 플러그인 형식의 토픽이 조용히 피드 텍스트로 되돌아갑니다. topic_embed_import_create_args를 반영한 업데이트 변경용 수정자가 있다면 이를 막을 수 있습니다.

2번과 3번에 대한 우회 방법은 TopicEmbed.import와 폴링 잡 앞에 메서드를 삽입하는 것입니다. 이는 취약합니다: main 브랜치에 TopicEmbed.import에 truncate: 키워드가 추가되었는데, 이는 2026.7 시그니처를 반영하는 모든 래퍼를 깨뜨립니다. 우리는 이를 전달하기 위해 릴리스를 발행해야만 했습니다. 문서화된 훅이 있다면 이러한 유형의 깨짐을 방지할 수 있습니다.