Repository navigation
fix: make podcast name lookups exact and safe - #413
Merged
Merged
Conversation
Deploying podnotes with
|
| Latest commit: |
ca69f58
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://06aa35d0.podnotes.pages.dev |
| Branch Preview URL: | https://fix-name-lookups.podnotes.pages.dev |
This was referenced Oct 12, 2026
This was referenced Oct 12, 2026
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
Podcasts named
toStringcan now play, download, queue, and create notes. Names such as__proto__survive saves and reloads. Name-keyed maps are normalized at decode and store boundaries, including sync merge and import rollback.Same-titled episodes from different shows no longer share legacy progress or resolve to the wrong show in Played. Links to moved vault files play only when exactly one file has the original filename. Ambiguous links show a notice.
Refs #401. The pre-existing exact-path link failure without a Local Files entry is tracked separately in #410; stale queued file paths are tracked in #412.
Verification
npm run lint,npm run format:check,npm run typecheck,npm run build,npm run test, andnpm run docs:buildpass. Unit suite: 1,681 tests across 95 files. The original focused regressions show 61 baseline failures and 286 passes with the fix. Review corrections add ten reproduced failures; all 66 URI tests now pass.podnotes-fix-name-lookups. Reproduced on master before edits and replayed Settings, playback, download, note, queue, save/reload, Favorites, Played, direct URIs, and clicked Markdown links. Moved-video, legacy folder-space links, and folder-shadow replays also pass. No captured runtime errors. Fixture feeds:http://127.0.0.1.nip.io:30685/feed.xml(toString) and/feed-b.xml(__proto__), with 60-second WAV audio. Local link: missingFixtures/Missing/Twin.wav, then one or two actual files namedTwin.wav, timestamp 12 seconds.npm run test:e2e: 70 tests across 11 files pass. The initial run exposed a fixture collision (corrected) and an external async serializer bug (obsidian-e2e#44); the final run uses a fresh vault.npm run size: 90,148 gzip bytes at level 9, +315 from 89,833; 283,516 raw bytes. Both budgets pass.Created note and feed | Separate progress | Ambiguity notice | Unique moved file playing | Moved video
Release impact
No schema version, stored JSON shape, or public API signature changes. Existing data loads through the same codec. Runtime name-keyed records have null prototypes. The moved-file fallback uses the vault's full filename, including extension, rather than the Local Files playlist title. Existing raw and legacy-space exact paths retain their candidate order. If no exact path exists, literal
+filename matches take precedence. Moved MP4/WebM files keep their explicit video choice. No identity redesign or player source-selection changes.Docs at release
In
docs/src/content/docs/local_files.mdandtimestamps.md, state that a missing path resolves by its full filename only when exactly one vault file matches. With no match, PodNotes saysNo vault file is named "<name>".With multiple matches, it asks the user to update the link with the correct path. Document the unchanged legacy+path order and that moved video retains its selected type. Add the special-name and same-titled progress fixes to the change notes. Documentation content is unchanged in this PR.Note
Fix podcast name lookups to be exact and prototype-safe
__proto__andtoStringare treated as ordinary namesownRecordin ownRecord.ts and arecordStorewrapper in recordStore.ts; stores, codecs, merge logic, and settings import rollback all route through thempodcastNamesAgreeandgetPlayedEpisodein episodeStatus.tssafeEntriesis removed from codecUtils.ts andDEFAULT_SETTINGSmaps are now null-prototype objects; out-of-tree code that relied on object literals or the removed helper would need updatingMacroscope summarized ca69f58.