Skip to content

feat(sync): latest-episode tips carry the episode's served ID - #1152

Merged
ashwkun merged 1 commit into
masterfrom
sync-tip-served-ids
Oct 20, 2026
Merged

ashwkun merged 1 commit into
masterfrom
sync-tip-served-ids

Conversation

@ashwkun

@ashwkun ashwkun commented Oct 20, 2026

Copy link
Copy Markdown
Member

Summary

The latest-episode tip the catalog stores for each show (latest_ep_id, used by Home, trending and bootstrap) now carries the episode's served ID, so old builds see one ID per episode everywhere.

Motivation

Episode lists, single episodes, sync and notifications already use served IDs. Tips still stored Podcast Index's ID. For an episode Podcast Index renumbered (13 shows so far) or one first served from the live feed, Home could show it under a different ID than the rest of the app.

What changed

  • lib/episode-identity.js tipIdentity: the tip's served ID by catalog key, else Podcast Index's ID as an alias in the same show, else that ID (stage 4 records it with that ID later in the run).
  • Stage 3: writes that ID to latest_ep_id, plus latest_ep_key and latest_ep_eid (columns added with the episode book). A failed lookup keeps Podcast Index's ID and logs a warning. Change detection and the tip queue keep Podcast Index's own ID.
  • lib/catalog-rows.js tipUpdateArgs: takes the identity; the key is always bound as text.

Behavior & compatibility

  • Listeners: no visible change for nearly every show (the served ID is Podcast Index's ID); renumbered episodes keep the ID phones already have.
  • Deploy: the sync runs outside GitHub Actions.

Impact (required)

User impact — pick exactly one

  • user-impact-critical
  • user-impact-high
  • user-impact-medium
  • user-impact-low
  • no-user-impact

Backend — optional, pairable with any user-impact level

  • backend-change

Release copy (verbatim — highest priority)

CHANGELOG.md (required developer copy)

Changed

  • Latest-episode tips in the catalog use each episode's stable ID.

README What's New / Upcoming (required for user-impact changes)

Test plan

  • npm run test:sync --prefix scripts: 146 tests. 2 are new: the tip identity by key, by alias in the same show, else Podcast Index's ID; and the tip update binding the served ID with a text key.

@ashwkun ashwkun added no-user-impact No listener-facing change (CI, docs, internal) backend-change Touches backend/proxy/infra — pairable with any user-impact level labels Oct 20, 2026
@coderabbitai

coderabbitai Bot commented Oct 20, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 4 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 2 included reviews currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Repository: boxcreate/boxlore/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 0735d390-abde-4118-adb6-d8aeac2ba8b4
📥 Commits

Reviewing files that changed from the base of the PR and between edc5930 and 47f4cdc.

📒 Files selected for processing: 6
  • scripts/README.md
  • scripts/sync/03-sync-episodes.js
  • scripts/sync/lib/catalog-rows.js
  • scripts/sync/lib/catalog-rows.test.js
  • scripts/sync/lib/episode-identity.js
  • scripts/sync/lib/episode-identity.test.js
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@sonarqubecloud

Copy link
Copy Markdown

@ashwkun
ashwkun merged commit 8ac4240 into master Oct 20, 2026
11 of 12 checks passed
@ashwkun
ashwkun deleted the sync-tip-served-ids branch October 20, 2026 18:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backend-change Touches backend/proxy/infra — pairable with any user-impact level no-user-impact No listener-facing change (CI, docs, internal)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant