Repository navigation
fix(sync): adopt valid replacements during save readback - #487
Merged
Merged
Conversation
Deploying podnotes with
|
| Latest commit: |
3acdd4f
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://208e20b4.podnotes.pages.dev |
| Branch Preview URL: | https://fix-false-save-notice.podnotes.pages.dev |
chhoumann
added a commit
that referenced
this pull request
Oct 15, 2026
* docs(transcripts): describe published transcripts and the from-audio command * docs: port sync, private feed, capture, note, and local file changes * docs: port player, API, template, settings, and import changes * docs(readme): mention free transcripts from the feed * docs: apply round 1 review fixes and move save problems to their own page * docs: apply round 2 review fixes * docs: apply round 3 review fixes * docs(settings): keep the Search Podcasts section until the UI docs pass * docs: apply round 4 review fixes * docs: apply round 5 review fixes * docs: apply round 6 review fixes * docs: apply round 7 review fixes * docs: apply round 8 review fixes * docs: apply round 9 review fixes * docs: apply round 10 review fixes * docs: apply round 11 review fixes * docs: apply round 12 review fixes * docs: apply round 13 review fixes * docs: apply round 14 review fixes * docs: apply round 15 review fixes * docs: describe the v3 view, player, and settings for 2.22.0 Rewrites the pages that described the 2.21.1 view and settings, adds a page for the player, and rewrites docs/scripts/screenshots.mjs on the verify skill's screens tooling with the fixture library. The screenshots are provisional until the final visual pass merges. * docs: apply round 1 review fixes Adds an Update to 2.22.0 page, fixes the loaded-episode and offline wording, makes in-page links site-absolute, and adds a phone twin for the transcript shot. * docs: apply round 2 review fixes Corrects what happens after importing a 2.21.1 settings file, fits alt texts to their phone crops, and crops the first-run shot. * docs: apply round 3 review fixes * docs: apply round 4 review fixes * docs: describe the headset buttons as new for 2.21.1 users * docs: describe the final v3 UI and capture the final screenshots Applies #485's Docs at release items: Remove from Local files, Exit fullscreen, Open note in the Transcript panel, Set feed address off while offline, and the Download path warning. * docs: apply round 5 review fixes Name icon buttons by what a reader sees now that #485 gave them per-episode names, split the no-transcript paragraph into a list, scope the iPhone fullscreen sentence, and end phone note crops below the last whole block. * docs: share the screenshot script's scene helpers Move the seed plan, the docs' fixture library, episode notes made with PodNotes' commands, and the instance's CDP channel out of screenshots.mjs into scene.mjs, so the clip recorder can use them too. * docs: record the guide clips with videos.mjs node docs/scripts/videos.mjs records five clips in the isolated Obsidian with real mouse and touch input and a drawn pointer, at 2x through Electron's zoom, and writes H.264 MP4s with WebP posters and dark twins to docs/public/videos. * docs: show the guide clips on their pages Getting started, Capture timestamps, Use the player, Transcribe episodes, Use the queue and playlists, and Use private feeds each get a clip after a sentence that says what it shows. A clip plays muted on a loop, and readers who prefer reduced motion get its poster and controls instead. The docs README now describes the current screenshot script. * docs: apply the clip review fixes Pause clips when the reader turns on reduced motion, scroll Up next in the phone clip so the whole new queue shows, hide the drawn mouse arrow in touch clips, keep times out of clip alt text, where the site's directive syntax drops them, and take posters after the click ring fades. * docs: end the queue clip on the new order and clear the feed poster The phone clip now holds on Up next with the moved episode first, scrolls to the last episode, and scrolls back, and the private feed's poster has the pointer off the pasted address. * docs: open notes beside the player and merge synced files during a save Ports the Docs at release sections of #486 and #487. Notes that the player, the Transcript panel, and the podcast menu open go beside the PodNotes view in the main area. A file that sync replaces during a save merges without the save notice. * docs: record the queue clip without the grip's focus ring Since #486 a touch drag leaves no focus ring on the queue grip. * docs: say where a note opens in each layout Round 1 review: readers could not tell where a note opens with the view in a sidebar. One section on the notes page now covers the sidebar, the main area or a popout, phones, and a note that opens while another tab is active. Fix save problems and Sync now name both causes of the save notice. * docs: name each case of where a note opens Round 2 review: Where a note opens now says which tab a note takes in each layout, includes commands run from a note, and does not imply that a capture opens the note. Getting started and the update page note the phone exception. Sync says that a change written over between the read and the write shows no notice. * docs: note that 2.21.1 and 2.22.0 don't share an episode's later progress
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
A valid sync replacement between a save and its readback now merges pending edits without the false "could not save" Notice. Real failures still notify and retry. Private feed URLs are protected before a strict save completes.
Verification
npm run lint,npm run format:check,npm run typecheck, andnpm run build.npm run testwith 2,745 tests,npm run test:toolingwith 35 tests, andnpm run docs:buildwith all links and 112 legacy fragments valid.npm run test:e2eandnpm run test:e2e -- settings-tab.test.ts, withPODNOTES_OBSIDIAN_APP=/opt/Obsidian/obsidianfor 1.13.7. The sync fixture ishttps://example.com/synced.xml; private tests use synthetic URLs underprivate.example.Fixtures/Local Fixture.wavstart, pause, seek, resume, pause session kept three completed writes on both builds, with zero failures.npm run sizepassed at 102,441 gzip bytes, +226 bytes, with 559 bytes below the limit.All 14 wrong alternatives failed tests. Full test names and logs are in the evidence archive.
Release impact
No schema, settings format, public API, or migration change.
Docs at release
In
docs/src/content/docs/sync.md, under "Changes on two devices", describe merging a valid replacement observed during save readback without a failure Notice, with a follow-up write when local edits remain. Retain the warning for failed or unreadable writes. Published docs stay unchanged in this PR.Fixes #481
Note
Adopt valid
data.jsonreplacements during save readback inDataFileWriterWriteOutcometype (verified or different) and updatesDataFileAccessto return it from writes; an unchanged readback is treated as a failed save and retriedPodNotes.decodeDataFilein main.ts; startup migration now rejects when its write is not verifiedPodNotes.dataFileAccess,PodNotes.loadSettings, andDataFileWriter.writeMergedMacroscope summarized 3acdd4f.