feat(podcast): automated RSS feed sync + backfill eps 221-234#38
Merged
Conversation
Add an add-only sync that generates episode files from the Podbean feed, plus a weekly scheduled Action that auto-commits new episodes (mirroring discourse-sync.yml). The first run backfills the gap between the repo (ep 220) and the feed (ep 234). The feed turned out to carry the full archive rather than a 10-item window, so idempotency is keyed on the enclosure URL (every existing file has it) and the episode number is parsed from the Podbean filename, since itunes:episode runs one ahead of the repo convention. This makes the separate WS3 scrape unnecessary; ADR 0003 and the plan are updated to record the corrected design. Guest extraction stays conservative (high-confidence only) because the Action commits without review. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Qv5XTRCp9s9cH6SikDkrnS
✅ Deploy Preview for powershellorg ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements Workstream 4 (ongoing RSS sync) from
docs/podcast-sync-plan.md, and in doing so makes Workstream 3 (backfill) unnecessary..github/scripts/sync-podcast-feed.js— add-only sync (ESM +node-fetch, no new deps). Generates episode files from the Podbean feed, never edits or deletes. Supports--dry-run..github/workflows/podcast-sync.yml— weekly (Tuesday, after the Monday release) +workflow_dispatch; auto-commitscontent/podcast, mirroringdiscourse-sync.yml.ADR 0003 assumed the feed was truncated to 10 items. It is not — the live feed carries the full 234-item archive. The chosen design (incremental, add-only) still holds and is even safer, but it has consequences worth a careful look:
guid, thenepisode. Every existing modern file carries the enclosure aspodcast_url; none carried aguid, so the URL is the universal key.itunes:episoderuns one ahead of the repo convention (which parses the number from the Podbean filename,..._episode_NNN_...). The script derivesepisodefrom the filename and usesitunes:episodeonly to disambiguate the one special whose filename glues a suffix onto the number (episode_2298xv9d→ 229).Because the Action auto-commits with no review gate
with <Name>title patterns, ported fromscripts/update-podcast-authors.py). All 14 bylines are correct; the three ambiguous bar-sessions were left without a guest rather than guessed.Verification
hugo --gc --minifyexits 0; new episode pages render with YouTube thumbnail/embed, audio player, and guest byline.Reviewer notes / open calls
durationomitted to keep synced frontmatter identical to existing files (none carry it). Easy to add (itunes:duration, seconds) if wanted.permissions: contents: writeexplicitly (discourse-sync.yml relies on the default token). Confirm branch protection / token settings allow the Action to push.🤖 Generated with Claude Code