Guard strict Soulseek album wishlist downloads - #1013
Conversation
|
Follow-up from live validation on my NAS: I tightened the strict Soulseek album guard so it compares completed files against the requested album track count, not only the selected Soulseek folder's own file count. This catches the case where Soulseek returns a folder that is internally complete, e.g. 3/3 files, but the wishlist album expects 10 tracks. In strict atomic album mode that now fails the album batch instead of falling through to per-track staging/downloads. Validation added:
|
13f41dc to
72c2d47
Compare
|
Follow-up from another live NAS validation pass: I found one more re-download loop that is separate from atomic album publishing. Repro observed locally:
I pushed a small follow-up commit to this draft PR:
Validation:
|
|
Follow-up from the live NAS/Plex setup after testing the latest I pushed the exact deployed workaround branch here for traceability: Commit: What was still happening on the live setup:
What the deployed branch adds on top of the previous strict-album guard work:
Live validation on the user NAS:
This branch is intentionally a trace of the deployed NAS patch rather than a polished minimal PR. If useful, the smallest upstreamable follow-up is probably the atomic-unavailable deferral/cooldown behavior plus replacing the remaining remove-on-terminal-failure path with defer-on-terminal-failure. |
Summary
singleorepalbum_downloads.atomic_publishis enabled, skip album-cycle residual tracks instead of submitting them as orphan per-track downloadsWhy
This preserves the “publish only complete albums” guarantee for Soulseek wishlist album downloads. Without these guards, an album wishlist item can still leak into the classic per-track flow via classification, residual grouping, or album-bundle fallback, which can publish partial albums or isolated tracks.
Tests
python -m pytest tests\\wishlist\\test_classification.py tests\\wishlist\\test_automation.py tests\\test_album_bundle_dispatch.py -qpython -m ruff check core\\wishlist\\classification.py core\\wishlist\\processing.py core\\downloads\\album_bundle_dispatch.py tests\\wishlist\\test_classification.py tests\\wishlist\\test_automation.py tests\\test_album_bundle_dispatch.py