Sync: preserve permanent skipped resolutions #37

Closed
opened 2026-09-05 20:37:39 +00:00 by hermes · 1 comment
Owner

Context

Post-merge review of PR #36 found that ordinary sync resolves every fetched track before consulting plugin state. A track marked skipped can therefore be automatically associated and changed to matched, contrary to SPEC.md §7.

Task

Preserve persisted permanent-skip decisions during ordinary and dry-run sync. Skipped tracks must not be offered to automatic matching, written to beets item metadata, or included in playlistmanager contents. Refreshing current membership and Apple descriptive metadata must not clear the skip.

Acceptance criteria

  • A regression test fails against current main and proves the bug.
  • Ordinary sync preserves resolution_state = skipped.
  • A valid automatic candidate remains unassociated and omitted from playlist contents.
  • Explicit beet apple match remains the only workflow that clears the skip.
  • Full tests and package/CLI validation pass.
## Context Post-merge review of PR #36 found that ordinary sync resolves every fetched track before consulting plugin state. A track marked `skipped` can therefore be automatically associated and changed to `matched`, contrary to `SPEC.md` §7. ## Task Preserve persisted permanent-skip decisions during ordinary and dry-run sync. Skipped tracks must not be offered to automatic matching, written to beets item metadata, or included in playlistmanager contents. Refreshing current membership and Apple descriptive metadata must not clear the skip. ## Acceptance criteria - [ ] A regression test fails against current `main` and proves the bug. - [ ] Ordinary sync preserves `resolution_state = skipped`. - [ ] A valid automatic candidate remains unassociated and omitted from playlist contents. - [ ] Explicit `beet apple match` remains the only workflow that clears the skip. - [ ] Full tests and package/CLI validation pass.
Author
Owner

Completed in coop/beets-appleplaylists by implementation commit 20c72a5a93220c6b90b1dff89a4de82baca663d9, merged through PR #38 as ec5da9ee62f4f3b6bfcf6887e7f9e319ddedb8d5.

Regression coverage exercises both ordinary and dry-run sync. The final validation result was 97 tests passing with warnings promoted to errors, plus focused lint/format checks, compileall, isolated CLI help, package build, and git diff --check.

Completed in `coop/beets-appleplaylists` by implementation commit `20c72a5a93220c6b90b1dff89a4de82baca663d9`, merged through PR #38 as `ec5da9ee62f4f3b6bfcf6887e7f9e319ddedb8d5`. Regression coverage exercises both ordinary and dry-run sync. The final validation result was 97 tests passing with warnings promoted to errors, plus focused lint/format checks, compileall, isolated CLI help, package build, and `git diff --check`.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coop/beets-appleplaylists#37
No description provided.