Skip to content

feat(podcast): automated RSS feed sync + backfill eps 221-234#38

Merged
HeyItsGilbert merged 1 commit into
mainfrom
feat/podcast-sync
Jun 23, 2026
Merged

feat(podcast): automated RSS feed sync + backfill eps 221-234#38
HeyItsGilbert merged 1 commit into
mainfrom
feat/podcast-sync

Conversation

@HeyItsGilbert

Copy link
Copy Markdown
Member

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-commits content/podcast, mirroring discourse-sync.yml.
  • 14 new episodes (eps 221–234) generated by the first run.
  • ADR 0003 + plan updated to record the corrected design.

⚠️ The ADR's premise changed

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:

  1. Idempotency is keyed on the enclosure URL, then guid, then episode. Every existing modern file carries the enclosure as podcast_url; none carried a guid, so the URL is the universal key.
  2. itunes:episode runs one ahead of the repo convention (which parses the number from the Podbean filename, ..._episode_NNN_...). The script derives episode from the filename and uses itunes:episode only to disambiguate the one special whose filename glues a suffix onto the number (episode_2298xv9d → 229).
  3. WS3 is subsumed — the feed carries eps 221–234, so the first run backfilled the whole gap. No scrape was performed.

Because the Action auto-commits with no review gate

  • Guest extraction is conservative (high-confidence bio + with <Name> title patterns, ported from scripts/update-podcast-authors.py). All 14 bylines are correct; the three ambiguous bar-sessions were left without a guest rather than guessed.
  • Body boilerplate (Andrew's links, PDQ Discord, Summit promo, the redundant YouTube line) is stripped via a tight maintained list; episode-specific links survive.
  • The anti-reconcile rule from ADR 0003 still stands: this must never widen into a delete/reconcile pass.

Verification

  • Dry-run → 14 adds / 220 skips; second run = 0 adds (idempotent).
  • hugo --gc --minify exits 0; new episode pages render with YouTube thumbnail/embed, audio player, and guest byline.
  • Committed blobs are clean LF (autocrlf normalized).

Reviewer notes / open calls

  • duration omitted to keep synced frontmatter identical to existing files (none carry it). Easy to add (itunes:duration, seconds) if wanted.
  • The workflow sets permissions: contents: write explicitly (discourse-sync.yml relies on the default token). Confirm branch protection / token settings allow the Action to push.

🤖 Generated with Claude Code

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
@netlify

netlify Bot commented Jun 23, 2026

Copy link
Copy Markdown

Deploy Preview for powershellorg ready!

Name Link
🔨 Latest commit e01994a
🔍 Latest deploy log https://app.netlify.com/projects/powershellorg/deploys/6a39dc382865c30008115fef
😎 Deploy Preview https://deploy-preview-38--powershellorg.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@HeyItsGilbert HeyItsGilbert merged commit 9fcc7d7 into main Jun 23, 2026
5 checks passed
@HeyItsGilbert HeyItsGilbert deleted the feat/podcast-sync branch June 23, 2026 01:19
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