[INFO] cloning repository https://github.com/clrsrc/liru-bot
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/clrsrc/liru-bot" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fclrsrc%2Fliru-bot", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fclrsrc%2Fliru-bot'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 38500fe965010e9cffd289a836f3bc8a5b7a275f
[INFO] testing clrsrc/liru-bot against 1.98.0-beta.1 for beta-1.98-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fclrsrc%2Fliru-bot" "/workspace/builds/worker-0-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/clrsrc/liru-bot
[INFO] finished tweaking git repo https://github.com/clrsrc/liru-bot
[INFO] tweaked toml for git repo https://github.com/clrsrc/liru-bot written to /workspace/builds/worker-0-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/clrsrc/liru-bot on toolchain 1.98.0-beta.1
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.98.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/clrsrc/liru-bot 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.98.0-beta.1" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/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] 737c0239b5e9a6f02754bace0d3d06dccd6367d4b8bb8163379b19452b2cedde
[INFO] running `Command { std: "docker" "start" "737c0239b5e9a6f02754bace0d3d06dccd6367d4b8bb8163379b19452b2cedde", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "737c0239b5e9a6f02754bace0d3d06dccd6367d4b8bb8163379b19452b2cedde", 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" "737c0239b5e9a6f02754bace0d3d06dccd6367d4b8bb8163379b19452b2cedde" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "737c0239b5e9a6f02754bace0d3d06dccd6367d4b8bb8163379b19452b2cedde", 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" "737c0239b5e9a6f02754bace0d3d06dccd6367d4b8bb8163379b19452b2cedde" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling itoa v1.0.18
[INFO] [stderr]    Compiling cc v1.2.62
[INFO] [stderr]    Compiling futures-sink v0.3.32
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling litemap v0.8.2
[INFO] [stderr]    Compiling writeable v0.6.3
[INFO] [stderr]    Compiling futures-io v0.3.32
[INFO] [stderr]    Compiling icu_properties_data v2.2.0
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling icu_normalizer_data v2.2.0
[INFO] [stderr]    Compiling glob v0.3.3
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling socket2 v0.6.3
[INFO] [stderr]    Compiling mio v1.2.0
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling futures-channel v0.3.32
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling bitflags v2.11.1
[INFO] [stderr]    Compiling futures-task v0.3.32
[INFO] [stderr]    Compiling http v1.4.0
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling libc v0.2.186
[INFO] [stderr]    Compiling prettyplease v0.2.37
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling rustls-pki-types v1.14.1
[INFO] [stderr]    Compiling regex-syntax v0.8.10
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling simd-adler32 v0.3.9
[INFO] [stderr]    Compiling minimal-lexical v0.2.1
[INFO] [stderr]    Compiling clang-sys v1.8.1
[INFO] [stderr]    Compiling libloading v0.8.9
[INFO] [stderr]    Compiling bindgen v0.72.1
[INFO] [stderr]    Compiling rustc-hash v2.1.2
[INFO] [stderr]    Compiling miniz_oxide v0.8.9
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling zerocopy v0.8.48
[INFO] [stderr]    Compiling pkg-config v0.3.33
[INFO] [stderr]    Compiling rustls v0.23.40
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling log v0.4.29
[INFO] [stderr]    Compiling compression-core v0.4.32
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling anstyle-parse v1.0.0
[INFO] [stderr]    Compiling flate2 v1.1.9
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]    Compiling ipnet v2.12.0
[INFO] [stderr]    Compiling powerfmt v0.2.0
[INFO] [stderr]    Compiling anstyle v1.0.14
[INFO] [stderr]    Compiling colorchoice v1.0.5
[INFO] [stderr]    Compiling anstream v1.0.0
[INFO] [stderr]    Compiling deranged v0.5.8
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling compression-codecs v0.4.38
[INFO] [stderr]    Compiling btoi v0.4.3
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling webpki-roots v1.0.7
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling hashbrown v0.17.1
[INFO] [stderr]    Compiling time-core v0.1.8
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling libz-sys v1.1.28
[INFO] [stderr]    Compiling clap_lex v1.1.0
[INFO] [stderr]    Compiling num-conv v0.2.1
[INFO] [stderr]    Compiling anyhow v1.0.102
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling arrayvec v0.7.6
[INFO] [stderr]    Compiling clap_builder v4.6.0
[INFO] [stderr]    Compiling shakmaty v0.27.3
[INFO] [stderr]    Compiling unsafe-libyaml v0.2.11
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]    Compiling byteorder v1.5.0
[INFO] [stderr]    Compiling symlink v0.1.0
[INFO] [stderr]    Compiling time v0.3.47
[INFO] [stderr]    Compiling cexpr v0.6.0
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling synstructure v0.13.2
[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 futures-macro v0.3.32
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling clap_derive v4.6.1
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling rustls-webpki v0.103.13
[INFO] [stderr]    Compiling tokio v1.52.3
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling zerofrom v0.1.7
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling yoke v0.8.2
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling zerovec v0.11.6
[INFO] [stderr]    Compiling zerotrie v0.2.4
[INFO] [stderr]    Compiling rand v0.8.6
[INFO] [stderr]    Compiling clap v4.6.1
[INFO] [stderr]    Compiling tinystr v0.8.3
[INFO] [stderr]    Compiling potential_utf v0.1.5
[INFO] [stderr]    Compiling icu_collections v2.2.0
[INFO] [stderr]    Compiling icu_locale_core v2.2.0
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling icu_provider v2.2.0
[INFO] [stderr]    Compiling tracing-serde v0.2.0
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling serde_yaml_ng v0.10.0
[INFO] [stderr]    Compiling chrono v0.4.44
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling icu_properties v2.2.0
[INFO] [stderr]    Compiling icu_normalizer v2.2.0
[INFO] [stderr]    Compiling shakmaty-syzygy v0.25.3
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling tracing-appender v0.2.5
[INFO] [stderr]    Compiling idna_adapter v1.2.2
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling hyper v1.9.0
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling async-compression v0.4.42
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling tower-http v0.6.10
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling gaviota-sys v0.1.28
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling liru-bot v0.3.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 33s
[INFO] running `Command { std: "docker" "inspect" "737c0239b5e9a6f02754bace0d3d06dccd6367d4b8bb8163379b19452b2cedde", 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" "737c0239b5e9a6f02754bace0d3d06dccd6367d4b8bb8163379b19452b2cedde" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling tokio v1.52.3
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling bitflags v2.11.1
[INFO] [stderr]    Compiling fnv v1.0.7
[INFO] [stderr]    Compiling httpdate v1.0.3
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling num_cpus v1.17.0
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling deadpool-runtime v0.1.4
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling assert-json-diff v2.0.2
[INFO] [stderr]    Compiling fastrand v2.4.1
[INFO] [stderr]    Compiling bindgen v0.72.1
[INFO] [stderr]    Compiling shakmaty v0.27.3
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling gaviota-sys v0.1.28
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling async-compression v0.4.42
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling deadpool v0.12.3
[INFO] [stderr]    Compiling tokio-stream v0.1.18
[INFO] [stderr]    Compiling tokio-test v0.4.5
[INFO] [stderr]    Compiling h2 v0.4.14
[INFO] [stderr]    Compiling tower-http v0.6.10
[INFO] [stderr]    Compiling shakmaty-syzygy v0.25.3
[INFO] [stderr]    Compiling hyper v1.9.0
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling wiremock v0.6.5
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling liru-bot v0.3.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 55.64s
[INFO] running `Command { std: "docker" "inspect" "737c0239b5e9a6f02754bace0d3d06dccd6367d4b8bb8163379b19452b2cedde", 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" "737c0239b5e9a6f02754bace0d3d06dccd6367d4b8bb8163379b19452b2cedde" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.42s
[INFO] [stdout] 
[INFO] [stdout] running 263 tests
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/liru_bot-b8efa30c07dac0df)
[INFO] [stdout] test blocklist::tests::empty_blocklist_contains_nobody ... ok
[INFO] [stdout] test config::tests::matchmaking_lists_get_default_none ... ok
[INFO] [stdout] test blocklist::tests::local_lookup_finds_users ... ok
[INFO] [stdout] test config::tests::max_base_inf_string ... ok
[INFO] [stdout] test config::tests::loads_minimal_config_with_defaults ... ok
[INFO] [stdout] test daily_counter::tests::increment_accumulates_in_memory ... ok
[INFO] [stdout] test daily_counter::tests::stale_dated_tally_reads_as_zero_today ... ok
[INFO] [stdout] test daily_counter::tests::fresh_counter_is_zero ... ok
[INFO] [stdout] test daily_counter::tests::roll_over_resets_only_on_a_new_day ... ok
[INFO] [stdout] test egtb::tests::build_decision_packs_score_and_draw_resign_flags ... ok
[INFO] [stdout] test egtb::tests::build_decision_many_returns_suggest_variant ... ok
[INFO] [stdout] test egtb::tests::disabled_syzygy_returns_none ... ok
[INFO] [stdout] test egtb::tests::enabled_but_empty_paths_returns_none ... ok
[INFO] [stdout] test egtb::tests::gaviota_castling_rights_short_circuit ... ok
[INFO] [stdout] test egtb::tests::gaviota_disabled_returns_none ... ok
[INFO] [stdout] test egtb::tests::gaviota_piece_count_above_threshold_returns_none ... ok
[INFO] [stdout] test egtb::tests::gaviota_enabled_but_empty_paths_returns_none ... ok
[INFO] [stdout] test egtb::tests::get_egtb_move_falls_through_when_syzygy_disabled ... ok
[INFO] [stdout] test conversation::tests::eval_from_self_reveals_stats ... ok
[INFO] [stdout] test egtb::tests::piece_count_above_threshold_returns_none ... ok
[INFO] [stdout] test egtb::tests::syzygy_quality_parse_defaults_to_best ... ok
[INFO] [stdout] test egtb::tests::wdl_to_score_matches_python_table ... ok
[INFO] [stdout] test engine_wrapper::tests::bestmove_garbage_rejected ... ok
[INFO] [stdout] test engine_wrapper::tests::bestmove_with_ponder ... ok
[INFO] [stdout] test engine_wrapper::tests::bestmove_without_ponder ... ok
[INFO] [stdout] test engine_wrapper::tests::check_for_draw_offer_reads_opponent_color ... ok
[INFO] [stdout] test egtb::tests::nonexistent_path_under_threshold_returns_none_gracefully ... ok
[INFO] [stdout] test engine_wrapper::tests::correspondence_caps_at_remaining_clock ... ok
[INFO] [stdout] test engine_wrapper::tests::choose_pre_engine_returns_none_when_book_disabled_and_stubs_active ... ok
[INFO] [stdout] test engine_wrapper::tests::correspondence_uses_full_search_when_clock_is_plenty ... ok
[INFO] [stdout] test engine_wrapper::tests::embedded_clock_mode_tightens_deadline_to_overshoot_cap ... ok
[INFO] [stdout] test egtb::tests::gaviota_nonexistent_path_returns_none_gracefully ... ok
[INFO] [stdout] test engine_wrapper::tests::first_move_time_is_ten_seconds_no_pondering ... ok
[INFO] [stdout] test engine_wrapper::tests::choose_pre_engine_returns_book_hit_when_polyglot_finds_one ... ok
[INFO] [stdout] test conversation::tests::eval_from_opponent_is_refused ... ok
[INFO] [stdout] test daily_counter::tests::persists_and_reloads_across_instances ... ok
[INFO] [stdout] test engine_wrapper::tests::format_go_movetime ... ok
[INFO] [stdout] test engine_wrapper::tests::format_go_appends_searchmoves_at_the_end ... ok
[INFO] [stdout] test conversation::tests::source_command_returns_configured_url ... ok
[INFO] [stdout] test conversation::tests::send_message_skips_empty_strings ... ok
[INFO] [stdout] test engine_wrapper::tests::format_go_ponder_and_infinite ... ok
[INFO] [stdout] test engine_wrapper::tests::format_go_writes_clock_and_increment ... ok
[INFO] [stdout] test conversation::tests::queue_empty_reports_no_challenges ... ok
[INFO] [stdout] test engine_wrapper::tests::format_info_stats_clips_pv_for_chat ... ok
[INFO] [stdout] test engine_wrapper::tests::format_position_uses_startpos_by_default ... ok
[INFO] [stdout] test conversation::tests::pv_command_refuses_opponent_in_player_room ... ok
[INFO] [stdout] test engine_wrapper::tests::embedded_clock_mode_falls_back_to_flag_fall_in_scramble ... ok
[INFO] [stdout] test conversation::tests::name_command_includes_engine_and_version ... ok
[INFO] [stdout] test conversation::tests::source_command_falls_back_when_unset ... ok
[INFO] [stdout] test engine_wrapper::tests::format_position_uses_fen_when_provided ... ok
[INFO] [stdout] test engine_wrapper::tests::format_uci_info_log_full_line ... ok
[INFO] [stdout] test engine_wrapper::tests::format_uci_info_log_mate_score_omits_cp ... ok
[INFO] [stdout] test engine_wrapper::tests::game_clock_caps_movetime_per_side ... ok
[INFO] [stdout] test engine_wrapper::tests::gameover_line_for_abort_uses_star_result ... ok
[INFO] [stdout] test conversation::tests::fen_command_replies_with_current_position ... ok
[INFO] [stdout] test engine_wrapper::tests::gameover_line_for_resign_names_resigning_side ... ok
[INFO] [stdout] test engine_wrapper::tests::gameover_line_for_timeout_with_winner_names_timeouter ... ok
[INFO] [stdout] test conversation::tests::help_command_lists_supported_commands ... ok
[INFO] [stdout] test engine_wrapper::tests::format_uci_info_log_skips_none_fields ... ok
[INFO] [stdout] test engine_wrapper::tests::info_line_basic_fields ... ok
[INFO] [stdout] test engine_wrapper::tests::game_clock_clamps_to_one_ms_when_overhead_exceeds_remaining ... ok
[INFO] [stdout] test engine_wrapper::tests::info_line_mate_score ... ok
[INFO] [stdout] test engine_wrapper::tests::info_line_unknown_keys_land_in_raw ... ok
[INFO] [stdout] test engine_wrapper::tests::gameover_line_for_draw_uses_default_reason ... ok
[INFO] [stdout] test engine_wrapper::tests::gameover_line_for_mate_has_no_reason ... ok
[INFO] [stdout] test engine_wrapper::tests::move_count_handles_empty_and_missing ... ok
[INFO] [stdout] test engine_wrapper::tests::gameover_line_for_timeout_without_winner_is_drawish ... ok
[INFO] [stdout] test engine_wrapper::tests::format_info_stats_uses_python_ordering ... ok
[INFO] [stdout] test engine_wrapper::tests::id_line_splits_key_and_value ... ok
[INFO] [stdout] test engine_wrapper::tests::move_source_labels_match_python_format ... ok
[INFO] [stdout] test conversation::tests::ratings_command_lists_known_perfs_in_order ... ok
[INFO] [stdout] test engine_wrapper::tests::opponent_info_value_marks_bots_as_computer ... ok
[INFO] [stdout] test conversation::tests::pv_command_renders_san_for_spectator ... ok
[INFO] [stdout] test engine_wrapper::tests::opponent_info_value_substitutes_none_for_missing_title_and_rating ... ok
[INFO] [stdout] test engine_wrapper::tests::move_decision_uci_standard_encodes_castling_as_king_target ... ok
[INFO] [stdout] test engine_wrapper::tests::opponent_info_value_treats_empty_title_as_none ... ok
[INFO] [stdout] test engine_wrapper::tests::opponent_info_from_player_copies_fields ... ok
[INFO] [stdout] test engine_wrapper::tests::opponent_info_value_includes_title_rating_kind_name ... ok
[INFO] [stdout] test engine_wrapper::tests::option_line_with_combo_vars ... ok
[INFO] [stdout] test engine_wrapper::tests::pov_score_collapses_mate_to_clamped_cp ... ok
[INFO] [stdout] test engine_wrapper::tests::pv_to_san_renders_opening_moves ... ok
[INFO] [stdout] test engine_wrapper::tests::pv_to_san_stops_at_illegal_move ... ok
[INFO] [stdout] test engine_wrapper::tests::pv_to_san_empty_pv_returns_empty_string ... ok
[INFO] [stdout] test engine_wrapper::tests::option_line_with_spaces_in_name_and_default ... ok
[INFO] [stdout] test engine_wrapper::tests::readable_number_formats_thousands_and_millions ... ok
[INFO] [stdout] test engine_wrapper::tests::pv_to_san_renders_captures_and_checks_without_plus_suffix ... ok
[INFO] [stdout] test engine_wrapper::tests::tracker_resigns_after_consecutive_losing_scores ... ok
[INFO] [stdout] test engine_wrapper::tests::readable_score_handles_cp_and_mate ... ok
[INFO] [stdout] test engine_wrapper::tests::readable_time_minutes_and_seconds ... ok
[INFO] [stdout] test engine_wrapper::tests::readable_wdl_matches_python_expectation ... ok
[INFO] [stdout] test engine_wrapper::tests::score_from_info_prefers_mate_over_cp ... ok
[INFO] [stdout] test engine_wrapper::tests::second_move_uses_game_clock_in_realtime ... ok
[INFO] [stdout] test engine_wrapper::tests::side_from_color_roundtrips_both_colors ... ok
[INFO] [stdout] test engine_wrapper::tests::tracker_does_not_offer_draw_when_one_score_is_winning ... ok
[INFO] [stdout] test engine_wrapper::tests::tracker_does_not_offer_draw_with_pieces_above_threshold ... ok
[INFO] [stdout] test exp_overlay::tests::append_creates_header_then_grows_count ... ok
[INFO] [stdout] test engine_wrapper::tests::tracker_does_not_resign_if_one_score_above_threshold ... ok
[INFO] [stdout] test engine_wrapper::tests::tracker_offers_draw_only_once_per_phase ... ok
[INFO] [stdout] test exp_overlay::tests::entry_bytes_match_spec_layout ... ok
[INFO] [stdout] test exp_overlay::tests::bookless_move_uses_unset_score_and_zero_depth ... ok
[INFO] [stdout] test exp_overlay::tests::loss_and_draw_set_wdl_fields ... ok
[INFO] [stdout] test homemade::tests::alphabetical_picks_first_by_san ... ok
[INFO] [stdout] test exp_overlay::tests::score_is_clamped_into_i16_range ... ok
[INFO] [stdout] test homemade::tests::combo_picks_random_with_plenty_of_time ... ok
[INFO] [stdout] test homemade::tests::combo_picks_first_under_time_pressure ... ok
[INFO] [stdout] test exp_overlay::tests::append_nothing_is_a_noop ... ok
[INFO] [stdout] test exp_overlay::tests::rejects_foreign_magic ... ok
[INFO] [stdout] test homemade::tests::first_move_picks_first_by_uci ... ok
[INFO] [stdout] test homemade::tests::combo_uses_black_clock_when_black_to_move ... ok
[INFO] [stdout] test lichess::tests::endpoint_render_substitutes_positional_args ... ok
[INFO] [stdout] test homemade::tests::random_move_is_deterministic_for_fixed_seed ... ok
[INFO] [stdout] test homemade::tests::random_move_picks_a_legal_move ... ok
[INFO] [stdout] test homemade::tests::registry_knows_all_four_engines ... ok
[INFO] [stdout] test lichess::tests::rate_limit_check_blocks_until_timer_expires ... ok
[INFO] [stdout] test lichess::tests::get_online_bots_parses_ndjson_body ... ok
[INFO] [stdout] test lichess::tests::event_stream_429_surfaces_rate_limited_for_reconnect ... ok
[INFO] [stdout] test lichess::tests::lichess_error_is_final_classification ... ok
[INFO] [stdout] test lichess::tests::make_move_posts_uci_with_draw_offer ... ok
[INFO] [stdout] test lichess::tests::endpoint_render_keeps_braces_for_missing_args ... ok
[INFO] [stdout] test engine_wrapper::tests::tracker_offers_draw_when_window_is_flat ... ok
[INFO] [stdout] test lichess::tests::get_profile_decodes_and_updates_user_agent ... ok
[INFO] [stdout] test lichess::tests::decline_challenge_never_panics_on_error ... ok
[INFO] [stdout] test lichess::tests::stream_open_failure_is_single_attempt_no_storm ... ok
[INFO] [stdout] test lichess::tests::rate_limit_check_passes_after_zero_timer ... ok
[INFO] [stdout] test lichess_bot::tests::concurrency_allows_basic_thresholds ... ok
[INFO] [stdout] test lichess_bot::tests::game_wdl_maps_winner_status_and_skips_aborts ... ok
[INFO] [stdout] test lichess_bot::tests::harvest_collects_white_bots_own_moves_in_order ... ok
[INFO] [stdout] test lichess::tests::chat_sends_form_encoded_room_and_text ... ok
[INFO] [stdout] test lichess::tests::event_stream_yields_typed_events_and_skips_blank_lines ... ok
[INFO] [stdout] test lichess_bot::tests::harvest_respects_max_own_moves_limit ... ok
[INFO] [stdout] test lichess::tests::claim_victory_posts_to_correct_endpoint ... ok
[INFO] [stdout] test lichess::tests::rate_limit_response_sets_timer_and_blocks_next_call ... ok
[INFO] [stdout] test lichess::tests::validate_token_rejects_missing_bot_play_scope ... ok
[INFO] [stdout] test lichess_bot::tests::harvest_threads_commentary_score_and_depth ... ok
[INFO] [stdout] test lichess_bot::tests::incoming_bot_budget_thresholds ... ok
[INFO] [stdout] test lichess_bot::tests::is_engine_move_false_when_bot_black_and_white_to_move ... ok
[INFO] [stdout] test lichess::tests::validate_token_accepts_bot_play_scope ... ok
[INFO] [stdout] test lichess_bot::tests::is_engine_move_false_when_game_unchanged ... ok
[INFO] [stdout] test lichess_bot::tests::is_engine_move_true_when_bot_white_and_white_to_move ... ok
[INFO] [stdout] test lichess_bot::tests::is_tournament_source_recognizes_arena_and_swiss ... ok
[INFO] [stdout] test lichess_bot::tests::json_value_to_string_renders_primitives ... ok
[INFO] [stdout] test lichess_bot::tests::move_count_handles_none_empty_and_populated ... ok
[INFO] [stdout] test lichess_bot::tests::is_game_over_detects_terminal_status ... ok
[INFO] [stdout] test lichess_bot::tests::pgn_target_path_picks_grouping_correctly ... ok
[INFO] [stdout] test lichess_bot::tests::greeting_integration::maybe_send_greeting_skips_when_two_plies_already_played ... ok
[INFO] [stdout] test lichess_bot::tests::render_greeting_leaves_unknown_braces_literal ... ok
[INFO] [stdout] test lichess_bot::tests::harvest_collects_black_bots_own_moves_at_odd_plies ... ok
[INFO] [stdout] test lichess_bot::tests::render_greeting_substitutes_me_and_opponent ... ok
[INFO] [stdout] test lichess_bot::tests::greeting_integration::maybe_send_greeting_sends_once_in_opening ... ok
[INFO] [stdout] test lichess_bot::tests::setup_board_applies_move_history ... ok
[INFO] [stdout] test exp_overlay::tests::move_with_cp_sets_clrsrc_bit_and_score ... ok
[INFO] [stdout] test lichess_bot::tests::apply_new_moves_pushes_only_new_uci_tokens ... ok
[INFO] [stdout] test lichess_bot::tests::tournament_gate_blocks_during_active_arena_game ... ok
[INFO] [stdout] test lichess_bot::tests::tournament_pairing_lag_expires_after_window ... ok
[INFO] [stdout] test lichess_bot::tests::greeting_integration::send_goodbye_drops_empty_templates ... ok
[INFO] [stdout] test lichess_types::tests::challenge_decodes_unknown_keys ... ok
[INFO] [stdout] test lichess_bot::tests::tournament_gate_open_when_no_tournament_game ... ok
[INFO] [stdout] test lichess_bot::tests::greeting_integration::send_goodbye_renders_and_sends_when_set ... ok
[INFO] [stdout] test lichess_bot::tests::pgn_integration::save_pgn_skips_when_directory_unset ... ok
[INFO] [stdout] test lichess_bot::tests::greeting_integration::prefill_ongoing_games_handles_empty_and_error ... ok
[INFO] [stdout] test lichess_bot::tests::greeting_integration::prefill_ongoing_games_separates_correspondence_pickups ... ok
[INFO] [stdout] test lichess_bot::tests::sanitize_filename_strips_illegal_chars ... ok
[INFO] [stdout] test matchmaking::tests::decline_game_aspect_maps_reason_keys ... ok
[INFO] [stdout] test lichess_types::tests::profile_camel_case_mapping ... ok
[INFO] [stdout] test lichess_types::tests::filter_type_round_trips ... ok
[INFO] [stdout] test matchmaking::tests::discard_challenge_clears_only_matching_id ... ok
[INFO] [stdout] test matchmaking::tests::game_category_distinguishes_speeds ... ok
[INFO] [stdout] test matchmaking::tests::game_category_keeps_variant_for_non_standard ... ok
[INFO] [stdout] test lichess_bot::tests::pgn_integration::save_pgn_skips_when_lichess_returns_empty ... ok
[INFO] [stdout] test matchmaking::tests::generic_429_backoff_escalates_then_resets ... ok
[INFO] [stdout] test lichess_bot::tests::setup_board_returns_start_position_when_no_fen_no_moves ... ok
[INFO] [stdout] test matchmaking::tests::daily_challenge_cap_filters_overplayed_opponent ... ok
[INFO] [stdout] test lichess_bot::tests::setup_board_uses_provided_initial_fen ... ok
[INFO] [stdout] test matchmaking::tests::bot_accepted_our_challenge_requires_a_played_game ... ok
[INFO] [stdout] test matchmaking::tests::generic_too_many_requests_pauses_account_not_opponent ... ok
[INFO] [stdout] test matchmaking::tests::add_challenge_filter_blocks_until_timer_expires ... ok
[INFO] [stdout] test matchmaking::tests::content_decline_skips_opponent_not_account ... ok
[INFO] [stdout] test lichess_bot::tests::pgn_integration::save_pgn_opponent_grouping_appends_and_removes_single_file ... ok
[INFO] [stdout] test matchmaking::tests::get_weights_high_favours_strong_bots ... ok
[INFO] [stdout] test matchmaking::tests::get_weights_low_favours_weak_bots ... ok
[INFO] [stdout] test matchmaking::tests::get_weights_uniform_default ... ok
[INFO] [stdout] test model::tests::game_id_mode_color_match_python_fixture ... ok
[INFO] [stdout] test model::tests::is_abortable_false_once_both_sides_have_moved ... ok
[INFO] [stdout] test model::tests::game_urls_match_python_fixture ... ok
[INFO] [stdout] test model::tests::is_chess_960_detects_shuffled_back_ranks ... ok
[INFO] [stdout] test matchmaking::tests::in_block_list_uses_decline_filter ... ok
[INFO] [stdout] test model::tests::is_abortable_true_with_zero_moves ... ok
[INFO] [stdout] test model::tests::pgn_event_and_time_control_match_python_fixture ... ok
[INFO] [stdout] test matchmaking::tests::should_accept_challenge_defaults_true ... ok
[INFO] [stdout] test model::tests::is_supported_rating_exemption_waives_floor_for_known_bot ... ok
[INFO] [stdout] test matchmaking::tests::opponent_rate_limited_is_persisted_and_skipped ... ok
[INFO] [stdout] test lichess_bot::tests::pgn_integration::save_pgn_per_game_writes_one_file ... ok
[INFO] [stdout] test model::tests::player_display_for_ai_level_is_just_name ... ok
[INFO] [stdout] test model::tests::player_with_ai_level ... ok
[INFO] [stdout] test model::tests::player_with_bot_title ... ok
[INFO] [stdout] test model::tests::player_display_for_bot_with_rating_matches_python ... ok
[INFO] [stdout] test model::tests::standard_fen_is_not_chess_960 ... ok
[INFO] [stdout] test model::tests::termination_mapping ... ok
[INFO] [stdout] test model::tests::title_case_works ... ok
[INFO] [stdout] test model::tests::should_terminate_now_fires_after_terminate_window_elapses ... ok
[INFO] [stdout] test model::tests::should_abort_now_fires_after_abort_window_elapses ... ok
[INFO] [stdout] test online_book::tests::chessdb_score_to_wdl_matches_python_thresholds ... ok
[INFO] [stdout] test lichess_bot::tests::pgn_integration::refresh_online_blocklist_updates_state_and_matchmaker ... ok
[INFO] [stdout] test model::tests::should_abort_now_false_once_both_sides_have_moved ... ok
[INFO] [stdout] test online_book::tests::chessdb_best_depth_too_low_returns_none ... ok
[INFO] [stdout] test online_book::tests::chessdb_disabled_returns_none_without_http ... ok
[INFO] [stdout] test online_book::tests::lichess_category_to_wdl_maps_each_name ... ok
[INFO] [stdout] test online_book::tests::online_egtb_skipped_when_too_many_pieces ... ok
[INFO] [stdout] test online_book::tests::explorer_masters_skipped_on_non_chess_variant ... ok
[INFO] [stdout] test online_book::tests::explorer_disabled_returns_none ... ok
[INFO] [stdout] test online_book::tests::orchestrator_short_circuits_after_max_out_of_book_moves ... ok
[INFO] [stdout] test online_book::tests::lichess_cloud_disabled_returns_none ... ok
[INFO] [stdout] test online_book::tests::online_egtb_skipped_with_castling_rights ... ok
[INFO] [stdout] test online_book::tests::orchestrator_increments_out_of_book_when_all_sources_silent ... ok
[INFO] [stdout] test opponent_db::tests::challenges_today_counts_only_todays_initiated_challenges ... ok
[INFO] [stdout] test online_book::tests::lichess_egtb_suggest_returns_shortlist_when_multiple_tied ... ok
[INFO] [stdout] test online_book::tests::lichess_egtb_best_negates_opponent_category ... ok
[INFO] [stdout] test online_book::tests::is_chess_variant_recognises_lichess_variant_keys ... ok
[INFO] [stdout] test online_book::tests::out_of_book_counter_starts_at_zero_and_can_be_reset ... ok
[INFO] [stdout] test online_book::tests::variant_param_maps_chess960_to_standard ... ok
[INFO] [stdout] test online_book::tests::variant_param_maps_standard_to_standard ... ok
[INFO] [stdout] test online_book::tests::chessdb_status_not_ok_returns_none ... ok
[INFO] [stdout] test online_book::tests::chessdb_best_returns_first_pv_move_when_depth_high_enough ... ok
[INFO] [stdout] test online_book::tests::time_window_rejects_disabled_and_clock_out_of_range ... ok
[INFO] [stdout] test opponent_db::tests::empty_path_disables_persistence ... ok
[INFO] [stdout] test online_book::tests::lichess_cloud_min_depth_rejects_shallow_responses ... ok
[INFO] [stdout] test polyglot::tests::best_move_picks_highest_weight_above_threshold ... ok
[INFO] [stdout] test polyglot::tests::best_move_respects_min_weight ... ok
[INFO] [stdout] test polyglot::tests::decode_castling_uses_king_to_rook_coords ... ok
[INFO] [stdout] test polyglot::tests::decode_normal_pawn_move_against_start_position ... ok
[INFO] [stdout] test polyglot::tests::decode_returns_none_for_illegal_move ... ok
[INFO] [stdout] test polyglot::tests::decode_promotion_move ... ok
[INFO] [stdout] test opponent_db::tests::counters_and_form_round_trip ... ok
[INFO] [stdout] test opponent_db::tests::rate_limited_persists_across_reload ... ok
[INFO] [stdout] test opponent_db::tests::rate_limited_until_set_query_and_expiry ... ok
[INFO] [stdout] test opponent_db::tests::missing_file_loads_empty ... ok
[INFO] [stdout] test online_book::tests::lichess_cloud_best_returns_first_pv_negated_for_black ... ok
[INFO] [stdout] test opponent_db::tests::ordinary_decline_does_not_block ... ok
[INFO] [stdout] test opponent_db::tests::onlybot_decline_also_blocks ... ok
[INFO] [stdout] test polyglot::tests::find_all_for_uses_polyglot_zobrist_of_start_position ... ok
[INFO] [stdout] test opponent_db::tests::recent_declines_returns_only_fresh_non_nobot_entries ... ok
[INFO] [stdout] test polyglot::tests::encode_move_matches_canonical_castle_vector ... ok
[INFO] [stdout] test opponent_db::tests::nobot_decline_sets_permanent_block ... ok
[INFO] [stdout] test polyglot::tests::get_book_move_skips_disabled_or_missing_variant ... ok
[INFO] [stdout] test polyglot::tests::get_book_move_respects_max_depth ... ok
[INFO] [stdout] test online_book::tests::chessdb_egtb_best_uses_score_to_wdl_mapping ... ok
[INFO] [stdout] test polyglot::tests::encode_move_roundtrips_through_decode_for_all_legal_moves ... ok
[INFO] [stdout] test polyglot::tests::get_book_move_returns_first_book_hit ... ok
[INFO] [stdout] test polyglot::tests::entry_roundtrip_through_bytes ... ok
[INFO] [stdout] test polyglot::tests::min_weight_threshold_handles_normalizations ... ok
[INFO] [stdout] test polyglot::tests::weighted_random_falls_back_to_uniform_on_all_zero_weights ... ok
[INFO] [stdout] test polyglot::tests::reader_finds_all_entries_for_key_via_binary_search ... ok
[INFO] [stdout] test polyglot::tests::get_book_move_walks_past_corrupt_first_book ... ok
[INFO] [stdout] test polyglot::tests::uniform_random_only_picks_above_threshold ... ok
[INFO] [stdout] test timer::tests::cross_unit_conversions_match_python ... ok
[INFO] [stdout] test online_book::tests::explorer_lichess_picks_most_played_above_min_games ... ok
[INFO] [stdout] test timer::tests::duration_helpers_round_trip ... ok
[INFO] [stdout] test timer::tests::zero_timer_is_immediately_expired ... ok
[INFO] [stdout] test timer::tests::msec_str_rounds_half_to_even_or_nearest ... ok
[INFO] [stdout] test timer::tests::time_until_expiration_saturates_at_zero ... ok
[INFO] [stdout] test timer::tests::timer_starts_unexpired_and_can_reset ... ok
[INFO] [stdout] test polyglot::tests::weighted_random_converges_towards_weight_distribution ... ok
[INFO] [stdout] test opponent_db::tests::history_is_capped ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 263 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/liru_bot-edc07f4a0edb764d)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests liru_bot
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "737c0239b5e9a6f02754bace0d3d06dccd6367d4b8bb8163379b19452b2cedde", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "737c0239b5e9a6f02754bace0d3d06dccd6367d4b8bb8163379b19452b2cedde", kill_on_drop: false }`
[INFO] [stdout] 737c0239b5e9a6f02754bace0d3d06dccd6367d4b8bb8163379b19452b2cedde
