[INFO] cloning repository https://github.com/zzhgithub/card_v3
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/zzhgithub/card_v3" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fzzhgithub%2Fcard_v3", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fzzhgithub%2Fcard_v3'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] e6c13ac8bb077b7a520a5ddc99e3b02b0bf70a2f
[INFO] testing zzhgithub/card_v3 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%2Fzzhgithub%2Fcard_v3" "/workspace/builds/worker-3-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/zzhgithub/card_v3
[INFO] finished tweaking git repo https://github.com/zzhgithub/card_v3
[INFO] tweaked toml for git repo https://github.com/zzhgithub/card_v3 written to /workspace/builds/worker-3-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/zzhgithub/card_v3 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/zzhgithub/card_v3 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-3-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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] fe7c5a92008388b933170555d31c4f233fbc52f11af88cd1695ee4bce4b1b6d7
[INFO] running `Command { std: "docker" "start" "fe7c5a92008388b933170555d31c4f233fbc52f11af88cd1695ee4bce4b1b6d7", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "fe7c5a92008388b933170555d31c4f233fbc52f11af88cd1695ee4bce4b1b6d7", 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" "fe7c5a92008388b933170555d31c4f233fbc52f11af88cd1695ee4bce4b1b6d7" "/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" "fe7c5a92008388b933170555d31c4f233fbc52f11af88cd1695ee4bce4b1b6d7", 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" "fe7c5a92008388b933170555d31c4f233fbc52f11af88cd1695ee4bce4b1b6d7" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.183
[INFO] [stderr]    Compiling zerocopy v0.8.42
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling bitflags v2.11.0
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling lock_api v0.4.14
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling cc v1.2.56
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling env_home v0.1.0
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling futures-sink v0.3.32
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling futures-core v0.3.32
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling erased-serde v0.4.10
[INFO] [stderr]    Compiling data-encoding v2.10.0
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling futures-channel v0.3.32
[INFO] [stderr]    Compiling sha1 v0.10.6
[INFO] [stderr]    Compiling lua-src v547.0.0
[INFO] [stderr]    Compiling ordered-float v2.10.1
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling socket2 v0.6.3
[INFO] [stderr]    Compiling mio v1.1.1
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling rand_core v0.9.5
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling uuid v1.23.0
[INFO] [stderr]    Compiling which v7.0.3
[INFO] [stderr]    Compiling luajit-src v210.5.12+a4f56a4
[INFO] [stderr]    Compiling mlua-sys v0.6.8
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling tokio-macros v2.6.1
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling tokio v1.50.0
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling rand v0.9.2
[INFO] [stderr]    Compiling tungstenite v0.26.2
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling chrono v0.4.44
[INFO] [stderr]    Compiling bstr v1.12.1
[INFO] [stderr]    Compiling bincode v1.3.3
[INFO] [stderr]    Compiling serde-value v0.7.0
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling card-core v0.1.0 (/opt/rustwide/workdir/crates/card-core)
[INFO] [stderr]    Compiling tokio-tungstenite v0.26.2
[INFO] [stderr]    Compiling card-protocol v0.1.0 (/opt/rustwide/workdir/crates/card-protocol)
[INFO] [stdout] warning: unused import: `CardId`
[INFO] [stdout]   --> crates/card-protocol/src/message.rs:10:24
[INFO] [stdout]    |
[INFO] [stdout] 10 | use card_core::types::{CardId, EffectKey, InstanceId, PlayerId, TargetRef, Zone, ZoneLocation};
[INFO] [stdout]    |                        ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling card-matchmaker v0.1.0 (/opt/rustwide/workdir/crates/card-matchmaker)
[INFO] [stderr]    Compiling card-client v0.1.0 (/opt/rustwide/workdir/crates/card-client)
[INFO] [stderr]    Compiling card-effect-cli v0.1.0 (/opt/rustwide/workdir/crates/card-effect-cli)
[INFO] [stderr]    Compiling mlua v0.10.5
[INFO] [stderr]    Compiling card-script v0.1.0 (/opt/rustwide/workdir/crates/card-script)
[INFO] [stderr]    Compiling card-server v0.1.0 (/opt/rustwide/workdir/crates/card-server)
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> crates/card-server/src/room.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RecoveryCardOption`
[INFO] [stdout]  --> crates/card-server/src/room.rs:8:45
[INFO] [stdout]   |
[INFO] [stdout] 8 | use card_core::engine::phase::{PhaseAction, RecoveryCardOption};
[INFO] [stdout]   |                                             ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Condvar` and `Mutex as StdMutex`
[INFO] [stdout]  --> crates/card-server/src/game_starter.rs:6:22
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::sync::{Arc, Condvar, Mutex as StdMutex};
[INFO] [stdout]   |                      ^^^^^^^  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CardType`, `Category`, `ItemKind`, `Property`, and `StrategyKind`
[INFO] [stdout]    --> crates/card-server/src/game_starter.rs:623:28
[INFO] [stdout]     |
[INFO] [stdout] 623 |     use card_core::types::{CardType, Category, EffectKey, ItemKind, Property, StrategyKind};
[INFO] [stdout]     |                            ^^^^^^^^  ^^^^^^^^             ^^^^^^^^  ^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player_id`
[INFO] [stdout]    --> crates/card-server/src/room.rs:140:57
[INFO] [stdout]     |
[INFO] [stdout] 140 |     pub async fn query_room_state(&self, room_id: &str, player_id: PlayerId) -> Result<(Vec<(String, bool, Option<String>)>, bool)> {
[INFO] [stdout]     |                                                         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_player_id`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `clone_room` is never used
[INFO] [stdout]    --> crates/card-server/src/room.rs:513:8
[INFO] [stdout]     |
[INFO] [stdout] 367 | impl Room {
[INFO] [stdout]     | --------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 513 |     fn clone_room(&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 `dev` profile [unoptimized + debuginfo] target(s) in 46.22s
[INFO] running `Command { std: "docker" "inspect" "fe7c5a92008388b933170555d31c4f233fbc52f11af88cd1695ee4bce4b1b6d7", 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" "fe7c5a92008388b933170555d31c4f233fbc52f11af88cd1695ee4bce4b1b6d7" "/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 card-protocol v0.1.0 (/opt/rustwide/workdir/crates/card-protocol)
[INFO] [stdout] warning: unused import: `CardId`
[INFO] [stdout]   --> crates/card-protocol/src/message.rs:10:24
[INFO] [stdout]    |
[INFO] [stdout] 10 | use card_core::types::{CardId, EffectKey, InstanceId, PlayerId, TargetRef, Zone, ZoneLocation};
[INFO] [stdout]    |                        ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling card-effect-cli v0.1.0 (/opt/rustwide/workdir/crates/card-effect-cli)
[INFO] [stderr]    Compiling card-core v0.1.0 (/opt/rustwide/workdir/crates/card-core)
[INFO] [stderr]    Compiling card-client v0.1.0 (/opt/rustwide/workdir/crates/card-client)
[INFO] [stderr]    Compiling card-script v0.1.0 (/opt/rustwide/workdir/crates/card-script)
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> crates/card-server/src/room.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RecoveryCardOption`
[INFO] [stdout]  --> crates/card-server/src/room.rs:8:45
[INFO] [stdout]   |
[INFO] [stdout] 8 | use card_core::engine::phase::{PhaseAction, RecoveryCardOption};
[INFO] [stdout]   |                                             ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Condvar` and `Mutex as StdMutex`
[INFO] [stdout]  --> crates/card-server/src/game_starter.rs:6:22
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::sync::{Arc, Condvar, Mutex as StdMutex};
[INFO] [stdout]   |                      ^^^^^^^  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CardType`, `Category`, `ItemKind`, `Property`, and `StrategyKind`
[INFO] [stdout]    --> crates/card-server/src/game_starter.rs:623:28
[INFO] [stdout]     |
[INFO] [stdout] 623 |     use card_core::types::{CardType, Category, EffectKey, ItemKind, Property, StrategyKind};
[INFO] [stdout]     |                            ^^^^^^^^  ^^^^^^^^             ^^^^^^^^  ^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player_id`
[INFO] [stdout]    --> crates/card-server/src/room.rs:140:57
[INFO] [stdout]     |
[INFO] [stdout] 140 |     pub async fn query_room_state(&self, room_id: &str, player_id: PlayerId) -> Result<(Vec<(String, bool, Option<String>)>, bool)> {
[INFO] [stdout]     |                                                         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_player_id`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `clone_room` is never used
[INFO] [stdout]    --> crates/card-server/src/room.rs:513:8
[INFO] [stdout]     |
[INFO] [stdout] 367 | impl Room {
[INFO] [stdout]     | --------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 513 |     fn clone_room(&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]    Compiling card-server v0.1.0 (/opt/rustwide/workdir/crates/card-server)
[INFO] [stderr]    Compiling card-matchmaker v0.1.0 (/opt/rustwide/workdir/crates/card-matchmaker)
[INFO] [stdout] warning: unused imports: `PlayerAction` and `RoomMessage`
[INFO] [stdout]   --> crates/card-server/tests/room_websocket_test.rs:16:56
[INFO] [stdout]    |
[INFO] [stdout] 16 | use card_server::{RoomManager, WebSocketServer, room::{RoomMessage, PlayerAction, VisibleGameState}};
[INFO] [stdout]    |                                                        ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CardId`
[INFO] [stdout]   --> crates/card-protocol/src/message.rs:10:24
[INFO] [stdout]    |
[INFO] [stdout] 10 | use card_core::types::{CardId, EffectKey, InstanceId, PlayerId, TargetRef, Zone, ZoneLocation};
[INFO] [stdout]    |                        ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `server`
[INFO] [stdout]   --> crates/card-server/tests/room_websocket_test.rs:89:9
[INFO] [stdout]    |
[INFO] [stdout] 89 |     let server = WebSocketServer::new(room_manager, bind_addr);
[INFO] [stdout]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_server`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bind_addr`
[INFO] [stdout]    --> crates/card-server/tests/room_websocket_test.rs:121:9
[INFO] [stdout]     |
[INFO] [stdout] 121 |     let bind_addr: SocketAddr = "127.0.0.1:7878".parse().unwrap();
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bind_addr`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> crates/card-server/src/room.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RecoveryCardOption`
[INFO] [stdout]  --> crates/card-server/src/room.rs:8:45
[INFO] [stdout]   |
[INFO] [stdout] 8 | use card_core::engine::phase::{PhaseAction, RecoveryCardOption};
[INFO] [stdout]   |                                             ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Condvar` and `Mutex as StdMutex`
[INFO] [stdout]  --> crates/card-server/src/game_starter.rs:6:22
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::sync::{Arc, Condvar, Mutex as StdMutex};
[INFO] [stdout]   |                      ^^^^^^^  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CardType`, `Category`, `ItemKind`, `Property`, and `StrategyKind`
[INFO] [stdout]    --> crates/card-server/src/game_starter.rs:623:28
[INFO] [stdout]     |
[INFO] [stdout] 623 |     use card_core::types::{CardType, Category, EffectKey, ItemKind, Property, StrategyKind};
[INFO] [stdout]     |                            ^^^^^^^^  ^^^^^^^^             ^^^^^^^^  ^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `instance_id` and `definition_id` are never read
[INFO] [stdout]   --> crates/card-server/tests/room_websocket_test.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 38 | struct TestRecoveryOption {
[INFO] [stdout]    |        ------------------ fields in this struct
[INFO] [stdout] 39 |     instance_id: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 40 |     definition_id: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TestRecoveryOption` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `count` and `options` are never read
[INFO] [stdout]   --> crates/card-server/tests/room_websocket_test.rs:69:23
[INFO] [stdout]    |
[INFO] [stdout] 69 |     RecoveryRequest { count: usize, options: Vec<TestRecoveryOption> },
[INFO] [stdout]    |     ---------------   ^^^^^         ^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TestServerMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `message` is never read
[INFO] [stdout]   --> crates/card-server/tests/room_websocket_test.rs:77:13
[INFO] [stdout]    |
[INFO] [stdout] 77 |     Error { message: String },
[INFO] [stdout]    |     -----   ^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TestServerMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `players` and `all_ready` are never read
[INFO] [stdout]   --> crates/card-server/tests/room_websocket_test.rs:79:17
[INFO] [stdout]    |
[INFO] [stdout] 79 |     RoomState { players: Vec<serde_json::Value>, all_ready: bool },
[INFO] [stdout]    |     ---------   ^^^^^^^                          ^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TestServerMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `player_name` and `deck_id` are never read
[INFO] [stdout]   --> crates/card-server/tests/room_websocket_test.rs:81:19
[INFO] [stdout]    |
[INFO] [stdout] 81 |     PlayerReady { player_name: String, deck_id: String },
[INFO] [stdout]    |     -----------   ^^^^^^^^^^^          ^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TestServerMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `start_test_server` is never used
[INFO] [stdout]   --> crates/card-server/tests/room_websocket_test.rs:86:10
[INFO] [stdout]    |
[INFO] [stdout] 86 | async fn start_test_server() -> SocketAddr {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `connect_client` is never used
[INFO] [stdout]    --> crates/card-server/tests/room_websocket_test.rs:111:10
[INFO] [stdout]     |
[INFO] [stdout] 111 | async fn connect_client(addr: SocketAddr) -> WebSocketStream {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wait_for_action_request` is never used
[INFO] [stdout]     --> crates/card-server/tests/room_websocket_test.rs:1386:10
[INFO] [stdout]      |
[INFO] [stdout] 1386 | async fn wait_for_action_request(ws: &mut WebSocketStream) -> (Vec<serde_json::Value>, u64) {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `wait_for_state_update` is never used
[INFO] [stdout]     --> crates/card-server/tests/room_websocket_test.rs:1409:10
[INFO] [stdout]      |
[INFO] [stdout] 1409 | async fn wait_for_state_update(ws: &mut WebSocketStream) -> VisibleGameState {
[INFO] [stdout]      |          ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player_id`
[INFO] [stdout]    --> crates/card-server/src/room.rs:140:57
[INFO] [stdout]     |
[INFO] [stdout] 140 |     pub async fn query_room_state(&self, room_id: &str, player_id: PlayerId) -> Result<(Vec<(String, bool, Option<String>)>, bool)> {
[INFO] [stdout]     |                                                         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_player_id`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `clone_room` is never used
[INFO] [stdout]    --> crates/card-server/src/room.rs:513:8
[INFO] [stdout]     |
[INFO] [stdout] 367 | impl Room {
[INFO] [stdout]     | --------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 513 |     fn clone_room(&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 `test` profile [unoptimized + debuginfo] target(s) in 15.54s
[INFO] running `Command { std: "docker" "inspect" "fe7c5a92008388b933170555d31c4f233fbc52f11af88cd1695ee4bce4b1b6d7", 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" "fe7c5a92008388b933170555d31c4f233fbc52f11af88cd1695ee4bce4b1b6d7" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `CardId`
[INFO] [stderr]   --> crates/card-protocol/src/message.rs:10:24
[INFO] [stderr]    |
[INFO] [stderr] 10 | use card_core::types::{CardId, EffectKey, InstanceId, PlayerId, TargetRef, Zone, ZoneLocation};
[INFO] [stderr]    |                        ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: `card-protocol` (lib) generated 1 warning (run `cargo fix --lib -p card-protocol` to apply 1 suggestion)
[INFO] [stderr] warning: `card-protocol` (lib test) generated 1 warning (1 duplicate)
[INFO] [stderr] warning: unused import: `std::time::Duration`
[INFO] [stderr]  --> crates/card-server/src/room.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 | use std::time::Duration;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `RecoveryCardOption`
[INFO] [stderr]  --> crates/card-server/src/room.rs:8:45
[INFO] [stderr]   |
[INFO] [stderr] 8 | use card_core::engine::phase::{PhaseAction, RecoveryCardOption};
[INFO] [stderr]   |                                             ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Condvar` and `Mutex as StdMutex`
[INFO] [stderr]  --> crates/card-server/src/game_starter.rs:6:22
[INFO] [stderr]   |
[INFO] [stderr] 6 | use std::sync::{Arc, Condvar, Mutex as StdMutex};
[INFO] [stderr]   |                      ^^^^^^^  ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `CardType`, `Category`, `ItemKind`, `Property`, and `StrategyKind`
[INFO] [stderr]    --> crates/card-server/src/game_starter.rs:623:28
[INFO] [stderr]     |
[INFO] [stderr] 623 |     use card_core::types::{CardType, Category, EffectKey, ItemKind, Property, StrategyKind};
[INFO] [stderr]     |                            ^^^^^^^^  ^^^^^^^^             ^^^^^^^^  ^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `player_id`
[INFO] [stderr]    --> crates/card-server/src/room.rs:140:57
[INFO] [stderr]     |
[INFO] [stderr] 140 |     pub async fn query_room_state(&self, room_id: &str, player_id: PlayerId) -> Result<(Vec<(String, bool, Option<String>)>, bool)> {
[INFO] [stderr]     |                                                         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_player_id`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: method `clone_room` is never used
[INFO] [stderr]    --> crates/card-server/src/room.rs:513:8
[INFO] [stderr]     |
[INFO] [stderr] 367 | impl Room {
[INFO] [stderr]     | --------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 513 |     fn clone_room(&self) -> Self {
[INFO] [stderr]     |        ^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: `card-server` (lib) generated 6 warnings (run `cargo fix --lib -p card-server` to apply 5 suggestions)
[INFO] [stderr] warning: `card-server` (lib test) generated 6 warnings (6 duplicates)
[INFO] [stderr] warning: unused imports: `PlayerAction` and `RoomMessage`
[INFO] [stderr]   --> crates/card-server/tests/room_websocket_test.rs:16:56
[INFO] [stderr]    |
[INFO] [stderr] 16 | use card_server::{RoomManager, WebSocketServer, room::{RoomMessage, PlayerAction, VisibleGameState}};
[INFO] [stderr]    |                                                        ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `server`
[INFO] [stderr]   --> crates/card-server/tests/room_websocket_test.rs:89:9
[INFO] [stderr]    |
[INFO] [stderr] 89 |     let server = WebSocketServer::new(room_manager, bind_addr);
[INFO] [stderr]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_server`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `bind_addr`
[INFO] [stderr]    --> crates/card-server/tests/room_websocket_test.rs:121:9
[INFO] [stderr]     |
[INFO] [stderr] 121 |     let bind_addr: SocketAddr = "127.0.0.1:7878".parse().unwrap();
[INFO] [stderr]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_bind_addr`
[INFO] [stderr] 
[INFO] [stderr] warning: fields `instance_id` and `definition_id` are never read
[INFO] [stderr]   --> crates/card-server/tests/room_websocket_test.rs:39:5
[INFO] [stderr]    |
[INFO] [stderr] 38 | struct TestRecoveryOption {
[INFO] [stderr]    |        ------------------ fields in this struct
[INFO] [stderr] 39 |     instance_id: u32,
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr] 40 |     definition_id: String,
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `TestRecoveryOption` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: fields `count` and `options` are never read
[INFO] [stderr]   --> crates/card-server/tests/room_websocket_test.rs:69:23
[INFO] [stderr]    |
[INFO] [stderr] 69 |     RecoveryRequest { count: usize, options: Vec<TestRecoveryOption> },
[INFO] [stderr]    |     ---------------   ^^^^^         ^^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     fields in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `TestServerMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `message` is never read
[INFO] [stderr]   --> crates/card-server/tests/room_websocket_test.rs:77:13
[INFO] [stderr]    |
[INFO] [stderr] 77 |     Error { message: String },
[INFO] [stderr]    |     -----   ^^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     field in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `TestServerMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `players` and `all_ready` are never read
[INFO] [stderr]   --> crates/card-server/tests/room_websocket_test.rs:79:17
[INFO] [stderr]    |
[INFO] [stderr] 79 |     RoomState { players: Vec<serde_json::Value>, all_ready: bool },
[INFO] [stderr]    |     ---------   ^^^^^^^                          ^^^^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     fields in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `TestServerMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `player_name` and `deck_id` are never read
[INFO] [stderr]   --> crates/card-server/tests/room_websocket_test.rs:81:19
[INFO] [stderr]    |
[INFO] [stderr] 81 |     PlayerReady { player_name: String, deck_id: String },
[INFO] [stderr]    |     -----------   ^^^^^^^^^^^          ^^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     fields in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `TestServerMessage` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: function `start_test_server` is never used
[INFO] [stderr]   --> crates/card-server/tests/room_websocket_test.rs:86:10
[INFO] [stderr]    |
[INFO] [stderr] 86 | async fn start_test_server() -> SocketAddr {
[INFO] [stderr]    |          ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `connect_client` is never used
[INFO] [stderr]    --> crates/card-server/tests/room_websocket_test.rs:111:10
[INFO] [stderr]     |
[INFO] [stderr] 111 | async fn connect_client(addr: SocketAddr) -> WebSocketStream {
[INFO] [stderr]     |          ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `wait_for_action_request` is never used
[INFO] [stderr]     --> crates/card-server/tests/room_websocket_test.rs:1386:10
[INFO] [stderr]      |
[INFO] [stderr] 1386 | async fn wait_for_action_request(ws: &mut WebSocketStream) -> (Vec<serde_json::Value>, u64) {
[INFO] [stderr]      |          ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `wait_for_state_update` is never used
[INFO] [stderr]     --> crates/card-server/tests/room_websocket_test.rs:1409:10
[INFO] [stderr]      |
[INFO] [stderr] 1409 | async fn wait_for_state_update(ws: &mut WebSocketStream) -> VisibleGameState {
[INFO] [stderr]      |          ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `card-server` (test "room_websocket_test") generated 12 warnings (run `cargo fix --test "room_websocket_test" -p card-server` to apply 3 suggestions)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.17s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/card_client-2feda169cd62d430)
[INFO] [stdout] 
[INFO] [stdout] running 9 tests
[INFO] [stdout] test api::tests::test_visible_state_hides_opponent_hand ... ok
[INFO] [stdout] test api::tests::test_visible_state_phase_and_turn ... ok
[INFO] [stdout] test api::tests::test_visible_state_my_state_is_complete ... ok
[INFO] [stdout] test api::tests::test_visible_state_shows_opponent_field ... ok
[INFO] [stdout] test api::tests::test_visible_state_is_not_my_turn ... ok
[INFO] [stdout] test api::tests::test_opponent_view_from_player_state ... ok
[INFO] [stdout] test api::tests::test_test_client_returns_commands_in_order ... ok
[INFO] [stdout] test api::tests::test_test_client_records_events ... ok
[INFO] [stdout] test api::tests::test_test_client_is_done ... ok
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/card_core-eaadddc128ee9488)
[INFO] [stdout] test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 136 tests
[INFO] [stdout] test deck::tests::test_deck_json_roundtrip ... ok
[INFO] [stdout] test deck::tests::test_deck_manager_list_decks_empty_dir ... ok
[INFO] [stdout] test deck::tests::test_deck_manager_load_invalid_json_returns_error ... ok
[INFO] [stdout] test deck::tests::test_deck_manager_list_decks ... ok
[INFO] [stdout] test deck::tests::test_example_deck_loads_correctly ... ok
[INFO] [stdout] test deck::tests::test_deck_manager_save_load_roundtrip ... ok
[INFO] [stdout] test effect::evaluator::tests::test_card_ref_by_slot_and_attack_power ... ok
[INFO] [stdout] test effect::evaluator::tests::test_compare_operators ... ok
[INFO] [stdout] test effect::evaluator::tests::test_card_is_on_field_this_and_by_instance ... ok
[INFO] [stdout] test effect::evaluator::tests::test_field_counts_hp_and_real_point ... ok
[INFO] [stdout] test effect::evaluator::tests::test_hand_and_cost_zone_count ... ok
[INFO] [stdout] test effect::evaluator::tests::test_literal_compare_true ... ok
[INFO] [stdout] test effect::evaluator::tests::test_not_or_and_conditions ... ok
[INFO] [stdout] test effect::evaluator::tests::test_unavailable_registry_branches_fallback_to_zero ... ok
[INFO] [stdout] test effect::tests::applied_modifier_roundtrip ... ok
[INFO] [stdout] test effect::tests::choice_with_card_filter ... ok
[INFO] [stdout] test effect::tests::debug_serialize_value_expr ... ok
[INFO] [stdout] test effect::tests::debug_serialize_condition ... ok
[INFO] [stdout] test effect::tests::spec_example_2_attack_boost_on_attack ... ok
[INFO] [stdout] test effect::tests::spec_example_1_summon_specific_card_on_entry ... ok
[INFO] [stdout] test effect::tests::spec_example_4b_return_to_hand_on_opponent_rp_change ... ok
[INFO] [stdout] test effect::tests::spec_example_3_aura_attack_boost ... ok
[INFO] [stdout] test effect::tests::condition_ast_composition ... ok
[INFO] [stdout] test effect::tests::spec_example_5_draw_and_discard_on_expose ... ok
[INFO] [stdout] test effect::tests::spec_example_4a_immune_to_strategy ... ok
[INFO] [stdout] test effect::text::tests::action_text_covers_all_actions ... ok
[INFO] [stdout] test effect::text::tests::condition_text_handles_and_or_not_compare_and_on_field ... ok
[INFO] [stdout] test effect::text::tests::card_effects_text_converts_success_and_masks_errors ... ok
[INFO] [stdout] test effect::tests::test_condition_with_literal ... ok
[INFO] [stdout] test effect::tests::test_value_expr_literal_with_float ... ok
[INFO] [stdout] test effect::text::tests::effect_to_chinese_end_to_end_with_activation_limit_same_name ... ok
[INFO] [stdout] test effect::tests::test_godot_json_format_with_floats ... ok
[INFO] [stdout] test effect::tests::spec_example_7_heal_on_summon ... ok
[INFO] [stdout] test effect::tests::spec_example_6_self_sacrifice_for_damage ... ok
[INFO] [stdout] test effect::tests::test_godot_json_with_float_literal ... ok
[INFO] [stdout] test effect::text::tests::effect_to_chinese_end_to_end_with_optional_limit_condition_and_cost ... ok
[INFO] [stdout] test effect::text::tests::effect_to_chinese_end_to_end_without_condition_or_cost ... ok
[INFO] [stdout] test effect::text::tests::effects_from_json_deserializes_each_entry ... ok
[INFO] [stdout] test effect::text::tests::modifier_text_covers_all_modifier_variants ... ok
[INFO] [stdout] test effect::text::tests::readme_example_1_summon_from_three_zones_text ... ok
[INFO] [stdout] test effect::text::tests::readme_example_5_draw_then_discard_text ... ok
[INFO] [stdout] test effect::text::tests::trigger_text_covers_all_phase_and_self_action_triggers ... ok
[INFO] [stdout] test effect::tests::test_value_expr_literal_with_int ... ok
[INFO] [stdout] test effect::text::tests::cost_text_covers_all_cost_requirement_variants ... ok
[INFO] [stdout] test effect::text::tests::readme_example_7_heal_text ... ok
[INFO] [stdout] test effect::text::tests::trigger_text_covers_event_trigger_variants ... ok
[INFO] [stdout] test engine::action::tests::damage_reduces_hp ... ok
[INFO] [stdout] test engine::action::tests::damage_to_zero_triggers_game_over ... ok
[INFO] [stdout] test engine::action::tests::destroy_immune_card_is_skipped ... ok
[INFO] [stdout] test engine::action::tests::destroy_sends_card_to_grave ... ok
[INFO] [stdout] test engine::action::tests::discard_moves_hand_to_grave ... ok
[INFO] [stdout] test engine::chain::tests::test_game_over_stops_chain ... ok
[INFO] [stdout] test engine::action::tests::draw_moves_card_to_hand ... ok
[INFO] [stdout] test engine::game_engine::tests::test_game_ends_on_deck_out ... ok
[INFO] [stdout] test engine::action::tests::draw_empty_deck_triggers_game_over ... ok
[INFO] [stdout] test engine::game_engine::tests::test_event_log_contains_phase_events ... ok
[INFO] [stdout] test engine::chain::tests::test_chain_emits_chain_link_event ... ok
[INFO] [stdout] test engine::chain::tests::test_chain_starts_and_completes ... ok
[INFO] [stdout] test engine::game_engine::tests::test_game_result_has_final_state ... ok
[INFO] [stdout] test engine::game_engine::tests::test_initial_hand_drawn_before_first_turn ... ok
[INFO] [stdout] test engine::chain::tests::test_filo_order_damage_before_draw ... ok
[INFO] [stdout] test engine::game_engine::tests::test_initial_hand_zero_draws_nothing ... ok
[INFO] [stdout] test engine::game_engine::tests::test_game_ends_on_surrender ... ok
[INFO] [stdout] test engine::modifier::tests::test_get_effective_attack ... ok
[INFO] [stdout] test engine::game_engine::tests::test_initial_hand_deck_out_returns_deckout ... ok
[INFO] [stdout] test engine::modifier::tests::test_get_effective_attack_no_attack ... ok
[INFO] [stdout] test engine::modifier::tests::test_has_immunity_by_card_type ... ok
[INFO] [stdout] test engine::modifier::tests::test_has_immunity_destruction ... ok
[INFO] [stdout] test engine::modifier::tests::test_permanent_modifier_not_cleaned ... ok
[INFO] [stdout] test engine::action::tests::gain_real_point_capped_at_max ... ok
[INFO] [stdout] test engine::modifier::tests::test_apply_attack_boost ... ok
[INFO] [stdout] test engine::modifier::tests::test_attack_boost_clamps_to_zero ... ok
[INFO] [stdout] test engine::modifier::tests::test_while_source_on_field_cleanup ... ok
[INFO] [stdout] test engine::modifier::tests::test_remove_attack_boost_reverts ... ok
[INFO] [stdout] test engine::modifier::tests::test_while_source_on_field_kept_when_present ... ok
[INFO] [stdout] test engine::phase::tests::test_battle_higher_attack_wins ... ok
[INFO] [stdout] test engine::phase::tests::test_battle_tie_both_destroyed ... ok
[INFO] [stdout] test engine::phase::tests::test_draw_phase_first_turn_no_draw ... ok
[INFO] [stdout] test engine::phase::tests::test_build_main_actions_filters_unaffordable_cards ... ok
[INFO] [stdout] test engine::trigger::tests::on_summon_matches_same_source ... ok
[INFO] [stdout] test engine::trigger::tests::once_per_turn_same_name_checks_other_instance ... ok
[INFO] [stdout] test engine::trigger::tests::once_per_turn_limit_blocks_second_activation ... ok
[INFO] [stdout] test engine::phase::tests::test_phase_changed_events_emitted ... ok
[INFO] [stdout] test engine::phase::tests::test_draw_phase_second_turn_draws ... ok
[INFO] [stdout] test engine::trigger::tests::phase_trigger_matches_turn_start ... ok
[INFO] [stdout] test engine::phase::tests::test_turn_end_switches_player ... ok
[INFO] [stdout] test rules::tests::test_default_rules ... ok
[INFO] [stdout] test engine::trigger::tests::on_summon_does_not_match_other_source ... ok
[INFO] [stdout] test rules::tests::test_validate_deck_custom_rules ... ok
[INFO] [stdout] test engine::phase::tests::test_play_card_auto_cost_payment_broadcasts_to_both_clients ... ok
[INFO] [stdout] test rules::tests::test_validate_deck_card_not_in_registry ... ok
[INFO] [stdout] test state::tests::test_card_registry_impl ... ok
[INFO] [stdout] test state::tests::test_all_cards_iterator ... ok
[INFO] [stdout] test state::tests::test_current_opponent_player ... ok
[INFO] [stdout] test rules::tests::test_validate_deck_too_many_legendary ... ok
[INFO] [stdout] test rules::tests::test_validate_deck_too_large ... ok
[INFO] [stdout] test rules::tests::test_validate_deck_too_many_same_card ... ok
[INFO] [stdout] test rules::tests::test_validate_deck_too_small ... ok
[INFO] [stdout] test state::tests::test_game_state_eq ... ok
[INFO] [stdout] test state::tests::test_game_state_new ... ok
[INFO] [stdout] test state::tests::test_chain_stack_push_pop ... ok
[INFO] [stdout] test engine::action::tests::heal_hp_capped_at_max ... ok
[INFO] [stdout] test rules::tests::test_validate_deck_valid_40_cards ... ok
[INFO] [stdout] test engine::modifier::tests::test_cleanup_until_end_of_turn ... ok
[INFO] [stdout] test state::tests::test_move_card ... ok
[INFO] [stdout] test state::tests::test_game_state_serialize_roundtrip ... ok
[INFO] [stdout] test state::tests::test_move_card_cross_player ... ok
[INFO] [stdout] test state::tests::test_move_card_not_found ... ok
[INFO] [stdout] test state::tests::test_player_zones_add_remove ... ok
[INFO] [stdout] test test_godot::test_simple_effect ... ok
[INFO] [stdout] test types::card_id::tests::test_display ... ok
[INFO] [stdout] test state::tests::test_player_zones_card_by_instance_id ... ok
[INFO] [stdout] test state::tests::test_player_zones_front_slot ... ok
[INFO] [stdout] test state::tests::test_instance_id_increment ... ok
[INFO] [stdout] test types::tests::integration_tests::test_card_definition_builder ... ok
[INFO] [stdout] test types::tests::integration_tests::test_card_filter_cost_range ... ok
[INFO] [stdout] test types::card_id::tests::test_invalid_card_type ... ok
[INFO] [stdout] test types::card_id::tests::test_invalid_card_number ... ok
[INFO] [stdout] test types::card_id::tests::test_invalid_format ... ok
[INFO] [stdout] test test_godot::test_effect_with_condition ... ok
[INFO] [stdout] test types::tests::integration_tests::test_all_properties ... ok
[INFO] [stdout] test types::tests::integration_tests::test_all_card_types ... ok
[INFO] [stdout] test types::tests::integration_tests::test_all_categories ... ok
[INFO] [stdout] test types::tests::integration_tests::test_card_filter_matches ... ok
[INFO] [stdout] test types::tests::integration_tests::test_all_types_serialize ... ok
[INFO] [stdout] test types::tests::integration_tests::test_player_ref_resolve ... ok
[INFO] [stdout] test types::tests::integration_tests::test_effect_key_serialize ... ok
[INFO] [stdout] test types::tests::integration_tests::test_instance_id_hash ... ok
[INFO] [stdout] test types::tests::integration_tests::test_item_kinds ... ok
[INFO] [stdout] test types::tests::integration_tests::test_strategy_kinds ... ok
[INFO] [stdout] test types::tests::integration_tests::test_zone_location ... ok
[INFO] [stdout] test types::tests::integration_tests::test_target_ref_resolve_player ... ok
[INFO] [stdout] test types::tests::integration_tests::test_player_id_opponent ... ok
[INFO] [stdout] test types::tests::integration_tests::test_card_ref_variants ... ok
[INFO] [stdout] test types::tests::integration_tests::test_zone_variants ... ok
[INFO] [stdout] test types::card_id::tests::test_valid_card_id ... ok
[INFO] [stdout] 
[INFO] [stderr]      Running tests/deck_tests.rs (/opt/rustwide/target/debug/deps/deck_tests-7e127a92e8e82976)
[INFO] [stdout] test result: ok. 136 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 9 tests
[INFO] [stdout] test test_deck_manager_list_decks_nonexistent_dir ... ok
[INFO] [stdout] test test_deck_manager_delete ... ok
[INFO] [stdout] test test_deck_manager_save_load_roundtrip ... ok
[INFO] [stdout] test test_deck_manager_load_invalid_json_returns_error ... ok
[INFO] [stdout] test test_deck_manager_list_decks_returns_sorted ... ok
[INFO] [stdout] test test_deck_card_copy_limit_logic ... ok
[INFO] [stdout] test test_deck_serialization_roundtrip ... ok
[INFO] [stdout] test test_example_deck_file_is_valid ... ok
[INFO] [stdout] test test_deck_summary_reflects_card_count ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/engine_tests.rs (/opt/rustwide/target/debug/deps/engine_tests-dfdb08bb7079ad36)
[INFO] [stdout] 
[INFO] [stdout] running 39 tests
[INFO] [stdout] test action_damage_to_zero_triggers_game_over ... ok
[INFO] [stdout] test action_destroy_moves_card_to_grave ... ok
[INFO] [stdout] test action_destroy_respects_immunity_to_destruction ... ok
[INFO] [stdout] test action_damage_reduces_hp ... ok
[INFO] [stdout] test action_draw_adds_cards_to_hand ... ok
[INFO] [stdout] test action_draw_empty_deck_triggers_game_over ... ok
[INFO] [stdout] test action_gain_real_point_overflow_emits_event ... ok
[INFO] [stdout] test action_heal_hp_capped_at_max ... ok
[INFO] [stdout] test chain_push_link_adds_entry_and_emits_chain_link_event ... ok
[INFO] [stdout] test chain_resolution_draw_from_empty_deck_still_completes_chain ... ok
[INFO] [stdout] test chain_resolution_emits_resolving_index_zero ... ok
[INFO] [stdout] test chain_resolution_stops_after_game_over ... ok
[INFO] [stdout] test engine_event_log_non_empty_after_game_completion ... ok
[INFO] [stdout] test chain_resolution_executes_actions_and_completes ... ok
[INFO] [stdout] test engine_game_ends_within_max_turns ... ok
[INFO] [stdout] test engine_pass_all_client_game_completes ... ok
[INFO] [stdout] test engine_winner_is_set_on_completion ... ok
[INFO] [stdout] test engine_same_seed_produces_same_result ... ok
[INFO] [stdout] test modifier_attack_boost_modifies_current_attack ... ok
[INFO] [stdout] test modifier_immunity_check_blocks_targeting ... ok
[INFO] [stdout] test modifier_until_end_of_turn_cleanup_removes_modifier ... ok
[INFO] [stdout] test modifier_turn_count_decrements_and_expires ... ok
[INFO] [stdout] test phase_flow_battle_defender_higher_attack_destroys_attacker ... ok
[INFO] [stdout] test phase_flow_battle_attacker_higher_attack_destroys_defender_and_gains_rp ... ok
[INFO] [stdout] test modifier_permanent_modifier_never_expires_on_cleanup ... ok
[INFO] [stdout] test phase_flow_complete_turn_rotation_emits_7_phases_in_order ... ok
[INFO] [stdout] test modifier_while_source_on_field_cleans_when_source_leaves ... ok
[INFO] [stdout] test trigger_matches_on_attack_event ... ok
[INFO] [stdout] test phase_flow_recovery_skips_when_opponent_has_no_front_cards ... ok
[INFO] [stdout] test trigger_matches_real_point_overflow_event ... ok
[INFO] [stdout] test trigger_once_per_turn_limit_blocks_reactivation ... ok
[INFO] [stdout] test phase_flow_first_turn_draw_when_rule_enabled ... ok
[INFO] [stdout] test phase_flow_first_turn_no_draw_when_rule_disabled ... ok
[INFO] [stdout] test trigger_once_per_turn_same_name_blocks_other_instance ... ok
[INFO] [stdout] test phase_flow_recovery_phase_count_uses_opponent_highest_cost ... ok
[INFO] [stdout] test phase_flow_deck_out_triggers_game_over ... ok
[INFO] [stdout] test phase_flow_hp_zero_triggers_game_over ... ok
[INFO] [stdout] test trigger_matches_draw_phase_event ... ok
[INFO] [stdout] test phase_flow_battle_tie_destroys_both_cards ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 39 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/card_effect_tool-a4d1f5d20ea2e2a3)
[INFO] [stdout] 
[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]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/card_matchmaker-4b1f38aec7e22de2)
[INFO] [stdout] 
[INFO] [stdout] running 2 tests
[INFO] [stdout] test server::tests::version_mismatch_is_rejected ... ok
[INFO] [stdout] test server::tests::two_clients_are_matched ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/card_protocol-90b0926d8320596e)
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] test message::tests::command_surrender_bincode_roundtrip ... ok
[INFO] [stdout] test message::tests::command_declare_attack_roundtrip ... ok
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/card_script-04ea61eded45ab70)
[INFO] [stdout] test message::tests::game_event_game_over_serde_json ... 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 30 tests
[INFO] [stdout] test json_loader::tests::test_load_basic_character ... ok
[INFO] [stdout] test json_loader::tests::test_load_item_card ... ok
[INFO] [stdout] test json_loader::tests::test_missing_required_field_errors ... ok
[INFO] [stdout] test json_loader::tests::test_load_strategy_card ... ok
[INFO] [stdout] test json_loader::tests::test_scan_empty_dir ... ok
[INFO] [stdout] test json_loader::tests::test_scan_finds_json_files ... ok
[INFO] [stdout] test json_loader::tests::test_strategy_requires_strategy_kind ... ok
[INFO] [stdout] test loader::tests::test_index_iter ... ok
[INFO] [stdout] test loader::tests::test_scan_finds_lua_files ... ok
[INFO] [stdout] test loader::tests::test_scan_empty_dir ... ok
[INFO] [stdout] test loader::tests::test_load_card_not_found_returns_error ... ok
[INFO] [stdout] test loader::tests::test_scan_nonexistent_dir ... ok
[INFO] [stdout] test loader::tests::test_load_card_returns_definition ... ok
[INFO] [stdout] test parser::tests::test_parse_missing_required_field_errors ... ok
[INFO] [stdout] test sandbox::tests::sandbox_os_not_available ... ok
[INFO] [stdout] test parser::tests::test_parse_basic_character ... ok
[INFO] [stdout] test sandbox::tests::sandbox_require_removed ... ok
[INFO] [stdout] test sandbox::tests::sandbox_math_lib_available ... ok
[INFO] [stdout] test parser::tests::test_extract_referenced_cards ... ok
[INFO] [stdout] test loader::tests::test_scan_recursive ... ok
[INFO] [stdout] test parser::tests::test_parse_strategy_card ... ok
[INFO] [stdout] test loader::tests::test_scan_ignores_non_card_id_files ... ok
[INFO] [stdout] test parser::tests::test_parse_with_onsummon_effect ... ok
[INFO] [stdout] test loader::tests::test_loader_missing_card_error ... ok
[INFO] [stdout] test sandbox::tests::sandbox_creates_successfully ... ok
[INFO] [stdout] test sandbox::tests::sandbox_io_not_available ... ok
[INFO] [stdout] test sandbox::tests::sandbox_string_lib_available ... ok
[INFO] [stdout] test loader::tests::test_loader_load_for_game ... ok
[INFO] [stdout] test loader::tests::test_load_all_returns_all_s000_cards ... ok
[INFO] [stdout] test sandbox::tests::sandbox_table_lib_available ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 30 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/card_effect_test.rs (/opt/rustwide/target/debug/deps/card_effect_test-6f4445b1fce2abcc)
[INFO] [stdout] 
[INFO] [stdout] running 11 tests
[INFO] [stdout] test s000_c_002_effects_text ... ok
[INFO] [stdout] test s000_c_001_effects_text ... ok
[INFO] [stdout] test s000_l_001_effects_text ... ok
[INFO] [stdout] test s000_i_001_effects_text ... ok
[INFO] [stdout] test s000_i_002_effects_text ... ok
[INFO] [stdout] test s000_c_003_effects_text ... ok
[INFO] [stdout] test s000_s_001_effects_text ... ok
[INFO] [stdout] test s000_s_003_effects_text ... ok
[INFO] [stdout] test s000_s_002_effects_text ... ok
[INFO] [stdout] test s000_cards_with_effects_have_correct_count ... ok
[INFO] [stderr]      Running tests/integration_test.rs (/opt/rustwide/target/debug/deps/integration_test-dda2cd3dceec95a7)
[INFO] [stdout] test all_s000_cards_effects_are_valid ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 12 tests
[INFO] [stdout] test parser_reports_error_for_empty_lua_script ... ok
[INFO] [stdout] test parser_reports_syntax_error_for_malformed_lua ... ok
[INFO] [stdout] test parser_reports_error_when_required_id_missing ... ok
[INFO] [stdout] test sandbox_blocks_io_open ... ok
[INFO] [stdout] test sandbox_blocks_require ... ok
[INFO] [stdout] test sandbox_blocks_os_execute ... ok
[INFO] [stdout] test s000_load_for_game_succeeds_for_all_ids ... ok
[INFO] [stdout] test s000_scan_finds_all_nine_cards ... ok
[INFO] [stdout] test s000_contains_all_four_card_types ... ok
[INFO] [stdout] test s000_loaded_cards_have_valid_core_fields ... ok
[INFO] [stdout] test s000_has_at_least_one_card_with_effects ... ok
[INFO] [stdout] test sandbox_interrupts_unbounded_loop_via_memory_limit ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.17s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/card_server-2a3b159e8975f351)
[INFO] [stdout] 
[INFO] [stdout] running 16 tests
[INFO] [stdout] test ai_client::tests::ai_chooses_action_from_available ... ok
[INFO] [stdout] test ai_client::tests::ai_recovery_empty_returns_empty ... ok
[INFO] [stdout] test ai_client::tests::ai_recovery_selects_from_options ... ok
[INFO] [stdout] test game_starter::tests::network_phase_client_on_events_broadcasts_state_update ... ok
[INFO] [stdout] test replay::tests::replay_recorder_finalize ... ok
[INFO] [stdout] test ai_client::tests::ai_empty_available_returns_none ... ok
[INFO] [stdout] test replay::tests::replay_data_file_roundtrip ... ok
[INFO] [stdout] test replay::tests::replay_data_json_roundtrip ... ok
[INFO] [stdout] test game_starter::tests::test_network_phase_client_creation ... ok
[INFO] [stdout] test ai_client::tests::ai_same_seed_same_sequence ... ok
[INFO] [stdout] test room::tests::test_room_creation ... ok
[INFO] [stdout] test room::tests::test_room_join ... ok
[INFO] [stdout] test snapshot::tests::snapshot_file_roundtrip ... ok
[INFO] [stdout] test room::tests::test_room_full ... ok
[INFO] [stdout] test snapshot::tests::snapshot_preserves_turn_number ... ok
[INFO] [stdout] test snapshot::tests::snapshot_json_roundtrip ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/card_server-23b858a8bc37ea32)
[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]      Running tests/local_game_test.rs (/opt/rustwide/target/debug/deps/local_game_test-a385d8f81f686a37)
[INFO] [stdout] 
[INFO] [stdout] running 5 tests
[INFO] [stdout] test small_deck_game_can_end_by_deck_out_quickly ... ok
[INFO] [stdout] test ai_vs_ai_complete_game ... ok
[INFO] [stdout] test game_ends_within_engine_max_turns ... ok
[INFO] [stdout] test event_log_contains_draw_and_phase_events ... ok
[INFO] [stdout] test ai_vs_ai_is_deterministic_with_same_seeds ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.37s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/replay_test.rs (/opt/rustwide/target/debug/deps/replay_test-6415c882294ae81c)
[INFO] [stdout] 
[INFO] [stdout] running 5 tests
[INFO] [stdout] test replay_data_json_roundtrip ... ok
[INFO] [stdout] test replay_data_file_save_and_load ... ok
[INFO] [stdout] test replay_recorder_records_events_and_metadata ... ok
[INFO] [stdout] test replay_data_contains_expected_fields_from_real_game ... ok
[INFO] [stdout] test multiple_replay_recordings_produce_distinct_event_logs ... FAILED
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- multiple_replay_recordings_produce_distinct_event_logs stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'multiple_replay_recordings_produce_distinct_event_logs' (2185) panicked at crates/card-server/tests/replay_test.rs:185:5:
[INFO] [stdout] assertion `left != right` failed: different seeds should produce different event logs
[INFO] [stdout]   left: [DrawCard { player: Player1, instance_id: InstanceId(1) }, DrawCard { player: Player1, instance_id: InstanceId(2) }, DrawCard { player: Player1, instance_id: InstanceId(3) }, DrawCard { player: Player1, instance_id: InstanceId(4) }, DrawCard { player: Player1, instance_id: InstanceId(5) }, DrawCard { player: Player2, instance_id: InstanceId(21) }, DrawCard { player: Player2, instance_id: InstanceId(22) }, DrawCard { player: Player2, instance_id: InstanceId(23) }, DrawCard { player: Player2, instance_id: InstanceId(24) }, DrawCard { player: Player2, instance_id: InstanceId(25) }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(6) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 3 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(26) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 4 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(7) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 5 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(27) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 6 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(8) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 7 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(28) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 8 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(9) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 9 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(29) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 10 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(10) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 11 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(30) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 12 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(11) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 13 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(31) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 14 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(12) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 15 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(32) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 16 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(13) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 17 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(33) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 18 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(14) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 19 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(34) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 20 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(15) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 21 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(35) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 22 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(16) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 23 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(36) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 24 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(17) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 25 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(37) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 26 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(18) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 27 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(38) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 28 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(19) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 29 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(39) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 30 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(20) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 31 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(40) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 32 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, GameOver { winner: Some(Player2), reason: DeckOut }]
[INFO] [stdout]  right: [DrawCard { player: Player1, instance_id: InstanceId(1) }, DrawCard { player: Player1, instance_id: InstanceId(2) }, DrawCard { player: Player1, instance_id: InstanceId(3) }, DrawCard { player: Player1, instance_id: InstanceId(4) }, DrawCard { player: Player1, instance_id: InstanceId(5) }, DrawCard { player: Player2, instance_id: InstanceId(21) }, DrawCard { player: Player2, instance_id: InstanceId(22) }, DrawCard { player: Player2, instance_id: InstanceId(23) }, DrawCard { player: Player2, instance_id: InstanceId(24) }, DrawCard { player: Player2, instance_id: InstanceId(25) }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(6) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 3 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(26) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 4 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(7) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 5 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(27) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 6 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(8) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 7 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(28) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 8 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(9) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 9 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(29) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 10 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(10) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 11 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(30) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 12 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(11) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 13 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(31) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 14 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(12) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 15 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(32) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 16 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(13) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 17 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(33) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 18 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(14) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 19 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(34) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 20 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(15) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 21 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(35) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 22 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(16) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 23 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(36) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 24 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(17) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 25 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(37) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 26 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(18) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 27 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(38) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 28 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(19) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 29 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(39) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 30 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player1, instance_id: InstanceId(20) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player2, turn_number: 31 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, DrawCard { player: Player2, instance_id: InstanceId(40) }, PhaseChanged { new_phase: Recovery }, PhaseChanged { new_phase: Main1 }, PhaseChanged { new_phase: Battle }, PhaseChanged { new_phase: Main2 }, PhaseChanged { new_phase: TurnEnd }, TurnChanged { new_active_player: Player1, turn_number: 32 }, PhaseChanged { new_phase: TurnStart }, PhaseChanged { new_phase: Draw }, GameOver { winner: Some(Player2), reason: DeckOut }]
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x5fb9261f1811 - std[73adb7dc35730857]::backtrace_rs::backtrace::libunwind::trace
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x5fb9261f1811 - std[73adb7dc35730857]::backtrace_rs::backtrace::trace_unsynchronized::<std[73adb7dc35730857]::sys::backtrace::_print_fmt::{closure#1}>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x5fb9261f1811 - std[73adb7dc35730857]::sys::backtrace::_print_fmt
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x5fb9261f1811 - <<std[73adb7dc35730857]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[6883ba1bc0fe4ed1]::fmt::Display>::fmt
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x5fb926206cca - <core[6883ba1bc0fe4ed1]::fmt::rt::Argument>::fmt
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x5fb926206cca - core[6883ba1bc0fe4ed1]::fmt::write
[INFO] [stdout]    6:     0x5fb9261f61cc - std[73adb7dc35730857]::io::default_write_fmt::<alloc[55a36b64bcbf2c0d]::vec::Vec<u8>>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/io/mod.rs:626:11
[INFO] [stdout]    7:     0x5fb9261f61cc - <alloc[55a36b64bcbf2c0d]::vec::Vec<u8> as std[73adb7dc35730857]::io::Write>::write_fmt
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/io/mod.rs:1730:13
[INFO] [stdout]    8:     0x5fb9261cf0e6 - <std[73adb7dc35730857]::sys::backtrace::BacktraceLock>::print
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x5fb9261cf0e6 - std[73adb7dc35730857]::panicking::default_hook::{closure#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:292:27
[INFO] [stdout]   10:     0x5fb9261e93c9 - std[73adb7dc35730857]::panicking::default_hook
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:316:9
[INFO] [stdout]   11:     0x5fb925fc68f0 - <alloc[55a36b64bcbf2c0d]::boxed::Box<dyn for<'a, 'b> core[6883ba1bc0fe4ed1]::ops::function::Fn<(&'a std[73adb7dc35730857]::panic::PanicHookInfo<'b>,), Output = ()> + core[6883ba1bc0fe4ed1]::marker::Send + core[6883ba1bc0fe4ed1]::marker::Sync> as core[6883ba1bc0fe4ed1]::ops::function::Fn<(&std[73adb7dc35730857]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/alloc/src/boxed.rs:2333:9
[INFO] [stdout]   12:     0x5fb925fc68f0 - test[980ffaebd391d06d]::test_main_inner::<test[980ffaebd391d06d]::test_main_static::{closure#0}>::{closure#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/test/src/lib.rs:155:21
[INFO] [stdout]   13:     0x5fb9261e9582 - <alloc[55a36b64bcbf2c0d]::boxed::Box<dyn for<'a, 'b> core[6883ba1bc0fe4ed1]::ops::function::Fn<(&'a std[73adb7dc35730857]::panic::PanicHookInfo<'b>,), Output = ()> + core[6883ba1bc0fe4ed1]::marker::Send + core[6883ba1bc0fe4ed1]::marker::Sync> as core[6883ba1bc0fe4ed1]::ops::function::Fn<(&std[73adb7dc35730857]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/alloc/src/boxed.rs:2333:9
[INFO] [stdout]   14:     0x5fb9261e9582 - std[73adb7dc35730857]::panicking::panic_with_hook
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:823:13
[INFO] [stdout]   15:     0x5fb9261cf192 - std[73adb7dc35730857]::panicking::panic_handler::{closure#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:688:13
[INFO] [stdout]   16:     0x5fb9261c6319 - std[73adb7dc35730857]::sys::backtrace::__rust_end_short_backtrace::<std[73adb7dc35730857]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x5fb9261cfe9d - __rustc[a7b7b02e776dd976]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:679:5
[INFO] [stdout]   18:     0x5fb92620749c - core[6883ba1bc0fe4ed1]::panicking::panic_fmt
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x5fb9262073b3 - core[6883ba1bc0fe4ed1]::panicking::assert_failed_inner
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/panicking.rs:434:23
[INFO] [stdout]   20:     0x5fb925fa7d58 - core[6883ba1bc0fe4ed1]::panicking::assert_failed::<alloc[55a36b64bcbf2c0d]::vec::Vec<card_core[18fee8e3df472b02]::state::events::CoreGameEvent>, alloc[55a36b64bcbf2c0d]::vec::Vec<card_core[18fee8e3df472b02]::state::events::CoreGameEvent>>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/panicking.rs:394:5
[INFO] [stdout]   21:     0x5fb925fafd84 - replay_test[aded74b73e0b20af]::multiple_replay_recordings_produce_distinct_event_logs
[INFO] [stdout]                                at /opt/rustwide/workdir/crates/card-server/tests/replay_test.rs:185:5
[INFO] [stdout]   22:     0x5fb925fad2e7 - replay_test[aded74b73e0b20af]::multiple_replay_recordings_produce_distinct_event_logs::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/workdir/crates/card-server/tests/replay_test.rs:180:60
[INFO] [stdout]   23:     0x5fb925fb9966 - <replay_test[aded74b73e0b20af]::multiple_replay_recordings_produce_distinct_event_logs::{closure#0} as core[6883ba1bc0fe4ed1]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x5fb925fb9c2b - <fn() -> core[6883ba1bc0fe4ed1]::result::Result<(), alloc[55a36b64bcbf2c0d]::string::String> as core[6883ba1bc0fe4ed1]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   25:     0x5fb925fb9c2b - test[980ffaebd391d06d]::__rust_begin_short_backtrace::<core[6883ba1bc0fe4ed1]::result::Result<(), alloc[55a36b64bcbf2c0d]::string::String>, fn() -> core[6883ba1bc0fe4ed1]::result::Result<(), alloc[55a36b64bcbf2c0d]::string::String>>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/test/src/lib.rs:724:18
[INFO] [stdout]   26:     0x5fb925fc7275 - test[980ffaebd391d06d]::run_test_in_process::{closure#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/test/src/lib.rs:747:74
[INFO] [stdout]   27:     0x5fb925fc7275 - <core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<test[980ffaebd391d06d]::run_test_in_process::{closure#0}> as core[6883ba1bc0fe4ed1]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   28:     0x5fb925fc7275 - std[73adb7dc35730857]::panicking::catch_unwind::do_call::<core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<test[980ffaebd391d06d]::run_test_in_process::{closure#0}>, core[6883ba1bc0fe4ed1]::result::Result<(), alloc[55a36b64bcbf2c0d]::string::String>>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:576:43
[INFO] [stdout]   29:     0x5fb925fc7275 - std[73adb7dc35730857]::panicking::catch_unwind::<core[6883ba1bc0fe4ed1]::result::Result<(), alloc[55a36b64bcbf2c0d]::string::String>, core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<test[980ffaebd391d06d]::run_test_in_process::{closure#0}>>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:544:19
[INFO] [stdout]   30:     0x5fb925fc7275 - std[73adb7dc35730857]::panic::catch_unwind::<core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<test[980ffaebd391d06d]::run_test_in_process::{closure#0}>, core[6883ba1bc0fe4ed1]::result::Result<(), alloc[55a36b64bcbf2c0d]::string::String>>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panic.rs:359:14
[INFO] [stdout]   31:     0x5fb925fc7275 - test[980ffaebd391d06d]::run_test_in_process
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/test/src/lib.rs:747:27
[INFO] [stdout]   32:     0x5fb925fc7275 - test[980ffaebd391d06d]::run_test::{closure#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/test/src/lib.rs:668:43
[INFO] [stdout]   33:     0x5fb925fc1d24 - test[980ffaebd391d06d]::run_test::{closure#1}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/test/src/lib.rs:698:41
[INFO] [stdout]   34:     0x5fb925fc1d24 - std[73adb7dc35730857]::sys::backtrace::__rust_begin_short_backtrace::<test[980ffaebd391d06d]::run_test::{closure#1}, ()>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   35:     0x5fb925fca3c2 - std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked::<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/thread/lifecycle.rs:70:13
[INFO] [stdout]   36:     0x5fb925fca3c2 - <core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}> as core[6883ba1bc0fe4ed1]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   37:     0x5fb925fca3c2 - std[73adb7dc35730857]::panicking::catch_unwind::do_call::<core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:576:43
[INFO] [stdout]   38:     0x5fb925fca3c2 - std[73adb7dc35730857]::panicking::catch_unwind::<(), core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:544:19
[INFO] [stdout]   39:     0x5fb925fca3c2 - std[73adb7dc35730857]::panic::catch_unwind::<core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panic.rs:359:14
[INFO] [stdout]   40:     0x5fb925fca3c2 - std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked::<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/thread/lifecycle.rs:68:26
[INFO] [stdout]   41:     0x5fb925fca3c2 - <std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1} as core[6883ba1bc0fe4ed1]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   42:     0x5fb9261f0b2f - <alloc[55a36b64bcbf2c0d]::boxed::Box<dyn core[6883ba1bc0fe4ed1]::ops::function::FnOnce<(), Output = ()> + core[6883ba1bc0fe4ed1]::marker::Send> as core[6883ba1bc0fe4ed1]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/alloc/src/boxed.rs:2319:9
[INFO] [stdout]   43:     0x5fb9261f0b2f - <std[73adb7dc35730857]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/sys/thread/unix.rs:123:17
[INFO] [stdout]   44:     0x7bee93128aa4 - <unknown>
[INFO] [stdout]   45:     0x7bee931b5a64 - clone
[INFO] [stdout]   46:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     multiple_replay_recordings_produce_distinct_event_logs
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 4 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.34s
[INFO] [stdout] 
[INFO] [stderr] error: test failed, to rerun pass `-p card-server --test replay_test`
[INFO] running `Command { std: "docker" "inspect" "fe7c5a92008388b933170555d31c4f233fbc52f11af88cd1695ee4bce4b1b6d7", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "fe7c5a92008388b933170555d31c4f233fbc52f11af88cd1695ee4bce4b1b6d7", kill_on_drop: false }`
[INFO] [stdout] fe7c5a92008388b933170555d31c4f233fbc52f11af88cd1695ee4bce4b1b6d7
