- Routing (step 5): organize-by-playlist tracks no longer set the per-track _playlist_folder_mode flag, so they import NORMALLY into Artist/Album — exactly what a normal download does. _playlist_name provenance is kept (origin.py). - Triggers (step 4): build the playlist folder from the batch's own payload at both end-of-flow points — the all-owned path in master.py (no downloads, so the lifecycle never runs) and the batch-complete hook in lifecycle.py (after downloads). Both gated on playlist_folder_mode, both non-fatal. Works for the all-owned case (the smack test that did nothing before) and for mixed owned/downloaded, with no source-ID or mirrored-playlist dependency. The materialized folder uses the default ./Playlists root + symlink mode until the Settings UI is added. Updated the master test to assert the new contract (provenance kept, routing flag gone). 979 tests pass. |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| test_album_bundle_staging_sweep.py | ||
| test_album_serialize_drain.py | ||
| test_background_download_worker.py | ||
| test_deezer_pinning.py | ||
| test_download_engine.py | ||
| test_download_orchestrator.py | ||
| test_downloads_cancel.py | ||
| test_downloads_candidates.py | ||
| test_downloads_cleanup.py | ||
| test_downloads_history.py | ||
| test_downloads_lifecycle.py | ||
| test_downloads_master.py | ||
| test_downloads_post_processing.py | ||
| test_downloads_staging.py | ||
| test_downloads_status.py | ||
| test_downloads_task_worker.py | ||
| test_downloads_validation.py | ||
| test_file_finder.py | ||
| test_hifi_pinning.py | ||
| test_lidarr_pinning.py | ||
| test_playlist_folder_exists.py | ||
| test_qobuz_pinning.py | ||
| test_rate_limit_policy.py | ||
| test_soulseek_pinning.py | ||
| test_soundcloud_pinning.py | ||
| test_tidal_pinning.py | ||
| test_track_detail.py | ||
| test_track_link.py | ||
| test_track_metadata_backfill.py | ||
| test_wishlist_aggregator.py | ||
| test_youtube_pinning.py | ||