..
artists
Direct ID lookup in Enhance Quality, like Download Discography
2026-05-06 12:05:41 -07:00
automation
video automations: migrate the Download->Process rename in seeded DBs
2026-06-25 22:33:03 -07:00
blocklist
database
discovery
Remove old auto-acting Quality Scanner tool (replaced by Quality Upgrade Finder job)
2026-06-13 12:14:45 -07:00
downloads
Playlists: wire materialize triggers + retire per-track routing flag
2026-06-12 13:37:59 -07:00
enrichment
#868 : disambiguate same-name artists by owned-catalog overlap during enrichment
2026-06-13 14:57:17 -07:00
imports
library
matching
#845 tests: lift history-path resolver to core/ + seam-test the delete-safety
2026-06-11 11:07:25 -07:00
media_server
Navidrome: pin music-folder selection by id, not name (survives renames)
2026-06-04 11:47:31 -07:00
metadata
Multi-artist tags: Search → Download Now finally knows its metadata source (Netti93)
2026-06-09 17:20:16 -07:00
playback
playlists
radio
Player revamp Phase 2: smart radio ranking (play-count + popularity)
2026-05-30 08:47:18 -07:00
repair_jobs
Quality Upgrade: best-in-class matching (direct track-ID tier, dedup-skip, duration guard)
2026-06-13 13:34:48 -07:00
search
Multi-artist tags: Search → Download Now finally knows its metadata source (Netti93)
2026-06-09 17:20:16 -07:00
static
stats
streaming
Stream button: the player never learns its stream is ready (2.6.5 regression)
2026-06-06 12:43:20 -07:00
sync
text
tools
test(amazon): update search_albums test for derived-from-tracks behavior
2026-05-19 18:22:56 -07:00
video
tests: add missing tests/video package marker
2026-06-23 10:54:27 -07:00
watchlist
webui
wishlist
Wishlist: manual "add to wishlist" now skips already-owned tracks ( #825 )
2026-06-09 10:55:45 -07:00
conftest.py
tests: isolate the VIDEO database too (never open the real video_library.db)
2026-06-19 23:02:38 -07:00
test_acoustid_error_reporting.py
test_acoustid_normalize_angle_annotations.py
test_acoustid_scanner.py
test_acoustid_skip_logic.py
test_acoustid_version_mismatch.py
test_admin_gating.py
test_album_bundle.py
#857 : custom in-container completed-downloads path for Torrent/Usenet sources (settings + UI; resolver already consumed the keys)
2026-06-13 07:15:02 -07:00
test_album_bundle_dispatch.py
test_album_completeness_job.py
test_album_mbid_consistency.py
test_amazon_outage.py
test_archive_pipeline.py
test_aria2_adapter.py
Add Aria2 to the torrent client list (Shdjfgatdif's request)
2026-06-11 22:29:40 -07:00
test_art_apply.py
test_art_preservation.py
test_artist_album_list_cache_nonspotify.py
#853 follow-up: don't cache a partial Deezer discography on mid-pagination error
2026-06-11 15:35:36 -07:00
test_artist_albums_cache_poisoning.py
test_artist_catalog_disambiguation.py
#868 : disambiguate same-name artists by owned-catalog overlap during enrichment
2026-06-13 14:57:17 -07:00
test_artist_db_record_endpoint.py
Artist detail: "DB Record" inspector — everything the DB knows about an artist
2026-06-11 16:57:48 -07:00
test_artist_export.py
Export: combine watchlist + library into one button with a scope selector
2026-06-11 23:10:54 -07:00
test_artist_full_detail_source_id.py
test_artist_sync_stale_guard.py
Artist Sync: unify with deep scan — server-diff stale removal, scoped to one artist
2026-06-10 19:43:25 -07:00
test_artist_top_tracks_clients.py
test_atomic_audio_save.py
test_audiodb_worker_stuck_track.py
test_auth_proxy.py
Security: trust a forward-auth proxy user header (Tier 3)
2026-06-10 20:57:48 -07:00
test_auth_usage_throttle.py
test_auto_sync_js.py
test_canonical_alternates.py
test_canonical_columns_migration.py
test_canonical_db.py
test_canonical_manual_lock.py
test_canonical_orchestration.py
test_canonical_resolver.py
test_canonical_version.py
test_canonical_version_job.py
test_config_save_retry.py
test_content_filter_regex.py
test_context_qualifier_match.py
test_cover_art_targets.py
test_create_finding_dedup_counter.py
test_credentials_endpoints.py
Security: trust a forward-auth proxy user header (Tier 3)
2026-06-10 20:57:48 -07:00
test_dashboard_events.py
test_database_io_resilience.py
test_database_update_health.py
#859 : DB-update stall watchdog + UI self-heal (no more wedged 'Starting...' / frozen bar)
2026-06-12 19:38:30 -07:00
test_database_update_reconcile_hook.py
test_db_genres_json_normalization.py
test_db_integrity.py
test_db_isolation_guard.py
tests: isolate the VIDEO database too (never open the real video_library.db)
2026-06-19 23:02:38 -07:00
test_db_migration_ledger.py
test_db_watchlist_amazon_id_migration.py
test_dead_file_cleaner_guard.py
test_debug_info_services.py
test_dedupe_source_ids.py
test_deezer_worker_artist_id_guard.py
test_discogs_collection_id_tagging.py
Discogs ( #848 follow-up): tag collection album IDs for consistency
2026-06-11 08:33:26 -07:00
test_discogs_collection_source.py
test_discogs_id_typing.py
test_discogs_track_count.py
test_discover_section_controller_js.py
test_download_orchestrator_soundcloud.py
test_download_origins.py
test_download_plugin_conformance.py
test_downloads_pagination.py
test_duplicate_detector_mount_paths.py
test_duplicate_detector_slskd_dedup.py
test_duplicate_keep.py
test_embed_known_source_ids.py
test_empty_folder_cleaner.py
Add Empty Folder Cleaner library-maintenance job (corruption's request)
2026-06-11 22:11:26 -07:00
test_enrichment_art_preservation.py
test_enrichment_artist_id_guard.py
test_enrichment_services.py
test_existing_album_folder.py
test_expired_download_cleaner.py
test_featured_artist_completion.py
test_genius_backoff.py
test_hifi_default_push.py
HiFi: auto-push genuinely-new default instances to existing installs once (so a newly-added working instance reaches everyone, not just Restore-Defaults clickers; removed defaults stay removed)
2026-06-13 09:31:15 -07:00
test_hifi_instance_methods.py
test_hls_parsing.py
test_image_cache.py
test_import_album_match_endpoint.py
test_import_singles_parallel.py
test_import_tag_preservation.py
test_integrity_failure_marks_task_failed.py
test_issue_837_find_add_preserves_playlist.py
test_jellyfin_album_thumb.py
test_launch_lock_gate.py
test_lb_series_detect.py
test_library_disk_usage.py
test_library_reorganize.py
#862 : Library Reorganize falls back to tag-mode when an album has no source ID (media-server libs now actually reorganize)
2026-06-12 20:05:50 -07:00
test_library_reorganize_orchestrator.py
test_library_retag_job.py
test_library_stream_fallback.py
test_library_tag_payload.py
test_library_track_identity.py
test_lidarr_download_client.py
test_liked_songs_playlist.py
test_listenbrainz_manager.py
test_listening_stats_batch_queries.py
test_login_endpoints.py
Login recovery (DB + backend): security question to reset a forgotten password
2026-06-10 22:24:54 -07:00
test_login_gate.py
Native login (increment 2/3): login/logout endpoints + require_login gate
2026-06-10 22:01:53 -07:00
test_login_provisioning.py
Login mode: enforce "every profile has a password" at every write-point (no gaps)
2026-06-11 19:48:50 -07:00
test_lyrics_reembed_from_sidecar.py
test_m3u_track_resolution.py
M3U export: resolve paths via one bulk read instead of a per-artist search loop (fixes 'Export M3U hangs forever' under active enrichment/scan DB writes)
2026-06-13 08:55:46 -07:00
test_manual_library_match.py
test_manual_pick_no_auto_retry.py
test_manual_search_endpoint.py
#865 : resolve pasted SoundCloud links (incl. unlisted/private share URLs) via direct yt-dlp resolve; manual-search forces the SoundCloud source
2026-06-13 00:41:47 -07:00
test_matching_engine_cjk.py
test_member_login_password.py
Login mode: let the admin set a member's login password (Manage Profiles)
2026-06-11 19:24:31 -07:00
test_memory_tracker.py
test_metadata_cache_table_recreate.py
test_mirrored_custom_name.py
Mirrored playlists: custom name alias (overrides display + sync name, survives upstream refresh) — card rename button like the source-ref editor
2026-06-13 00:23:56 -07:00
test_missing_cover_art.py
test_missing_lyrics_job.py
test_navidrome_cover_url.py
test_navidrome_self_heal.py
Navidrome: self-heal the connection instead of latching disconnected (jimmydotcom)
2026-06-11 21:34:48 -07:00
test_navidrome_stream_url.py
test_orphan_file_detector.py
Orphan detector: hard-bail on a mass-orphan flood instead of warn-only
2026-06-12 08:15:23 -07:00
test_path_resolve_confusables.py
test_personalized_api.py
test_personalized_generators_curated.py
test_personalized_generators_singletons.py
test_personalized_generators_variants.py
test_personalized_manager.py
test_personalized_playlists_id_gate.py
test_pin_rate_limit.py
Security: brute-force limiter on the launch-PIN unlock (Tier 2)
2026-06-10 20:47:46 -07:00
test_playlist_edit.py
test_playlist_materialize.py
Playlists: config (separate root + symlink/copy) + pure materializer seam
2026-06-12 13:30:48 -07:00
test_playlist_materialize_service.py
Playlists: batch toggle force-rebuilds its own folder (row flag = provenance only) + resolve diagnostics
2026-06-12 17:19:45 -07:00
test_playlist_reconcile.py
test_playlist_sources_adapters.py
Fix: auto-sync capped public Spotify playlists at 100 tracks ( #838 )
2026-06-10 18:31:43 -07:00
test_profile_context.py
test_profile_password.py
Native login (increment 1/3): per-profile password DB layer
2026-06-10 21:57:44 -07:00
test_profile_recovery.py
Login recovery (DB + backend): security question to reset a forgotten password
2026-06-10 22:24:54 -07:00
test_profile_spotify_resolution.py
test_provenance_id_persistence.py
test_prowlarr_client.py
test_qobuz_credential_sync.py
test_qobuz_playlists.py
test_recommendation_sources.py
test_release_dates.py
test_reorganize_alternate_edition.py
test_reorganize_canonical_source.py
test_reorganize_db_methods.py
test_reorganize_deleted_quarantine.py
test_reorganize_orphan_format_handling.py
test_reorganize_queue.py
test_reorganize_runner.py
test_reorganize_tag_source.py
test_reorganize_unknown_artist_hint.py
test_repair_worker_album_fill.py
test_repair_worker_unresolvable_folder_error.py
test_replaygain_filler_job.py
#437 : add ReplayGain Filler library-maintenance job
2026-06-11 18:41:12 -07:00
test_replaygain_summary_parse.py
test_request_cleanup_timer.py
test_resolve_mirrored_playlist.py
Playlists: resolve synthetic mirrored batch refs (youtube_mirrored_<pk>/auto_mirror_<pk>) to PK
2026-06-12 17:27:35 -07:00
test_resolve_secret.py
#870 : Deezer ARL 'resets itself' — test the SAVED token, not the redaction mask
2026-06-13 15:37:29 -07:00
test_retag_planner.py
test_reverse_proxy_mode.py
Security: add gated security headers in reverse-proxy mode (Tier 2)
2026-06-10 20:48:51 -07:00
test_runtime_state.py
test_scan_wait_action.py
test_script_split_integrity.py
test_search_tracks_relevance.py
test_server_playlist_append_mode.py
test_service_credentials.py
test_settings_redaction.py
test_similar_artists_status_codes.py
test_similar_artists_worker.py
test_socketio_cors.py
test_soulseek_album_fallback.py
test_soulseek_album_poll_stall.py
test_soulseek_search_throttle.py
test_soundcloud_client.py
#865 : resolve pasted SoundCloud links (incl. unlisted/private share URLs) via direct yt-dlp resolve; manual-search forces the SoundCloud source
2026-06-13 00:41:47 -07:00
test_source_ids_registry.py
test_source_title.py
test_spa_deep_linking.py
test_spotify_free_metadata.py
test_spotify_free_status.py
Spotify (no-auth): report connected + 'Spotify (no-auth)' test result instead of a Deezer fallback
2026-06-13 10:16:23 -07:00
test_spotify_public_api.py
test_spotify_token_cache.py
test_spotify_unavailable_reason.py
test_staging_album_provenance.py
test_stale_guard.py
Orphan detector: hard-bail on a mass-orphan flood instead of warn-only
2026-06-12 08:15:23 -07:00
test_stats_automations_esc_js.py
test_status_engine_fallback.py
test_subtitle_qualifier_match.py
test_sync_discovery_scan_events.py
test_tag_writer_multi_artist.py
test_tag_writer_placeholder_guard.py
test_tidal_album_tracks.py
test_tidal_auth_instructions.py
test_tidal_auth_redirect_uri.py
test_tidal_collection_tracks.py
test_tidal_favorite_albums_artists.py
test_tidal_playlist_batch_chunking.py
#867 : Tidal playlist discovery shows all tracks (was capped to ~21)
2026-06-13 10:39:30 -07:00
test_tidal_qualifier_filter.py
test_tidal_rate_limit_backoff.py
test_tidal_search_shortening.py
test_title_match_guard.py
test_tool_progress_events.py
Remove old auto-acting Quality Scanner tool (replaced by Quality Upgrade Finder job)
2026-06-13 12:14:45 -07:00
test_torrent_cleanup_orphan.py
Torrents: fix stall handling on "downloading metadata" + stop orphaning in qbit
2026-06-11 14:37:46 -07:00
test_torrent_client_adapters.py
test_torrent_stall.py
Torrents: fix stall handling on "downloading metadata" + stop orphaning in qbit
2026-06-11 14:37:46 -07:00
test_torrent_usenet_plugins.py
test_track_artist_matching.py
test_track_number_repair.py
test_track_repair_canonical.py
test_track_search_single_query.py
test_unknown_artist_fixer.py
test_usenet_client_adapters.py
test_verification_admin_gate.py
#845 follow-up: admin-gate the mutating verification-review endpoints
2026-06-11 10:43:40 -07:00
test_verification_status_backfill.py
#845 tests: cover the verification_status migration backfill
2026-06-11 11:17:09 -07:00
test_verification_tag_roundtrip.py
test_video_api.py
Video tools: add a Server Scan tool (trigger the media server to index new downloads)
2026-06-22 08:26:24 -07:00
test_video_auto_wishlist_airing.py
Watchlist hygiene: auto-prune ended/canceled followed shows
2026-06-21 15:05:20 -07:00
test_video_automations_builder.py
video automations: order the System list as a logical pipeline
2026-06-25 22:38:26 -07:00
test_video_backfill.py
video enrichment: keyless workers read 'Disabled' (not 'Not configured') when off
2026-06-18 23:29:22 -07:00
test_video_cache.py
video: real TTL+LRU cache (thread-safe) + cache search — the kettui way
2026-06-15 13:02:24 -07:00
test_video_calendar_scope.py
video calendar: watchlist-driven by default + an 'All library' toggle
2026-06-20 14:07:40 -07:00
test_video_database.py
Video watchlist: strip dirty titles when sorting (leading-space fix)
2026-06-21 08:52:49 -07:00
test_video_detail_yt_reset.py
video downloads: header 'Auto' picks ONE best across all sources; fix YT playlist leak
2026-06-20 10:48:55 -07:00
test_video_download_auto.py
Video downloads: best-in-class post-process pipeline
2026-06-21 01:44:35 -07:00
test_video_download_config.py
video downloads (phase 3): source mode + hybrid chain (soulseek/torrent/usenet only)
2026-06-19 00:15:13 -07:00
test_video_download_events.py
video automations: post-download scan chain (parity with music's batch→scan→update)
2026-06-20 14:47:00 -07:00
test_video_download_history.py
Video download history: permanent archive snapshotted at terminal status (phase 1)
2026-06-21 14:10:22 -07:00
test_video_download_pipeline.py
video downloads Phase C: auto-retry + alternate-query requery
2026-06-19 17:12:44 -07:00
test_video_download_tracking.py
Video: live per-episode download tracking + auto-wishlist today's airings
2026-06-21 02:27:08 -07:00
test_video_enrichment.py
video enrichment: add a GLOBAL 'Retry all failed' (all workers, all kinds)
2026-06-20 14:15:18 -07:00
test_video_enrichment_manager.py
video enrichment: add a GLOBAL 'Retry all failed' (all workers, all kinds)
2026-06-20 14:15:18 -07:00
test_video_followed_shows.py
Watchlist hygiene: auto-prune ended/canceled followed shows
2026-06-21 15:05:20 -07:00
test_video_import_page.py
Video downloads: best-in-class post-process pipeline
2026-06-21 01:44:35 -07:00
test_video_importer.py
Video downloads: best-in-class post-process pipeline
2026-06-21 01:44:35 -07:00
test_video_library_paths.py
Video downloads: best-in-class post-process pipeline
2026-06-21 01:44:35 -07:00
test_video_manual_import.py
Video downloads: best-in-class post-process pipeline
2026-06-21 01:44:35 -07:00
test_video_mediainfo.py
Video downloads: best-in-class post-process pipeline
2026-06-21 01:44:35 -07:00
test_video_organization.py
settings: youtube path template field on the Library tab
2026-06-25 19:40:56 -07:00
test_video_person_watchlist.py
video: add 'Add to Watchlist' button to person detail pages
2026-06-20 13:50:34 -07:00
test_video_process_wishlist.py
video automations: auto-download movie + episode wishlist (soulseek)
2026-06-25 22:08:02 -07:00
test_video_process_youtube_wishlist.py
youtube fulfillment: orphan reaper for restart-stalled downloads
2026-06-25 22:48:54 -07:00
test_video_quality_eval.py
Video quality: recognize plain WEB + accept resolution-only releases
2026-06-21 02:11:40 -07:00
test_video_quality_profile.py
video quality profile: loose resolution cutoff + movie/episode size split
2026-06-19 10:40:53 -07:00
test_video_release_parse.py
Video quality: recognize plain WEB + accept resolution-only releases
2026-06-21 02:11:40 -07:00
test_video_retry.py
video downloads Phase C: auto-retry + alternate-query requery
2026-06-19 17:12:44 -07:00
test_video_scan_scope.py
Smart post-download scan: skip the crawl when the server already has the grab (phase 3)
2026-06-21 14:20:49 -07:00
test_video_scan_watchlist_channels.py
video automations: watchlist scans for people + channels
2026-06-25 19:07:06 -07:00
test_video_scan_watchlist_people.py
video automations: watchlist scans for people + channels
2026-06-25 19:07:06 -07:00
test_video_scan_watchlist_playlists.py
video automations: scan watchlist YouTube playlists (mirror-all)
2026-06-25 21:18:53 -07:00
test_video_scanner.py
Video: two system deep-scan automations (Movie + TV), independently scoped
2026-06-21 12:14:46 -07:00
test_video_search_pipeline.py
video search: each source returns its own results (was identical)
2026-06-19 13:56:04 -07:00
test_video_server_resolution.py
Video side: own server connection (Plex/Jellyfin), music-style picker, isolated
2026-06-15 16:42:22 -07:00
test_video_side_shell.py
Video downloads: best-in-class post-process pipeline
2026-06-21 01:44:35 -07:00
test_video_sidecars.py
Video downloads: best-in-class post-process pipeline
2026-06-21 01:44:35 -07:00
test_video_slskd_search.py
video search: REAL slskd search for the Soulseek source (was mocked)
2026-06-19 14:16:44 -07:00
test_video_subtitles.py
Video downloads: best-in-class post-process pipeline
2026-06-21 01:44:35 -07:00
test_video_upsert_preserve.py
video scan: only FULL resets enrichment; incremental/deep preserve it
2026-06-20 15:06:44 -07:00
test_video_wishlist_clear.py
video wishlist: add a 'Clear all' button (movies / TV / YouTube)
2026-06-20 16:42:57 -07:00
test_video_youtube.py
Playlist count: show the TRUE total + load ~200 (was capped at ~100 via yt-dlp)
2026-06-17 21:40:56 -07:00
test_video_youtube_enrichment.py
video enrichment: fix DeArrow retry (was a silent no-op)
2026-06-20 12:52:06 -07:00
test_video_youtube_quality.py
youtube quality: map profile -> yt-dlp format selection
2026-06-25 19:11:35 -07:00
test_watchlist_album_match.py
test_watchlist_auto_download.py
Watchlist: per-artist 'auto-download' toggle (follow-only) — off = discover/surface releases but skip the wishlist add; default on
2026-06-13 08:07:20 -07:00
test_watchlist_bulk_add.py
test_watchlist_itunes_id_repair.py
test_watchlist_itunes_match.py
test_watchlist_scan_history.py
test_watchlist_scanner_scan.py
Watchlist: per-artist 'auto-download' toggle (follow-only) — off = discover/surface releases but skip the wishlist add; default on
2026-06-13 08:07:20 -07:00
test_websocket_client_transport.py
test_websocket_infrastructure.py
test_wishlist_pagination.py
test_worker_artist_disambiguation.py
#868 : disambiguate same-name artists by owned-catalog overlap during enrichment
2026-06-13 14:57:17 -07:00
test_worker_artist_match_gate.py
test_worker_existing_id_marks_matched.py
test_worker_utils_album_track_count.py
test_ws_connect_gate.py
#852 tests: cover the login-mode WS gate (the reported bypass was the login modal)
2026-06-11 17:38:24 -07:00
test_yield_policy.py
test_youtube_channel_settings.py
youtube channels: per-channel overrides (custom show-name + quality) — core
2026-06-25 22:53:45 -07:00
test_youtube_download.py
youtube fulfillment: orphan reaper for restart-stalled downloads
2026-06-25 22:48:54 -07:00
test_youtube_ffmpeg_no_eager_download.py
test_youtube_js_runtime.py
test_youtube_search_dash_query.py
test_youtube_sync_idempotent_endpoints.py
#702 : make mirrored-playlist cancel/reset/delete idempotent (un-wedge LB weekly sync)
2026-06-11 12:55:55 -07:00
test_youtube_track_meta.py
#863 : derive YouTube track artist from music fields / -Topic channel / 'Artist - Title' instead of the playlist owner
2026-06-12 20:14:55 -07:00