[INFO] cloning repository https://github.com/milgaj84/driftFM
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/milgaj84/driftFM" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmilgaj84%2FdriftFM", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmilgaj84%2FdriftFM'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 03d24da356948407d6b2b052af2d5454ec384f99
[INFO] testing milgaj84/driftFM against 1.97.0-beta.6 for beta-1.98-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmilgaj84%2FdriftFM" "/workspace/builds/worker-0-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/milgaj84/driftFM
[INFO] finished tweaking git repo https://github.com/milgaj84/driftFM
[INFO] tweaked toml for git repo https://github.com/milgaj84/driftFM written to /workspace/builds/worker-0-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/milgaj84/driftFM on toolchain 1.97.0-beta.6
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.97.0-beta.6" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/milgaj84/driftFM already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.97.0-beta.6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded symphonia v0.5.5
[INFO] [stderr]   Downloaded log v0.4.30
[INFO] [stderr]   Downloaded symphonia-metadata v0.5.5
[INFO] [stderr]   Downloaded symphonia-codec-adpcm v0.5.5
[INFO] [stderr]   Downloaded wasm-bindgen-macro v0.2.122
[INFO] [stderr]   Downloaded windows-result v0.1.2
[INFO] [stderr]   Downloaded symphonia-utils-xiph v0.5.5
[INFO] [stderr]   Downloaded symphonia-codec-pcm v0.5.5
[INFO] [stderr]   Downloaded coreaudio-sys v0.2.17
[INFO] [stderr]   Downloaded wasm-bindgen-futures v0.4.72
[INFO] [stderr]   Downloaded extended v0.1.0
[INFO] [stderr]   Downloaded wasm-bindgen-shared v0.2.122
[INFO] [stderr]   Downloaded mach2 v0.4.3
[INFO] [stderr]   Downloaded line-clipping v0.3.7
[INFO] [stderr]   Downloaded symphonia-format-riff v0.5.5
[INFO] [stderr]   Downloaded symphonia-bundle-flac v0.5.5
[INFO] [stderr]   Downloaded symphonia-codec-vorbis v0.5.5
[INFO] [stderr]   Downloaded symphonia-codec-aac v0.5.5
[INFO] [stderr]   Downloaded yoke v0.8.2
[INFO] [stderr]   Downloaded wezterm-color-types v0.3.0
[INFO] [stderr]   Downloaded rodio v0.20.1
[INFO] [stderr]   Downloaded symphonia-core v0.5.5
[INFO] [stderr]   Downloaded wezterm-dynamic v0.2.1
[INFO] [stderr]   Downloaded wezterm-dynamic-derive v0.1.1
[INFO] [stderr]   Downloaded siphasher v1.0.3
[INFO] [stderr]   Downloaded unicode-truncate v2.0.1
[INFO] [stderr]   Downloaded lab v0.11.0
[INFO] [stderr]   Downloaded wezterm-blob-leases v0.1.1
[INFO] [stderr]   Downloaded atomic v0.6.1
[INFO] [stderr]   Downloaded memmem v0.1.1
[INFO] [stderr]   Downloaded hound v3.5.1
[INFO] [stderr]   Downloaded symphonia-format-isomp4 v0.5.5
[INFO] [stderr]   Downloaded lru v0.16.4
[INFO] [stderr]   Downloaded kasuari v0.4.12
[INFO] [stderr]   Downloaded ratatui-termwiz v0.1.0
[INFO] [stderr]   Downloaded vtparse v0.6.2
[INFO] [stderr]   Downloaded rand_xorshift v0.4.0
[INFO] [stderr]   Downloaded wezterm-input-types v0.1.0
[INFO] [stderr]   Downloaded ordered-float v4.6.0
[INFO] [stderr]   Downloaded csscolorparser v0.6.2
[INFO] [stderr]   Downloaded mac_address v1.1.8
[INFO] [stderr]   Downloaded zvariant_utils v3.3.1
[INFO] [stderr]   Downloaded termios v0.3.3
[INFO] [stderr]   Downloaded bytemuck v1.25.0
[INFO] [stderr]   Downloaded symphonia-bundle-mp3 v0.5.5
[INFO] [stderr]   Downloaded pest_derive v2.8.6
[INFO] [stderr]   Downloaded ratatui-macros v0.7.0
[INFO] [stderr]   Downloaded ratatui-crossterm v0.1.0
[INFO] [stderr]   Downloaded rusty-fork v0.3.1
[INFO] [stderr]   Downloaded zvariant_derive v5.11.0
[INFO] [stderr]   Downloaded zbus_names v4.3.2
[INFO] [stderr]   Downloaded uds_windows v1.2.1
[INFO] [stderr]   Downloaded piper v0.2.5
[INFO] [stderr]   Downloaded wasm-bindgen v0.2.122
[INFO] [stderr]   Downloaded toml_edit v0.25.11+spec-1.1.0
[INFO] [stderr]   Downloaded alsa v0.9.1
[INFO] [stderr]   Downloaded terminfo v0.9.0
[INFO] [stderr]   Downloaded pest_generator v2.8.6
[INFO] [stderr]   Downloaded mac-notification-sys v0.6.12
[INFO] [stderr]   Downloaded ratatui v0.30.0
[INFO] [stderr]   Downloaded zbus_macros v5.15.0
[INFO] [stderr]   Downloaded async-signal v0.2.14
[INFO] [stderr]   Downloaded uuid v1.23.1
[INFO] [stderr]   Downloaded openssl-sys v0.9.116
[INFO] [stderr]   Downloaded async-executor v1.14.0
[INFO] [stderr]   Downloaded windows-version v0.1.7
[INFO] [stderr]   Downloaded wasm-bindgen-macro-support v0.2.122
[INFO] [stderr]   Downloaded claxon v0.4.3
[INFO] [stderr]   Downloaded compact_str v0.9.0
[INFO] [stderr]   Downloaded http v1.4.1
[INFO] [stderr]   Downloaded euclid v0.22.14
[INFO] [stderr]   Downloaded wezterm-bidi v0.2.3
[INFO] [stderr]   Downloaded pest_meta v2.8.6
[INFO] [stderr]   Downloaded finl_unicode v1.4.0
[INFO] [stderr]   Downloaded fancy-regex v0.11.0
[INFO] [stderr]   Downloaded notify-rust v4.17.0
[INFO] [stderr]   Downloaded tauri-winrt-notification v0.7.2
[INFO] [stderr]   Downloaded zvariant v5.11.0
[INFO] [stderr]   Downloaded js-sys v0.3.99
[INFO] [stderr]   Downloaded dirs v6.0.0
[INFO] [stderr]   Downloaded hyper v1.9.0
[INFO] [stderr]   Downloaded ratatui-core v0.1.0
[INFO] [stderr]   Downloaded dispatch2 v0.3.1
[INFO] [stderr]   Downloaded pest v2.8.6
[INFO] [stderr]   Downloaded zbus v5.15.0
[INFO] [stderr]   Downloaded bindgen v0.72.1
[INFO] [stderr]   Downloaded ratatui-widgets v0.3.0
[INFO] [stderr]   Downloaded proptest v1.11.0
[INFO] [stderr]   Downloaded openssl v0.10.80
[INFO] [stderr]   Downloaded termwiz v0.23.3
[INFO] [stderr]   Downloaded objc2 v0.6.4
[INFO] [stderr]   Downloaded web-sys v0.3.99
[INFO] [stderr]   Downloaded deltae v0.3.2
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3d5ced03c013a94a2f102a4510f48a6e9184255caf5fd8244f58017bde7f5210" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] ed75f082b27852c0fef7384eadeac34d14736ae88f0483f57f1fa5162bdf2e1c
[INFO] running `Command { std: "docker" "start" "ed75f082b27852c0fef7384eadeac34d14736ae88f0483f57f1fa5162bdf2e1c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "ed75f082b27852c0fef7384eadeac34d14736ae88f0483f57f1fa5162bdf2e1c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "ed75f082b27852c0fef7384eadeac34d14736ae88f0483f57f1fa5162bdf2e1c" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "ed75f082b27852c0fef7384eadeac34d14736ae88f0483f57f1fa5162bdf2e1c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "ed75f082b27852c0fef7384eadeac34d14736ae88f0483f57f1fa5162bdf2e1c" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]    Compiling unicode-ident v1.0.24
[INFO] [stderr]    Compiling libc v0.2.186
[INFO] [stderr]    Compiling log v0.4.30
[INFO] [stderr]    Compiling pin-project-lite v0.2.17
[INFO] [stderr]    Compiling equivalent v1.0.2
[INFO] [stderr]    Compiling futures-core v0.3.32
[INFO] [stderr]    Compiling bitflags v2.11.1
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling hashbrown v0.17.1
[INFO] [stderr]    Compiling itoa v1.0.18
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling quote v1.0.45
[INFO] [stderr]    Compiling pkg-config v0.3.33
[INFO] [stderr]    Compiling futures-io v0.3.32
[INFO] [stderr]    Compiling scopeguard v1.2.0
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling stable_deref_trait v1.2.1
[INFO] [stderr]    Compiling lock_api v0.4.14
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling winnow v1.0.3
[INFO] [stderr]    Compiling parking v2.2.1
[INFO] [stderr]    Compiling bytemuck v1.25.0
[INFO] [stderr]    Compiling lazy_static v1.5.0
[INFO] [stderr]    Compiling arrayvec v0.7.6
[INFO] [stderr]    Compiling bytes v1.11.1
[INFO] [stderr]    Compiling find-msvc-tools v0.1.9
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling encoding_rs v0.8.35
[INFO] [stderr]    Compiling futures-sink v0.3.32
[INFO] [stderr]    Compiling unicode-segmentation v1.13.2
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling toml_datetime v1.1.1+spec-1.1.0
[INFO] [stderr]    Compiling litemap v0.8.2
[INFO] [stderr]    Compiling atomic-waker v1.1.2
[INFO] [stderr]    Compiling fastrand v2.4.1
[INFO] [stderr]    Compiling cc v1.2.62
[INFO] [stderr]    Compiling symphonia-core v0.5.5
[INFO] [stderr]    Compiling once_cell v1.21.4
[INFO] [stderr]    Compiling writeable v0.6.3
[INFO] [stderr]    Compiling ryu v1.0.23
[INFO] [stderr]    Compiling concurrent-queue v2.5.0
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling foldhash v0.2.0
[INFO] [stderr]    Compiling allocator-api2 v0.2.21
[INFO] [stderr]    Compiling icu_properties_data v2.2.0
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling event-listener v5.4.1
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling icu_normalizer_data v2.2.0
[INFO] [stderr]    Compiling utf8_iter v1.0.4
[INFO] [stderr]    Compiling futures-lite v2.6.1
[INFO] [stderr]    Compiling http v1.4.1
[INFO] [stderr]    Compiling event-listener-strategy v0.5.4
[INFO] [stderr]    Compiling percent-encoding v2.3.2
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling endi v1.1.1
[INFO] [stderr]    Compiling autocfg v1.5.1
[INFO] [stderr]    Compiling hashbrown v0.16.1
[INFO] [stderr]    Compiling either v1.16.0
[INFO] [stderr]    Compiling castaway v0.2.4
[INFO] [stderr]    Compiling itertools v0.14.0
[INFO] [stderr]    Compiling toml_parser v1.1.2+spec-1.1.0
[INFO] [stderr]    Compiling httparse v1.10.1
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling mio v1.2.0
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling socket2 v0.6.3
[INFO] [stderr]    Compiling openssl-sys v0.9.116
[INFO] [stderr]    Compiling async-io v2.6.0
[INFO] [stderr]    Compiling symphonia-metadata v0.5.5
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling indoc v2.0.7
[INFO] [stderr]    Compiling instability v0.3.12
[INFO] [stderr]    Compiling toml_edit v0.25.11+spec-1.1.0
[INFO] [stderr]    Compiling openssl v0.10.80
[INFO] [stderr]    Compiling futures-task v0.3.32
[INFO] [stderr]    Compiling symphonia-utils-xiph v0.5.5
[INFO] [stderr]    Compiling compact_str v0.9.0
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling lru v0.16.4
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling convert_case v0.10.0
[INFO] [stderr]    Compiling alsa-sys v0.3.1
[INFO] [stderr]    Compiling async-task v4.7.1
[INFO] [stderr]    Compiling native-tls v0.2.18
[INFO] [stderr]    Compiling tower-service v0.3.3
[INFO] [stderr]    Compiling powerfmt v0.2.0
[INFO] [stderr]    Compiling try-lock v0.2.5
[INFO] [stderr]    Compiling want v0.3.1
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling async-channel v2.5.0
[INFO] [stderr]    Compiling deranged v0.5.8
[INFO] [stderr]    Compiling futures-channel v0.3.32
[INFO] [stderr]    Compiling time-core v0.1.8
[INFO] [stderr]    Compiling litrs v1.0.0
[INFO] [stderr]    Compiling num-conv v0.2.2
[INFO] [stderr]    Compiling openssl-probe v0.2.1
[INFO] [stderr]    Compiling num_threads v0.1.7
[INFO] [stderr]    Compiling proc-macro-crate v3.5.0
[INFO] [stderr]    Compiling zmij v1.0.21
[INFO] [stderr]    Compiling signal-hook-mio v0.2.5
[INFO] [stderr]    Compiling async-lock v3.4.2
[INFO] [stderr]    Compiling piper v0.2.5
[INFO] [stderr]    Compiling line-clipping v0.3.7
[INFO] [stderr]    Compiling sync_wrapper v1.0.2
[INFO] [stderr]    Compiling tower-layer v0.3.3
[INFO] [stderr]    Compiling byteorder v1.5.0
[INFO] [stderr]    Compiling unicode-truncate v2.0.1
[INFO] [stderr]    Compiling extended v0.1.0
[INFO] [stderr]    Compiling cpal v0.15.3
[INFO] [stderr]    Compiling ipnet v2.12.0
[INFO] [stderr]    Compiling serde_json v1.0.150
[INFO] [stderr]    Compiling tinyvec_macros v0.1.1
[INFO] [stderr]    Compiling tinyvec v1.11.0
[INFO] [stderr]    Compiling symphonia-format-riff v0.5.5
[INFO] [stderr]    Compiling ogg v0.8.0
[INFO] [stderr]    Compiling alsa v0.9.1
[INFO] [stderr]    Compiling blocking v1.6.2
[INFO] [stderr]    Compiling async-executor v1.14.0
[INFO] [stderr]    Compiling document-features v0.2.12
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling symphonia-codec-vorbis v0.5.5
[INFO] [stderr]    Compiling symphonia-format-isomp4 v0.5.5
[INFO] [stderr]    Compiling symphonia-bundle-flac v0.5.5
[INFO] [stderr]    Compiling symphonia-bundle-mp3 v0.5.5
[INFO] [stderr]    Compiling symphonia-codec-pcm v0.5.5
[INFO] [stderr]    Compiling symphonia-codec-adpcm v0.5.5
[INFO] [stderr]    Compiling symphonia-codec-aac v0.5.5
[INFO] [stderr]    Compiling async-broadcast v0.7.2
[INFO] [stderr]    Compiling ordered-stream v0.2.0
[INFO] [stderr]    Compiling uuid v1.23.1
[INFO] [stderr]    Compiling option-ext v0.2.0
[INFO] [stderr]    Compiling zeroize v1.8.2
[INFO] [stderr]    Compiling dasp_sample v0.11.0
[INFO] [stderr]    Compiling hex v0.4.3
[INFO] [stderr]    Compiling winnow v0.7.15
[INFO] [stderr]    Compiling toml_write v0.1.2
[INFO] [stderr]    Compiling rustls-pki-types v1.14.1
[INFO] [stderr]    Compiling time v0.3.47
[INFO] [stderr]    Compiling dirs-sys v0.5.0
[INFO] [stderr]    Compiling lewton v0.10.2
[INFO] [stderr]    Compiling symphonia v0.5.5
[INFO] [stderr]    Compiling hound v3.5.1
[INFO] [stderr]    Compiling mime v0.3.17
[INFO] [stderr]    Compiling claxon v0.4.3
[INFO] [stderr]    Compiling dirs v6.0.0
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling darling_core v0.23.0
[INFO] [stderr]    Compiling rodio v0.20.1
[INFO] [stderr]    Compiling polling v3.11.0
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling zerovec-derive v0.11.3
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling tokio-macros v2.7.0
[INFO] [stderr]    Compiling enumflags2_derive v0.7.12
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling strum_macros v0.27.2
[INFO] [stderr]    Compiling openssl-macros v0.1.1
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling tokio v1.52.3
[INFO] [stderr]    Compiling derive_more-impl v2.1.1
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling async-signal v0.2.14
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling kasuari v0.4.12
[INFO] [stderr]    Compiling derive_more v2.1.1
[INFO] [stderr]    Compiling async-process v2.5.0
[INFO] [stderr]    Compiling serde_repr v0.1.20
[INFO] [stderr]    Compiling async-recursion v1.1.1
[INFO] [stderr]    Compiling crossterm v0.29.0
[INFO] [stderr]    Compiling zerofrom v0.1.8
[INFO] [stderr]    Compiling yoke v0.8.2
[INFO] [stderr]    Compiling zerovec v0.11.6
[INFO] [stderr]    Compiling zerotrie v0.2.4
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]    Compiling strum v0.27.2
[INFO] [stderr]    Compiling ratatui-core v0.1.0
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling tinystr v0.8.3
[INFO] [stderr]    Compiling potential_utf v0.1.5
[INFO] [stderr]    Compiling zvariant_utils v3.3.1
[INFO] [stderr]    Compiling enumflags2 v0.7.12
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling icu_collections v2.2.0
[INFO] [stderr]    Compiling icu_locale_core v2.2.0
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling zvariant_derive v5.11.0
[INFO] [stderr]    Compiling ratatui-widgets v0.3.0
[INFO] [stderr]    Compiling ratatui-crossterm v0.1.0
[INFO] [stderr]    Compiling icu_provider v2.2.0
[INFO] [stderr]    Compiling zvariant v5.11.0
[INFO] [stderr]    Compiling icu_normalizer v2.2.0
[INFO] [stderr]    Compiling icu_properties v2.2.0
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling idna_adapter v1.2.2
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling ratatui-macros v0.7.0
[INFO] [stderr]    Compiling ratatui v0.30.0
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling zbus_names v4.3.2
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling tokio-native-tls v0.3.1
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling h2 v0.4.14
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling zbus_macros v5.15.0
[INFO] [stderr]    Compiling zbus v5.15.0
[INFO] [stderr]    Compiling hyper v1.9.0
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling hyper-tls v0.6.0
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling notify-rust v4.17.0
[INFO] [stderr]    Compiling pulsedeck v0.10.4 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 44s
[INFO] running `Command { std: "docker" "inspect" "ed75f082b27852c0fef7384eadeac34d14736ae88f0483f57f1fa5162bdf2e1c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "ed75f082b27852c0fef7384eadeac34d14736ae88f0483f57f1fa5162bdf2e1c" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling zerocopy v0.8.52
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling wait-timeout v0.2.1
[INFO] [stderr]    Compiling bit-vec v0.8.0
[INFO] [stderr]    Compiling quick-error v1.2.3
[INFO] [stderr]    Compiling regex-syntax v0.8.10
[INFO] [stderr]    Compiling unarray v0.1.4
[INFO] [stderr]    Compiling bit-set v0.8.0
[INFO] [stderr]    Compiling rand_core v0.9.5
[INFO] [stderr]    Compiling rand v0.9.4
[INFO] [stderr]    Compiling rand_xorshift v0.4.0
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling polling v3.11.0
[INFO] [stderr]    Compiling crossterm v0.29.0
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling async-io v2.6.0
[INFO] [stderr]    Compiling rusty-fork v0.3.1
[INFO] [stderr]    Compiling proptest v1.11.0
[INFO] [stderr]    Compiling async-signal v0.2.14
[INFO] [stderr]    Compiling ratatui-crossterm v0.1.0
[INFO] [stderr]    Compiling ratatui v0.30.0
[INFO] [stderr]    Compiling async-process v2.5.0
[INFO] [stderr]    Compiling zbus v5.15.0
[INFO] [stderr]    Compiling notify-rust v4.17.0
[INFO] [stderr]    Compiling pulsedeck v0.10.4 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 49.60s
[INFO] running `Command { std: "docker" "inspect" "ed75f082b27852c0fef7384eadeac34d14736ae88f0483f57f1fa5162bdf2e1c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "ed75f082b27852c0fef7384eadeac34d14736ae88f0483f57f1fa5162bdf2e1c" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.62s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/pulsedeck-b90e2ba48ead608c)
[INFO] [stdout] 
[INFO] [stdout] running 1354 tests
[INFO] [stdout] test app::audio_status::tests::last_played_station_position_allows_missing_library_match ... ok
[INFO] [stdout] test app::audio_status::tests::last_played_station_position_matches_normalized_urls ... ok
[INFO] [stdout] test app::audio_status::tests::test_disabled_notifications_suppresses ... ok
[INFO] [stdout] test app::audio_status::tests::test_duplicate_title_no_notification ... ok
[INFO] [stdout] test app::audio_status::tests::test_title_during_cooldown_song_history_still_updated ... ok
[INFO] [stdout] test app::audio_status::tests::test_current_track_always_updated ... ok
[INFO] [stdout] test app::audio_status::tests::test_song_history_records_new_title ... ok
[INFO] [stdout] test app::audio_status::tests::test_title_during_cooldown_suppresses_notification ... ok
[INFO] [stdout] test app::audio_status::tests::test_burst_titles_produce_at_most_one_notification ... ok
[INFO] [stdout] test app::audio_status::tests::test_burst_5_titles_at_most_1_notification ... ok
[INFO] [stdout] test app::audio_status::tests::test_single_title_fires_notification ... ok
[INFO] [stdout] test app::command_palette::tests::empty_query_returns_all_available_commands ... ok
[INFO] [stdout] test app::command_palette::tests::confirm_executes_selected_command_and_closes ... ok
[INFO] [stdout] test app::command_palette::tests::cycle_sort_mode_command_advances_sort_mode ... ok
[INFO] [stdout] test app::command_palette::tests::filtering_on_sort_includes_cycle_sort_mode ... ok
[INFO] [stdout] test app::command_palette::tests::multi_token_conjunctive_matching ... ok
[INFO] [stdout] test app::command_palette::tests::filters_commands_case_insensitively_by_tokens ... ok
[INFO] [stdout] test app::audio_status::tests::test_single_title_after_cooldown_fires_immediately ... ok
[INFO] [stdout] test app::audio_status::tests::test_empty_title_no_notification ... ok
[INFO] [stdout] test app::command_palette::tests::close_clears_query ... ok
[INFO] [stdout] test app::audio_status::tests::track_changed_matches_normalized_playing_url ... ok
[INFO] [stdout] test app::command_palette::tests::cycle_sort_mode_appears_in_unfiltered_list ... ok
[INFO] [stdout] test app::command_palette::tests::leading_trailing_whitespace_is_trimmed ... ok
[INFO] [stdout] test app::command_palette::tests::show_keybindings_command_maps_to_action ... ok
[INFO] [stdout] test app::command_palette::tests::retry_is_hidden_when_no_stream_exists ... ok
[INFO] [stdout] test app::command_palette::tests::show_keybindings_command_is_available ... ok
[INFO] [stdout] test app::discover::tests::discover_action_maps_from_palette_command ... ok
[INFO] [stdout] test app::discover::tests::apply_discover_response_success_populates_results ... ok
[INFO] [stdout] test app::discover::tests::apply_discover_response_empty_results_sets_info_notice ... ok
[INFO] [stdout] test app::command_palette::tests::filtering_on_cycle_includes_cycle_sort_mode ... ok
[INFO] [stdout] test app::discover::tests::discover_command_listed_in_palette ... ok
[INFO] [stdout] test app::command_palette::tests::opens_only_from_normal_mode ... ok
[INFO] [stdout] test app::discover::tests::discover_cursor_starts_at_zero ... ok
[INFO] [stdout] test app::discover::tests::discover_dismiss_clears_results_and_resets_cursor ... ok
[INFO] [stdout] test app::command_palette::tests::non_matching_query_returns_zero_results ... ok
[INFO] [stdout] test app::discover::tests::discover_dismiss_empty_results_is_noop ... ok
[INFO] [stdout] test app::discover::tests::apply_discover_response_error_shows_error_notice ... ok
[INFO] [stdout] test app::command_palette::tests::refresh_metadata_command_is_available ... ok
[INFO] [stdout] test app::discover::tests::apply_discover_response_excludes_library_stations ... ok
[INFO] [stdout] test app::discover::tests::discover_next_clamps_at_end ... ok
[INFO] [stdout] test app::discover::tests::discover_empty_library_shows_info_notice ... ok
[INFO] [stdout] test app::discover::tests::discover_next_empty_results_is_noop ... ok
[INFO] [stdout] test app::discover::tests::discover_resets_cursor_on_new_results ... ok
[INFO] [stdout] test app::discover::tests::discover_prev_decrements_cursor ... ok
[INFO] [stdout] test app::discover::tests::discover_next_increments_cursor ... ok
[INFO] [stdout] test app::discover::tests::discover_prev_empty_results_is_noop ... ok
[INFO] [stdout] test app::discover::tests::discover_select_empty_results_is_noop ... ok
[INFO] [stdout] test app::discover::tests::discover_with_favorites_sets_pending_fetch ... ok
[INFO] [stdout] test app::command_palette::tests::retry_is_available_when_stream_exists ... ok
[INFO] [stdout] test app::discover::tests::discover_empty_profile_skips_fetch_and_shows_info ... ok
[INFO] [stdout] test app::doctor_suggestions::tests::test_buffer_unreachable_with_non_idle_decoder ... ok
[INFO] [stdout] test app::doctor_suggestions::tests::test_high_reconnect_when_below_limit ... ok
[INFO] [stdout] test app::doctor_suggestions::tests::test_buffer_zero_with_idle_decoder_no_suggestion ... ok
[INFO] [stdout] test app::doctor_suggestions::tests::test_multiple_conditions_produce_multiple_hints ... ok
[INFO] [stdout] test app::doctor_suggestions::tests::test_metadata_error_detected ... ok
[INFO] [stdout] test app::discover::tests::discover_no_favorites_shows_info_notice ... ok
[INFO] [stdout] test app::discover::tests::take_discover_fetch_request_consumes_pending ... ok
[INFO] [stdout] test app::discover::tests::discover_prev_clamps_at_zero ... ok
[INFO] [stdout] test app::discover::tests::discover_select_adds_station_to_library_and_starts_playback ... ok
[INFO] [stdout] test app::discover::tests::discover_sets_fallback_tag_when_profile_has_multiple_entries ... ok
[INFO] [stdout] test app::doctor_suggestions::tests::test_no_error_returns_empty ... ok
[INFO] [stdout] test app::doctor_suggestions::tests::test_output_device_error_case_insensitive ... ok
[INFO] [stdout] test app::doctor_suggestions::tests::test_output_device_error_detected ... ok
[INFO] [stdout] test app::doctor_suggestions::tests::test_single_reconnect_no_hint ... ok
[INFO] [stdout] test app::doctor_suggestions::tests::test_station_offline_when_retries_exhausted ... ok
[INFO] [stdout] test app::doctor_suggestions::tests::test_zero_reconnect_limit_no_offline_hint ... ok
[INFO] [stdout] test app::discover::tests::discover_with_profile_sets_pending_tag_query ... ok
[INFO] [stdout] test app::favorites_actions::tests::is_favorite_returns_false_for_empty_url ... ok
[INFO] [stdout] test app::favorites_actions::tests::is_favorite_returns_false_for_non_favorited ... ok
[INFO] [stdout] test app::discover::tests::test_discover_uses_app_config_for_exclusions ... ok
[INFO] [stdout] test app::favorites_actions::tests::toggle_favorite_marks_library_dirty ... ok
[INFO] [stdout] test app::favorites_actions::tests::toggle_favorite_adds_station_to_favorites ... ok
[INFO] [stdout] test app::favorites_actions::tests::toggle_favorite_noop_in_non_normal_mode ... ok
[INFO] [stdout] test app::discover::tests::discover_skips_fallback_when_single_entry_profile ... ok
[INFO] [stdout] test app::favorites_actions::tests::toggle_favorite_noop_on_empty_library ... ok
[INFO] [stdout] test app::favorites_actions::tests::toggle_favorite_removes_station_from_favorites ... ok
[INFO] [stdout] test app::favorites_actions::tests::toggle_favorite_triggers_resort_favorites_first ... ok
[INFO] [stdout] test app::hot_reload::tests::check_config_reload_unchanged_does_nothing ... ok
[INFO] [stdout] test app::hot_reload::tests::hot_reload_updates_reconnect_params ... ok
[INFO] [stdout] test app::library::tests::genre_switch_falls_back_to_first_station_when_playing_is_absent ... ok
[INFO] [stdout] test app::hot_reload::tests::test_keybinding_reload_error_keeps_existing_registry ... ok
[INFO] [stdout] test app::hot_reload::tests::check_config_reload_error_retains_previous_config ... ok
[INFO] [stdout] test app::hot_reload::tests::check_config_reload_shows_info_notice_on_success ... ok
[INFO] [stdout] test app::hot_reload::tests::check_config_reload_does_not_apply_keybindings ... ok
[INFO] [stdout] test app::hot_reload::tests::test_keybinding_reload_updates_registry_and_shows_notice ... ok
[INFO] [stdout] test app::hot_reload::tests::hot_reload_propagates_discover_config ... ok
[INFO] [stdout] test app::library::tests::next_genre_restores_remembered_selection_when_returning ... ok
[INFO] [stdout] test app::library::tests::remembered_genre_selection_clamps_after_station_removal ... ok
[INFO] [stdout] test app::library::tests::remove_library_selection_removes_selected_station ... ok
[INFO] [stdout] test app::library::tests::repeated_removals_restore_in_reverse_order ... ok
[INFO] [stdout] test app::library::tests::test_cycle_sort_mode_advances_and_shows_notice ... ok
[INFO] [stdout] test app::library::tests::metadata_refresh_response_applies_summary_notice ... ok
[INFO] [stdout] test app::library::tests::prev_genre_selects_playing_station_when_visible ... ok
[INFO] [stdout] test app::library::tests::test_visible_stations_uses_active_sort_mode ... ok
[INFO] [stdout] test app::library::tests::now_playing_uses_undo_snapshot_after_playing_station_removal ... ok
[INFO] [stdout] test app::library::tests::undo_history_keeps_only_ten_most_recent_removals ... ok
[INFO] [stdout] test app::hot_reload::tests::check_config_reload_applies_audio_default_volume ... ok
[INFO] [stdout] test app::hot_reload::tests::check_config_reload_reloaded_applies_ui_settings ... ok
[INFO] [stdout] test app::library::tests::test_cycle_sort_mode_persists_to_config ... ok
[INFO] [stdout] test app::library::tests::metadata_refresh_request_sets_pending_once ... ok
[INFO] [stdout] test app::library::tests::undo_without_removed_station_shows_notice ... ok
[INFO] [stdout] test app::library::tests::next_genre_selects_playing_station_when_visible ... ok
[INFO] [stdout] test app::library::tests::test_cycle_sort_mode_persists_each_step ... ok
[INFO] [stdout] test app::library_filter::tests::enter_library_filter_from_normal_mode ... ok
[INFO] [stdout] test app::library::tests::test_cycle_sort_mode_wraps_around ... ok
[INFO] [stdout] test app::library::tests::undo_remove_library_selection_restores_last_removed_station ... ok
[INFO] [stdout] test app::library::tests::undo_remove_restores_selection_inside_genre_filter ... ok
[INFO] [stdout] test app::library_filter::tests::entering_library_filter_while_number_jump_active ... ok
[INFO] [stdout] test app::library_filter::tests::enter_library_filter_noop_on_empty_library ... ok
[INFO] [stdout] test app::library_filter::tests::exit_library_filter_restores_state ... ok
[INFO] [stdout] test app::library_filter::tests::f6_exits_library_filter_and_toggles_mini_mode ... ok
[INFO] [stdout] test app::library_filter::tests::library_filter_confirm_noop_on_empty_filtered_list ... ok
[INFO] [stdout] test app::library_filter::tests::library_filter_backspace_removes_char_and_reclamps ... ok
[INFO] [stdout] test app::library_filter::tests::library_filter_confirm_plays_selected_station ... ok
[INFO] [stdout] test app::library_filter::tests::library_filter_input_appends_and_clamps ... ok
[INFO] [stdout] test app::library_filter::tests::library_filter_input_respects_max_length ... ok
[INFO] [stdout] test app::library_filter::tests::library_filter_navigation_clamps_at_bounds ... ok
[INFO] [stdout] test app::notification_cooldown::tests::test_may_notify_boundary_exactly_5000ms_returns_true ... ok
[INFO] [stdout] test app::notification_cooldown::tests::test_may_notify_true_when_elapsed_gte_cooldown ... ok
[INFO] [stdout] test app::notification_cooldown::tests::test_may_notify_boundary_4999ms_returns_false ... ok
[INFO] [stdout] test app::notification_cooldown::tests::test_notification_cooldown_new_has_no_last_notified ... ok
[INFO] [stdout] test app::notification_cooldown::tests::test_may_notify_false_when_elapsed_lt_cooldown ... ok
[INFO] [stdout] test app::notification_cooldown::tests::test_notification_cooldown_second_record_resets_window ... ok
[INFO] [stdout] test app::notification_cooldown::tests::test_may_notify_true_when_no_previous_notification ... ok
[INFO] [stdout] test app::notification_cooldown::tests::test_record_notification_updates_timestamp ... ok
[INFO] [stdout] test app::notifier::tests::windows_toast_script_contains_escaped_content ... ok
[INFO] [stdout] test app::notifier::tests::xml_escape_handles_special_chars ... ok
[INFO] [stdout] test app::notifier::tests::detects_wsl_osrelease_variants ... ok
[INFO] [stdout] test app::number_jump_handler::tests::cancel_clears_state ... ok
[INFO] [stdout] test app::number_jump_handler::tests::confirm_with_target_equal_to_count_selects_last ... ok
[INFO] [stdout] test app::number_jump_handler::tests::confirm_with_target_one_selects_first_station ... ok
[INFO] [stdout] test app::number_jump_handler::tests::confirm_with_zero_goes_to_first ... ok
[INFO] [stdout] test app::number_jump_handler::tests::empty_list_discards_jump ... ok
[INFO] [stdout] test app::number_jump_handler::tests::digit_accumulation_builds_target ... ok
[INFO] [stdout] test app::number_jump_handler::tests::confirm_jumps_to_correct_row ... ok
[INFO] [stdout] test app::number_jump_handler::tests::confirm_exceeding_count_clamps_to_last ... ok
[INFO] [stdout] test app::number_jump_handler::tests::timeout_cancels_accumulation ... ok
[INFO] [stdout] test app::overlays::tests::close_any_overlay_closes_help_and_context_overlays ... ok
[INFO] [stdout] test app::overlays::tests::cycle_layout_wraps ... ok
[INFO] [stdout] test app::overlays::tests::keybindings_overlay_dismiss_on_quit_action ... ok
[INFO] [stdout] test app::hot_reload::hot_reload_proptests::prop_hot_reload_propagates_discover_and_reconnect ... ok
[INFO] [stdout] test app::overlays::tests::keybindings_overlay_swallows_non_quit_actions ... ok
[INFO] [stdout] test app::overlays::tests::only_one_overlay_active_at_a_time ... ok
[INFO] [stdout] test app::notification_cooldown::proptests::may_notify_false_when_elapsed_lt_5s ... ok
[INFO] [stdout] test app::overlays::tests::playback_doctor_is_mutually_exclusive ... ok
[INFO] [stdout] test app::overlays::tests::show_keybindings_action_opens_overlay ... ok
[INFO] [stdout] test app::overlays::tests::show_keybindings_replaces_other_overlay ... ok
[INFO] [stdout] test app::overlays::tests::show_keybindings_sets_overlay_and_resets_scroll ... ok
[INFO] [stdout] test app::overlays::tests::station_details_and_recent_tracks_are_mutually_exclusive ... ok
[INFO] [stdout] test app::notification_cooldown::proptests::may_notify_always_true_when_fresh ... ok
[INFO] [stdout] test app::overlays::tests::toggle_settings_closes_help_and_context_overlays ... ok
[INFO] [stdout] test app::overlays::tests::toggle_visualizer_mode_wraps ... ok
[INFO] [stdout] test app::overlays::tests::toggle_help_closes_settings_and_context_overlays ... ok
[INFO] [stdout] test app::persist::tests::failed_library_save_keeps_dirty_flag_and_schedules_retry ... ok
[INFO] [stdout] test app::persist::tests::flush_persistence_with_no_dirty_work_does_not_schedule_retry ... ok
[INFO] [stdout] test app::notification_cooldown::proptests::may_notify_true_when_elapsed_gte_5s ... ok
[INFO] [stdout] test app::notification_cooldown::proptests::record_then_immediate_check_returns_false ... ok
[INFO] [stdout] test app::persist::tests::repeated_same_persistence_error_does_not_refresh_notice_before_notice_cooldown ... ok
[INFO] [stdout] test app::persist::tests::persist_config_change_does_nothing_when_config_dir_is_none ... ok
[INFO] [stdout] test app::persist::tests::repeated_same_persistence_error_refreshes_notice_after_notice_cooldown ... ok
[INFO] [stdout] test app::playback::tests::aac_codec_now_starts_playback ... ok
[INFO] [stdout] test app::persist::tests::successful_save_clears_retry_state_and_dirty_flag ... ok
[INFO] [stdout] test app::persist::tests::scheduled_flush_at_retry_deadline_retries ... ok
[INFO] [stdout] test app::playback::tests::empty_codec_is_allowed_to_try_playback ... ok
[INFO] [stdout] test app::persist::tests::scheduled_flush_before_retry_deadline_skips_disk_work ... ok
[INFO] [stdout] test app::playback::tests::hls_codec_does_not_set_playing_url_or_last_played_url ... ok
[INFO] [stdout] test app::playback::tests::hls_codec_is_blocked_before_audio_command ... ok
[INFO] [stdout] test app::playback::tests::mp3_codec_starts_playback ... ok
[INFO] [stdout] test app::playback::tests::ogg_codec_now_starts_playback ... ok
[INFO] [stdout] test app::playback::tests::progressive_volume_step_uses_range_based_steps ... ok
[INFO] [stdout] test app::playback::tests::play_selected_while_playing_enters_fading_out_state ... ok
[INFO] [stdout] test app::playback::tests::play_selected_surfaces_dead_audio_engine ... ok
[INFO] [stdout] test app::playback::tests::retry_stream_without_url_sets_error_notice ... ok
[INFO] [stdout] test app::playback::tests::space_while_connecting_stops_instead_of_restarting_playback ... ok
[INFO] [stdout] test app::playback::tests::play_selected_sets_playing_url_last_played_url_and_connecting_state ... ok
[INFO] [stdout] test app::playback::tests::retry_stream_reuses_current_url_and_resets_transient_status ... ok
[INFO] [stdout] test app::playback::tests::volume_down_uses_progressive_steps_and_saturates ... ok
[INFO] [stdout] test app::playback::tests::volume_up_unmutes ... ok
[INFO] [stdout] test app::playback_error::tests::action_hint_non_empty_for_all_variants ... ok
[INFO] [stdout] test app::playback_error::tests::classifies_decode_errors ... ok
[INFO] [stdout] test app::playback::tests::stop_while_playing_enters_fading_out_and_keeps_station_context ... ok
[INFO] [stdout] test app::playback::tests::test_export_library_success ... ok
[INFO] [stdout] test app::playback::tests::toggle_mute_preserves_volume_number ... ok
[INFO] [stdout] test app::playback_error::tests::classifies_http_timeout_and_network_errors ... ok
[INFO] [stdout] test app::playback::tests::sync_volume_reports_dead_audio_engine_without_changing_playback_state ... ok
[INFO] [stdout] test app::playback_error::tests::classifies_output_errors ... ok
[INFO] [stdout] test app::playback_error::tests::classifies_timeout_case_insensitive ... ok
[INFO] [stdout] test app::playback_error::tests::classifies_timeout_lowercase ... ok
[INFO] [stdout] test app::playback_error::tests::classifies_unknown_for_unrecognized_string ... ok
[INFO] [stdout] test app::playback_runtime::tests::playback_runtime_uses_loaded_volume_mute_and_diagnostics ... ok
[INFO] [stdout] test app::playback::tests::volume_up_uses_progressive_steps_and_clamps ... ok
[INFO] [stdout] test app::persist::tests::persist_config_change_writes_toml_file ... ok
[INFO] [stdout] test app::recent::tests::play_slot_codec_failure_shows_error ... ok
[INFO] [stdout] test app::recent::tests::play_slot_empty_shows_notice ... ok
[INFO] [stdout] test app::persist::tests::persist_config_change_shows_error_notice_on_failure ... ok
[INFO] [stdout] test app::reconnect::tests::test_different_url_after_exhaustion_resets_and_fires ... ok
[INFO] [stdout] test app::recent::tests::assign_slot_noop_when_nothing_playing ... ok
[INFO] [stdout] test app::recent::tests::assign_slot_shows_confirmation_notice ... ok
[INFO] [stdout] test app::recent::tests::assign_slot_stores_playing_url ... ok
[INFO] [stdout] test app::recent::tests::play_slot_same_station_is_noop ... ok
[INFO] [stdout] test app::recent::tests::play_slot_starts_playback ... ok
[INFO] [stdout] test app::recent::tests::play_slot_station_not_in_library_shows_notice ... ok
[INFO] [stdout] test app::recent::tests::play_slot_updates_selection_cursor ... ok
[INFO] [stdout] test app::recent::tests::slots_are_stable_after_playback ... ok
[INFO] [stdout] test app::reconnect::tests::test_backoff_last_element_repeats_for_overflow ... ok
[INFO] [stdout] test app::reconnect::tests::test_custom_backoff_list_used ... ok
[INFO] [stdout] test app::reconnect::tests::test_custom_max_attempts_respected ... ok
[INFO] [stdout] test app::reconnect::tests::test_drive_reconnect_resets_elapsed_timer ... ok
[INFO] [stdout] test app::persist::tests::force_flush_ignores_retry_deadline ... ok
[INFO] [stdout] test app::reconnect::tests::test_exhaustion_persists_until_disarm ... ok
[INFO] [stdout] test app::reconnect::tests::test_reconnect_backoff_and_attempts ... ok
[INFO] [stdout] test app::reconnect::tests::test_reconnect_different_url_resets ... ok
[INFO] [stdout] test app::playback_runtime::property_tests::volume_fraction_bounds_and_mute_invariant ... ok
[INFO] [stdout] test app::reconnect::tests::test_take_due_at_exact_deadline_returns_url ... ok
[INFO] [stdout] test app::reconnect::tests::test_take_due_one_nanosecond_before_deadline_returns_none ... ok
[INFO] [stdout] test app::reconnect::tests::test_update_params_changes_max_and_backoff ... ok
[INFO] [stdout] test app::reconnect::tests::test_update_params_preserves_armed_url_and_attempts ... ok
[INFO] [stdout] test app::search::tests::current_query_empty_response_sets_empty_status ... ok
[INFO] [stdout] test app::search::tests::clamped_index_handles_empty_and_short_lists ... ok
[INFO] [stdout] test app::search::tests::current_query_error_response_sets_error_status ... ok
[INFO] [stdout] test app::search::tests::current_query_success_response_is_accepted ... ok
[INFO] [stdout] test app::search::tests::current_response_is_accepted_after_stale_response_notice ... ok
[INFO] [stdout] test app::search::tests::exit_search_restores_library_selection_snapshot ... ok
[INFO] [stdout] test app::reconnect::property_tests::backoff_index_selection ... ok
[INFO] [stdout] test app::search::tests::test_character_input_exits_cycling ... ok
[INFO] [stdout] test app::search::tests::test_audition_pushes_query_to_history ... ok
[INFO] [stdout] test app::search::tests::late_stale_response_after_ready_keeps_results_and_reports_discard ... ok
[INFO] [stdout] test app::search::tests::mark_search_started_moves_debounced_query_to_searching ... ok
[INFO] [stdout] test app::search::tests::normal_mode_search_response_is_ignored ... ok
[INFO] [stdout] test app::search::tests::search_audition_plays_result_without_saving_or_exiting_search ... ok
[INFO] [stdout] test app::search::tests::search_confirm_adds_result_exits_search_and_selects_playing ... ok
[INFO] [stdout] test app::search::tests::search_audition_without_result_keeps_search_state_unchanged ... ok
[INFO] [stdout] test app::search::tests::search_confirm_without_result_exits_search_without_playing ... ok
[INFO] [stdout] test app::search::tests::short_search_query_clears_results_and_waits_for_input ... ok
[INFO] [stdout] test app::search::tests::stale_search_response_is_reported_without_overwriting_results ... ok
[INFO] [stdout] test app::search::tests::search_response_resets_search_selection_snapshot ... ok
[INFO] [stdout] test app::search::tests::test_confirm_short_query_not_pushed ... ok
[INFO] [stdout] test app::search::tests::test_up_arrow_cycles_backward ... ok
[INFO] [stdout] test app::search::tests::test_audition_pushes_to_ring_but_does_not_persist ... ok
[INFO] [stdout] test app::search::tests::test_up_arrow_empty_input_enters_cycling ... ok
[INFO] [stdout] test app::search::tests::valid_search_query_enters_debounce_state ... ok
[INFO] [stdout] test app::search::tests::test_up_arrow_empty_ring_no_op ... ok
[INFO] [stdout] test app::search::tests::test_down_arrow_cycles_forward ... ok
[INFO] [stdout] test app::search::tests::test_confirm_search_pushes_query_to_history ... ok
[INFO] [stdout] test app::search::tests::test_confirm_empty_query_not_pushed ... ok
[INFO] [stdout] test app::search::tests::test_confirm_search_persists_history_to_disk ... ok
[INFO] [stdout] test app::search::tests::test_confirm_rejected_query_does_not_persist ... ok
[INFO] [stdout] test app::settings::tests::each_setting_row_maps_from_its_index ... ok
[INFO] [stdout] test app::selectors::tests::library_filter_empty_query_returns_full_genre_set ... ok
[INFO] [stdout] test app::selectors::tests::library_filter_mode_applies_query_within_active_genre ... ok
[INFO] [stdout] test app::selectors::tests::library_filter_not_applied_in_normal_mode ... ok
[INFO] [stdout] test app::selectors::tests::library_filter_respects_genre_scoping ... ok
[INFO] [stdout] test app::settings::tests::output_device_preference_cycles_default_and_devices ... ok
[INFO] [stdout] test app::settings::tests::output_device_preference_handles_missing_saved_device ... ok
[INFO] [stdout] test app::selectors::tests::select_playing_matches_normalized_visible_url ... ok
[INFO] [stdout] test app::selectors::tests::selected_station_returns_none_for_empty_visible_list ... ok
[INFO] [stdout] test app::settings::tests::output_device_display_name_uses_default_label_for_none ... ok
[INFO] [stdout] test app::selectors::tests::now_playing_matches_normalized_library_url ... ok
[INFO] [stdout] test app::settings::tests::settings_quit_closes_settings_without_quitting_app ... ok
[INFO] [stdout] test app::settings::tests::settings_tick_still_polls_and_updates ... ok
[INFO] [stdout] test app::settings::tests::settings_toggle_save_history ... ok
[INFO] [stdout] test app::settings::tests::settings_blocks_play_selected ... ok
[INFO] [stdout] test app::settings::tests::settings_change_does_not_mark_library_dirty ... ok
[INFO] [stdout] test app::selectors::tests::selected_station_returns_highlighted_visible_station ... ok
[INFO] [stdout] test app::settings::tests::settings_navigation_wraps_using_row_count ... ok
[INFO] [stdout] test app::settings::tests::settings_forward_and_backward_cycle_theme ... ok
[INFO] [stdout] test app::settings::tests::settings_h_action_steps_backward_without_closing_popup ... ok
[INFO] [stdout] test app::settings::tests::settings_toggle_stream_metadata_updates_setting ... ok
[INFO] [stdout] test app::settings::tests::settings_blocks_search_entry ... ok
[INFO] [stdout] test app::settings::tests::test_undo_stack_cleared_on_close ... ok
[INFO] [stdout] test app::settings::tests::test_undo_restores_previous_value ... ok
[INFO] [stdout] test app::settings::tests::settings_backward_wraps_theme ... ok
[INFO] [stdout] test app::settings::tests::test_undo_persists_config ... ok
[INFO] [stdout] test app::settings_undo::tests::test_capture_and_take_round_trip ... ok
[INFO] [stdout] test app::settings_undo::tests::test_take_nonexistent_returns_none ... ok
[INFO] [stdout] test app::settings_undo::tests::test_clear_empties_all ... ok
[INFO] [stdout] test app::settings_undo::tests::test_overwrite_replaces_previous ... ok
[INFO] [stdout] test app::settings_undo::tests::test_take_consumes_entry ... ok
[INFO] [stdout] test app::search::property_tests::down_arrow_cycling ... ok
[INFO] [stdout] test app::settings::tests::test_undo_with_no_entry_shows_notice ... ok
[INFO] [stdout] test app::sleep_timer::tests::clear_resets_armed_timer ... ok
[INFO] [stdout] test app::settings::tests::settings_change_persists_config_to_toml_file ... ok
[INFO] [stdout] test app::settings_undo::tests::test_has_entry_reports_correctly ... ok
[INFO] [stdout] test app::sleep_timer::tests::decrease_to_zero_turns_off ... ok
[INFO] [stdout] test app::sleep_timer::tests::expiration_fires_once_and_resets ... ok
[INFO] [stdout] test app::sleep_timer::tests::increase_steps_then_wraps_to_off ... ok
[INFO] [stdout] test app::sleep_timer::tests::label_reflects_state ... ok
[INFO] [stdout] test app::sleep_timer::tests::pause_resume_preserves_remaining_time ... ok
[INFO] [stdout] test app::sleep_timer::tests::presets_within_bounds_and_sorted ... ok
[INFO] [stdout] test app::sleep_timer::tests::preset_sets_absolute_clamped_minutes ... ok
[INFO] [stdout] test app::sleep_timer::tests::waiting_timer_does_not_spend_time_before_playback_starts ... ok
[INFO] [stdout] test app::startup::tests::from_parts_applies_config_when_loaded_from_file ... ok
[INFO] [stdout] test app::startup::tests::from_parts_autoplay_uses_normalized_last_played_url_and_reports_dead_engine ... ok
[INFO] [stdout] test app::startup::tests::from_parts_defaults_sort_mode_on_empty_config_value ... ok
[INFO] [stdout] test app::startup::tests::from_parts_defaults_sort_mode_on_invalid_config_value ... ok
[INFO] [stdout] test app::sleep_timer::tests::decrease_from_off_wraps_to_max ... ok
[INFO] [stdout] test app::sleep_timer::tests::timer_pauses_when_playback_is_not_running ... ok
[INFO] [stdout] test app::sleep_timer::tests::waiting_timer_returns_full_duration_regardless_of_wall_time ... ok
[INFO] [stdout] test app::startup::tests::from_parts_config_warnings_appear_in_load_warnings ... ok
[INFO] [stdout] test app::startup::tests::from_parts_does_not_override_settings_without_config_file ... ok
[INFO] [stdout] test app::startup::tests::from_parts_shows_single_startup_warning_verbatim ... ok
[INFO] [stdout] test app::startup::tests::from_parts_summarizes_multiple_startup_warnings ... ok
[INFO] [stdout] test app::startup::tests::startup_autoplay_allows_aac_codec ... ok
[INFO] [stdout] test app::startup::tests::startup_autoplay_allows_unknown_codec ... ok
[INFO] [stdout] test app::startup::tests::startup_autoplay_allows_url_not_in_library ... ok
[INFO] [stdout] test app::startup::tests::test_startup_with_stale_stations_shows_notice ... ok
[INFO] [stdout] test app::startup::tests::test_app_initializes_with_search_history_ring ... ok
[INFO] [stdout] test app::startup::tests::from_parts_stores_config_and_preserved ... ok
[INFO] [stdout] test app::startup::tests::from_parts_loads_sort_mode_from_config ... ok
[INFO] [stdout] test app::startup::tests::from_parts_uses_injected_ui_state_without_loading_runtime_files ... ok
[INFO] [stdout] test app::startup::tests::startup_autoplay_blocks_hls_codec ... ok
[INFO] [stdout] test app::ui_state::tests::display_mode_invalid_key_defaults_to_normal ... ok
[INFO] [stdout] test app::ui_runtime::tests::ui_runtime_uses_loaded_layout_and_visualizer_mode ... ok
[INFO] [stdout] test app::ui_state::tests::display_mode_keys_roundtrip ... ok
[INFO] [stdout] test app::ui_state::tests::from_app_values_preserves_stale_dismissed_at ... ok
[INFO] [stdout] test app::ui_state::tests::should_suppress_stale_notice_future_timestamp_suppressed ... ok
[INFO] [stdout] test app::ui_state::tests::test_load_with_warning_uses_defaults_in_tests ... ok
[INFO] [stdout] test app::ui_state::tests::should_suppress_stale_notice_seven_plus_days_not_suppressed ... ok
[INFO] [stdout] test app::ui_state::tests::test_load_uses_defaults ... ok
[INFO] [stdout] test app::ui_state::tests::should_suppress_stale_notice_none_not_suppressed ... ok
[INFO] [stdout] test app::ui_state::tests::display_mode_sanitized_clamps_invalid ... ok
[INFO] [stdout] test app::startup::tests::test_startup_without_stale_stations_no_notice ... ok
[INFO] [stdout] test app::update::tests::command_palette_mode_routes_to_palette_handler ... ok
[INFO] [stdout] test app::update::tests::discover_empty_quit_quits_normally ... ok
[INFO] [stdout] test app::ui_state::tests::layout_mode_keys_roundtrip ... ok
[INFO] [stdout] test app::ui_state::tests::sanitizes_loaded_values ... ok
[INFO] [stdout] test app::ui_state::tests::should_suppress_stale_notice_recent_timestamp_suppressed ... ok
[INFO] [stdout] test app::search::property_tests::up_arrow_cycling ... ok
[INFO] [stdout] test app::ui_state::tests::from_app_values_clamps_visualizer_mode ... ok
[INFO] [stdout] test app::update::tests::discover_visible_non_intercepted_action_passes_through ... ok
[INFO] [stdout] test app::update::tests::discover_visible_play_selected_triggers_select ... ok
[INFO] [stdout] test app::update::tests::discover_visible_prev_station_triggers_discover_prev ... ok
[INFO] [stdout] test app::update::tests::discover_visible_quit_triggers_dismiss ... ok
[INFO] [stdout] test app::update::tests::discover_visible_next_station_triggers_discover_next ... ok
[INFO] [stdout] test app::update::tests::elapsed_timer_resets_on_stop ... ok
[INFO] [stdout] test app::update::tests::elapsed_timer_resets_and_starts_on_play ... ok
[INFO] [stdout] test app::update::tests::elapsed_timer_pauses_on_pause ... ok
[INFO] [stdout] test app::update::tests::elapsed_timer_ticks_during_playing ... ok
[INFO] [stdout] test app::update::tests::f6_ignored_during_command_palette_input_mode ... ok
[INFO] [stdout] test app::update::tests::f6_toggles_mini_to_normal ... ok
[INFO] [stdout] test app::update::tests::f6_toggles_normal_to_mini ... ok
[INFO] [stdout] test app::update::tests::next_station_wraps_around ... ok
[INFO] [stdout] test app::update::tests::f6_ignored_during_search_input_mode ... ok
[INFO] [stdout] test app::update::tests::play_selected_action_triggers_connecting_state ... ok
[INFO] [stdout] test app::update::tests::prev_station_wraps_around ... ok
[INFO] [stdout] test app::update::tests::quit_action_closes_overlay_before_quitting ... ok
[INFO] [stdout] test app::update::tests::quit_action_quits_when_no_overlay_active ... ok
[INFO] [stdout] test app::update::tests::quit_in_mini_mode_connecting_resets_timer_and_quits ... ok
[INFO] [stdout] test app::update::tests::settings_overlay_swallows_play_and_navigation ... ok
[INFO] [stdout] test app::update::tests::settings_overlay_swallows_search_entry ... ok
[INFO] [stdout] test app::update::tests::stop_action_stops_playback ... ok
[INFO] [stdout] test app::update::tests::tick_decrements_volume_flash_remaining ... ok
[INFO] [stdout] test app::update::tests::sleep_timer_overlay_swallows_non_timer_actions ... ok
[INFO] [stdout] test app::settings_undo::property_tests::undo_single_level_overwrite_and_consume ... ok
[INFO] [stdout] test app::update::tests::tick_increments_tick_count ... ok
[INFO] [stdout] test app::update::tests::volume_down_in_mini_mode_sets_flash_timer ... ok
[INFO] [stdout] test app::update::tests::tick_does_not_underflow_volume_flash_remaining ... ok
[INFO] [stdout] test app::update::tests::volume_up_in_mini_mode_sets_flash_timer ... ok
[INFO] [stdout] test app::update::tests::volume_up_in_normal_mode_does_not_set_flash_timer ... ok
[INFO] [stdout] test app::visualizer::fft::tests::average_log_band_energy_all_zeros_returns_zero ... ok
[INFO] [stdout] test app::visualizer::fft::tests::average_log_band_energy_nonzero_returns_positive ... ok
[INFO] [stdout] test app::visualizer::fft::tests::fft_rec_four_element_known_output ... ok
[INFO] [stdout] test app::visualizer::fft::tests::fft_rec_output_length_matches_input ... ok
[INFO] [stdout] test app::visualizer::fft::tests::fft_rec_pure_sine_dominant_peak ... ok
[INFO] [stdout] test app::visualizer::fft::tests::fft_rec_single_element_returns_unchanged ... ok
[INFO] [stdout] test app::visualizer::spectrum::tests::connecting_spectrum_pattern_moves_over_time ... ok
[INFO] [stdout] test app::visualizer::spectrum::tests::connecting_spectrum_pattern_resizes_and_stays_subtle ... ok
[INFO] [stdout] test app::visualizer::spectrum::tests::smoothing_preserves_constant_flat_targets ... ok
[INFO] [stdout] test app::visualizer::spectrum::tests::high_treble_releases_faster_than_midrange ... ok
[INFO] [stdout] test app::visualizer::spectrum::tests::spectrum_gain_curve_softens_high_end_without_flattening_treble ... ok
[INFO] [stdout] test app::visualizer::spectrum::tests::spectrum_target_gates_tiny_noise_floor ... ok
[INFO] [stdout] test app::visualizer::spectrum::tests::treble_variance_expansion_boosts_structured_highs_only ... ok
[INFO] [stdout] test app::visualizer::spectrum::tests::treble_delta_variance_detects_structured_motion ... ok
[INFO] [stdout] test app::visualizer::tests::fading_out_drives_sample_visualizer ... ok
[INFO] [stdout] test app::visualizer_mode::tests::from_index_clamps_out_of_range ... ok
[INFO] [stdout] test app::visualizer_mode::tests::next_cycles_through_all_modes ... ok
[INFO] [stdout] test app::visualizer_mode::tests::to_index_roundtrips ... ok
[INFO] [stdout] test audio::capability::tests::codec_capability_reason_is_not_empty ... ok
[INFO] [stdout] test audio::capability::tests::he_aac_and_audio_aac_variants_are_supported ... ok
[INFO] [stdout] test audio::capability::tests::hls_remains_unsupported ... ok
[INFO] [stdout] test audio::capability::tests::hls_variants_are_unsupported ... ok
[INFO] [stdout] test audio::capability::tests::known_non_mp3_codecs_are_now_supported ... ok
[INFO] [stdout] test audio::capability::tests::missing_codec_is_unknown_and_allowed_to_try ... ok
[INFO] [stdout] test audio::capability::tests::mp3_aliases_are_supported ... ok
[INFO] [stdout] test audio::capability::tests::normalize_strips_whitespace_and_uppercases ... ok
[INFO] [stdout] test audio::capability::tests::unknown_codec_is_not_blocked ... ok
[INFO] [stdout] test audio::decode::tests::prebuffer_timeout_emits_failed_event ... ok
[INFO] [stdout] test audio::decode::tests::short_stream_attempts_probe ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::configured_max_attempts_of_one_exhausts_on_first_failure ... ok
[INFO] [stdout] test audio::decode::tests::visualizer_try_lock_non_blocking ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::pause_while_idle_is_no_op ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::pause_while_playing_transitions_to_paused_and_emits_paused ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::play_from_idle_transitions_to_connecting_and_emits_connecting ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::play_from_playing_transitions_to_connecting ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::recovery_config_default_has_two_max_attempts ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::recovery_exhausted_emits_error_when_retries_at_configured_limit ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::resume_while_idle_is_no_op ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::resume_while_paused_transitions_to_playing_and_emits_playing ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::set_output_device_updates_options ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::set_stream_metadata_updates_options ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::set_volume_infinity_does_not_panic ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::set_volume_nan_does_not_panic ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::set_volume_neg_infinity_does_not_panic ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::stale_generation_event_is_dropped ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::stop_from_connecting_emits_exactly_one_stopped ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::stop_from_playing_emits_exactly_one_stopped ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::stream_ended_abandoned_is_no_op ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::stale_generation_connected_event_is_dropped ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::stream_ended_eof_transitions_to_idle_and_emits_stopped ... ok
[INFO] [stdout] test audio::metadata::tests::test_parse_stream_title ... ok
[INFO] [stdout] test audio::metadata::tests::test_parse_stream_title_embedded_single_quote ... ok
[INFO] [stdout] test audio::metadata::tests::test_parse_stream_title_missing_closing_delimiter_returns_none ... ok
[INFO] [stdout] test audio::output_manager::tests::attach_creates_sink_and_is_not_drained_immediately ... ignored
[INFO] [stdout] test audio::metadata::tests::test_parse_stream_title_unicode_preserved ... ok
[INFO] [stdout] test audio::output_manager::tests::ensure_open_opens_device_on_first_call ... ignored
[INFO] [stdout] test audio::output_manager::tests::clear_reopen_needed_clears_flag ... ok
[INFO] [stdout] test audio::output::tests::normalize_output_device_name_trims_real_names ... ok
[INFO] [stdout] test audio::output::tests::output_device_display_name_uses_default_label ... ok
[INFO] [stdout] test audio::output::tests::output_device_names_from_iter_sorts_deduplicates_and_filters_default ... ok
[INFO] [stdout] test audio::metadata::tests::test_parse_stream_title_multiple_pairs_extracts_first ... ok
[INFO] [stdout] test audio::output_manager::tests::is_sink_drained_false_when_no_sink ... ok
[INFO] [stdout] test audio::output::tests::output_device_names_match_case_insensitively ... ok
[INFO] [stdout] test audio::output::tests::normalize_output_device_name_treats_default_and_blank_as_none ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::stop_from_idle_emits_exactly_one_stopped ... ok
[INFO] [stdout] test audio::output_manager::tests::pause_no_panic_when_no_sink ... ok
[INFO] [stdout] test audio::output_manager::tests::reopen_increments_recovery_retries_on_failure ... ignored
[INFO] [stdout] test audio::output::tests::native_audio_stderr_suppression_runs_closure ... ok
[INFO] [stdout] test audio::output_manager::tests::resume_no_panic_when_no_sink ... ok
[INFO] [stdout] test audio::stream_source::tests::eof_inside_metadata_block_returns_unexpected_eof ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::recovery_allowed_when_retries_below_configured_limit ... ok
[INFO] [stdout] test audio::stream_source::tests::exact_boundary_read_does_not_include_metadata_bytes ... ok
[INFO] [stdout] test audio::stream_source::tests::no_icy_passes_bytes_through_unchanged ... ok
[INFO] [stdout] test audio::stream_source::tests::eof_reading_length_byte_propagates_error ... ok
[INFO] [stdout] test audio::output_manager::tests::set_preferred_device_normalizes_blank_to_none ... ok
[INFO] [stdout] test audio::output_manager::tests::set_preferred_device_normalizes_default_to_none ... ok
[INFO] [stdout] test audio::output_manager::tests::new_starts_with_no_device_and_zero_retries ... ok
[INFO] [stdout] test audio::stream_source::tests::read_returns_abandoned_when_generation_bumped_to_new_value ... ok
[INFO] [stdout] test audio::stream_source::tests::read_smaller_than_metaint_advances_position_correctly ... ok
[INFO] [stdout] test audio::stream_source::tests::track_changed_event_emitted_on_new_title ... ok
[INFO] [stdout] test audio::stream_source::tests::seek_always_returns_error ... ok
[INFO] [stdout] test audio::output_manager::tests::set_preferred_device_same_value_also_sets_reopen_needed ... ok
[INFO] [stdout] test audio::output_manager::tests::set_preferred_device_sets_reopen_needed ... ok
[INFO] [stdout] test audio::output_manager::tests::set_volume_no_panic_when_no_sink ... ok
[INFO] [stdout] test audio::stream_source::tests::read_returns_abandoned_when_generation_becomes_stale ... ok
[INFO] [stdout] test audio::output_manager::tests::stop_sets_sink_to_none ... ok
[INFO] [stdout] test audio::supervisor::tests::abandon_sets_active_generation_to_zero ... ok
[INFO] [stdout] test audio::supervisor::tests::is_active_false_for_stale_generation ... ok
[INFO] [stdout] test audio::supervisor::tests::is_active_false_for_zero ... ok
[INFO] [stdout] test audio::stream_source::tests::when_metadata_disabled_all_bytes_pass_through ... ok
[INFO] [stdout] test audio::supervisor::tests::is_active_true_for_current_generation ... ok
[INFO] [stdout] test audio::stream_source::tests::zero_length_metadata_block_emits_no_event ... ok
[INFO] [stdout] test audio::stream_source::tests::audio_bytes_before_metadata_block_returned_exactly ... ok
[INFO] [stdout] test audio::supervisor::tests::active_generation_arc_shares_same_counter ... ok
[INFO] [stdout] test audio::supervisor::tests::next_generation_starts_at_one ... ok
[INFO] [stdout] test audio::supervisor::tests::abandon_when_no_worker_does_not_panic ... ok
[INFO] [stdout] test audio::tests::mock_audio_sink_disconnected_returns_false_on_send ... ok
[INFO] [stdout] test audio::tests::mock_audio_sink_new_returns_true_on_send ... ok
[INFO] [stdout] test audio::tests::mock_audio_sink_returns_queued_statuses ... ok
[INFO] [stdout] test audio::types::tests::connect_error_classifies_as_network ... ok
[INFO] [stdout] test audio::supervisor::tests::next_generation_is_strictly_increasing ... ok
[INFO] [stdout] test audio::types::tests::all_user_visible_errors_classify_as_non_unknown ... ok
[INFO] [stdout] test audio::types::tests::engine_event_generation_returns_some_for_worker_events ... ok
[INFO] [stdout] test audio::types::tests::http_error_classifies_as_http ... ok
[INFO] [stdout] test audio::types::tests::output_error_classifies_as_output ... ok
[INFO] [stdout] test audio::types::tests::connect_request_stores_all_fields ... ok
[INFO] [stdout] test audio::types::tests::output_error_uses_hardware_output_error_prefix ... ok
[INFO] [stdout] test audio::types::tests::engine_error_is_recoverable_output_only_for_output_variant ... ok
[INFO] [stdout] test audio::types::tests::decode_error_classifies_as_decode ... ok
[INFO] [stdout] test audio::visualizer::tests::visualizer_constants_keep_small_ui_buffer ... ok
[INFO] [stdout] test audio::volume::tests::begin_fade_out_followed_by_begin_fade_in_overrides ... ok
[INFO] [stdout] test audio::types::tests::playback_options_default_has_metadata_enabled ... ok
[INFO] [stdout] test audio::volume::tests::begin_fade_in_sets_fade_in_direction ... ok
[INFO] [stdout] test audio::volume::tests::begin_fade_out_sets_fade_out_direction ... ok
[INFO] [stdout] test audio::volume::tests::fade_out_done_threshold_boundary ... ok
[INFO] [stdout] test audio::volume::tests::new_clamps_infinity_to_one ... ok
[INFO] [stdout] test audio::volume::tests::fade_out_step_uses_exponential_decay ... ok
[INFO] [stdout] test audio::volume::tests::is_fading_out_false_after_begin_fade_in ... ok
[INFO] [stdout] test audio::types::tests::engine_error_to_status_string_stable_prefixes ... ok
[INFO] [stdout] test audio::stream_source::tests::duplicate_titles_do_not_emit_duplicate_events ... ok
[INFO] [stdout] test audio::types::tests::engine_event_generation_returns_none_for_output_lost ... ok
[INFO] [stdout] test audio::supervisor::tests::prop_next_generation_strictly_monotonic ... ok
[INFO] [stdout] test audio::volume::tests::new_clamps_nan_target_to_zero ... ok
[INFO] [stdout] test audio::volume::tests::new_starts_at_clamped_target_with_no_active_fade ... ok
[INFO] [stdout] test audio::volume::tests::retarget_clamps_negative_infinity ... ok
[INFO] [stdout] test audio::volume::tests::retarget_clamps_positive_infinity ... ok
[INFO] [stdout] test audio::volume::tests::retarget_clamps_to_unit_interval ... ok
[INFO] [stdout] test cli::tests::test_cli_config_init_missing_subcommand ... ok
[INFO] [stdout] test cli::tests::test_cli_config_unknown_subcommand ... ok
[INFO] [stdout] test cli::tests::test_cli_export_creates_parent_directories ... ok
[INFO] [stdout] test cli::tests::test_cli_help_and_version ... ok
[INFO] [stdout] test cli::tests::test_cli_keybindings_missing_subcommand ... ok
[INFO] [stdout] test cli::tests::test_cli_keybindings_unknown_subcommand ... ok
[INFO] [stdout] test cli::tests::test_cli_missing_paths ... ok
[INFO] [stdout] test cli::tests::test_cli_run_tui_on_empty ... ok
[INFO] [stdout] test cli::tests::test_cli_export_import_roundtrip ... ok
[INFO] [stdout] test cli::tests::test_cli_unknown_arg_errors ... ok
[INFO] [stdout] test cli::tests::test_config_init_creates_directories ... ok
[INFO] [stdout] test audio::volume::tests::retarget_clamps_nan ... ok
[INFO] [stdout] test cli::tests::test_config_show_contains_discover_section_with_defaults ... ok
[INFO] [stdout] test cli::tests::test_config_init_skips_existing_file ... ok
[INFO] [stdout] test cli::tests::test_config_show_default_contains_sort_mode_favorites_first ... ok
[INFO] [stdout] test cli::tests::test_config_show_contains_playback_section_with_defaults ... ok
[INFO] [stdout] test cli::tests::test_config_init_writes_default_file ... ok
[INFO] [stdout] test cli::tests::test_config_template_contains_all_sections ... ok
[INFO] [stdout] test audio::volume::property_tests::volume_clamp_result_in_unit_interval ... ok
[INFO] [stdout] test cli::tests::test_config_template_contains_comments ... ok
[INFO] [stdout] test cli::tests::test_config_show_no_file_prints_defaults ... ok
[INFO] [stdout] test cli::tests::test_format_bindings_table_contains_key_and_action ... ok
[INFO] [stdout] test cli::tests::test_format_bindings_table_contains_mode_headers ... ok
[INFO] [stdout] test cli::tests::test_config_show_invalid_toml_produces_parse_warning ... ok
[INFO] [stdout] test cli::tests::test_config_show_valid_file_prints_toml ... ok
[INFO] [stdout] test cli::tests::test_format_bindings_table_empty_bindings ... ok
[INFO] [stdout] test cli::tests::test_keybindings_validate_invalid_entries_returns_warnings ... ok
[INFO] [stdout] test cli::tests::test_config_template_has_no_scrobble_section ... ok
[INFO] [stdout] test cli::tests::test_keybindings_list_runs_successfully ... ok
[INFO] [stdout] test cli::tests::test_keybindings_validate_malformed_json_returns_warning ... ok
[INFO] [stdout] test cli::tests::test_keybindings_validate_missing_file_returns_error ... ok
[INFO] [stdout] test cli::tests::test_load_effective_registry_returns_defaults ... ok
[INFO] [stdout] test config::tests::parse_json_with_warning_returns_default_and_warning_for_malformed_json ... ok
[INFO] [stdout] test config::tests::parse_json_with_warning_accepts_valid_json ... ok
[INFO] [stdout] test config_toml::hot_reload::tests::test_check_reload_deleted_file_returns_unchanged ... ok
[INFO] [stdout] test config::tests::path_for_uses_requested_config_dir_and_file ... ok
[INFO] [stdout] test cli::tests::test_keybindings_validate_valid_file_returns_no_warnings ... ok
[INFO] [stdout] test cli::tests::test_keybindings_validate_via_cli_missing_file ... ok
[INFO] [stdout] test cli::tests::test_keybindings_validate_via_cli_valid_file ... ok
[INFO] [stdout] test config_toml::hot_reload::tests::test_check_reload_first_call_detects_change_then_debounce_reloads ... ok
[INFO] [stdout] test config_toml::hot_reload::tests::test_check_reload_no_reload_during_debounce_window ... ok
[INFO] [stdout] test config_toml::hot_reload::tests::test_new_creates_watcher_with_correct_path ... ok
[INFO] [stdout] test config_toml::io::tests::test_load_config_existing_toml_loads_values ... ok
[INFO] [stdout] test config_toml::io::tests::test_load_config_fresh_dir_returns_defaults ... ok
[INFO] [stdout] test config_toml::hot_reload::tests::test_check_reload_invalid_toml_returns_error_after_debounce ... ok
[INFO] [stdout] test config_toml::io::tests::test_load_config_invalid_toml_returns_defaults_with_warning ... ok
[INFO] [stdout] test config_toml::hot_reload::tests::test_check_reload_nonexistent_file_returns_unchanged ... ok
[INFO] [stdout] test config_toml::hot_reload::tests::test_check_reload_unchanged_mtime_no_pending_returns_unchanged ... ok
[INFO] [stdout] test config_toml::io::tests::test_load_config_migration_from_library_json ... ok
[INFO] [stdout] test config_toml::io::tests::test_load_config_migration_malformed_json_returns_defaults ... ok
[INFO] [stdout] test config_toml::io::tests::test_load_config_toml_preferred_over_library_json ... ok
[INFO] [stdout] test config_toml::io::tests::test_save_config_aborts_on_validation_failure ... ok
[INFO] [stdout] test config_toml::io::tests::test_load_config_migration_missing_settings_field_returns_defaults ... ok
[INFO] [stdout] test config_toml::io::tests::test_save_config_atomic_no_temp_file_left_after_success ... ok
[INFO] [stdout] test cli::tests::test_config_show_no_file_emits_all_sections_with_defaults ... ok
[INFO] [stdout] test config_toml::io::tests::test_load_config_unreadable_toml_returns_defaults_with_warning ... ok
[INFO] [stdout] test config_toml::io::tests::test_save_config_atomic_overwrites_existing_file ... ok
[INFO] [stdout] test config_toml::io::tests::test_save_config_creates_dir_and_writes_file ... ok
[INFO] [stdout] test config_toml::io::tests::test_save_config_atomic_rename_produces_correct_content ... ok
[INFO] [stdout] test config_toml::io::tests::test_save_config_preserves_unknown_keys ... ok
[INFO] [stdout] test config_toml::io::tests::test_save_config_write_failure_returns_error ... ok
[INFO] [stdout] test config_toml::io::tests::test_save_config_round_trips_with_load ... ok
[INFO] [stdout] test config_toml::io::tests::test_save_config_validates_before_writing ... ok
[INFO] [stdout] test config_toml::hot_reload::tests::test_check_reload_changed_mtime_triggers_new_debounce ... ok
[INFO] [stdout] test config_toml::hot_reload::tests::test_check_reload_invalid_after_valid_returns_error ... ok
[INFO] [stdout] test config_toml::hot_reload::tests::test_check_reload_rapid_changes_reset_debounce_timer ... ok
[INFO] [stdout] test config_toml::parse::property_tests::prop_device_recovery_delay_ms_clamping ... ok
[INFO] [stdout] test config_toml::parse::property_tests::prop_device_recovery_attempts_clamping ... ok
[INFO] [stdout] test config_toml::parse::property_tests::prop_discover_weight_clamping ... ok
[INFO] [stdout] test config_toml::parse::property_tests::prop_normalize_entry_preserves_short_entries ... ok
[INFO] [stdout] test config_toml::parse::property_tests::prop_normalize_entry_truncation_invariant ... ok
[INFO] [stdout] test config_toml::parse::property_tests::prop_theme_validation ... ok
[INFO] [stdout] test config_toml::parse::tests::test_device_recovery_attempts_above_range_clamped ... ok
[INFO] [stdout] test config_toml::parse::tests::test_device_recovery_attempts_below_range_clamped ... ok
[INFO] [stdout] test config_toml::parse::tests::test_device_recovery_attempts_missing_uses_default ... ok
[INFO] [stdout] test audio::types::tests::pbt::prop_error_string_always_classifiable ... ok
[INFO] [stdout] test config_toml::parse::tests::test_device_recovery_attempts_wrong_type_uses_default ... ok
[INFO] [stdout] test config_toml::parse::tests::test_device_recovery_delay_ms_above_range_clamped ... ok
[INFO] [stdout] test config_toml::parse::tests::test_device_recovery_delay_ms_below_range_clamped ... ok
[INFO] [stdout] test config_toml::parse::tests::test_device_recovery_delay_ms_missing_uses_default ... ok
[INFO] [stdout] test config_toml::parse::tests::test_device_recovery_delay_ms_valid_value_parsed ... ok
[INFO] [stdout] test config_toml::parse::tests::test_device_recovery_delay_ms_wrong_type_uses_default ... ok
[INFO] [stdout] test config_toml::parse::tests::test_normalize_entry_at_exact_limit_preserved ... ok
[INFO] [stdout] test config_toml::parse::tests::test_normalize_entry_below_limit_preserved ... ok
[INFO] [stdout] test config_toml::parse::tests::test_normalize_entry_emoji_truncation ... ok
[INFO] [stdout] test config_toml::parse::tests::test_normalize_entry_multibyte_truncated_at_char_boundary ... ok
[INFO] [stdout] test config_toml::parse::tests::test_normalize_entry_trailing_whitespace_after_truncation_trimmed ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_discover_countries_discard_empty_and_whitespace ... ok
[INFO] [stdout] test config_toml::parse::tests::test_device_recovery_attempts_valid_value_parsed ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_discover_countries_trimmed_and_uppercased ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_discover_country_max_10_chars_truncated ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_discover_missing_fields_returns_defaults ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_discover_missing_section_returns_defaults ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_discover_countries_truncated_at_50_entries ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_discover_tags_discard_empty_and_whitespace ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_discover_tags_trimmed_and_lowercased ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_discover_tag_max_100_chars_truncated ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_discover_tags_truncated_at_50_entries ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_discover_weights_clamped_above ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_discover_valid_config ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_discover_weights_clamped_below ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_discover_wrong_type_weight_uses_default ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_toml_empty_string_returns_all_defaults ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_toml_error_includes_location ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_toml_full_config_parses_correctly ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_toml_partial_config_uses_defaults ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_toml_invalid_toml_returns_error ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_toml_unknown_keys_preserved ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_toml_unknown_theme_falls_back_to_retrowave ... ok
[INFO] [stdout] test config_toml::parse::property_tests::prop_reconnect_max_attempts_clamping ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_toml_volume_below_0_clamped ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_toml_volume_above_100_clamped ... ok
[INFO] [stdout] test config_toml::parse::tests::test_playback_all_new_fields_valid ... ok
[INFO] [stdout] test config_toml::parse::property_tests::prop_volume_clamping ... ok
[INFO] [stdout] test config_toml::parse::tests::test_reconnect_backoff_seconds_elements_clamped ... ok
[INFO] [stdout] test config_toml::parse::property_tests::prop_missing_fields_produce_defaults ... ok
[INFO] [stdout] test config_toml::parse::tests::test_reconnect_backoff_seconds_empty_list_uses_default ... ok
[INFO] [stdout] test config_toml::parse::tests::test_reconnect_backoff_seconds_missing_uses_default ... ok
[INFO] [stdout] test config_toml::parse::tests::test_reconnect_backoff_seconds_wrong_type_uses_default ... ok
[INFO] [stdout] test config_toml::parse::tests::test_reconnect_max_attempts_above_range_clamped ... ok
[INFO] [stdout] test config_toml::parse::tests::test_reconnect_backoff_seconds_valid_values_parsed ... ok
[INFO] [stdout] test config_toml::parse::tests::test_reconnect_max_attempts_missing_uses_default ... ok
[INFO] [stdout] test config_toml::parse::tests::test_reconnect_max_attempts_valid_value_parsed ... ok
[INFO] [stdout] test config_toml::parse::tests::test_reconnect_backoff_seconds_oversized_list_truncated ... ok
[INFO] [stdout] test config_toml::parse::tests::test_reconnect_max_attempts_wrong_type_uses_default ... ok
[INFO] [stdout] test config_toml::parse::tests::test_sort_mode_invalid_warns_and_defaults ... ok
[INFO] [stdout] test config_toml::parse::tests::test_sort_mode_valid_value_parsed ... ok
[INFO] [stdout] test config_toml::parse::tests::test_reconnect_max_attempts_below_range_clamped ... ok
[INFO] [stdout] test config_toml::parse::tests::test_warning_format_theme_uses_dotted_path_pattern ... ok
[INFO] [stdout] test config_toml::parse::tests::test_sort_mode_missing_defaults_to_favorites_first ... ok
[INFO] [stdout] test config_toml::parse::tests::test_sort_mode_wrong_type_defaults ... ok
[INFO] [stdout] test config_toml::parse::tests::test_warning_format_volume_negative_includes_value ... ok
[INFO] [stdout] test config_toml::parse::tests::test_warning_format_volume_uses_dotted_path_pattern ... ok
[INFO] [stdout] test config_toml::serialize::tests::test_serialize_toml_default_config_round_trips ... ok
[INFO] [stdout] test config_toml::serialize::tests::test_serialize_toml_discover_empty_lists_round_trip ... ok
[INFO] [stdout] test config_toml::serialize::tests::test_serialize_toml_all_new_fields_together_round_trip ... ok
[INFO] [stdout] test config_toml::parse::tests::test_parse_toml_valid_themes_accepted ... ok
[INFO] [stdout] test config_toml::serialize::tests::test_serialize_toml_discover_fields_round_trip ... ok
[INFO] [stdout] test config_toml::serialize::tests::test_serialize_toml_none_output_device_not_present ... ok
[INFO] [stdout] test config_toml::serialize::tests::test_serialize_toml_none_keybindings_path_not_present ... ok
[INFO] [stdout] test config_toml::serialize::tests::test_serialize_toml_playback_reconnect_fields_round_trip ... ok
[INFO] [stdout] test config_toml::tests::test_app_config_default_composes_sub_defaults ... ok
[INFO] [stdout] test config_toml::serialize::tests::test_serialize_toml_sort_mode_included_in_output ... ok
[INFO] [stdout] test config_toml::tests::test_audio_config_default_values ... ok
[INFO] [stdout] test config_toml::serialize::tests::test_serialize_toml_round_trip_produces_equivalent_config ... ok
[INFO] [stdout] test config_toml::serialize::tests::test_serialize_toml_unknown_keys_preserved_in_output ... ok
[INFO] [stdout] test config_toml::tests::test_keybindings_config_default_values ... ok
[INFO] [stdout] test config_toml::tests::test_playback_config_default_values ... ok
[INFO] [stdout] test config_toml::tests::test_ui_config_default_values ... ok
[INFO] [stdout] test config_toml::tests::test_discover_config_default_values ... ok
[INFO] [stdout] test config_toml::validate::tests::test_validate_custom_config_succeeds ... ok
[INFO] [stdout] test elapsed_format::tests::test_format_elapsed_3661_seconds_returns_hour_format ... ok
[INFO] [stdout] test config_toml::validate::tests::test_validate_with_preserved_unknown_keys_succeeds ... ok
[INFO] [stdout] test config_toml::validate::tests::test_validate_default_config_succeeds ... ok
[INFO] [stdout] test elapsed_format::tests::test_format_elapsed_exactly_one_hour ... ok
[INFO] [stdout] test elapsed_format::tests::test_format_elapsed_max_clamped ... ok
[INFO] [stdout] test elapsed_format::tests::test_format_elapsed_just_under_one_hour ... ok
[INFO] [stdout] test elapsed_format::tests::test_format_elapsed_max_displayable ... ok
[INFO] [stdout] test elapsed_format::tests::test_format_elapsed_67_seconds_returns_minutes_and_seconds ... ok
[INFO] [stdout] test elapsed_format::tests::test_format_elapsed_zero_seconds_returns_zero_display ... ok
[INFO] [stdout] test elapsed_format::tests::test_parse_elapsed_hour_format ... ok
[INFO] [stdout] test elapsed_format::tests::test_parse_elapsed_invalid_seconds_returns_none ... ok
[INFO] [stdout] test elapsed_format::tests::test_parse_elapsed_invalid_input_returns_none ... ok
[INFO] [stdout] test elapsed_format::tests::test_parse_elapsed_minutes_seconds ... ok
[INFO] [stdout] test elapsed_format::tests::test_round_trip_clamped_value ... ok
[INFO] [stdout] test elapsed_format::tests::test_round_trip_known_values ... ok
[INFO] [stdout] test elapsed_timer::tests::test_elapsed_returns_accumulated_value ... ok
[INFO] [stdout] test elapsed_timer::tests::test_new_starts_at_zero ... ok
[INFO] [stdout] test elapsed_timer::tests::test_pause_freezes_elapsed ... ok
[INFO] [stdout] test elapsed_timer::tests::test_reset_clears_accumulated ... ok
[INFO] [stdout] test elapsed_timer::tests::test_resume_continues_from_accumulated ... ok
[INFO] [stdout] test elapsed_timer::tests::test_start_enables_ticking ... ok
[INFO] [stdout] test elapsed_timer::tests::test_tick_while_paused_is_noop ... ok
[INFO] [stdout] test elapsed_timer::tests::test_zero_delta_is_noop ... ok
[INFO] [stdout] test event::registry_integration_tests::custom_binding_mode_specific_does_not_leak ... ok
[INFO] [stdout] test event::registry_integration_tests::custom_binding_overrides_hardcoded_table ... ok
[INFO] [stdout] test event::registry_integration_tests::custom_binding_with_modifiers_resolves ... ok
[INFO] [stdout] test event::registry_integration_tests::invalid_file_uses_defaults_with_warning ... ok
[INFO] [stdout] test event::registry_integration_tests::key_code_to_spec_converts_char ... ok
[INFO] [stdout] test event::registry_integration_tests::key_code_to_spec_converts_function_key ... ok
[INFO] [stdout] test event::registry_integration_tests::key_code_to_spec_converts_named_keys ... ok
[INFO] [stdout] test event::registry_integration_tests::key_code_to_spec_returns_none_for_unsupported ... ok
[INFO] [stdout] test event::registry_integration_tests::key_modifiers_to_vec_converts_all_modifiers ... ok
[INFO] [stdout] test event::registry_integration_tests::key_modifiers_to_vec_returns_empty_for_none ... ok
[INFO] [stdout] test event::registry_integration_tests::key_release_events_are_ignored ... ok
[INFO] [stdout] test event::registry_integration_tests::missing_file_uses_defaults_only ... ok
[INFO] [stdout] test event::registry_integration_tests::unmatched_registry_falls_through_to_defaults ... ok
[INFO] [stdout] test elapsed_format::tests::test_parse_elapsed_max_display ... ok
[INFO] [stdout] test elapsed_format::tests::test_parse_elapsed_zero ... ok
[INFO] [stdout] test event::tests::library_filter_mode_backspace_deletes ... ok
[INFO] [stdout] test event::tests::library_filter_mode_ctrl_c_quits ... ok
[INFO] [stdout] test event::tests::library_filter_mode_down_navigates_next ... ok
[INFO] [stdout] test event::tests::command_palette_mode_maps_text_navigation_and_close ... ok
[INFO] [stdout] test event::tests::library_filter_mode_f6_toggles_mini_mode ... ok
[INFO] [stdout] test event::tests::library_filter_mode_j_navigates_next ... ok
[INFO] [stdout] test event::tests::library_filter_mode_k_navigates_prev ... ok
[INFO] [stdout] test event::tests::library_filter_mode_printable_chars_are_input ... ok
[INFO] [stdout] test event::tests::library_filter_mode_unbound_keys_are_none ... ok
[INFO] [stdout] test event::tests::library_filter_mode_up_navigates_prev ... ok
[INFO] [stdout] test event::tests::mini_mode_ctrl_c_quits ... ok
[INFO] [stdout] test event::tests::library_filter_mode_enter_confirms ... ok
[INFO] [stdout] test event::tests::mini_mode_f6_toggles_mini_mode ... ok
[INFO] [stdout] test event::tests::library_filter_mode_esc_exits ... ok
[INFO] [stdout] test event::tests::mini_mode_m_toggles_mute ... ok
[INFO] [stdout] test event::tests::mini_mode_minus_volume_down ... ok
[INFO] [stdout] test event::tests::mini_mode_disallowed_keys_return_none ... ok
[INFO] [stdout] test event::tests::mini_mode_plus_and_equals_volume_up ... ok
[INFO] [stdout] test event::tests::mini_mode_q_quits ... ok
[INFO] [stdout] test event::tests::mini_mode_s_stops_playback ... ok
[INFO] [stdout] test event::tests::normal_mode_a_steps_setting_backward ... ok
[INFO] [stdout] test event::tests::normal_mode_alt_1_through_5_plays_slot ... ok
[INFO] [stdout] test event::tests::mini_mode_space_toggles_pause ... ok
[INFO] [stdout] test event::tests::normal_mode_command_palette_shortcuts_open_palette ... ok
[INFO] [stdout] test event::tests::normal_mode_context_shortcuts_do_not_capture_control_combos ... ok
[INFO] [stdout] test event::tests::normal_mode_context_shortcuts_open_overlays_and_retry ... ok
[INFO] [stdout] test event::tests::normal_mode_context_shortcuts_tolerate_non_control_modifiers ... ok
[INFO] [stdout] test event::tests::normal_mode_ctrl_1_through_5_assign_slot ... ok
[INFO] [stdout] test event::tests::normal_mode_digit_keys_produce_number_jump_digit ... ok
[INFO] [stdout] test event::tests::normal_mode_ctrl_l_enters_library_filter ... ok
[INFO] [stdout] test event::tests::normal_mode_digit_keys_with_alt_beyond_5_are_not_mapped ... ok
[INFO] [stdout] test event::tests::normal_mode_f6_toggles_mini_mode ... ok
[INFO] [stdout] test event::tests::normal_mode_f_removes_library_selection ... ok
[INFO] [stdout] test event::tests::normal_mode_l_steps_setting_forward ... ok
[INFO] [stdout] test event::tests::normal_mode_left_steps_setting_backward ... ok
[INFO] [stdout] test event::tests::normal_mode_lowercase_g_still_toggles_recent_tracks ... ok
[INFO] [stdout] test event::tests::normal_mode_removed_legacy_keys_are_unmapped ... ok
[INFO] [stdout] test event::tests::normal_mode_right_steps_setting_forward ... ok
[INFO] [stdout] test event::tests::normal_mode_search_shortcuts_enter_search ... ok
[INFO] [stdout] test event::tests::normal_mode_star_toggles_favorite ... ok
[INFO] [stdout] test event::tests::normal_mode_u_undoes_library_removal ... ok
[INFO] [stdout] test event::tests::normal_mode_uppercase_g_confirms_number_jump ... ok
[INFO] [stdout] test event::tests::search_mode_alt_audio_keys_bypass_text_input ... ok
[INFO] [stdout] test event::tests::search_mode_ctrl_audio_keys_bypass_text_input ... ok
[INFO] [stdout] test event::tests::search_mode_ctrl_enter_auditions_selected_result_when_supported ... ok
[INFO] [stdout] test event::tests::search_mode_f2_does_not_add_selected_result ... ok
[INFO] [stdout] test event::tests::search_mode_enter_adds_and_plays_selected_result ... ok
[INFO] [stdout] test event::tests::normal_mode_digit_keys_with_ctrl_are_not_number_jump ... ok
[INFO] [stdout] test event::tests::search_mode_insert_does_not_add_selected_result ... ok
[INFO] [stdout] test event::tests::search_mode_plain_audio_keys_remain_text_input ... ok
[INFO] [stdout] test event::tests::search_mode_treats_context_overlay_keys_as_text_input ... ok
[INFO] [stdout] test event::tests::search_mode_treats_plain_a_as_text_input ... ok
[INFO] [stdout] test event::tests::search_mode_treats_plain_f_as_text_input ... ok
[INFO] [stdout] test event::tests::search_mode_space_auditions_selected_result ... ok
[INFO] [stdout] test event::tests::search_mode_treats_plain_u_as_text_input ... ok
[INFO] [stdout] test event::tests::sleep_timer_mode_ctrl_c_quits ... ok
[INFO] [stdout] test event::tests::sleep_timer_mode_maps_adjust_presets_and_close ... ok
[INFO] [stdout] test event::tests::test_normal_mode_t_and_e_bindings ... ok
[INFO] [stdout] test favorites::tests::apply_import_preview_all_adds_new_and_preserves_saved_identity_fields ... ok
[INFO] [stdout] test favorites::tests::backward_compatibility_missing_station_slots_and_favorites ... ok
[INFO] [stdout] test favorites::tests::contains_matches_normalized_station_url ... ok
[INFO] [stdout] test favorites::tests::apply_import_preview_enrich_only_does_not_add_new_stations ... ok
[INFO] [stdout] test favorites::tests::empty_import_preview_reports_empty ... ok
[INFO] [stdout] test favorites::tests::import_skip_name_uses_stable_fallback_for_blank_names ... ok
[INFO] [stdout] test favorites::tests::library_file_load_normalizes_station_metadata_without_saved_station_mirror ... ok
[INFO] [stdout] test favorites::tests::fallback_for_missing_library_preserves_seed_and_empty_policies ... ok
[INFO] [stdout] test favorites::tests::library_file_serializes_station_directly_and_omits_empty_optional_fields ... ok
[INFO] [stdout] test favorites::tests::mark_station_failure_consecutive_calls_increment_failure_count ... ok
[INFO] [stdout] test favorites::tests::mark_station_failure_returns_false_for_non_matching_url ... ok
[INFO] [stdout] test favorites::tests::mark_station_failure_returns_true_and_updates_health_for_matching_url ... ok
[INFO] [stdout] test favorites::tests::mark_station_success_and_failure_update_saved_health ... ok
[INFO] [stdout] test favorites::tests::mark_station_success_returns_false_for_non_matching_url ... ok
[INFO] [stdout] test favorites::tests::metadata_refresh_notice_all_zero_contains_four_zeros ... ok
[INFO] [stdout] test favorites::tests::mark_station_success_returns_true_and_updates_health_for_matching_url ... ok
[INFO] [stdout] test favorites::tests::mark_station_success_after_failures_clears_error_but_preserves_failure_history ... ok
[INFO] [stdout] test favorites::tests::metadata_refresh_notice_contains_values_in_order ... ok
[INFO] [stdout] test favorites::tests::metadata_refresh_notice_contains_field_labels ... ok
[INFO] [stdout] test favorites::tests::metadata_refresh_summary_counts_no_match_as_unchanged ... ok
[INFO] [stdout] test favorites::tests::newer_library_version_loads_with_warning ... ok
[INFO] [stdout] test favorites::tests::persistence_round_trip_station_slots_and_favorites ... ok
[INFO] [stdout] test favorites::tests::preview_import_classifies_new_duplicate_enrichment_and_skip ... ok
[INFO] [stdout] test favorites::tests::preview_import_deduplicates_incoming_stations_against_each_other ... ok
[INFO] [stdout] test favorites::tests::remove_matches_normalized_station_url ... ok
[INFO] [stdout] test favorites::tests::preview_import_does_not_write_library ... ok
[INFO] [stdout] test favorites::tests::settings_deserializes_missing_audio_output_as_default ... ok
[INFO] [stdout] test favorites::tests::settings_default_uses_default_audio_output ... ok
[INFO] [stdout] test favorites::tests::settings_deserializes_missing_station_slots_and_favorites_as_defaults ... ok
[INFO] [stdout] test favorites::tests::station_health_deserializes_missing_fields ... ok
[INFO] [stdout] test favorites::tests::metadata_refresh_summary_counts_changed_unchanged_and_failed ... ok
[INFO] [stdout] test favorites::tests::test_in_memory_library_rebuilds_genres_without_path ... ok
[INFO] [stdout] test favorites::tests::test_library_contains ... ok
[INFO] [stdout] test favorites::tests::test_import_stations ... ok
[INFO] [stdout] test favorites::tests::test_library_remove ... ok
[INFO] [stdout] test favorites::tests::test_rebuild_genres ... ok
[INFO] [stdout] test favorites::tests::test_resolve_parent_genre_ambient_variants ... ok
[INFO] [stdout] test favorites::tests::test_resolve_parent_genre_other ... ok
[INFO] [stdout] test favorites::tests::test_resolve_parent_genre_case_insensitive ... ok
[INFO] [stdout] test favorites::tests::test_resolve_parent_genre_rock ... ok
[INFO] [stdout] test favorites::tests::test_resolve_parent_genre_vaporwave ... ok
[INFO] [stdout] test favorites::tests::test_resolve_parent_genre_synthwave_variants ... ok
[INFO] [stdout] test favorites_set::tests::contains_returns_false_for_empty_url ... ok
[INFO] [stdout] test favorites_set::tests::contains_returns_false_for_whitespace_only_url ... ok
[INFO] [stdout] test favorites_set::tests::contains_returns_true_after_toggle_on ... ok
[INFO] [stdout] test favorites_set::tests::len_and_is_empty ... ok
[INFO] [stdout] test favorites_set::tests::serde_default_on_missing_field ... ok
[INFO] [stdout] test favorites_set::tests::serde_round_trip ... ok
[INFO] [stdout] test favorites_set::tests::toggle_removes_url_when_already_favorited ... ok
[INFO] [stdout] test config_toml::parse::property_tests::prop_reconnect_backoff_seconds_clamping ... ok
[INFO] [stdout] test favorites_set::tests::toggle_returns_false_for_empty_url ... ok
[INFO] [stdout] test favorites_set::tests::toggle_adds_url_to_empty_set ... ok
[INFO] [stdout] test favorites_set::tests::toggle_returns_false_for_whitespace_only_url ... ok
[INFO] [stdout] test favorites_set::tests::toggle_self_inverse ... ok
[INFO] [stdout] test favorites_set::tests::url_normalization_equivalence_case ... ok
[INFO] [stdout] test favorites_set::tests::url_normalization_equivalence_trailing_slash ... ok
[INFO] [stdout] test favorites_set::tests::toggle_self_inverse_with_normalized_variants ... ok
[INFO] [stdout] test favorites_set::tests::url_normalization_equivalence_whitespace ... ok
[INFO] [stdout] test history::tests::test_load_with_warning_uses_defaults_in_tests ... ok
[INFO] [stdout] test history::tests::test_record_caps_at_500 ... ok
[INFO] [stdout] test history::tests::test_sanitized ... ok
[INFO] [stdout] test history::tests::test_recent_ordering ... ok
[INFO] [stdout] test keybindings::defaults::tests::test_all_modes_have_bindings ... ok
[INFO] [stdout] test keybindings::defaults::tests::test_default_bindings_is_non_empty ... ok
[INFO] [stdout] test keybindings::defaults::tests::test_known_binding_enter_confirms_command_palette ... ok
[INFO] [stdout] test keybindings::defaults::tests::test_known_binding_esc_exits_search ... ok
[INFO] [stdout] test keybindings::defaults::tests::test_known_binding_library_filter_esc_exits ... ok
[INFO] [stdout] test keybindings::defaults::tests::test_known_binding_q_quits_in_normal ... ok
[INFO] [stdout] test keybindings::defaults::tests::test_known_binding_sleep_timer_preset ... ok
[INFO] [stdout] test favorites::tests::test_library_add_deduplicates ... ok
[INFO] [stdout] test keybindings::registry::property_tests::last_custom_binding_wins ... ok
[INFO] [stdout] test keybindings::registry::tests::test_detect_shadows_custom_shadows_default_produces_warning ... ok
[INFO] [stdout] test keybindings::registry::tests::test_detect_shadows_different_mode_no_shadow ... ok
[INFO] [stdout] test keybindings::registry::tests::test_detect_shadows_different_modifiers_no_shadow ... ok
[INFO] [stdout] test keybindings::registry::tests::test_detect_shadows_multiple_shadows_multiple_warnings ... ok
[INFO] [stdout] test keybindings::registry::tests::test_detect_shadows_no_shadow_no_warning ... ok
[INFO] [stdout] test keybindings::registry::tests::test_effective_bindings_custom_adds_new_binding ... ok
[INFO] [stdout] test config_toml::validate::property_tests::config_validation_round_trip ... ok
[INFO] [stdout] test keybindings::registry::tests::test_effective_bindings_custom_overrides_default ... ok
[INFO] [stdout] test keybindings::registry::tests::test_effective_bindings_modifier_order_independent_override ... ok
[INFO] [stdout] test keybindings::registry::tests::test_effective_bindings_no_customs_returns_all_defaults ... ok
[INFO] [stdout] test keybindings::registry::tests::test_format_key_description_function_key ... ok
[INFO] [stdout] test keybindings::registry::tests::test_effective_bindings_different_mode_not_override ... ok
[INFO] [stdout] test keybindings::registry::tests::test_format_key_description_named_key ... ok
[INFO] [stdout] test keybindings::registry::tests::test_format_key_description_with_modifier ... ok
[INFO] [stdout] test keybindings::registry::tests::test_format_mode_name_variants ... ok
[INFO] [stdout] test keybindings::registry::tests::test_format_key_description_simple_char ... ok
[INFO] [stdout] test keybindings::registry::tests::test_from_json_empty_array ... ok
[INFO] [stdout] test keybindings::registry::tests::test_from_json_invalid_action_skipped ... ok
[INFO] [stdout] test keybindings::registry::tests::test_from_json_explicit_mode_applied ... ok
[INFO] [stdout] test keybindings::registry::tests::test_from_json_invalid_key_spec_skipped ... ok
[INFO] [stdout] test keybindings::registry::tests::test_from_json_invalid_modifier_skipped ... ok
[INFO] [stdout] test keybindings::registry::tests::test_from_json_mode_defaults_to_normal ... ok
[INFO] [stdout] test keybindings::registry::tests::test_from_json_malformed_json_returns_defaults ... ok
[INFO] [stdout] test keybindings::registry::tests::test_from_json_valid_entries_load ... ok
[INFO] [stdout] test keybindings::registry::tests::test_keybindings_example_file_parses_without_warnings ... ok
[INFO] [stdout] test keybindings::registry::tests::test_malformed_json_includes_parser_error ... ok
[INFO] [stdout] test keybindings::registry::tests::test_parse_action_name_invalid ... ok
[INFO] [stdout] test keybindings::registry::tests::test_parse_action_name_parameterized ... ok
[INFO] [stdout] test keybindings::registry::tests::test_parse_action_name_simple ... ok
[INFO] [stdout] test keybindings::registry::property_tests::mode_specific_binding_isolation ... ok
[INFO] [stdout] test keybindings::registry::tests::test_from_json_truncates_at_max_bindings ... ok
[INFO] [stdout] test keybindings::registry::tests::test_resolve_falls_through_to_defaults ... ok
[INFO] [stdout] test keybindings::registry::tests::test_resolve_last_custom_wins_for_duplicates ... ok
[INFO] [stdout] test config_toml::parse::property_tests::prop_exclude_tags_normalization ... ok
[INFO] [stdout] test keybindings::registry::tests::test_resolve_mode_isolation ... ok
[INFO] [stdout] test keybindings::registry::tests::test_resolve_custom_overrides_default ... ok
[INFO] [stdout] test keybindings::registry::tests::test_resolve_modifier_order_independent ... ok
[INFO] [stdout] test keybindings::registry::tests::test_resolve_unbound_key_returns_none ... ok
[INFO] [stdout] test keybindings::tests::test_keybinding_construction ... ok
[INFO] [stdout] test keybindings::registry::tests::test_warning_includes_field_name ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_backspace ... ok
[INFO] [stdout] test keybindings::registry::tests::test_warning_includes_entry_index ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_char_lowercase ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_char_space ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_case_insensitive ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_char_uppercase ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_char_empty ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_char_multiple_chars ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_down ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_delete_insert ... ok
[INFO] [stdout] test config_toml::parse::property_tests::prop_unknown_key_preservation ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_esc ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_function_f0 ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_function_f12 ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_function_f13 ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_function_not_a_number ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_function_f3 ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_empty_string ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_enter ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_tab ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_pageup_pagedown ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_home_end ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_unknown_name ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_up ... ok
[INFO] [stdout] test keybindings::tests::test_parse_key_spec_with_whitespace ... ok
[INFO] [stdout] test keybindings::tests::test_parse_modifier_alt ... ok
[INFO] [stdout] test keybindings::tests::test_parse_modifier_case_insensitive ... ok
[INFO] [stdout] test keybindings::tests::test_parse_modifier_ctrl ... ok
[INFO] [stdout] test keybindings::tests::test_parse_modifier_invalid ... ok
[INFO] [stdout] test keybindings::watcher::tests::test_file_modification_after_initial_reload ... ignored
[INFO] [stdout] test keybindings::tests::test_parse_modifier_shift ... ok
[INFO] [stdout] test keybindings::watcher::tests::test_none_path_always_unchanged ... ok
[INFO] [stdout] test keybindings::tests::test_parse_modifier_with_whitespace ... ok
[INFO] [stdout] test keybindings::watcher::tests::test_file_change_triggers_debounce_then_reload ... ok
[INFO] [stdout] test keybindings::watcher::tests::test_invalid_json_returns_error ... ok
[INFO] [stdout] test keybindings::watcher::tests::test_no_change_returns_unchanged ... ok
[INFO] [stdout] test keybindings::watcher::tests::test_startup_cooldown_suppresses_changes ... ok
[INFO] [stdout] test library_filter::tests::empty_query_matches_all ... ok
[INFO] [stdout] test library_filter::tests::filter_handles_regex_special_chars_safely ... ok
[INFO] [stdout] test library_filter::tests::filter_stations_empty_input_returns_empty ... ok
[INFO] [stdout] test library_filter::tests::filter_stations_narrows_by_query ... ok
[INFO] [stdout] test library_filter::tests::filter_stations_empty_query_returns_all ... ok
[INFO] [stdout] test library_filter::tests::filter_stations_no_matches_returns_empty ... ok
[INFO] [stdout] test library_filter::tests::filter_stations_whitespace_query_returns_all ... ok
[INFO] [stdout] test library_filter::tests::match_is_unicode_case_insensitive ... ok
[INFO] [stdout] test library_filter::tests::matches_by_genre_substring ... ok
[INFO] [stdout] test library_filter::tests::match_is_case_insensitive ... ok
[INFO] [stdout] test library_filter::tests::matches_by_name_substring ... ok
[INFO] [stdout] test library_filter::tests::matches_by_tag_substring ... ok
[INFO] [stdout] test library_filter::tests::no_match_returns_false ... ok
[INFO] [stdout] test library_filter::tests::query_truncated_to_max_length ... ok
[INFO] [stdout] test library_filter::tests::query_beyond_max_length_ignored_chars_dont_affect_match ... ok
[INFO] [stdout] test library_filter::tests::whitespace_only_query_matches_all ... ok
[INFO] [stdout] test library_sort::property_tests::sort_mode_cycling_round_trip ... ok
[INFO] [stdout] test keybindings::registry::property_tests::custom_binding_overrides_default ... ok
[INFO] [stdout] test library_sort::tests::test_all_favorites_no_crash ... ok
[INFO] [stdout] test library_sort::tests::test_alphabetical_sorts_by_name ... ok
[INFO] [stdout] test library_sort::tests::test_chip_returns_expected_chars ... ok
[INFO] [stdout] test library_sort::tests::test_empty_list_returns_empty ... ok
[INFO] [stdout] test library_sort::tests::test_favorites_first_partitions_correctly ... ok
[INFO] [stdout] test library_sort::tests::test_from_key_parses_valid_strings ... ok
[INFO] [stdout] test library_sort::tests::test_from_key_returns_none_for_invalid ... ok
[INFO] [stdout] test library_sort::tests::test_most_played_sorts_by_click_count ... ok
[INFO] [stdout] test library_sort::tests::test_no_favorites_preserves_sort ... ok
[INFO] [stdout] test library_sort::tests::test_recently_added_reverses_order ... ok
[INFO] [stdout] test library_sort::tests::test_sort_mode_label ... ok
[INFO] [stdout] test library_sort::tests::test_sort_mode_next_cycles ... ok
[INFO] [stdout] test library_sort::tests::test_to_key_from_key_round_trip ... ok
[INFO] [stdout] test library_sort::tests::test_to_key_returns_expected_strings ... ok
[INFO] [stdout] test mtime_debounce::tests::test_cooldown_suppresses_all_signals ... ok
[INFO] [stdout] test mtime_debounce::tests::test_debounce_prevents_premature_fire ... ok
[INFO] [stdout] test mtime_debounce::tests::test_fires_only_once_per_change ... ok
[INFO] [stdout] test mtime_debounce::tests::test_new_with_cooldown ... ok
[INFO] [stdout] test mtime_debounce::tests::test_new_without_cooldown ... ok
[INFO] [stdout] test mtime_debounce::tests::test_none_mtime_returns_false ... ok
[INFO] [stdout] test mtime_debounce::tests::test_normal_change_detection_after_cooldown ... ok
[INFO] [stdout] test mtime_debounce::tests::test_rapid_mtime_changes_reset_debounce_timer ... ok
[INFO] [stdout] test number_jump::tests::test_clear_resets_all_state ... ok
[INFO] [stdout] test number_jump::tests::test_display_returns_accumulated_digits ... ok
[INFO] [stdout] test number_jump::tests::test_is_active_after_push ... ok
[INFO] [stdout] test number_jump::tests::test_is_expired_with_no_input ... ok
[INFO] [stdout] test number_jump::tests::test_max_digits_rejection ... ok
[INFO] [stdout] test number_jump::tests::test_new_is_inactive ... ok
[INFO] [stdout] test number_jump::tests::test_push_multiple_digits ... ok
[INFO] [stdout] test number_jump::tests::test_push_non_digit_rejected ... ok
[INFO] [stdout] test number_jump::tests::test_push_single_digit ... ok
[INFO] [stdout] test number_jump::tests::test_target_row_parsing_leading_zeros ... ok
[INFO] [stdout] test number_jump::tests::test_target_row_parsing_zero ... ok
[INFO] [stdout] test number_jump::tests::test_timeout_expired_after_threshold ... ok
[INFO] [stdout] test number_jump::tests::test_timeout_not_expired_immediately ... ok
[INFO] [stdout] test number_jump::tests::test_timeout_not_expired_just_before_threshold ... ok
[INFO] [stdout] test config_toml::serialize::property_tests::toml_round_trip_produces_equivalent_config ... ok
[INFO] [stdout] test audio::stream_source::tests::prop_tests::stale_generation_read_returns_abandoned ... ok
[INFO] [stdout] test library_sort::property_tests::sort_permutation_invariant ... ok
[INFO] [stdout] test config_toml::parse::property_tests::prop_exclude_countries_normalization ... ok
[INFO] [stdout] test playlist::tests::test_format_for_path ... ok
[INFO] [stdout] test playlist::tests::test_json_roundtrip ... ok
[INFO] [stdout] test playlist::tests::test_m3u_from_bare_urls ... ok
[INFO] [stdout] test playlist::tests::test_m3u_roundtrip ... ok
[INFO] [stdout] test playlist_export::tests::export_library_m3u_creates_directory_and_uses_supplied_timestamp ... ok
[INFO] [stdout] test playlist_export::tests::export_library_m3u_writes_playlist_content ... ok
[INFO] [stdout] test radio::client::tests::format_search_errors_keeps_server_context ... ok
[INFO] [stdout] test library_sort::property_tests::alphabetical_sort_ordering ... ok
[INFO] [stdout] test radio::client::tests::radio_browser_search_url_appends_expected_path ... ok
[INFO] [stdout] test radio::health_classifier::tests::classify_empty_health_returns_none ... ok
[INFO] [stdout] test radio::health_classifier::tests::classify_equal_timestamps_returns_healthy ... ok
[INFO] [stdout] test radio::health_classifier::tests::classify_failed_takes_precedence_over_flaky ... ok
[INFO] [stdout] test radio::client::tests::https_servers_are_tried_before_http_fallback_servers ... ok
[INFO] [stdout] test radio::health_classifier::tests::classify_failure_count_5_returns_failed ... ok
[INFO] [stdout] test radio::health_classifier::tests::classify_missing_failure_count_treated_as_zero ... ok
[INFO] [stdout] test radio::health_classifier::tests::classify_failure_count_ge_3_returns_failed ... ok
[INFO] [stdout] test radio::health_classifier::tests::classify_missing_failure_count_with_success_only_returns_healthy ... ok
[INFO] [stdout] test radio::health_classifier::tests::classify_recent_success_returns_healthy ... ok
[INFO] [stdout] test radio::health_classifier::tests::classify_success_only_returns_healthy ... ok
[INFO] [stdout] test radio::health_classifier::tests::classify_recent_failure_with_count_lt_3_returns_flaky ... ok
[INFO] [stdout] test radio::health_classifier::tests::confidence_five_data_points_is_half ... ok
[INFO] [stdout] test radio::health_classifier::tests::confidence_above_ten_still_capped ... ok
[INFO] [stdout] test radio::health_classifier::tests::confidence_label_high_at_half ... ok
[INFO] [stdout] test radio::health_classifier::tests::confidence_label_low_below_half ... ok
[INFO] [stdout] test radio::health_classifier::tests::confidence_one_success_is_low ... ok
[INFO] [stdout] test radio::health_classifier::tests::confidence_ten_data_points_saturates ... ok
[INFO] [stdout] test radio::health_classifier::tests::confidence_zero_for_empty_health ... ok
[INFO] [stdout] test radio::health_classifier::tests::decay_failed_with_old_failure_becomes_flaky ... ok
[INFO] [stdout] test radio::health_classifier::tests::decay_fresh_failure_stays_failed ... ok
[INFO] [stdout] test radio::health_classifier::tests::decay_healthy_unchanged_even_when_old ... ok
[INFO] [stdout] test radio::health_classifier::tests::decay_unparseable_failure_timestamp_no_decay ... ok
[INFO] [stdout] test radio::health_classifier::tests::decay_unparseable_timestamp_no_decay ... ok
[INFO] [stdout] test radio::health_classifier::tests::parse_iso8601_known_epoch ... ok
[INFO] [stdout] test radio::health_classifier::tests::parse_iso8601_unix_epoch ... ok
[INFO] [stdout] test radio::health_classifier::tests::timestamp_age_secs_invalid_returns_none ... ok
[INFO] [stdout] test radio::health_classifier::tests::timestamp_age_secs_iso8601 ... ok
[INFO] [stdout] test radio::health_classifier::tests::timestamp_age_secs_mixed_formats_returns_none ... ok
[INFO] [stdout] test radio::health_classifier::tests::timestamp_age_secs_unix_seconds ... ok
[INFO] [stdout] test radio::map::tests::map_api_station_converts_lastcheckok_zero_to_false ... ok
[INFO] [stdout] test radio::map::tests::map_api_station_drops_empty_urls_when_both_urls_are_missing ... ok
[INFO] [stdout] test radio::map::tests::map_api_station_falls_back_to_raw_url_when_resolved_url_is_empty ... ok
[INFO] [stdout] test radio::map::tests::map_api_station_maps_uuid_country_language_codec_homepage_and_popularity ... ok
[INFO] [stdout] test radio::map::tests::map_api_station_trims_name_and_uses_first_tag ... ok
[INFO] [stdout] test radio::map::tests::split_csv_values_trims_and_drops_empty_parts ... ok
[INFO] [stdout] test audio::decode::tests::prop_tests::prop_visualizer_passivity_contended_mutex ... ok
[INFO] [stdout] test radio::health_classifier::tests::decay_flaky_with_old_failure_becomes_none ... ok
[INFO] [stdout] test radio::query::tests::codec_prefix_maps_to_codec ... ok
[INFO] [stdout] test radio::query::tests::country_two_letters_maps_to_country_code ... ok
[INFO] [stdout] test radio::query::tests::api_params_include_safe_defaults ... ok
[INFO] [stdout] test radio::query::tests::empty_prefix_value_is_short ... ok
[INFO] [stdout] test audio::engine_loop_v2::tests::connected_event_transitions_to_playing_or_error ... ok
[INFO] [stdout] test radio::query::tests::country_long_value_maps_to_country ... ok
[INFO] [stdout] test radio::query::tests::known_search_prefix_uses_metadata_and_aliases ... ok
[INFO] [stdout] test radio::query::tests::language_aliases_map_to_language ... ok
[INFO] [stdout] test radio::query::tests::genre_prefix_maps_to_tag ... ok
[INFO] [stdout] test radio::query::tests::tag_prefix_maps_to_tag ... ok
[INFO] [stdout] test radio::rank::tests::explanation_falls_back_when_no_signal_is_known ... ok
[INFO] [stdout] test radio::query::tests::plain_search_maps_to_name ... ok
[INFO] [stdout] test radio::rank::tests::explanation_includes_country_code_and_codec_labels ... ok
[INFO] [stdout] test radio::rank::tests::explanation_includes_exact_tag_saved_and_health_signals ... ok
[INFO] [stdout] test radio::rank::tests::ranking_dedupes_by_uuid_and_keeps_stronger_candidate ... ok
[INFO] [stdout] test library_sort::property_tests::favorites_first_preserves_insertion_order ... ok
[INFO] [stdout] test radio::rank::tests::ranking_order_is_deterministic_for_equal_scores ... ok
[INFO] [stdout] test radio::rank::tests::ranking_prefers_exact_name_match ... ok
[INFO] [stdout] test radio::rank::tests::ranking_prefers_https_when_relevance_equal ... ok
[INFO] [stdout] test radio::query::tests::prefix_examples_inline_is_generated_from_metadata ... ok
[INFO] [stdout] test radio::query::tests::unknown_prefix_remains_plain_search ... ok
[INFO] [stdout] test radio::rank::tests::ranking_dedupes_by_url_when_uuid_missing ... ok
[INFO] [stdout] test radio::stale_query::tests::test_healthy_stations_returns_zero ... ok
[INFO] [stdout] test radio::stale_query::tests::test_mixed_health_correct_count ... ok
[INFO] [stdout] test radio::stale_query::tests::test_old_failure_counted ... ok
[INFO] [stdout] test radio::stale_query::tests::test_recent_failure_not_counted ... ok
[INFO] [stdout] test radio::stale_query::tests::test_no_stations_returns_zero ... ok
[INFO] [stdout] test library_sort::property_tests::recently_added_descending_index ... ok
[INFO] [stdout] test library_sort::property_tests::most_played_descending_count ... ok
[INFO] [stdout] test radio::rank::tests::ranking_prefers_checked_ok_when_relevance_equal ... ok
[INFO] [stdout] test radio::rank::tests::ranking_uses_click_count_after_relevance ... ok
[INFO] [stdout] test radio::stale_query::property_tests::stale_count_matches_manual_classification ... ok
[INFO] [stdout] test radio::station::tests::clean_tag_values_deduplicates_case_insensitively_keeping_first_occurrence ... ok
[INFO] [stdout] test radio::station::tests::clean_tag_values_preserves_all_unique_tags_in_order ... ok
[INFO] [stdout] test radio::station::property_tests::sanitize_bitrate_invariant ... ok
[INFO] [stdout] test radio::station::tests::clean_tag_values_trims_and_drops_empty_tags ... ok
[INFO] [stdout] test radio::station::tests::enrich_from_copies_tags_when_target_tags_are_empty ... ok
[INFO] [stdout] test radio::station::tests::clean_tag_values_three_plus_case_variants_produce_one_entry ... ok
[INFO] [stdout] test radio::station::tests::enrich_from_copies_uuid_when_target_has_none ... ok
[INFO] [stdout] test radio::station::tests::enrich_from_copies_trimmed_values_into_empty_string_fields ... ok
[INFO] [stdout] test radio::station::tests::enrich_from_overwrites_option_metadata_fields_when_incoming_differs ... ok
[INFO] [stdout] test radio::station::tests::enrich_from_preserves_existing_non_empty_tags ... ok
[INFO] [stdout] test radio::station::tests::enrich_from_preserves_non_empty_existing_string_fields ... ok
[INFO] [stdout] test radio::station::tests::enrich_from_returns_false_when_no_fields_eligible ... ok
[INFO] [stdout] test radio::station::tests::enrich_from_sets_bitrate_when_target_is_zero ... ok
[INFO] [stdout] test radio::station::tests::station_health_default_is_empty ... ok
[INFO] [stdout] test radio::station::tests::station_health_not_empty_when_failure_count_nonzero ... ok
[INFO] [stdout] test radio::station::tests::station_health_not_empty_when_last_error_summary_nonempty ... ok
[INFO] [stdout] test radio::station::tests::station_health_not_empty_when_last_failure_at_set ... ok
[INFO] [stdout] test radio::station::tests::station_health_not_empty_when_last_success_at_set ... ok
[INFO] [stdout] test radio::station::tests::station_identity_does_not_match_by_name_only ... ok
[INFO] [stdout] test radio::station::tests::station_identity_falls_back_to_normalized_url ... ok
[INFO] [stdout] test radio::station::tests::station_identity_matches_trims_uuid_before_comparing ... ok
[INFO] [stdout] test radio::station::tests::station_identity_prefers_uuid_mismatch_over_url_match ... ok
[INFO] [stdout] test radio::station::tests::station_identity_prefers_uuid_when_both_present ... ok
[INFO] [stdout] test radio::station::tests::station_url_matches_ignores_case_whitespace_and_trailing_slash ... ok
[INFO] [stdout] test radio::tests::fallback_stations_include_known_offline_defaults ... ok
[INFO] [stdout] test radio::station::property_tests::normalize_country_code_invariant ... ok
[INFO] [stdout] test radio::station::property_tests::normalize_codec_invariant ... ok
[INFO] [stdout] test radio::tests::metadata_match_prefers_uuid_identity ... ok
[INFO] [stdout] test radio::station::property_tests::station_url_matches_reflexivity ... ok
[INFO] [stdout] test radio::tests::metadata_match_rejects_name_only_candidates ... ok
[INFO] [stdout] test recent_ring::tests::assign_and_get_slot ... ok
[INFO] [stdout] test recent_ring::tests::assign_normalizes_url ... ok
[INFO] [stdout] test recent_ring::tests::assign_replaces_existing ... ok
[INFO] [stdout] test recent_ring::tests::assign_returns_false_for_out_of_range ... ok
[INFO] [stdout] test recent_ring::tests::assign_returns_false_for_zero_index ... ok
[INFO] [stdout] test recent_ring::tests::backward_compat_old_recent_ring_field_ignored ... ok
[INFO] [stdout] test recent_ring::tests::clear_removes_assignment ... ok
[INFO] [stdout] test recent_ring::tests::get_returns_none_for_out_of_range ... ok
[INFO] [stdout] test radio::station::tests::enrich_from_does_not_overwrite_existing_uuid ... ok
[INFO] [stdout] test recent_ring::tests::get_returns_none_for_zero_index ... ok
[INFO] [stdout] test recent_ring::tests::new_slots_are_all_empty ... ok
[INFO] [stdout] test recent_ring::tests::serde_default_produces_empty_slots ... ok
[INFO] [stdout] test recent_ring::tests::serde_round_trip ... ok
[INFO] [stdout] test recent_ring::tests::slots_are_independent ... ok
[INFO] [stdout] test radio::station::property_tests::normalize_codec_known_aliases ... ok
[INFO] [stdout] test recent_ring::proptests::out_of_range_assign_always_fails ... ok
[INFO] [stdout] test recommend::property_tests::profile_aggregation_correctness ... ok
[INFO] [stdout] test radio::tests::metadata_match_falls_back_to_normalized_url ... ok
[INFO] [stdout] test recent_ring::proptests::assign_get_roundtrip ... ok
[INFO] [stdout] test recommend::property_tests::discover_scoring_formula_correctness ... ok
[INFO] [stdout] test recommend::tests::build_favorites_profile_empty_favorites_returns_empty_profile ... ok
[INFO] [stdout] test recommend::tests::build_favorites_profile_ignores_non_favorited_stations ... ok
[INFO] [stdout] test recommend::tests::build_favorites_profile_multiple_favorites_with_overlapping_genres ... ok
[INFO] [stdout] test recommend::tests::build_favorites_profile_skips_empty_genre_and_tags ... ok
[INFO] [stdout] test recommend::tests::build_favorites_profile_single_favorite ... ok
[INFO] [stdout] test recommend::tests::deduplicate_stations_no_duplicates_preserves_all ... ok
[INFO] [stdout] test recommend::tests::deduplicate_stations_preserves_order_keeps_first ... ok
[INFO] [stdout] test recommend::tests::deduplicate_stations_removes_duplicates_by_normalized_url ... ok
[INFO] [stdout] test recommend::tests::explain_score_all_matches ... ok
[INFO] [stdout] test recommend::tests::explain_score_no_matches ... ok
[INFO] [stdout] test recommend::tests::deduplicate_stations_empty_input_returns_empty ... ok
[INFO] [stdout] test recommend::tests::explain_score_partial_matches ... ok
[INFO] [stdout] test recommend::tests::build_favorites_profile_country_codes_are_uppercase ... ok
[INFO] [stdout] test recommend::tests::prefilter_candidates_case_insensitive ... ok
[INFO] [stdout] test recommend::tests::prefilter_candidates_retains_tag_match ... ok
[INFO] [stdout] test recommend::tests::prefilter_candidates_retains_genre_match ... ok
[INFO] [stdout] test recommend::tests::recommend_empty_candidates_returns_empty ... ok
[INFO] [stdout] test recommend::tests::recommend_excludes_library_urls ... ok
[INFO] [stdout] test recommend::tests::recommend_excludes_zero_score_candidates ... ok
[INFO] [stdout] test recommend::tests::recommend_library_url_normalization ... ok
[INFO] [stdout] test recommend::tests::recommend_max_25_results ... ok
[INFO] [stdout] test recommend::tests::recommend_prefilter_applied_above_threshold ... ok
[INFO] [stdout] test recommend::tests::recommend_tie_breaking_by_votes_then_clicks ... ok
[INFO] [stdout] test recommend::tests::score_station_all_zero_weights_returns_zero ... ok
[INFO] [stdout] test recommend::property_tests::scoring_formula_correctness ... ok
[INFO] [stdout] test recommend::tests::recommend_empty_profile_skips_prefilter_above_threshold ... ok
[INFO] [stdout] test recommend::tests::score_station_custom_weights_change_scores ... ok
[INFO] [stdout] test recommend::tests::score_station_default_weights_match_original_behavior ... ok
[INFO] [stdout] test radio::station::property_tests::normalized_station_url_invariant ... ok
[INFO] [stdout] test recommend::tests::score_station_exact_genre_match ... ok
[INFO] [stdout] test recommend::tests::score_station_partial_tag_overlap ... ok
[INFO] [stdout] test recommend::tests::score_station_tag_weight_multiplies_matching_count ... ok
[INFO] [stdout] test recommend::tests::select_fallback_tag_considers_tags_too ... ok
[INFO] [stdout] test recommend::tests::select_fallback_tag_empty_profile_returns_none ... ok
[INFO] [stdout] test recommend::tests::score_station_country_match ... ok
[INFO] [stdout] test recommend::tests::score_station_empty_profile_returns_zero ... ok
[INFO] [stdout] test recommend::tests::select_fallback_tag_returns_next_best_genre ... ok
[INFO] [stdout] test recommend::tests::select_fallback_tag_returns_none_when_only_primary_exists ... ok
[INFO] [stdout] test recommend::tests::select_top_genres_empty_profile ... ok
[INFO] [stdout] test recommend::tests::select_top_genres_includes_ties_at_boundary ... ok
[INFO] [stdout] test recommend::tests::select_top_genres_returns_up_to_5 ... ok
[INFO] [stdout] test recommend::tests::test_recommend_all_excluded_returns_empty ... ok
[INFO] [stdout] test recommend::tests::test_recommend_excludes_by_country ... ok
[INFO] [stdout] test recommend::tests::test_recommend_excludes_by_genre_matching_exclude_tags ... ok
[INFO] [stdout] test recommend::tests::test_recommend_excludes_by_tag ... ok
[INFO] [stdout] test recommend::tests::test_recommend_uses_configured_weights ... ok
[INFO] [stdout] test runtime::tests::driver_clears_search_debounce_when_app_is_not_debouncing ... ok
[INFO] [stdout] test runtime::tests::driver_drains_metadata_refresh_responses_into_app ... ok
[INFO] [stdout] test runtime::tests::driver_keeps_existing_deadline_for_same_debounce_query ... ok
[INFO] [stdout] test recommend::tests::select_top_tags_includes_ties_at_boundary ... ok
[INFO] [stdout] test recommend::tests::select_top_tags_returns_up_to_10 ... ok
[INFO] [stdout] test runtime::tests::handle_discover_response_error_skips_fallback ... ok
[INFO] [stdout] test runtime::tests::handle_discover_response_few_results_triggers_fallback ... ok
[INFO] [stdout] test runtime::tests::handle_discover_response_no_fallback_sends_directly ... ok
[INFO] [stdout] test runtime::tests::handle_discover_response_second_fetch_combines_and_deduplicates ... ok
[INFO] [stdout] test runtime::tests::handle_discover_response_second_fetch_error_uses_primary_only ... ok
[INFO] [stdout] test runtime::tests::handle_discover_response_sufficient_results_skips_fallback ... ok
[INFO] [stdout] test runtime::tests::needs_fallback_fetch_false_when_at_threshold ... ok
[INFO] [stdout] test recommend::tests::recommend_no_prefilter_at_or_below_threshold ... ok
[INFO] [stdout] test runtime::tests::needs_fallback_fetch_false_when_no_fallback_tag ... ok
[INFO] [stdout] test runtime::tests::needs_fallback_fetch_true_when_below_threshold_with_tag ... ok
[INFO] [stdout] test runtime::tests::needs_fallback_fetch_false_on_error ... ok
[INFO] [stdout] test search_history::tests::test_empty_ring_operations ... ok
[INFO] [stdout] test search_history::tests::test_from_entries_caps_at_10 ... ok
[INFO] [stdout] test search_history::tests::test_from_entries_deduplicates ... ok
[INFO] [stdout] test search_history::tests::test_iter_recent_order ... ok
[INFO] [stdout] test search_history::tests::test_load_invalid_json_returns_empty ... ok
[INFO] [stdout] test search_history::tests::test_load_missing_file_returns_empty ... ok
[INFO] [stdout] test search_history::tests::test_push_and_get_basic ... ok
[INFO] [stdout] test search_history::tests::test_push_capacity_cap ... ok
[INFO] [stdout] test recommend::tests::score_station_combined_scoring ... ok
[INFO] [stdout] test runtime::tests::driver_replaces_deadline_for_new_debounce_query ... ok
[INFO] [stdout] test search_history::tests::test_push_rejects_long_query ... ok
[INFO] [stdout] test search_history::tests::test_push_rejects_short_query ... ok
[INFO] [stdout] test search_history::tests::test_push_trims_whitespace ... ok
[INFO] [stdout] test text::tests::ellipsis_only_when_shortened ... ok
[INFO] [stdout] test text::tests::truncate_to_chars_caps_length ... ok
[INFO] [stdout] test text::tests::visible_len_counts_chars ... ok
[INFO] [stdout] test search_history::tests::test_save_and_load_round_trip ... ok
[INFO] [stdout] test theme_name::tests::test_all_contains_six_elements ... ok
[INFO] [stdout] test theme_name::tests::test_from_key_round_trip ... ok
[INFO] [stdout] test theme_name::tests::test_from_key_valid_keys ... ok
[INFO] [stdout] test theme_name::tests::test_label_non_empty_with_alphabetic ... ok
[INFO] [stdout] test ui::command_palette::tests::command_palette_rejects_tiny_area ... ok
[INFO] [stdout] test ui::controls::tests::layout_labels_use_user_facing_focus_terms ... ok
[INFO] [stdout] test ui::controls::tests::sort_mode_chip_formats_with_brackets ... ok
[INFO] [stdout] test ui::controls::tests::sort_mode_chip_updates_when_sort_mode_changes ... ok
[INFO] [stdout] test theme_name::tests::test_from_key_unknown_defaults_to_retrowave ... ok
[INFO] [stdout] test search_history::tests::test_push_dedup_moves_to_back ... ok
[INFO] [stdout] test ui::controls::tests::test_elapsed_display_hidden_when_stopped ... ok
[INFO] [stdout] test ui::controls::tests::test_elapsed_display_present_when_paused ... ok
[INFO] [stdout] test ui::controls::tests::test_elapsed_display_present_when_playing ... ok
[INFO] [stdout] test ui::critical::tests::split_overlay_alert_area_keeps_full_area_without_error ... ok
[INFO] [stdout] test ui::critical::tests::compact_fault_message_truncates_long_errors ... ok
[INFO] [stdout] test ui::controls::tests::visualizer_labels_drop_scope_jargon ... ok
[INFO] [stdout] test ui::deck::cassette::tests::deck_rows_have_equal_width ... ok
[INFO] [stdout] test ui::deck::cassette::tests::reel_animation_keeps_constant_cell_width ... ok
[INFO] [stdout] test ui::deck::cassette::tests::signal_mass_keeps_constant_width ... ok
[INFO] [stdout] test ui::deck::visualizer::spectrum::tests::spectrum_column_slot_adds_spacer_when_band_is_wide ... ok
[INFO] [stdout] test ui::deck::visualizer::spectrum::tests::spectrum_column_slot_maps_last_column_to_last_band ... ok
[INFO] [stdout] test ui::deck::visualizer::tests::fading_out_visualizer_gain_uses_audio_ramp_volume ... ok
[INFO] [stdout] test ui::deck::visualizer::tests::spectrum_renderer_stays_active_while_connecting ... ok
[INFO] [stdout] test ui::deck::visualizer::tests::spectrum_renderer_stays_active_while_fading_out ... ok
[INFO] [stdout] test ui::discover_widget::tests::format_explanation_empty_when_no_factors ... ok
[INFO] [stdout] test ui::discover_widget::tests::format_explanation_genres_only ... ok
[INFO] [stdout] test ui::discover_widget::tests::format_explanation_with_all_factors ... ok
[INFO] [stdout] test ui::discover_widget::tests::format_station_line_falls_back_to_country_when_no_code ... ok
[INFO] [stdout] test ui::critical::tests::split_overlay_alert_area_reserves_row_for_engine_error ... ok
[INFO] [stdout] test ui::discover_widget::tests::format_station_line_uses_country_code_when_available ... ok
[INFO] [stdout] test ui::discover_widget::tests::render_displays_explanation_line ... ok
[INFO] [stdout] test ui::discover_widget::tests::render_does_nothing_when_results_empty ... ok
[INFO] [stdout] test ui::discover_widget::tests::render_produces_output_for_non_empty_results ... ok
[INFO] [stdout] test ui::discover_widget::tests::render_shows_empty_hint_when_no_explanation ... ok
[INFO] [stdout] test ui::discover_widget::tests::scroll_offset_advances_when_cursor_exceeds_viewport ... ok
[INFO] [stdout] test ui::discover_widget::tests::scroll_offset_height_one_equals_cursor ... ok
[INFO] [stdout] test ui::discover_widget::tests::scroll_offset_zero_height_returns_zero ... ok
[INFO] [stdout] test ui::discover_widget::tests::scroll_offset_zero_when_cursor_fits ... ok
[INFO] [stdout] test ui::help::tests::app_tab_rows_are_non_empty ... ok
[INFO] [stdout] test ui::help::tests::help_overlay_accepts_minimum_area ... ok
[INFO] [stdout] test ui::help::tests::help_overlay_rejects_tiny_area ... ok
[INFO] [stdout] test ui::help::tests::library_tab_contains_discover_entry ... ok
[INFO] [stdout] test ui::help::tests::library_tab_rows_are_non_empty ... ok
[INFO] [stdout] test ui::help::tests::playback_tab_rows_are_non_empty ... ok
[INFO] [stdout] test ui::help::tests::search_tab_rows_are_non_empty ... ok
[INFO] [stdout] test ui::help::tests::settings_tab_contains_keybindings_customization_note ... ok
[INFO] [stdout] test ui::help::tests::settings_tab_rows_are_non_empty ... ok
[INFO] [stdout] test ui::discover_widget::tests::format_station_line_includes_lightning_prefix_with_score ... ok
[INFO] [stdout] test ui::keybindings_widget::tests::build_grouped_lines_groups_by_mode ... ok
[INFO] [stdout] test ui::keybindings_widget::tests::build_visible_items_respects_scroll_offset ... ok
[INFO] [stdout] test ui::help::tests::visuals_tab_rows_are_non_empty ... ok
[INFO] [stdout] test ui::keybindings_widget::tests::format_binding_line_contains_key_and_action ... ok
[INFO] [stdout] test ui::keybindings_widget::tests::empty_bindings_produce_no_lines ... ok
[INFO] [stdout] test ui::keybindings_widget::tests::total_lines_counts_headers_and_bindings ... ok
[INFO] [stdout] test ui::mini::property_tests::prop_buffer_animation_sequence_determinism ... ok
[INFO] [stdout] test ui::keybindings_widget::tests::render_keybindings_overlay_produces_non_empty_content ... ok
[INFO] [stdout] test ui::mini::property_tests::prop_buffer_animation_with_percentage ... ok
[INFO] [stdout] test ui::mini::property_tests::prop_buffer_percent_playing_returns_none ... ok
[INFO] [stdout] test ui::mini::property_tests::prop_buffer_percent_format ... ok
[INFO] [stdout] test ui::mini::property_tests::prop_buffer_percent_zero_returns_none ... ok
[INFO] [stdout] test ui::mini::tests::test_animated_connecting_indicator_deterministic ... ok
[INFO] [stdout] test ui::mini::tests::test_animated_connecting_indicator_sequence ... ok
[INFO] [stdout] test ui::mini::tests::test_animated_indicator_with_buffer_percent ... ok
[INFO] [stdout] test ui::mini::tests::test_compose_everything_fits ... ok
[INFO] [stdout] test ui::mini::tests::test_compose_no_track ... ok
[INFO] [stdout] test ui::mini::tests::test_compose_with_buffer_accounts_for_width ... ok
[INFO] [stdout] test ui::mini::tests::test_compose_with_buffer_includes_buffer_text ... ok
[INFO] [stdout] test ui::mini::tests::test_composed_line_never_exceeds_width ... ok
[INFO] [stdout] test ui::mini::tests::test_composed_line_with_elapsed_never_exceeds_width ... ok
[INFO] [stdout] test ui::mini::tests::test_connecting_aware_indicator_non_connecting_uses_static ... ok
[INFO] [stdout] test ui::mini::tests::test_elapsed_included_in_line_width_calculation ... ok
[INFO] [stdout] test ui::mini::tests::test_elapsed_included_when_width_at_least_60 ... ok
[INFO] [stdout] test ui::mini::tests::test_elapsed_none_has_no_effect_on_layout ... ok
[INFO] [stdout] test ui::mini::property_tests::prop_station_name_presence_with_truncation ... ok
[INFO] [stdout] test ui::mini::tests::test_mini_elapsed_width_threshold_constant ... ok
[INFO] [stdout] test ui::mini::tests::test_mini_mode_connecting_buffer_100_shows_percentage ... ok
[INFO] [stdout] test ui::mini::tests::test_mini_mode_connecting_no_buffer_shows_only_indicator ... ok
[INFO] [stdout] test ui::mini::tests::test_mini_mode_connecting_with_buffer_shows_percentage ... ok
[INFO] [stdout] test ui::mini::tests::test_mini_mode_playing_no_buffer_shown ... ok
[INFO] [stdout] test ui::mini::tests::test_render_connecting_uses_animated_indicator ... ok
[INFO] [stdout] test ui::mini::tests::test_state_indicator_connecting_returns_connecting_symbol ... ok
[INFO] [stdout] test ui::mini::tests::test_indicator_always_present ... ok
[INFO] [stdout] test ui::mini::tests::test_state_indicator_fading_out_returns_play_symbol ... ok
[INFO] [stdout] test ui::mini::tests::test_state_indicator_error_returns_error_symbol ... ok
[INFO] [stdout] test ui::mini::tests::test_state_indicator_playing_returns_play_symbol ... ok
[INFO] [stdout] test ui::mini::tests::test_state_indicator_stopped_returns_stop_symbol ... ok
[INFO] [stdout] test ui::mini::tests::test_truncate_str_exact_fit ... ok
[INFO] [stdout] test ui::mini::tests::test_truncate_str_no_truncation_needed ... ok
[INFO] [stdout] test ui::mini::tests::test_truncate_str_single_char_becomes_ellipsis ... ok
[INFO] [stdout] test ui::mini::tests::test_truncate_str_truncates_with_ellipsis ... ok
[INFO] [stdout] test ui::mini::tests::test_truncate_str_zero_width_returns_empty ... ok
[INFO] [stdout] test ui::mini::tests::test_state_indicator_paused_returns_pause_symbol ... ok
[INFO] [stdout] test ui::mini::tests::test_truncation_preserves_indicator_and_volume ... ok
[INFO] [stdout] test ui::mini::tests::test_truncation_station_truncated_when_track_gone ... ok
[INFO] [stdout] test ui::mini::tests::test_truncation_track_truncated_first ... ok
[INFO] [stdout] test ui::mini::tests::test_volume_always_present_when_provided ... ok
[INFO] [stdout] test ui::mini::tests::test_volume_style_highlighted_when_flash_active ... ok
[INFO] [stdout] test ui::model::tests::settings_undo_marker_absent_with_no_change ... ok
[INFO] [stdout] test ui::model::tests::settings_undo_marker_removed_after_undo ... ok
[INFO] [stdout] test ui::model::tests::ui_model_borrows_visible_station_data ... ok
[INFO] [stdout] test ui::model::tests::ui_model_captures_layout_overlay_and_input_mode ... ok
[INFO] [stdout] test ui::model::tests::ui_model_elapsed_display_none_when_connecting ... ok
[INFO] [stdout] test ui::model::tests::ui_model_elapsed_display_none_when_stopped ... ok
[INFO] [stdout] test ui::model::tests::ui_model_elapsed_display_some_when_paused ... ok
[INFO] [stdout] test ui::model::tests::ui_model_elapsed_display_some_when_playing ... ok
[INFO] [stdout] test ui::model::tests::ui_model_overlay_helpers_match_active_overlay ... ok
[INFO] [stdout] test ui::model::tests::ui_model_populates_discover_exclusion_diagnostics_empty_results ... ok
[INFO] [stdout] test ui::model::tests::ui_model_populates_discover_exclusion_diagnostics_with_results ... ok
[INFO] [stdout] test ui::model::tests::ui_model_populates_display_mode_mini ... ok
[INFO] [stdout] test ui::model::tests::ui_model_populates_display_mode_normal ... ok
[INFO] [stdout] test ui::model::tests::ui_model_reports_command_palette_visibility ... ok
[INFO] [stdout] test ui::model::tests::ui_model_uses_app_selectors_for_visible_selected_and_now_playing ... ok
[INFO] [stdout] test ui::playback_doctor::tests::decoder_state_label_formats_all_states ... ok
[INFO] [stdout] test ui::playback_doctor::tests::doctor_overlay_rejects_tiny_area ... ok
[INFO] [stdout] test ui::playback_doctor::tests::playback_state_label_formats_all_states ... ok
[INFO] [stdout] test ui::playback_doctor::tests::test_exclusion_section_hidden_when_no_exclusions ... ok
[INFO] [stdout] test ui::playback_doctor::tests::test_exclusion_section_hidden_when_results_non_empty ... ok
[INFO] [stdout] test ui::playback_doctor::tests::test_exclusion_section_shown_when_empty_results_and_exclusions_present ... ok
[INFO] [stdout] test ui::recent_tracks::tests::recent_overlay_accepts_minimum_area ... ok
[INFO] [stdout] test ui::recent_tracks::tests::recent_overlay_rejects_tiny_area ... ok
[INFO] [stdout] test ui::recent_tracks::tests::recent_title_reflects_history_persistence ... ok
[INFO] [stdout] test ui::search::tests::compact_explanation_label_truncates_safely ... ok
[INFO] [stdout] test ui::search::tests::compact_search_label_truncates_long_queries ... ok
[INFO] [stdout] test ui::search::tests::debounce_indicator_text_feels_active_without_saying_soon ... ok
[INFO] [stdout] test ui::search::tests::search_debounce_frame_wraps_through_spinner_frames ... ok
[INFO] [stdout] test ui::search::tests::stale_response_text_reports_discarded_query ... ok
[INFO] [stdout] test ui::search::tests::test_search_hint_hidden_when_history_empty ... ok
[INFO] [stdout] test ui::search::tests::test_search_hint_hidden_when_input_non_empty ... ok
[INFO] [stdout] test ui::search::tests::test_search_hint_shown_when_empty_input_and_history_available ... ok
[INFO] [stdout] test ui::settings::tests::audio_output_label_defaults_to_default ... ok
[INFO] [stdout] test ui::settings::tests::selected_row_uses_cursor ... ok
[INFO] [stdout] test ui::settings::tests::setting_descriptions_cover_all_rows ... ok
[INFO] [stdout] test ui::settings::tests::settings_overlay_accepts_minimum_area ... ok
[INFO] [stdout] test ui::settings::tests::settings_overlay_rejects_tiny_area ... ok
[INFO] [stdout] test ui::sleep_timer::tests::sleep_overlay_accepts_minimum_area ... ok
[INFO] [stdout] test ui::sleep_timer::tests::sleep_overlay_rejects_tiny_area ... ok
[INFO] [stdout] test ui::station_details::tests::bitrate_label_handles_zero_as_unknown ... ok
[INFO] [stdout] test ui::critical::tests::split_overlay_alert_area_keeps_tiny_area_full_height ... ok
[INFO] [stdout] test ui::station_details::tests::compact_detail_value_truncates_long_metadata ... ok
[INFO] [stdout] test ui::station_details::tests::detail_sections_use_missing_metadata_fallbacks ... ok
[INFO] [stdout] test ui::station_details::tests::detail_sections_group_expected_fields ... ok
[INFO] [stdout] test ui::station_details::tests::details_overlay_accepts_minimum_area ... ok
[INFO] [stdout] test ui::station_details::tests::details_overlay_rejects_tiny_area ... ok
[INFO] [stdout] test ui::station_details::tests::health_dot_absent_when_no_health_data ... ok
[INFO] [stdout] test ui::station_details::tests::health_dot_present_when_station_has_health_data ... ok
[INFO] [stdout] test ui::station_details::tests::local_health_prefers_newer_numeric_failure_over_older_success ... ok
[INFO] [stdout] test ui::station_details::tests::metadata_list_uses_fallback_or_joined_values ... ok
[INFO] [stdout] test ui::station_details::tests::option_count_label_formats_known_and_unknown_counts ... ok
[INFO] [stdout] test ui::stations::tests::codec_chip_marks_aac_as_supported ... ok
[INFO] [stdout] test ui::stations::tests::codec_chip_marks_empty_as_unknown ... ok
[INFO] [stdout] test ui::stations::tests::codec_chip_marks_supported_mp3 ... ok
[INFO] [stdout] test ui::stations::tests::codec_chip_marks_unrecognized_as_unknown ... ok
[INFO] [stdout] test ui::stations::tests::codec_chip_marks_unsupported_codec ... ok
[INFO] [stdout] test ui::stations::tests::digit_count_returns_correct_width ... ok
[INFO] [stdout] test ui::stations::tests::empty_library_onboarding_only_renders_for_empty_normal_mode ... ok
[INFO] [stdout] test ui::stations::tests::favorite_indicator_shown_for_favorited_station ... ok
[INFO] [stdout] test ui::stations::tests::health_dot_alignment_consistent_across_all_levels ... ok
[INFO] [stdout] test ui::stations::tests::health_dot_failed_renders_red_dot ... ok
[INFO] [stdout] test ui::station_details::tests::fallback_trims_blank_values ... ok
[INFO] [stdout] test ui::stations::tests::health_dot_flaky_renders_yellow_dot ... ok
[INFO] [stdout] test ui::stations::tests::health_dot_healthy_renders_green_dot ... ok
[INFO] [stdout] test ui::stations::tests::health_dot_none_renders_space_for_alignment ... ok
[INFO] [stdout] test ui::stations::tests::library_filter_title_shows_no_matches_indicator ... ok
[INFO] [stdout] test ui::model::tests::settings_undo_marker_shown_after_change ... ok
[INFO] [stdout] test ui::stations::tests::row_number_format_double_digit_list ... ok
[INFO] [stdout] test ui::stations::tests::row_number_format_single_digit_list ... ok
[INFO] [stdout] test ui::stations::tests::row_number_not_shown_in_search_mode ... ok
[INFO] [stdout] test ui::stations::tests::row_number_shown_in_library_filter_mode ... ok
[INFO] [stdout] test ui::stations::tests::search_title_explains_preview_and_save_actions ... ok
[INFO] [stdout] test ui::stations::tests::search_truncation_falls_back_when_query_is_blank ... ok
[INFO] [stdout] test ui::stations::tests::search_truncation_falls_back_when_query_is_missing ... ok
[INFO] [stdout] test ui::stations::tests::search_truncation_handles_tiny_width ... ok
[INFO] [stdout] test ui::stations::tests::search_truncation_is_unicode_safe ... ok
[INFO] [stdout] test ui::stations::tests::search_truncation_keeps_matching_suffix_visible ... ok
[INFO] [stdout] test ui::stations::tests::search_truncation_keeps_matching_tail_visible ... ok
[INFO] [stdout] test ui::stations::tests::station_health_badge_compares_numeric_timestamps ... ok
[INFO] [stdout] test ui::stations::tests::station_list_title_hides_number_jump_indicator_when_inactive ... ok
[INFO] [stdout] test ui::stations::tests::station_list_title_shows_normal_when_filter_inactive ... ok
[INFO] [stdout] test ui::stations::tests::station_list_title_shows_number_jump_indicator_when_active ... ok
[INFO] [stdout] test ui::stations::tests::station_list_title_uses_filter_title_when_filter_active ... ok
[INFO] [stdout] test ui::stations::tests::station_meta_normal_includes_health_badge ... ok
[INFO] [stdout] test ui::stations::tests::station_meta_normal_keeps_library_rows_compact ... ok
[INFO] [stdout] test ui::stations::tests::station_meta_search_includes_genre_country_and_bitrate ... ok
[INFO] [stdout] test ui::stations::tests::truncation_adds_ellipsis_for_long_names ... ok
[INFO] [stdout] test ui::stations::tests::truncation_keeps_short_names_unchanged ... ok
[INFO] [stdout] test ui::tests::compact_terminal_accepts_exact_minimum ... ok
[INFO] [stdout] test ui::tests::compact_terminal_accepts_larger_terminal ... ok
[INFO] [stdout] test ui::stations::tests::library_filter_title_shows_query_with_cursor ... ok
[INFO] [stdout] test ui::tests::compact_terminal_rejects_height_below_minimum ... ok
[INFO] [stdout] test ui::stations::tests::library_filter_title_shows_cursor_when_query_empty ... ok
[INFO] [stdout] test ui::tests::compact_terminal_rejects_width_below_minimum ... ok
[INFO] [stdout] test ui::theme::tests::clear_style_uses_active_palette_background ... ok
[INFO] [stdout] test ui::theme::tests::test_all_themes_have_labels ... ok
[INFO] [stdout] test ui::theme::tests::test_theme_from_key_unknown_defaults_retrowave ... ok
[INFO] [stdout] test ui::theme::tests::test_theme_key_roundtrip ... ok
[INFO] [stdout] test search_history::property_tests::push_acceptance_filter ... ok
[INFO] [stdout] test recommend::property_tests::discover_exclusion_filtering_invariant ... ok
[INFO] [stdout] test audio::decode::tests::prop_tests::prop_prebuffer_memory_bounded ... ok
[INFO] [stdout] test search_history::property_tests::ring_capacity_and_uniqueness ... ok
[INFO] [stdout] test recommend::property_tests::recommend_output_invariants ... ok
[INFO] [stdout] test app::selectors::property_tests::genre_filter_count_length_consistency ... ok
[INFO] [stdout] test audio::stream_source::tests::prop_tests::icy_safety_no_metadata_bytes_in_output ... ok
[INFO] [stdout] test app::selectors::property_tests::genre_filter_all_none_identity ... ok
[INFO] [stdout] test playlist::property_tests::m3u_structural_invariant ... ok
[INFO] [stdout] test playlist::property_tests::m3u_round_trip ... ok
[INFO] [stdout] test playlist::property_tests::json_output_validity ... ok
[INFO] [stdout] test keybindings::registry::property_tests::prop_keybinding_serialization_round_trip ... ok
[INFO] [stdout] test playlist::property_tests::json_round_trip ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 1350 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 26.16s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "ed75f082b27852c0fef7384eadeac34d14736ae88f0483f57f1fa5162bdf2e1c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "ed75f082b27852c0fef7384eadeac34d14736ae88f0483f57f1fa5162bdf2e1c", kill_on_drop: false }`
[INFO] [stdout] ed75f082b27852c0fef7384eadeac34d14736ae88f0483f57f1fa5162bdf2e1c
