[INFO] cloning repository https://github.com/freemkv/autorip
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/freemkv/autorip" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffreemkv%2Fautorip", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffreemkv%2Fautorip'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] b0c774223ed420a1a24c1d1d0de05d3cfd771cf0
[INFO] testing freemkv/autorip against master#ec6f9a5b4413f74386267ef8efc93712c2ce6db6 for pr-155739
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffreemkv%2Fautorip" "/workspace/builds/worker-4-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/freemkv/autorip
[INFO] finished tweaking git repo https://github.com/freemkv/autorip
[INFO] tweaked toml for git repo https://github.com/freemkv/autorip written to /workspace/builds/worker-4-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/freemkv/autorip on toolchain ec6f9a5b4413f74386267ef8efc93712c2ce6db6
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+ec6f9a5b4413f74386267ef8efc93712c2ce6db6" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/freemkv/autorip 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" "+ec6f9a5b4413f74386267ef8efc93712c2ce6db6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded cmac v0.7.2
[INFO] [stderr]   Downloaded dbl v0.3.2
[INFO] [stderr]   Downloaded tracing-appender v0.2.5
[INFO] [stderr]   Downloaded libfreemkv v0.18.13
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+ec6f9a5b4413f74386267ef8efc93712c2ce6db6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 5bf3cdecb63752a31e71a8c8c6b0101a3952645d99f006b5e26b6d6e67d3be48
[INFO] running `Command { std: "docker" "start" "-a" "5bf3cdecb63752a31e71a8c8c6b0101a3952645d99f006b5e26b6d6e67d3be48", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "5bf3cdecb63752a31e71a8c8c6b0101a3952645d99f006b5e26b6d6e67d3be48", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "5bf3cdecb63752a31e71a8c8c6b0101a3952645d99f006b5e26b6d6e67d3be48", kill_on_drop: false }`
[INFO] [stdout] 5bf3cdecb63752a31e71a8c8c6b0101a3952645d99f006b5e26b6d6e67d3be48
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+ec6f9a5b4413f74386267ef8efc93712c2ce6db6" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 75556ce1e93ea4c129d00904d876bd21d1927a1315bb37e527d676559a7f339c
[INFO] running `Command { std: "docker" "start" "-a" "75556ce1e93ea4c129d00904d876bd21d1927a1315bb37e527d676559a7f339c", kill_on_drop: false }`
[INFO] [stderr]    Compiling typenum v1.20.0
[INFO] [stderr]    Compiling log v0.4.29
[INFO] [stderr]    Compiling cc v1.2.62
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling simd-adler32 v0.3.9
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling rustls-pki-types v1.14.1
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling regex-syntax v0.8.10
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling zip v2.4.2
[INFO] [stderr]    Compiling rustls v0.23.40
[INFO] [stderr]    Compiling bumpalo v3.20.2
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]    Compiling deranged v0.5.8
[INFO] [stderr]    Compiling num-integer v0.1.46
[INFO] [stderr]    Compiling thread_local v1.1.9
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling miniz_oxide v0.8.9
[INFO] [stderr]    Compiling webpki-roots v1.0.7
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling zopfli v0.8.3
[INFO] [stderr]    Compiling libfreemkv v0.18.13
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling time-core v0.1.7
[INFO] [stderr]    Compiling nu-ansi-term v0.50.3
[INFO] [stderr]    Compiling flate2 v1.1.9
[INFO] [stderr]    Compiling rand v0.8.6
[INFO] [stderr]    Compiling tracing-serde v0.2.0
[INFO] [stderr]    Compiling crossbeam-channel v0.5.15
[INFO] [stderr]    Compiling num-bigint v0.4.6
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]    Compiling webpki-roots v0.26.11
[INFO] [stderr]    Compiling chunked_transfer v1.5.0
[INFO] [stderr]    Compiling ascii v1.1.0
[INFO] [stderr]    Compiling symlink v0.1.0
[INFO] [stderr]    Compiling tiny_http v0.12.0
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling block-padding v0.3.3
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling dbl v0.3.2
[INFO] [stderr]    Compiling time v0.3.45
[INFO] [stderr]    Compiling inout v0.1.4
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling cipher v0.4.4
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling sha1 v0.10.6
[INFO] [stderr]    Compiling aes v0.8.4
[INFO] [stderr]    Compiling cmac v0.7.2
[INFO] [stderr]    Compiling cbc v0.1.2
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling tracing-appender v0.2.5
[INFO] [stderr]    Compiling rustls-webpki v0.103.13
[INFO] [stderr]    Compiling ureq v2.12.1
[INFO] [stderr]    Compiling freemkv-autorip v0.18.13 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 39.73s
[INFO] running `Command { std: "docker" "inspect" "75556ce1e93ea4c129d00904d876bd21d1927a1315bb37e527d676559a7f339c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "75556ce1e93ea4c129d00904d876bd21d1927a1315bb37e527d676559a7f339c", kill_on_drop: false }`
[INFO] [stdout] 75556ce1e93ea4c129d00904d876bd21d1927a1315bb37e527d676559a7f339c
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+ec6f9a5b4413f74386267ef8efc93712c2ce6db6" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 2145d4158f86d48af400db7b6d00c655b480a6c0ffa9ddcb110409c99ca9592e
[INFO] running `Command { std: "docker" "start" "-a" "2145d4158f86d48af400db7b6d00c655b480a6c0ffa9ddcb110409c99ca9592e", kill_on_drop: false }`
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling bitflags v2.11.1
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling freemkv-autorip v0.18.13 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 10.34s
[INFO] running `Command { std: "docker" "inspect" "2145d4158f86d48af400db7b6d00c655b480a6c0ffa9ddcb110409c99ca9592e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "2145d4158f86d48af400db7b6d00c655b480a6c0ffa9ddcb110409c99ca9592e", kill_on_drop: false }`
[INFO] [stdout] 2145d4158f86d48af400db7b6d00c655b480a6c0ffa9ddcb110409c99ca9592e
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+ec6f9a5b4413f74386267ef8efc93712c2ce6db6" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] d762e8a22ac166499e6bc737067b7adfe5bf3c43c5dd5c2189241da3c5e47743
[INFO] running `Command { std: "docker" "start" "-a" "d762e8a22ac166499e6bc737067b7adfe5bf3c43c5dd5c2189241da3c5e47743", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.31s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/freemkv_autorip-3087faf3be29e40b)
[INFO] [stdout] running 77 tests
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/autorip-51327bb674a09dd2)
[INFO] [stdout] test history::tests::load_recent_missing_dir_returns_empty ... ok
[INFO] [stderr]      Running tests/end_to_end.rs (/opt/rustwide/target/debug/deps/end_to_end-06bcf7e200b09a9d)
[INFO] [stdout] test mover::tests::build_destination_empty_movie_dir_falls_to_output_dir ... ok
[INFO] [stderr]      Running tests/halt_drain.rs (/opt/rustwide/target/debug/deps/halt_drain-452d0facaae0196f)
[INFO] [stdout] test mover::tests::build_destination_movie_with_year ... ok
[INFO] [stdout] test mover::tests::build_destination_tv_uses_season_1_layout ... ok
[INFO] [stdout] test mover::tests::record_error_dedups_same_reason_without_logging_again ... ok
[INFO] [stdout] test mover::tests::sanitize_dir_name_keeps_allowed_punctuation ... ok
[INFO] [stdout] test mover::tests::build_destination_no_tmdb_falls_to_output_dir ... ok
[INFO] [stdout] test history::tests::load_recent_ignores_non_json_files ... ok
[INFO] [stdout] test mover::tests::sanitize_dir_name_trims_whitespace ... ok
[INFO] [stdout] test history::tests::record_writes_json_file ... ok
[INFO] [stdout] test log::tests::archive_device_log_clears_in_memory_buffer ... ok
[INFO] [stdout] test ripper::mux::tests::edge_cases ... ok
[INFO] [stdout] test ripper::state::tests::build_bad_ranges_excludes_not_yet_tried ... ok
[INFO] [stdout] test ripper::mux::tests::clean_disc_mux_opens_at_50_percent ... ok
[INFO] [stdout] test ripper::mux::tests::damaged_disc_mux_opens_below_50_percent ... ok
[INFO] [stdout] test log::tests::archive_device_log_moves_to_rips_dir ... ok
[INFO] [stdout] test history::tests::load_recent_respects_count_limit ... ok
[INFO] [stdout] test ripper::state::tests::build_bad_ranges_ignores_non_trimmed_and_non_scraped ... ok
[INFO] [stdout] test mover::tests::move_file_moves_when_dest_missing ... ok
[INFO] [stdout] test ripper::state::tests::byte_offset_in_title_across_multiple_extents ... ok
[INFO] [stdout] test ripper::state::tests::byte_offset_in_title_returns_none_outside_extents ... ok
[INFO] [stdout] test mover::tests::move_file_returns_moved_when_src_missing_but_dest_present ... ok
[INFO] [stdout] test ripper::state::tests::display_speed_is_smoother_in_steady_state ... ok
[INFO] [stdout] test ripper::state::tests::build_bad_ranges_includes_unreadable ... ok
[INFO] [stdout] test ripper::state::tests::display_window_grows_with_elapsed_time ... ok
[INFO] [stdout] test ripper::state::tests::eta_falls_back_to_display_during_warmup ... ok
[INFO] [stdout] test ripper::state::tests::pass_progress_caps_absurd_instantaneous ... ok
[INFO] [stdout] test ripper::state::tests::eta_speed_stays_stable_through_a_stall ... ok
[INFO] [stdout] test ripper::state::tests::pass_progress_first_sample_returns_zero ... ok
[INFO] [stdout] test ripper::state::tests::pass_progress_stall_drops_out_within_window ... ok
[INFO] [stdout] test ripper::state::tests::pass_progress_second_sample_matches_physical_rate ... ok
[INFO] [stdout] test history::tests::load_recent_returns_newest_first ... ok
[INFO] [stdout] test ripper::state::tests::pass_progress_steady_state_converges ... ok
[INFO] [stdout] test ripper::state::tests::pass_progress_zero_dt_returns_previous ... ok
[INFO] [stdout] test mover::tests::move_file_skips_when_dest_size_matches ... ok
[INFO] [stdout] test ripper::state::tests::update_state_with_preserves_untouched_fields ... ok
[INFO] [stdout] test ripper::tests::format_pass_error_hardware_wedge ... ok
[INFO] [stdout] test log::tests::archive_device_log_no_op_when_empty ... ok
[INFO] [stdout] test ripper::tests::format_pass_error_no_sense_keeps_raw ... ok
[INFO] [stdout] test ripper::tests::format_pass_error_illegal_request_advises_powercycle ... ok
[INFO] [stdout] test ripper::tests::device_key_strips_unix_path ... ok
[INFO] [stdout] test mover::tests::move_file_overwrites_when_dest_size_differs ... ok
[INFO] [stdout] test tmdb::tests::clean_title_empty_input ... ok
[INFO] [stdout] test ripper::tests::format_pass_error_medium_error_advises_pass2 ... ok
[INFO] [stdout] test tmdb::tests::clean_title_handles_hyphens ... ok
[INFO] [stdout] test tmdb::tests::clean_title_picks_earliest_suffix_match ... ok
[INFO] [stdout] test tmdb::tests::clean_title_strips_bluray_suffix ... ok
[INFO] [stdout] test tmdb::tests::clean_title_title_cases_snake_case ... ok
[INFO] [stdout] test tmdb::tests::clean_title_strips_disc_suffix ... ok
[INFO] [stdout] test util::tests::civil_from_days_far_future ... ok
[INFO] [stdout] test util::tests::civil_from_days_epoch ... ok
[INFO] [stdout] test util::tests::format_date_shape ... ok
[INFO] [stdout] test util::tests::format_duration_hm_pads_minutes ... ok
[INFO] [stdout] test log::tests::device_log_writes_iso_timestamped_line ... ok
[INFO] [stdout] test ripper::state::tests::byte_offset_in_title_within_single_extent ... ok
[INFO] [stdout] test util::tests::format_duration_hm_two_hours ... ok
[INFO] [stdout] test util::tests::civil_from_days_leap_year_march ... ok
[INFO] [stdout] test util::tests::format_duration_hm_under_minute ... ok
[INFO] [stdout] test log::tests::get_device_log_respects_line_limit ... ok
[INFO] [stdout] test util::tests::format_duration_hm_zero ... ok
[INFO] [stdout] test util::tests::format_iso_datetime_filename_no_colons ... ok
[INFO] [stdout] test util::tests::format_iso_datetime_shape ... ok
[INFO] [stdout] test util::tests::sanitize_path_compact_collapses_spaces_to_underscore ... ok
[INFO] [stdout] test util::tests::sanitize_path_compact_strips_unsafe_chars ... ok
[INFO] [stdout] test util::tests::sanitize_path_compact_keeps_dots_dashes_underscores ... ok
[INFO] [stdout] test ripper::state::tests::build_bad_ranges_sorts_by_duration_desc ... ok
[INFO] [stdout] test util::tests::sanitize_path_display_trims_whitespace ... ok
[INFO] [stdout] test web::web_tests::device_name_accepts_sg_digits ... ok
[INFO] [stdout] test tmdb::tests::clean_title_strips_uhd_suffix ... ok
[INFO] [stdout] test web::web_tests::device_name_rejects_path_traversal_and_typos ... ok
[INFO] [stdout] test tmdb::tests::urlencoded_keeps_allowed_chars ... ok
[INFO] [stdout] test util::tests::sanitize_path_display_keeps_spaces_and_apostrophes ... ok
[INFO] [stdout] test util::tests::sanitize_path_display_strips_unsafe_chars ... ok
[INFO] [stdout] test mover::tests::build_destination_movie_without_year_falls_through ... ok
[INFO] [stdout] test ripper::mux::tests::direct_mode_passthrough ... ok
[INFO] [stdout] test ripper::state::tests::build_bad_ranges_truncates_to_50 ... ok
[INFO] [stdout] test mover::tests::sanitize_dir_name_strips_unsafe_characters ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 77 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 77 tests
[INFO] [stdout] test history::tests::load_recent_missing_dir_returns_empty ... ok
[INFO] [stdout] test history::tests::load_recent_ignores_non_json_files ... ok
[INFO] [stdout] test history::tests::record_writes_json_file ... ok
[INFO] [stdout] test history::tests::load_recent_returns_newest_first ... ok
[INFO] [stdout] test history::tests::load_recent_respects_count_limit ... ok
[INFO] [stdout] test mover::tests::build_destination_empty_movie_dir_falls_to_output_dir ... ok
[INFO] [stdout] test mover::tests::build_destination_no_tmdb_falls_to_output_dir ... ok
[INFO] [stdout] test mover::tests::build_destination_movie_with_year ... ok
[INFO] [stdout] test mover::tests::build_destination_movie_without_year_falls_through ... ok
[INFO] [stdout] test mover::tests::build_destination_tv_uses_season_1_layout ... ok
[INFO] [stdout] test mover::tests::move_file_moves_when_dest_missing ... ok
[INFO] [stdout] test mover::tests::sanitize_dir_name_keeps_allowed_punctuation ... ok
[INFO] [stdout] test mover::tests::sanitize_dir_name_trims_whitespace ... ok
[INFO] [stdout] test mover::tests::sanitize_dir_name_strips_unsafe_characters ... ok
[INFO] [stdout] test log::tests::archive_device_log_moves_to_rips_dir ... ok
[INFO] [stdout] test ripper::mux::tests::clean_disc_mux_opens_at_50_percent ... ok
[INFO] [stdout] test mover::tests::move_file_returns_moved_when_src_missing_but_dest_present ... ok
[INFO] [stdout] test ripper::mux::tests::damaged_disc_mux_opens_below_50_percent ... ok
[INFO] [stdout] test ripper::mux::tests::direct_mode_passthrough ... ok
[INFO] [stdout] test ripper::mux::tests::edge_cases ... ok
[INFO] [stdout] test ripper::state::tests::build_bad_ranges_excludes_not_yet_tried ... ok
[INFO] [stdout] test mover::tests::record_error_dedups_same_reason_without_logging_again ... ok
[INFO] [stdout] test ripper::state::tests::byte_offset_in_title_across_multiple_extents ... ok
[INFO] [stdout] test ripper::state::tests::byte_offset_in_title_returns_none_outside_extents ... ok
[INFO] [stdout] test ripper::state::tests::byte_offset_in_title_within_single_extent ... ok
[INFO] [stdout] test ripper::state::tests::eta_speed_stays_stable_through_a_stall ... ok
[INFO] [stdout] test ripper::state::tests::build_bad_ranges_ignores_non_trimmed_and_non_scraped ... ok
[INFO] [stdout] test ripper::state::tests::build_bad_ranges_sorts_by_duration_desc ... ok
[INFO] [stdout] test ripper::state::tests::pass_progress_caps_absurd_instantaneous ... ok
[INFO] [stdout] test ripper::state::tests::pass_progress_first_sample_returns_zero ... ok
[INFO] [stdout] test ripper::state::tests::pass_progress_second_sample_matches_physical_rate ... ok
[INFO] [stdout] test ripper::state::tests::pass_progress_stall_drops_out_within_window ... ok
[INFO] [stdout] test mover::tests::move_file_skips_when_dest_size_matches ... ok
[INFO] [stdout] test ripper::state::tests::display_speed_is_smoother_in_steady_state ... ok
[INFO] [stdout] test ripper::state::tests::build_bad_ranges_includes_unreadable ... ok
[INFO] [stdout] test mover::tests::move_file_overwrites_when_dest_size_differs ... ok
[INFO] [stdout] test ripper::state::tests::display_window_grows_with_elapsed_time ... ok
[INFO] [stdout] test ripper::state::tests::pass_progress_steady_state_converges ... ok
[INFO] [stdout] test ripper::state::tests::eta_falls_back_to_display_during_warmup ... ok
[INFO] [stdout] test ripper::tests::device_key_strips_unix_path ... ok
[INFO] [stdout] test ripper::state::tests::update_state_with_preserves_untouched_fields ... ok
[INFO] [stdout] test ripper::state::tests::pass_progress_zero_dt_returns_previous ... ok
[INFO] [stdout] test log::tests::archive_device_log_clears_in_memory_buffer ... ok
[INFO] [stdout] test ripper::tests::format_pass_error_illegal_request_advises_powercycle ... ok
[INFO] [stdout] test tmdb::tests::urlencoded_keeps_allowed_chars ... ok
[INFO] [stdout] test ripper::tests::format_pass_error_medium_error_advises_pass2 ... ok
[INFO] [stdout] test ripper::tests::format_pass_error_hardware_wedge ... ok
[INFO] [stdout] test util::tests::civil_from_days_far_future ... ok
[INFO] [stdout] test ripper::tests::format_pass_error_no_sense_keeps_raw ... ok
[INFO] [stdout] test tmdb::tests::clean_title_empty_input ... ok
[INFO] [stdout] test ripper::state::tests::build_bad_ranges_truncates_to_50 ... ok
[INFO] [stdout] test tmdb::tests::clean_title_handles_hyphens ... ok
[INFO] [stdout] test tmdb::tests::clean_title_picks_earliest_suffix_match ... ok
[INFO] [stdout] test tmdb::tests::clean_title_strips_bluray_suffix ... ok
[INFO] [stdout] test tmdb::tests::clean_title_strips_disc_suffix ... ok
[INFO] [stdout] test tmdb::tests::clean_title_strips_uhd_suffix ... ok
[INFO] [stdout] test util::tests::civil_from_days_epoch ... ok
[INFO] [stdout] test log::tests::get_device_log_respects_line_limit ... ok
[INFO] [stdout] test tmdb::tests::clean_title_title_cases_snake_case ... ok
[INFO] [stdout] test util::tests::civil_from_days_leap_year_march ... ok
[INFO] [stdout] test util::tests::format_date_shape ... ok
[INFO] [stdout] test util::tests::format_duration_hm_two_hours ... ok
[INFO] [stdout] test util::tests::format_duration_hm_zero ... ok
[INFO] [stdout] test util::tests::format_iso_datetime_filename_no_colons ... ok
[INFO] [stdout] test log::tests::device_log_writes_iso_timestamped_line ... ok
[INFO] [stdout] test log::tests::archive_device_log_no_op_when_empty ... ok
[INFO] [stdout] test util::tests::sanitize_path_compact_keeps_dots_dashes_underscores ... ok
[INFO] [stdout] test util::tests::format_duration_hm_pads_minutes ... ok
[INFO] [stdout] test util::tests::format_duration_hm_under_minute ... ok
[INFO] [stdout] test util::tests::sanitize_path_compact_strips_unsafe_chars ... ok
[INFO] [stdout] test util::tests::sanitize_path_compact_collapses_spaces_to_underscore ... ok
[INFO] [stdout] test util::tests::format_iso_datetime_shape ... ok
[INFO] [stdout] test util::tests::sanitize_path_display_keeps_spaces_and_apostrophes ... ok
[INFO] [stdout] test util::tests::sanitize_path_display_trims_whitespace ... ok
[INFO] [stdout] test web::web_tests::device_name_accepts_sg_digits ... ok
[INFO] [stdout] test util::tests::sanitize_path_display_strips_unsafe_chars ... ok
[INFO] [stdout] test web::web_tests::device_name_rejects_path_traversal_and_typos ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 77 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] test test_route_dispatcher_recognizes_all_endpoints ... ok
[INFO] [stdout] test test_sse_route_is_routable ... ok
[INFO] [stdout] test test_state_json_serialization_round_trip ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] test test_cancel_halt_propagates_to_rip_clones ... ok
[INFO] [stdout] test test_eject_does_not_double_drop ... ok
[INFO] [stdout] test test_handle_stop_waits_for_thread_drain ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.15s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]      Running tests/reporting.rs (/opt/rustwide/target/debug/deps/reporting-243f8bad81aacb7e)
[INFO] [stdout] running 3 tests
[INFO] [stdout] test test_bytes_read_event_updates_state ... ok
[INFO] [stdout] test test_first_frame_publishes_immediately ... ok
[INFO] [stdout] test test_speed_meter_smoothing_with_zeros ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/spawn_registration.rs (/opt/rustwide/target/debug/deps/spawn_registration-9206ed25a40e968b)
[INFO] [stdout] 
[INFO] [stdout] running 1 test
[INFO] [stdout] test spawn_rip_thread_registers_handle ... ok
[INFO] [stderr]    Doc-tests freemkv_autorip
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.10s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] test src/ripper/state.rs - ripper::state::STATIC_PHASE_SECS (line 426) ... FAILED
[INFO] [stdout] test src/ripper/mux.rs - ripper::mux::total_pct_byte_weight (line 54) ... FAILED
[INFO] [stdout] test src/ripper/mux.rs - ripper::mux::total_pct_byte_weight (line 65) ... FAILED
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- src/ripper/state.rs - ripper::state::STATIC_PHASE_SECS (line 426) stdout ----
[INFO] [stdout] error: unknown start of token: \u{2192}
[INFO] [stdout]    --> src/ripper/state.rs:427:11
[INFO] [stdout]     |
[INFO] [stdout] 427 |   t+ 30 s → 10 s window
[INFO] [stdout]     |           ^
[INFO] [stdout] 
[INFO] [stdout] error: unknown start of token: \u{2192}
[INFO] [stdout]    --> src/ripper/state.rs:428:11
[INFO] [stdout]     |
[INFO] [stdout] 428 |   t+ 60 s → 10 s window (start of growth phase)
[INFO] [stdout]     |           ^
[INFO] [stdout] 
[INFO] [stdout] error: unknown start of token: \u{2192}
[INFO] [stdout]    --> src/ripper/state.rs:429:11
[INFO] [stdout]     |
[INFO] [stdout] 429 |   t+210 s → 35 s window
[INFO] [stdout]     |           ^
[INFO] [stdout] 
[INFO] [stdout] error: unknown start of token: \u{2192}
[INFO] [stdout]    --> src/ripper/state.rs:430:11
[INFO] [stdout]     |
[INFO] [stdout] 430 |   t+360 s → 60 s window (cap reached)
[INFO] [stdout]     |           ^
[INFO] [stdout] 
[INFO] [stdout] error: unknown start of token: \u{2192}
[INFO] [stdout]    --> src/ripper/state.rs:431:10
[INFO] [stdout]     |
[INFO] [stdout] 431 |   t+1 h  → 60 s window
[INFO] [stdout]     |          ^
[INFO] [stdout] 
[INFO] [stdout] error: expected one of `!` or `::`, found `+`
[INFO] [stdout]    --> src/ripper/state.rs:427:4
[INFO] [stdout]     |
[INFO] [stdout] 427 |   t+ 30 s → 10 s window
[INFO] [stdout]     |    ^ expected one of `!` or `::`
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 6 previous errors
[INFO] [stdout] 
[INFO] [stdout] Couldn't compile the test.
[INFO] [stdout] ---- src/ripper/mux.rs - ripper::mux::total_pct_byte_weight (line 54) stdout ----
[INFO] [stdout] error: unknown start of token: \u{d7}
[INFO] [stdout]   --> src/ripper/mux.rs:56:26
[INFO] [stdout]    |
[INFO] [stdout] 56 |            + max_retries × bytes_unreadable    // retries
[INFO] [stdout]    |                          ^
[INFO] [stdout] 
[INFO] [stdout] error: expected one of `!` or `::`, found `=`
[INFO] [stdout]   --> src/ripper/mux.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 55 | total_work = bytes_total_disc                 // sweep
[INFO] [stdout]    |            ^ expected one of `!` or `::`
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 2 previous errors
[INFO] [stdout] 
[INFO] [stdout] Couldn't compile the test.
[INFO] [stdout] ---- src/ripper/mux.rs - ripper::mux::total_pct_byte_weight (line 65) stdout ----
[INFO] [stdout] error: unknown start of token: \u{d7}
[INFO] [stdout]   --> src/ripper/mux.rs:67:26
[INFO] [stdout]    |
[INFO] [stdout] 67 |            + max_retries × bytes_unreadable    // retries complete
[INFO] [stdout]    |                          ^
[INFO] [stdout] 
[INFO] [stdout] error: unknown start of token: \u{d7}
[INFO] [stdout]   --> src/ripper/mux.rs:68:30
[INFO] [stdout]    |
[INFO] [stdout] 68 |            + (mux_pct / 100) × bytes_total_disc
[INFO] [stdout]    |                              ^
[INFO] [stdout] 
[INFO] [stdout] error: expected one of `!` or `::`, found `=`
[INFO] [stdout]   --> src/ripper/mux.rs:66:12
[INFO] [stdout]    |
[INFO] [stdout] 66 | total_done = bytes_total_disc                 // sweep complete
[INFO] [stdout]    |            ^ expected one of `!` or `::`
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 3 previous errors
[INFO] [stdout] 
[INFO] [stdout] Couldn't compile the test.
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     src/ripper/mux.rs - ripper::mux::total_pct_byte_weight (line 54)
[INFO] [stdout]     src/ripper/mux.rs - ripper::mux::total_pct_byte_weight (line 65)
[INFO] [stdout]     src/ripper/state.rs - ripper::state::STATIC_PHASE_SECS (line 426)
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 0 passed; 3 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.12s
[INFO] [stdout] 
[INFO] [stderr] error: doctest failed, to rerun pass `--doc`
[INFO] running `Command { std: "docker" "inspect" "d762e8a22ac166499e6bc737067b7adfe5bf3c43c5dd5c2189241da3c5e47743", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "d762e8a22ac166499e6bc737067b7adfe5bf3c43c5dd5c2189241da3c5e47743", kill_on_drop: false }`
[INFO] [stdout] d762e8a22ac166499e6bc737067b7adfe5bf3c43c5dd5c2189241da3c5e47743
