[INFO] cloning repository https://github.com/materialcontext/spire-slayer
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/materialcontext/spire-slayer" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmaterialcontext%2Fspire-slayer", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmaterialcontext%2Fspire-slayer'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] b18ff854ec304d4dfc2976bc59911bc379a29df9
[INFO] testing materialcontext/spire-slayer against 1.99.0-beta.1+cargoflags=--release for beta-release-1.99-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmaterialcontext%2Fspire-slayer" "/workspace/builds/worker-7-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/materialcontext/spire-slayer
[INFO] finished tweaking git repo https://github.com/materialcontext/spire-slayer
[INFO] tweaked toml for git repo https://github.com/materialcontext/spire-slayer written to /workspace/builds/worker-7-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/materialcontext/spire-slayer on toolchain 1.99.0-beta.1
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/materialcontext/spire-slayer 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.99.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-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-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:8683fc1fc2eb5c9ac98e0d076ab094b2ffac7f99da555d2b6a2e27f346de2ec7" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] c57d5412a4afc9c52f589a94df276fdd43e60ef37342479745ead994ea06df87
[INFO] running `Command { std: "docker" "start" "c57d5412a4afc9c52f589a94df276fdd43e60ef37342479745ead994ea06df87", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "c57d5412a4afc9c52f589a94df276fdd43e60ef37342479745ead994ea06df87", 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" "c57d5412a4afc9c52f589a94df276fdd43e60ef37342479745ead994ea06df87" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "c57d5412a4afc9c52f589a94df276fdd43e60ef37342479745ead994ea06df87", 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" "c57d5412a4afc9c52f589a94df276fdd43e60ef37342479745ead994ea06df87" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.1" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling cc v1.2.62
[INFO] [stderr]    Compiling log v0.4.30
[INFO] [stderr]    Compiling rustls-pki-types v1.14.1
[INFO] [stderr]    Compiling either v1.16.0
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]    Compiling simd-adler32 v0.3.9
[INFO] [stderr]    Compiling bitflags v2.11.1
[INFO] [stderr]    Compiling instability v0.3.10
[INFO] [stderr]    Compiling rustls v0.23.40
[INFO] [stderr]    Compiling unicode-segmentation v1.13.2
[INFO] [stderr]    Compiling compact_str v0.8.2
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling memchr v2.8.1
[INFO] [stderr]    Compiling mio v1.2.0
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling rayon v1.12.0
[INFO] [stderr]    Compiling miniz_oxide v0.8.9
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]    Compiling signal-hook-mio v0.2.5
[INFO] [stderr]    Compiling webpki-roots v1.0.7
[INFO] [stderr]    Compiling rand v0.8.6
[INFO] [stderr]    Compiling webpki-roots v0.26.11
[INFO] [stderr]    Compiling serde_json v1.0.150
[INFO] [stderr]    Compiling flate2 v1.1.9
[INFO] [stderr]    Compiling crossterm v0.28.1
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling unicode-truncate v1.1.0
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling darling_core v0.20.11
[INFO] [stderr]    Compiling zerovec-derive v0.11.3
[INFO] [stderr]    Compiling displaydoc v0.2.6
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling zerofrom v0.1.8
[INFO] [stderr]    Compiling yoke v0.8.2
[INFO] [stderr]    Compiling strum v0.26.3
[INFO] [stderr]    Compiling zerovec v0.11.6
[INFO] [stderr]    Compiling zerotrie v0.2.4
[INFO] [stderr]    Compiling darling_macro v0.20.11
[INFO] [stderr]    Compiling darling v0.20.11
[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 ratatui v0.28.1
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling icu_provider v2.2.0
[INFO] [stderr]    Compiling icu_normalizer v2.2.0
[INFO] [stderr]    Compiling icu_properties v2.2.0
[INFO] [stderr]    Compiling idna_adapter v1.2.2
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling rustls-webpki v0.103.13
[INFO] [stderr]    Compiling ureq v2.12.1
[INFO] [stderr]    Compiling spire-slayer v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: methods `with_eternal`, `apply_enchantment`, and `reset_combat_enchantments` are never used
[INFO] [stdout]    --> src/domain/card.rs:141:12
[INFO] [stdout]     |
[INFO] [stdout]  88 | impl Card {
[INFO] [stdout]     | --------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn with_eternal(mut self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     pub fn apply_enchantment(&mut self, id: &str, amount: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 264 |     pub fn reset_combat_enchantments(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_imbued` is never used
[INFO] [stdout]     --> src/sim/apply.rs:1181:8
[INFO] [stdout]      |
[INFO] [stdout] 1181 | pub fn apply_imbued(state: &mut CombatState, rng: &mut impl Rng) {
[INFO] [stdout]      |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 44.01s
[INFO] running `Command { std: "docker" "inspect" "c57d5412a4afc9c52f589a94df276fdd43e60ef37342479745ead994ea06df87", 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" "c57d5412a4afc9c52f589a94df276fdd43e60ef37342479745ead994ea06df87" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json" "--release", 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 fastrand v2.4.1
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling spire-slayer v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: method `with_eternal` is never used
[INFO] [stdout]    --> src/domain/card.rs:141:12
[INFO] [stdout]     |
[INFO] [stdout]  88 | impl Card {
[INFO] [stdout]     | --------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn with_eternal(mut self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 11.23s
[INFO] running `Command { std: "docker" "inspect" "c57d5412a4afc9c52f589a94df276fdd43e60ef37342479745ead994ea06df87", 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" "c57d5412a4afc9c52f589a94df276fdd43e60ef37342479745ead994ea06df87" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.1" "test" "--frozen" "--release", kill_on_drop: false }`
[INFO] [stderr] warning: method `with_eternal` is never used
[INFO] [stderr]    --> src/domain/card.rs:141:12
[INFO] [stderr]     |
[INFO] [stderr]  88 | impl Card {
[INFO] [stderr]     | --------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 141 |     pub fn with_eternal(mut self) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: `spire-slayer` (bin "spire-slayer" test) generated 1 warning
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 0.08s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/release/deps/spire_slayer-a72077176871ea9d)
[INFO] [stdout] 
[INFO] [stdout] running 341 tests
[INFO] [stdout] test domain::ai::tests::build_ai_script_returns_none_without_pattern ... ok
[INFO] [stdout] test domain::ai::tests::conditional_state_parses_correctly ... ok
[INFO] [stdout] test domain::ai::tests::cycle_pattern_finds_initial_state ... ok
[INFO] [stdout] test domain::ai::tests::move_block_is_captured ... ok
[INFO] [stdout] test domain::ai::tests::parse_condition_ally_status ... ok
[INFO] [stdout] test domain::ai::tests::parse_condition_fabricator ... ok
[INFO] [stdout] test domain::ai::tests::parse_condition_hp_threshold ... ok
[INFO] [stdout] test domain::ai::tests::parse_condition_move_use_counters ... ok
[INFO] [stdout] test domain::ai::tests::parse_condition_slot ... ok
[INFO] [stdout] test domain::ai::tests::parse_condition_unknown_defaults_to_always_false ... ok
[INFO] [stdout] test domain::ai::tests::random_pattern_parses_branches ... ok
[INFO] [stdout] test domain::ai::tests::sleeping_monster_computes_wake_state ... ok
[INFO] [stdout] test domain::ai::tests::stub_states_are_skipped_and_real_random_state_wins ... ok
[INFO] [stdout] test domain::ancient::tests::glory_ancient_is_in_valid_set ... ok
[INFO] [stdout] test domain::ancient::tests::glory_no_darv_when_had_darv_act2 ... ok
[INFO] [stdout] test domain::ancient::tests::hive_ancient_is_in_valid_set ... ok
[INFO] [stdout] test domain::ancient::tests::neow_for_overgrowth ... ok
[INFO] [stdout] test domain::ancient::tests::neow_for_underdocks ... ok
[INFO] [stdout] test domain::ancient::tests::sample_boons_unknown_ancient_returns_empty ... ok
[INFO] [stdout] test domain::card::tests::base_damage_sums_effects ... ok
[INFO] [stdout] test domain::card::tests::strike_is_playable_with_enough_energy ... ok
[INFO] [stdout] test domain::card::tests::serialization_round_trip ... ok
[INFO] [stdout] test domain::combat::tests::loss_condition_player_dead ... ok
[INFO] [stdout] test domain::combat::tests::win_condition_all_enemies_dead ... ok
[INFO] [stdout] test domain::card::tests::status_cards_are_never_playable ... ok
[INFO] [stdout] test domain::effect::tests::buff_type_hash ... ok
[INFO] [stdout] test domain::encounter::tests::encounters_for_act_filter ... ok
[INFO] [stdout] test domain::effect::tests::damage_value_multi ... ok
[INFO] [stdout] test domain::ancient::tests::sample_boons_tezcatara_returns_up_to_3 ... ok
[INFO] [stdout] test domain::ancient::tests::sample_boons_nonupeipe_returns_up_to_3 ... ok
[INFO] [stdout] test domain::encounter::tests::map_intent_attack ... ok
[INFO] [stdout] test domain::encounter::tests::map_intent_debuff ... ok
[INFO] [stdout] test domain::encounter::tests::map_intent_escape ... ok
[INFO] [stdout] test domain::encounter::tests::map_intent_block ... ok
[INFO] [stdout] test domain::encounter::tests::map_intent_unknown ... ok
[INFO] [stdout] test domain::encounter::tests::monster_to_enemy_basic ... ok
[INFO] [stdout] test domain::ancient::tests::sample_boons_neow_returns_up_to_3 ... ok
[INFO] [stdout] test domain::encounter::tests::map_intent_multi ... ok
[INFO] [stdout] test domain::encounter::tests::normalize_act_variants ... ok
[INFO] [stdout] test domain::map::tests::all_connected_nodes_have_type ... ok
[INFO] [stdout] test domain::map::tests::choices_from_returns_next_nodes ... ok
[INFO] [stdout] test domain::map::tests::floor_zero_all_monsters ... ok
[INFO] [stdout] test domain::map::tests::last_floor_is_rest ... ok
[INFO] [stdout] test domain::map::tests::no_convergent_floor0_edges ... ok
[INFO] [stdout] test domain::map::tests::generates_correct_dimensions ... ok
[INFO] [stdout] test domain::map::tests::no_rest_on_floor_14 ... ok
[INFO] [stdout] test domain::map::tests::treasure_floor_correct ... ok
[INFO] [stdout] test domain::encounter::tests::map_intent_buff ... ok
[INFO] [stdout] test domain::map::tests::no_elite_on_early_floors ... ok
[INFO] [stdout] test domain::reward::tests::offset_increments_by_half_at_a7 ... ok
[INFO] [stdout] test domain::map::tests::at_least_two_entry_nodes ... ok
[INFO] [stdout] test domain::reward::tests::offset_increments_on_non_rare ... ok
[INFO] [stdout] test domain::map::tests::no_crossing_edges ... ok
[INFO] [stdout] test domain::reward::tests::offset_resets_to_minus5_after_rare ... ok
[INFO] [stdout] test domain::run::tests::display_player_class ... ok
[INFO] [stdout] test domain::combat::tests::new_combat_starts_correctly ... ok
[INFO] [stdout] test domain::run::tests::starting_relics_have_correct_ids ... ok
[INFO] [stdout] test domain::encounter::tests::encounter_to_combat_uses_max_hp ... ok
[INFO] [stdout] test input::event::tests::quit_event_debug ... ok
[INFO] [stdout] test input::event::tests::run_sim_event_debug ... ok
[INFO] [stdout] test input::event::tests::app_event_is_clone ... ok
[INFO] [stdout] test domain::reward::tests::boss_rewards_always_rare ... ok
[INFO] [stdout] test domain::catalog::tests::starter_deck_has_ten_cards ... ok
[INFO] [stdout] test input::manual::tests::enemy_intent_attack ... ok
[INFO] [stdout] test input::manual::tests::enemy_intent_attack_multi ... ok
[INFO] [stdout] test domain::catalog::tests::ironclad_cards_not_empty ... ok
[INFO] [stdout] test input::manual::tests::enemy_intent_block ... ok
[INFO] [stdout] test domain::run::tests::new_ironclad_run ... ok
[INFO] [stdout] test input::manual::tests::enemy_intent_buff ... ok
[INFO] [stdout] test input::manual::tests::enemy_intent_escape ... ok
[INFO] [stdout] test input::manual::tests::enemy_intent_unknown ... ok
[INFO] [stdout] test input::manual::tests::backspace_removes_char ... ok
[INFO] [stdout] test input::manual::tests::enemy_intent_invalid ... ok
[INFO] [stdout] test domain::run::tests::serialization_round_trip ... ok
[INFO] [stdout] test domain::reward::tests::offset_caps_at_40 ... ok
[INFO] [stdout] test domain::run::tests::has_relic_check ... ok
[INFO] [stdout] test metrics::card_pick::tests::all_cards_get_a_reason ... ok
[INFO] [stdout] test domain::reward::tests::sample_offer_returns_three_cards ... ok
[INFO] [stdout] test metrics::card_pick::tests::rare_scores_higher_than_basic ... ok
[INFO] [stdout] test input::manual::tests::complete_cycle_ends_at_done ... ok
[INFO] [stdout] test domain::reward::tests::first_reward_cannot_be_rare_for_monster ... ok
[INFO] [stdout] test domain::reward::tests::elite_has_higher_rare_chance_than_monster ... ok
[INFO] [stdout] test domain::encounter::tests::encounter_fallback_when_monster_not_found ... ok
[INFO] [stdout] test input::manual::tests::enemy_hp_field ... ok
[INFO] [stdout] test metrics::card_pick::tests::results_sorted_descending ... ok
[INFO] [stdout] test metrics::card_pick::tests::score_single_positive ... ok
[INFO] [stdout] test metrics::combat::tests::effective_block_base ... ok
[INFO] [stdout] test metrics::combat::tests::effective_block_frail_rounds_down ... ok
[INFO] [stdout] test metrics::combat::tests::effective_block_with_dexterity ... ok
[INFO] [stdout] test domain::catalog::tests::starter_deck_composition ... ok
[INFO] [stdout] test metrics::combat::tests::effective_damage_with_strength ... ok
[INFO] [stdout] test metrics::combat::tests::effective_damage_weak_rounds_down ... ok
[INFO] [stdout] test metrics::combat::tests::incoming_damage_single_enemy ... ok
[INFO] [stdout] test input::manual::tests::next_field_skips_without_committing ... ok
[INFO] [stdout] test metrics::combat::tests::is_lethal_turn_detects_death ... ok
[INFO] [stdout] test metrics::combat::tests::is_not_lethal_with_enough_block ... ok
[INFO] [stdout] test metrics::combat::tests::survivability_full_hp ... ok
[INFO] [stdout] test metrics::deck::tests::attack_ratio_all_attacks ... ok
[INFO] [stdout] test metrics::deck::tests::deck_score_empty_is_zero ... ok
[INFO] [stdout] test metrics::deck::tests::deck_score_not_zero_for_normal_deck ... ok
[INFO] [stdout] test metrics::deck::tests::has_block_density_false ... ok
[INFO] [stdout] test metrics::combat::tests::threat_score_proportional ... ok
[INFO] [stdout] test metrics::deck::tests::has_block_density_true ... ok
[INFO] [stdout] test metrics::deck::tests::mean_cost_basic ... ok
[INFO] [stdout] test input::manual::tests::energy_pair ... ok
[INFO] [stdout] test metrics::deck::tests::mean_cost_excludes_unplayable ... ok
[INFO] [stdout] test metrics::combat::tests::effective_damage_base ... ok
[INFO] [stdout] test input::manual::tests::player_hp_pair ... ok
[INFO] [stdout] test metrics::combat::tests::incoming_damage_with_player_vulnerable ... ok
[INFO] [stdout] test metrics::combat::tests::effective_damage_multi_hit_applies_strength_per_hit ... ok
[INFO] [stdout] test metrics::deck::tests::synergy_damage_amp_axis ... ok
[INFO] [stdout] test metrics::deck::tests::synergy_draw_engine ... ok
[INFO] [stdout] test metrics::combat::tests::effective_damage_vulnerable_rounds_down ... ok
[INFO] [stdout] test metrics::deck::tests::synergy_empty_deck ... ok
[INFO] [stdout] test input::manual::tests::player_hp_single_value ... ok
[INFO] [stdout] test metrics::deck::tests::synergy_no_overlap ... ok
[INFO] [stdout] test metrics::card_pick::tests::sim_pick_includes_skip_option ... ok
[INFO] [stdout] test metrics::card_pick::tests::sim_pick_sorted_descending ... ok
[INFO] [stdout] test metrics::deck::tests::synergy_two_blockers ... ok
[INFO] [stdout] test domain::combat::tests::total_cards_counts_all_zones ... ok
[INFO] [stdout] test metrics::deck_dash::tests::dist_bar_all_zero ... ok
[INFO] [stdout] test metrics::deck_dash::tests::dist_bar_smoke ... ok
[INFO] [stdout] test input::manual::tests::turn_field ... ok
[INFO] [stdout] test domain::run::tests::smith_upgrades_card_and_prevents_double_upgrade ... ok
[INFO] [stdout] test metrics::event::tests::empty_options_returns_empty ... ok
[INFO] [stdout] test metrics::event::tests::curse_ranks_last ... ok
[INFO] [stdout] test metrics::event::tests::heal_preferred_at_low_hp ... ok
[INFO] [stdout] test metrics::event::tests::relic_ranks_high ... ok
[INFO] [stdout] test metrics::event::tests::sorted_descending ... ok
[INFO] [stdout] test metrics::card_pick::tests::sim_pick_fallback_when_no_encounters ... ok
[INFO] [stdout] test metrics::map_ev::tests::events_for_sub_act_excludes_act_gated_shared_events ... ok
[INFO] [stdout] test metrics::map_ev::tests::events_for_sub_act_includes_shared ... ok
[INFO] [stdout] test metrics::map_ev::tests::parse_card_removal ... ok
[INFO] [stdout] test metrics::map_ev::tests::parse_card_upgrade ... ok
[INFO] [stdout] test metrics::map_ev::tests::parse_curse_added ... ok
[INFO] [stdout] test metrics::map_ev::tests::parse_curse_wound ... ok
[INFO] [stdout] test metrics::map_ev::tests::parse_gold_gain ... ok
[INFO] [stdout] test metrics::map_ev::tests::parse_damage_taken ... ok
[INFO] [stdout] test metrics::map_ev::tests::parse_heal_hp ... ok
[INFO] [stdout] test metrics::map_ev::tests::parse_no_keywords_returns_zero ... ok
[INFO] [stdout] test metrics::map_ev::tests::parse_relic_and_damage ... ok
[INFO] [stdout] test metrics::map_ev::tests::parse_relic_reward ... ok
[INFO] [stdout] test metrics::map_ev::tests::strip_tags_removes_colour_codes ... ok
[INFO] [stdout] test metrics::map_ev::tests::upgrade_card_copy_boosts_block ... ok
[INFO] [stdout] test metrics::map_ev::tests::upgrade_card_copy_boosts_damage ... ok
[INFO] [stdout] test metrics::map_ev::tests::upgrade_card_copy_returns_none_for_passive ... ok
[INFO] [stdout] test metrics::path_ev::tests::best_has_highest_delta ... ok
[INFO] [stdout] test metrics::path_ev::tests::ascension3_reduces_gold ... ok
[INFO] [stdout] test metrics::path_ev::tests::empty_choices_returns_empty ... ok
[INFO] [stdout] test metrics::path_ev::tests::entry_choices_have_finite_deltas ... ok
[INFO] [stdout] test metrics::path_ev::tests::exactly_one_best_marked ... ok
[INFO] [stdout] test metrics::path_ev::tests::expected_gold_is_positive ... ok
[INFO] [stdout] test metrics::path_ev::tests::out_of_bounds_floor_returns_empty ... ok
[INFO] [stdout] test metrics::path_sim::tests::credit_hp_capped_at_max ... ok
[INFO] [stdout] test metrics::path_ev::tests::rest_site_improves_delta ... ok
[INFO] [stdout] test metrics::potion_ev::tests::fairy_never_recommended ... ok
[INFO] [stdout] test metrics::potion_ev::tests::offensive_potion_not_recommended_vs_normal ... ok
[INFO] [stdout] test metrics::potion_ev::tests::offensive_potion_recommended_vs_boss ... ok
[INFO] [stdout] test metrics::deck_dash::tests::intrinsics_no_encounters ... ok
[INFO] [stdout] test metrics::deck_dash::tests::block_card_count_correct ... ok
[INFO] [stdout] test metrics::run_ev::tests::acts_after_act1_is_hive_and_glory ... ok
[INFO] [stdout] test metrics::map_ev::tests::compute_map_ev_no_data ... ok
[INFO] [stdout] test metrics::run_ev::tests::act_number_correct ... ok
[INFO] [stdout] test metrics::run_ev::tests::acts_after_hive_is_glory_only ... ok
[INFO] [stdout] test metrics::run_ev::tests::estimate_act_delta_is_finite ... ok
[INFO] [stdout] test metrics::run_ev::tests::post_act_heal_ascension_thresholds ... ok
[INFO] [stdout] test metrics::run_ev::tests::acts_after_glory_is_empty ... ok
[INFO] [stdout] test metrics::rest::tests::empty_deck_falls_back_to_heal ... ok
[INFO] [stdout] test metrics::rest::tests::high_hp_recommends_smith ... ok
[INFO] [stdout] test metrics::rest::tests::low_hp_recommends_heal ... ok
[INFO] [stdout] test metrics::path_sim::tests::remove_worst_card_shrinks_deck ... ok
[INFO] [stdout] test metrics::path_sim::tests::sim_combat_loss_capped_at_entry_hp ... ok
[INFO] [stdout] test metrics::run_ev::tests::run_ev_from_glory_has_no_future_acts ... ok
[INFO] [stdout] test metrics::path_sim::tests::blind_card_pick_grows_deck ... ok
[INFO] [stdout] test metrics::run_ev::tests::run_ev_from_hive_has_one_future_act ... ok
[INFO] [stdout] test metrics::run_ev::tests::last_future_act_has_no_post_heal ... ok
[INFO] [stdout] test metrics::path_sim::tests::no_encounters_uses_defaults_and_does_not_panic ... ok
[INFO] [stdout] test metrics::run_ev::tests::projected_death_short_circuits ... ok
[INFO] [stdout] test metrics::path_sim::tests::projection_count_matches_choices ... ok
[INFO] [stdout] test metrics::rest::tests::smith_prefers_attacks ... ok
[INFO] [stdout] test sim::apply::tests::adroit_adds_block ... ok
[INFO] [stdout] test metrics::run_ev::tests::glory_has_no_post_act_heal ... ok
[INFO] [stdout] test sim::apply::tests::anchor_grants_10_block_at_start_of_combat ... ok
[INFO] [stdout] test sim::apply::tests::barricade_preserves_player_block_between_turns ... ok
[INFO] [stdout] test sim::apply::tests::bash_applies_damage_and_vulnerable ... ok
[INFO] [stdout] test sim::apply::tests::apply_imbued_plays_imbued_card_at_combat_start ... ok
[INFO] [stdout] test sim::apply::tests::both_spent_means_death ... ok
[INFO] [stdout] test sim::apply::tests::block_absorbs_damage ... ok
[INFO] [stdout] test metrics::run_ev::tests::run_ev_from_overgrowth_has_two_future_acts ... ok
[INFO] [stdout] test metrics::path_sim::tests::dead_choice_has_zero_boss_entry ... ok
[INFO] [stdout] test metrics::shop_ev::tests::relic_heuristic_fallback_common ... ok
[INFO] [stdout] test sim::apply::tests::combat_won_when_all_enemies_dead ... ok
[INFO] [stdout] test sim::apply::tests::damage_eq_block_deals_current_block_as_damage ... ok
[INFO] [stdout] test metrics::shop_ev::tests::shop_total_value_zero_gold ... ok
[INFO] [stdout] test sim::apply::tests::damage_eq_block_uses_strength ... ok
[INFO] [stdout] test metrics::shop_ev::tests::removal_hp_no_data_no_curse ... ok
[INFO] [stdout] test sim::apply::tests::damage_eq_block_zero_block_deals_no_damage ... ok
[INFO] [stdout] test metrics::shop_ev::tests::relic_heuristic_fallback_rare ... ok
[INFO] [stdout] test sim::apply::tests::defend_gives_block ... ok
[INFO] [stdout] test metrics::shop_ev::tests::shop_total_picks_highest_ratio_first ... ok
[INFO] [stdout] test sim::apply::tests::draw_cards_basic ... ok
[INFO] [stdout] test sim::apply::tests::draw_shuffles_discard_when_empty ... ok
[INFO] [stdout] test metrics::shop_ev::tests::shop_total_value_card_only ... ok
[INFO] [stdout] test sim::apply::tests::end_turn_draws_five_cards ... ok
[INFO] [stdout] test sim::apply::tests::end_turn_enemy_attacks_player ... ok
[INFO] [stdout] test sim::apply::tests::end_turn_player_block_absorbs ... ok
[INFO] [stdout] test sim::apply::tests::end_turn_ethereal_cards_exhaust ... ok
[INFO] [stdout] test sim::apply::tests::end_turn_resets_energy_and_advances_turn ... ok
[INFO] [stdout] test metrics::run_ev::tests::run_ev_from_underdocks_same_as_overgrowth_structure ... ok
[INFO] [stdout] test sim::apply::tests::eternal_card_returns_to_hand_after_play ... ok
[INFO] [stdout] test sim::apply::tests::fairy_triggers_before_lizard_tail ... ok
[INFO] [stdout] test sim::apply::tests::innate_card_always_in_opening_hand ... ok
[INFO] [stdout] test sim::apply::tests::goopy_increases_block_each_play ... ok
[INFO] [stdout] test sim::apply::tests::instinct_doubles_damage ... ok
[INFO] [stdout] test sim::apply::tests::insufficient_energy_errors ... ok
[INFO] [stdout] test sim::apply::tests::innate_reduces_regular_draw_count ... ok
[INFO] [stdout] test metrics::shop_ev::tests::removal_hp_no_data_with_curse ... ok
[INFO] [stdout] test metrics::shop_ev::tests::shop_total_value_ample_gold_covers_all ... ok
[INFO] [stdout] test sim::apply::tests::intangible_caps_incoming_damage_to_1 ... ok
[INFO] [stdout] test sim::apply::tests::intangible_decrements_each_turn ... ok
[INFO] [stdout] test sim::apply::tests::invalid_card_index_errors ... ok
[INFO] [stdout] test sim::apply::tests::lizard_tail_saves_from_lethal_damage ... ok
[INFO] [stdout] test sim::apply::tests::noxious_fumes_applies_poison_at_start_of_turn ... ok
[INFO] [stdout] test sim::apply::tests::lizard_tail_triggers_after_fairy_is_spent ... ok
[INFO] [stdout] test sim::apply::tests::nunchaku_grants_energy_on_10th_attack ... ok
[INFO] [stdout] test sim::apply::tests::momentum_increases_damage_each_play ... ok
[INFO] [stdout] test sim::apply::tests::orichalcum_skips_if_already_have_block ... ok
[INFO] [stdout] test sim::apply::tests::orichalcum_absorbs_enemy_damage_when_zero_block ... ok
[INFO] [stdout] test sim::apply::tests::paper_krane_amplifies_weak_penalty ... ok
[INFO] [stdout] test sim::apply::tests::poison_ticks_on_end_turn ... ok
[INFO] [stdout] test sim::apply::tests::lizard_tail_triggers_only_once ... ok
[INFO] [stdout] test sim::apply::tests::red_skull_adds_strength_at_half_hp ... ok
[INFO] [stdout] test sim::apply::tests::red_skull_inactive_above_half_hp ... ok
[INFO] [stdout] test sim::apply::tests::paper_phrog_amplifies_vulnerable_more ... ok
[INFO] [stdout] test sim::apply::tests::nimble_boosts_block ... ok
[INFO] [stdout] test sim::apply::tests::replay_glam_applies_effects_twice_first_play ... ok
[INFO] [stdout] test sim::apply::tests::replay_glam_does_nothing_when_target_dead ... ok
[INFO] [stdout] test sim::apply::tests::reset_combat_enchantments_restores_flags ... ok
[INFO] [stdout] test sim::apply::tests::retain_card_stays_in_hand_after_turn ... ok
[INFO] [stdout] test sim::apply::tests::royally_approved_sets_innate_and_retain ... ok
[INFO] [stdout] test sim::apply::tests::replay_glam_does_not_replay_second_play ... ok
[INFO] [stdout] test sim::apply::tests::sharp_increases_damage ... ok
[INFO] [stdout] test sim::apply::tests::slither_randomizes_cost_on_draw ... ok
[INFO] [stdout] test sim::apply::tests::perfect_fit_moves_to_top_after_shuffle ... ok
[INFO] [stdout] test sim::apply::tests::slumber_reduces_cost_each_turn_in_hand ... ok
[INFO] [stdout] test sim::apply::tests::slumber_resets_cost_on_play ... ok
[INFO] [stdout] test sim::apply::tests::souls_power_removes_exhaust ... ok
[INFO] [stdout] test sim::apply::tests::sown_grants_energy_first_play_only ... ok
[INFO] [stdout] test sim::apply::tests::steady_sets_retain ... ok
[INFO] [stdout] test sim::apply::tests::strength_adds_per_hit_on_multi ... ok
[INFO] [stdout] test sim::apply::tests::strike_deals_correct_damage ... ok
[INFO] [stdout] test sim::apply::tests::swift_draws_cards_first_play_only ... ok
[INFO] [stdout] test sim::apply::tests::tezcataras_ember_sets_cost_zero_and_eternal ... ok
[INFO] [stdout] test sim::apply::tests::thorns_damages_attacker ... ok
[INFO] [stdout] test sim::apply::tests::tungsten_rod_reduces_each_hit_by_1 ... ok
[INFO] [stdout] test sim::apply::tests::vigorous_deals_bonus_damage_first_play_only ... ok
[INFO] [stdout] test sim::apply::tests::vulnerable_amplifies_next_attack ... ok
[INFO] [stdout] test sim::apply::tests::vulnerable_decrements_each_turn ... ok
[INFO] [stdout] test sim::apply::tests::weak_decrements_on_player ... ok
[INFO] [stdout] test sim::apply::tests::wound_is_not_playable ... ok
[INFO] [stdout] test sim::apply::tests::without_barricade_block_is_reset ... ok
[INFO] [stdout] test sim::mcts::tests::empty_hand_returns_no_action_advice ... ok
[INFO] [stdout] test sim::mcts::tests::evaluate_actions_replays_correct_cards ... ok
[INFO] [stdout] test sim::mcts::tests::is_single_target_damage_correct ... ok
[INFO] [stdout] test sim::mcts::tests::multi_enemy_targeting_generates_branched_actions ... ok
[INFO] [stdout] test sim::mcts::tests::percentile_helper ... ok
[INFO] [stdout] test sim::mcts::tests::four_cost_card_not_available_with_three_energy ... ok
[INFO] [stdout] test sim::playout::tests::playout_n_win_rate_one_shot_enemy ... ok
[INFO] [stdout] test sim::playout::tests::playout_combat_over_when_enemy_killed ... ok
[INFO] [stdout] test sim::playout::tests::playout_deals_damage ... ok
[INFO] [stdout] test sim::mcts::tests::x_cost_card_is_always_playable_with_any_energy ... ok
[INFO] [stdout] test sim::playout::tests::playout_tracks_block_gained ... ok
[INFO] [stdout] test sim::playout::tests::run_combat_multi_turn_kill ... ok
[INFO] [stdout] test sim::playout::tests::run_combat_hp_delta_accumulates ... ok
[INFO] [stdout] test sim::mcts::tests::x_cost_card_not_playable_with_zero_energy ... ok
[INFO] [stdout] test sim::playout::tests::run_combat_draws_opening_hand_when_empty ... ok
[INFO] [stdout] test sim::playout::tests::playout_player_takes_net_damage_after_block ... ok
[INFO] [stdout] test sim::playout::tests::playout_actions_recorded ... ok
[INFO] [stdout] test sim::playout::tests::playout_n_aggregates_correctly ... ok
[INFO] [stdout] test sim::policy::tests::card_value_draw_beats_small_damage ... ok
[INFO] [stdout] test sim::playout::tests::run_combat_player_dies ... ok
[INFO] [stdout] test sim::playout::tests::run_combat_one_shot_kill ... ok
[INFO] [stdout] test sim::policy::tests::card_value_energy_gain_is_high ... ok
[INFO] [stdout] test sim::policy::tests::greedy_attacks_when_threat_not_lethal ... ok
[INFO] [stdout] test sim::playout::tests::playout_empty_hand_returns_zero_damage ... ok
[INFO] [stdout] test sim::policy::tests::greedy_picks_highest_damage ... ok
[INFO] [stdout] test sim::policy::tests::greedy_returns_none_when_no_energy ... ok
[INFO] [stdout] test sim::policy::tests::greedy_blocks_when_lethal_threat ... ok
[INFO] [stdout] test sim::policy::tests::select_target_picks_lowest_hp_enemy ... ok
[INFO] [stdout] test sim::policy::tests::sequential_picks_first_playable ... ok
[INFO] [stdout] test telemetry::log::tests::act_complete_roundtrip ... ok
[INFO] [stdout] test telemetry::log::tests::logger_appends_on_reopen ... ok
[INFO] [stdout] test telemetry::log::tests::logger_writes_two_lines ... ok
[INFO] [stdout] test sim::mcts::tests::one_shot_kill_is_recommended ... ok
[INFO] [stdout] test telemetry::log::tests::map_decision_roundtrip ... ok
[INFO] [stdout] test telemetry::log::tests::run_complete_roundtrip ... ok
[INFO] [stdout] test telemetry::residual::tests::error_sign_convention ... ok
[INFO] [stdout] test sim::mcts::tests::single_card_hand_plays_it ... ok
[INFO] [stdout] test telemetry::residual::tests::overall_summary_aggregates_all ... ok
[INFO] [stdout] test sim::mcts::tests::advice_has_non_empty_rationale ... ok
[INFO] [stdout] test sim::mcts::tests::budget_auto_scales_for_simple_hands ... ok
[INFO] [stdout] test telemetry::residual::tests::overall_summary_empty_returns_none ... ok
[INFO] [stdout] test telemetry::residual::tests::residual_serialization_roundtrip ... ok
[INFO] [stdout] test telemetry::residual::tests::summary_for_missing_act_returns_none ... ok
[INFO] [stdout] test telemetry::residual::tests::sub_acts_deduplicated ... ok
[INFO] [stdout] test telemetry::residual::tests::summary_for_single_act ... ok
[INFO] [stdout] test sim::mcts::tests::hp_loss_percentiles_are_non_negative_and_ordered ... ok
[INFO] [stdout] test sim::mcts::tests::bash_then_strike_outscores_strike_then_bash ... ok
[INFO] [stdout] test tui::app::tests::act_filter_keys_change_filter ... ok
[INFO] [stdout] test tui::app::tests::j_k_navigation_in_encounter_list ... ok
[INFO] [stdout] test tui::app::tests::new_app_starts_in_character_pick ... ok
[INFO] [stdout] test tui::app::tests::quit_key_returns_false ... ok
[INFO] [stdout] test tui::app::tests::tick_is_noop ... ok
[INFO] [stdout] test tui::ui::tests::render_ancient_boon_does_not_panic ... ok
[INFO] [stdout] test tui::ui::tests::render_calibration_with_data_does_not_panic ... ok
[INFO] [stdout] test tui::ui::tests::render_calibration_empty_does_not_panic ... ok
[INFO] [stdout] test sim::mcts::tests::simulation_count_reflects_parallel_rollouts ... ok
[INFO] [stdout] test tui::ui::tests::render_encounter_pick_does_not_panic ... ok
[INFO] [stdout] test tui::app::tests::encounter_selected_loads_combat ... ok
[INFO] [stdout] test tui::app::tests::edit_key_goes_to_manual_input ... ok
[INFO] [stdout] test tui::app::tests::enter_with_no_encounters_falls_back_to_default ... ok
[INFO] [stdout] test tui::ui::tests::render_character_pick_does_not_panic ... ok
[INFO] [stdout] test tui::ui::tests::render_encounter_with_data_does_not_panic ... ok
[INFO] [stdout] test tui::ui::tests::render_rest_site_does_not_panic ... ok
[INFO] [stdout] test tui::app::tests::card_pick_from_map_adds_to_deck ... ok
[INFO] [stdout] test tui::app::tests::load_combat_transitions_to_combat_advice ... ok
[INFO] [stdout] test tui::app::tests::card_pick_from_combat_does_not_modify_deck ... ok
[INFO] [stdout] test tui::ui::tests::render_treasure_room_does_not_panic ... ok
[INFO] [stdout] test tui::ui::tests::render_statistics_does_not_panic ... ok
[INFO] [stdout] test tui::ui::tests::render_event_room_does_not_panic ... ok
[INFO] [stdout] test tui::app::tests::card_pick_skip_does_not_add_to_deck ... ok
[INFO] [stdout] test tui::app::tests::n_key_returns_to_encounter_pick ... ok
[INFO] [stdout] test tui::ui::tests::render_combat_advice_does_not_panic ... ok
[INFO] [stdout] test tui::ui::tests::render_map_view_does_not_panic ... ok
[INFO] [stdout] test tui::ui::tests::render_victory_does_not_panic ... ok
[INFO] [stdout] test tui::ui::tests::render_deck_dash_does_not_panic ... ok
[INFO] [stdout] test tui::ui::tests::render_shop_does_not_panic ... ok
[INFO] [stdout] test tui::ui::tests::render_manual_input_does_not_panic ... ok
[INFO] [stdout] test tui::ui::tests::render_map_ev_does_not_panic ... ok
[INFO] [stdout] test tui::app::tests::simulate_produces_advice ... ok
[INFO] [stdout] test tui::ui::tests::render_combat_after_sim_does_not_panic ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 341 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "c57d5412a4afc9c52f589a94df276fdd43e60ef37342479745ead994ea06df87", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "c57d5412a4afc9c52f589a94df276fdd43e60ef37342479745ead994ea06df87", kill_on_drop: false }`
[INFO] [stdout] c57d5412a4afc9c52f589a94df276fdd43e60ef37342479745ead994ea06df87
