Backward Compatibility & Migrations
This page outlines breaking changes, purged legacy aliases, and migration steps when upgrading the gem.
0.27.0
Section titled “0.27.0”Upgrade notes for configs and integrators targeting gem 0.27.0 (current master after 0.26.0):
- MCP result envelope — Every MCP tool returns
{ ok, next_step, guidance, payload }in text andstructuredContent. Readpayload.items,payload.yaml, andpayload.rss; scrape text is not a raw item array. - MCP AutoFallback —
scrape_urlandcapture_configwithstrategy: "auto"run Faraday → Botasaurus in one call.inspect_urlwithautostays on Faraday (pinbotasauruswhen you need browser rendering for inspect). - Capture output —
html2rss captureand MCPcapture_configemit an items selector plusenhance: trueonly (no per-field title/url/description selector soup). Capture stampsstrategy:when AutoFallback selects a concrete transport. - CLI
--explain—html2rss auto --explainandhtml2rss capture --explainprint telemetry JSON on stderr; stdout stays the feed or YAML. Status includesadmission_dropswhen Cleanup dropped items. Html2rss.auto_feed_result— URL-only auto discovery returnsFeedResultwith the samestatustelemetry as config builds.request.botasaurusOpenAPI 2.0 — Keys must match the scrape-APIScrapeRequest(unknown keys rejected). Usescroll: true(notscroll_to_bottom),window_size: { width:, height: }(not a two-item array), andwait_timeout_secondsin1..20. See Strategy.- Botasaurus wire format — Client expects OpenAPI 2.0
ScrapeSuccess/ScrapeErrorenvelopes from the scrape API. --limitdefault — Auto discovery default is25(AutoSource::DEFAULT_LIMIT).
Run html2rss validate config.yml after editing Botasaurus options.
0.26.0
Section titled “0.26.0”Upgrade notes for configs and integrators targeting gem 0.26.0:
- Browserless strategy removal — The
browserlessstrategy,puppeteer-rubydependency, interaction budgets, andrequest.browserless.*options have been completely removed. - Botasaurus as browser transport — Browser-based scraping and anti-bot bypassing now run through
botasaurus(BOTASAURUS_SCRAPER_URL). Usestrategy: auto(which triesfaraday->botasaurus) or pinstrategy: botasaurusdirectly.
0.25.0
Section titled “0.25.0”Upgrade notes for configs and integrators targeting gem 0.25.0:
- Removed
linkselector alias — Custom selector configurations must use the canonicalurlkey. The legacylinkselector alias and exclusivity checks have been removed. autoarticle limit (--limit N) — Discovery supports a configurable limit (--limit NCLI flag). Default was20in 0.25.0; 0.27.0 default is25(Html2rss.auto_source(url, limit: 25)).- Channel metadata in
auto—auto_sourceautomatically extracts channel-levelauthorandimage(favicon, touch-icon, or OpenGraph images) from the host page. - Actionable
NoFeedItemsExtractederror —automode fails loud with diagnostic surface classifications (blocked surface, app-shell, unsupported extraction surface) when zero items are found.
0.24.0
Section titled “0.24.0”Upgrade notes for configs and integrators targeting gem 0.24.0:
autostrategy chain — Defaultstrategy: autoisfaraday→botasaurusonly. Pinstrategy: browserless(or--strategy browserless) when you need Browserless preload/interaction; Browserless is not a fallback tier.- RSS enclosures — Configure media with the
enclosureselector. RSS does not promoteimageinto<enclosure>; images stay on the description / JSON Feedimage. - Ruby dual-format / telemetry — Prefer
Html2rss.feed_resultfor one scrape that must render RSS and JSON Feed (or be Marshal-cached). Readresult.status.to_hfor scrape telemetry (selected_strategy,attempt_count,strategy_attemptsunderauto).
Removed Legacy Selector Aliases
Section titled “Removed Legacy Selector Aliases”In previous versions, html2rss accepted legacy selector names with a deprecation warning. These shims have been removed:
| Removed Name | Required Name | Description |
|---|---|---|
link |
url |
Item destination URL |
pubDate |
published_at |
Item publication date |
updated |
published_at |
Item publication date |
Migration Example
Section titled “Migration Example”Update any occurrences of link, pubDate, or updated in your selectors block to url or published_at:
# Deprecated / Removedselectors: link: selector: "a.title" extractor: "href" updated: selector: ".date"# Current & Requiredselectors: url: selector: "a.title" extractor: "href" published_at: selector: ".date"Removed Channel Attributes
Section titled “Removed Channel Attributes”strategy and headers were previously tolerated inside the channel block. These legacy shims have been removed. Both keys must now be placed at the top level of your feed configuration:
# Deprecated / Removedchannel: url: "https://example.com/articles" strategy: botasaurus headers: User-Agent: "CustomAgent/1.0"# Current & Requiredstrategy: botasaurusheaders: User-Agent: "CustomAgent/1.0"channel: url: "https://example.com/articles"Migration Checklist
Section titled “Migration Checklist”When upgrading to 0.27.0 or later:
- MCP integrators: Read tool results from the envelope
payload; configureBOTASAURUS_SCRAPER_URLon the MCP process env. - Align
request.botasauruswith OpenAPI 2.0: Usescroll,{ width, height }forwindow_size, andwait_timeout_secondsin1..20(see Strategy). - Validate configurations: Run
html2rss validate config.yml.
When upgrading from releases before 0.26.0:
- Migrate Browserless to Botasaurus: Use
strategy: botasaurusorstrategy: autowithBOTASAURUS_SCRAPER_URL. - Rename URL selectors: Use
urlrather thanlink. - Rename date selectors: Use
published_atrather thanupdatedorpubDate. - Move channel-level transport keys: Put
strategyandheadersat the top level of the YAML file. - Use
enclosurefor RSS media: Select podcast/media URLs withenclosure;imagedoes not become RSS<enclosure>. - Prefer
feed_resultfor dual-format / cache: UseHtml2rss.feed_result/Html2rss.auto_feed_resultandstatus.to_h.
