Skip to content

[3.x] Support pages with more output file extensions (Convert RSS feed to a Hyde page)#2530

Merged
emmadesilva merged 6 commits into
v3/non-html-pagesfrom
v3/non-html-pages-convert-rss-feed
Jul 13, 2026
Merged

[3.x] Support pages with more output file extensions (Convert RSS feed to a Hyde page)#2530
emmadesilva merged 6 commits into
v3/non-html-pagesfrom
v3/non-html-pages-convert-rss-feed

Conversation

@emmadesilva

@emmadesilva emmadesilva commented Jul 13, 2026

Copy link
Copy Markdown
Member

What changed (mirrors part A): RssFeedPage extends InMemoryPage lives next to its generator, resolves RssFeedGenerator from the container in compile() (rebind verified by test), registers in HydeCoreExtension::discoverPages() behind Features::hasRss() with the user-override skip check, and hides itself from navigation and the sitemap. GenerateRssFeed is removed, build:rss builds the registered route's page via StaticPageBuilder, and BuildTaskService now has no feature-gated tasks left (the Features import went with it).

Two deliberate divergences from the sitemap, both recorded in the epic:

  • Verbatim filenames. The route key comes from hyde.rss.filename, and the old task wrote any configured name as-is — but the InMemoryPage extension allowlist would have turned feed.rss into feed.rss.html. RssFeedPage overrides identifierHasExplicitOutputExtension() to always use the configured filename as the literal output path, preserving old behavior for any extension (or none). I added a qualification to the epic's D2 open decision: the subclass override works as a first-party escape hatch, but the option-(b) call for user-land make() callers stays with PR 8.
  • No URL guard on build:rss. The old RSS task never had one (unlike the sitemap task), so the explicit command still generates the feed regardless of feature conditions — each command keeps the semantics of the task it replaced.

Verification: RssFeedPageTest (14 tests) covers the three-way feature gating (URL, posts, config), custom and verbatim filenames, rebind, both D5 override paths end-to-end, and build-manifest/route:list presence; a realtime-compiler test serves feed.xml with application/xml. Full regression protocol ran clean against the part-A merge baseline: Unit failure lists identical, Feature lists identical after one real fallout (PageCollectionTest/RouteCollectionTest create posts, so the feed page appeared in their exact-collection assertions — they now disable RSS in setUp() like they already did the sitemap), FeatureHyde and Realtime Compiler suites fully pass, HydeStan reports no errors, and the CLI smoke shows both SitemapPage and RssFeedPage in route:list with build:rss producing valid feed XML. Release notes and UPGRADE.md were extended to cover both halves of the conversion.

emmadesilva and others added 6 commits July 13, 2026 21:13
The RSS feed is now a route: registered as an in-memory page behind
Features::hasRss(), compiled through the standard build, and skipped when
a user-defined page already claims the configured feed route key. The
contents resolve the RssFeedGenerator from the service container at
compile time so the implementation can be swapped with a container rebind.
The configured hyde.rss.filename is used verbatim as the output path,
preserving support for filenames outside the default recognized
non-HTML extensions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Removes the GenerateRssFeed post-build task now that the feed page is
compiled through the standard build, and rewires the build:rss command to
build the registered page (or a new instance when the route is not
registered, preserving the old task behavior where the explicit command
generates the feed regardless of the feature conditions) through the
StaticPageBuilder.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Covers the feature-gated route registration including the post and site URL
requirements, configured filenames used verbatim for any extension,
compilation through the build command including build manifest and route
list presence, the container rebind customization tier, user-defined pages
suppressing the generated page through both booting callbacks and
extensions, and the realtime compiler serving the feed with the XML
content type.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…e conversion

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
These tests create posts while the monorepo test environment configures a
site URL, so the feed page would now appear in their exact collection
assertions. The feed route registration itself is covered by RssFeedPageTest.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@emmadesilva emmadesilva changed the title 3.x] Support pages with more output file extensions (Convert RSS feed to a Hyde page) [3.x] Support pages with more output file extensions (Convert RSS feed to a Hyde page) Jul 13, 2026
@codecov

codecov Bot commented Jul 13, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (205fea8) to head (8199923).

Additional details and impacted files
@@                  Coverage Diff                  @@
##             v3/non-html-pages     #2530   +/-   ##
=====================================================
  Coverage               100.00%   100.00%           
- Complexity                1742      1747    +5     
=====================================================
  Files                      175       175           
  Lines                     4349      4359   +10     
=====================================================
+ Hits                      4349      4359   +10     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@emmadesilva
emmadesilva merged commit ef9d524 into v3/non-html-pages Jul 13, 2026
7 checks passed
@emmadesilva
emmadesilva deleted the v3/non-html-pages-convert-rss-feed branch July 13, 2026 19:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant