Release v0.6.2 preview#20
Conversation
|
Claude finished @MapleEve's task in 5m 19s —— View job PR Review CompleteReviewing release v0.6.2-preview PR with focus on:
SummaryThis release PR introduces solid improvements to Plaud sync reliability and CI workflow robustness. The code changes are well-tested, properly scoped, and maintain backward compatibility. I found no blocking issues, but have several recommendations for improvement. ✅ Strengths
🔍 Findings1. Potential infinite loop in
|
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #20 +/- ##
==========================================
+ Coverage 84.02% 84.13% +0.11%
==========================================
Files 75 75
Lines 2329 2358 +29
==========================================
+ Hits 1957 1984 +27
- Misses 372 374 +2
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
Prepares the v0.6.2-preview release by improving Plaud sync completeness/reliability (pagination + audio backfill), tightening Plaud error handling, and updating tests/docs/versioning to match the new behavior.
Changes:
- Add Plaud recordings pagination (
listAllRecordings) and use it in the Plaud provider to avoid only syncing the first batch. - Allow sync to backfill missing local audio for same-version recordings when the source still provides an audio URL.
- Bump
0.6.2-previewversion/changelog/docs and update the release workflow token fallback for release-notes generation.
Reviewed changes
Copilot reviewed 17 out of 18 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| src/lib/data-sources/providers/plaud/client.ts | Adds web-like headers, more robust error parsing, and listAllRecordings pagination helper. |
| src/lib/data-sources/providers/plaud/definition.ts | Switches Plaud provider to consume listAllRecordings() instead of a single huge limit. |
| src/lib/sync/sync-recordings.ts | Avoids skipping same-version items when local audio is missing and the source can provide audio (backfill). |
| src/tests/plaud.test.ts | Expands tests for new headers, pagination behavior, and non-JSON error handling. |
| src/tests/sync.test.ts | Adds coverage for same-version audio backfill vs. skip behavior. |
| .github/workflows/release.yml | Allows token fallback when COPILOT_GITHUB_TOKEN is not configured. |
| package.json | Bumps version to 0.6.2-preview. |
| CHANGELOG.md | Adds 0.6.2-preview notes focused on provider sync reliability. |
| README.md | Updates release badge/version text and documents Plaud audio backfill behavior. |
| README.en.md | Same as README.md (English). |
| README.ja.md | Same as README.md (Japanese). |
| README.ko.md | Same as README.md (Korean). |
| docs/DEVELOPMENT.md | Updates current version + clarifies provider expectations re: pagination and audio backfill. |
| docs/DEPLOYMENT.md | Updates current version + backup note acknowledges post-restore sync backfill behavior. |
| docs/DATA_SOURCES.md | Documents Plaud continuous listing + audio backfill behavior. |
| docs/AUTO_SYNC.md | Documents full-list sync expectation + audio backfill behavior in later syncs. |
| docs/API.md | Updates current preview version reference. |
| bun.lock | Lockfile metadata update (configVersion). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| for (let page = 0; page < maxPages; page += 1) { | ||
| const response = await this.getRecordings( | ||
| skip, | ||
| pageSize, | ||
| options.isTrash ?? 0, | ||
| options.sortBy ?? "start_time", | ||
| options.isDesc ?? true, | ||
| ); | ||
| const items = response.data_file_list ?? []; | ||
|
|
||
| for (const item of items) { | ||
| if (!recordingsById.has(item.id)) { | ||
| recordingsById.set(item.id, item); | ||
| } | ||
| } | ||
|
|
||
| if (items.length < pageSize) { | ||
| break; | ||
| } | ||
|
|
||
| skip += items.length; | ||
| } |
| ); | ||
| } | ||
|
|
||
| async listAllRecordings( | ||
| options: ListAllPlaudRecordingsOptions = {}, | ||
| ): Promise<PlaudRecording[]> { | ||
| const pageSize = | ||
| Number.isFinite(options.pageSize) && Number(options.pageSize) > 0 | ||
| ? Math.floor(Number(options.pageSize)) | ||
| : DEFAULT_PLAUD_RECORDINGS_PAGE_SIZE; | ||
| const maxPages = | ||
| Number.isFinite(options.maxPages) && Number(options.maxPages) > 0 | ||
| ? Math.floor(Number(options.maxPages)) | ||
| : MAX_PLAUD_RECORDINGS_PAGES; | ||
| let skip = | ||
| Number.isFinite(options.skip) && Number(options.skip) > 0 | ||
| ? Math.floor(Number(options.skip)) | ||
| : 0; | ||
| const recordingsById = new Map<string, PlaudRecording>(); | ||
|
|
||
| for (let page = 0; page < maxPages; page += 1) { | ||
| const response = await this.getRecordings( | ||
| skip, | ||
| pageSize, | ||
| options.isTrash ?? 0, | ||
| options.sortBy ?? "start_time", | ||
| options.isDesc ?? true, | ||
| ); | ||
| const items = response.data_file_list ?? []; | ||
|
|
||
| for (const item of items) { | ||
| if (!recordingsById.has(item.id)) { | ||
| recordingsById.set(item.id, item); | ||
| } | ||
| } | ||
|
|
||
| if (items.length < pageSize) { | ||
| break; | ||
| } | ||
|
|
||
| skip += items.length; | ||
| } | ||
|
|
||
| return Array.from(recordingsById.values()); | ||
| } |
| env: | ||
| COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} | ||
| COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN || github.token }} | ||
| GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN || github.token }} |
Summary
Validation
Release notes