Same migration pattern as C2/C3. QobuzClient drops active_downloads + _download_lock + _download_thread_worker. Mid-download chunk-progress mutations + cancel-state checks flow through engine.update_record / get_record. Query/cancel methods read engine state. Pinning tests updated to assert engine state. Suite still green (316 download tests).
5 tests pin the Qobuz contract: int track_id parsing, UUID download_id, state-dict schema (parallels Tidal), daemon-thread worker target with (download_id, track_id, display_name, original_filename) signature.