[INFO] cloning repository https://github.com/tdimino/open-rebellion
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/tdimino/open-rebellion" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ftdimino%2Fopen-rebellion", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ftdimino%2Fopen-rebellion'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] fc25634be905839dfa6fb477d5fff0faa49d8ae9
[INFO] testing tdimino/open-rebellion against beta-2026-04-21 for beta-1.96-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ftdimino%2Fopen-rebellion" "/workspace/builds/worker-5-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc2/source'...
[INFO] [stderr] done.
[INFO] [stderr] Updating files:   3% (405/12705)
Updating files:   4% (509/12705)
Updating files:   5% (636/12705)
Updating files:   6% (763/12705)
Updating files:   7% (890/12705)
Updating files:   8% (1017/12705)
Updating files:   9% (1144/12705)
Updating files:  10% (1271/12705)
Updating files:  11% (1398/12705)
Updating files:  12% (1525/12705)
Updating files:  13% (1652/12705)
Updating files:  14% (1779/12705)
Updating files:  15% (1906/12705)
Updating files:  16% (2033/12705)
Updating files:  17% (2160/12705)
Updating files:  18% (2287/12705)
Updating files:  19% (2414/12705)
Updating files:  20% (2541/12705)
Updating files:  21% (2669/12705)
Updating files:  22% (2796/12705)
Updating files:  23% (2923/12705)
Updating files:  23% (2983/12705)
Updating files:  24% (3050/12705)
Updating files:  25% (3177/12705)
Updating files:  26% (3304/12705)
Updating files:  27% (3431/12705)
Updating files:  28% (3558/12705)
Updating files:  29% (3685/12705)
Updating files:  30% (3812/12705)
Updating files:  31% (3939/12705)
Updating files:  32% (4066/12705)
Updating files:  33% (4193/12705)
Updating files:  34% (4320/12705)
Updating files:  35% (4447/12705)
Updating files:  36% (4574/12705)
Updating files:  37% (4701/12705)
Updating files:  38% (4828/12705)
Updating files:  39% (4955/12705)
Updating files:  40% (5082/12705)
Updating files:  41% (5210/12705)
Updating files:  42% (5337/12705)
Updating files:  43% (5464/12705)
Updating files:  44% (5591/12705)
Updating files:  45% (5718/12705)
Updating files:  46% (5845/12705)
Updating files:  47% (5972/12705)
Updating files:  48% (6099/12705)
Updating files:  49% (6226/12705)
Updating files:  50% (6353/12705)
Updating files:  51% (6480/12705)
Updating files:  52% (6607/12705)
Updating files:  53% (6734/12705)
Updating files:  54% (6861/12705)
Updating files:  55% (6988/12705)
Updating files:  56% (7115/12705)
Updating files:  57% (7242/12705)
Updating files:  58% (7369/12705)
Updating files:  59% (7496/12705)
Updating files:  60% (7623/12705)
Updating files:  61% (7751/12705)
Updating files:  62% (7878/12705)
Updating files:  63% (8005/12705)
Updating files:  64% (8132/12705)
Updating files:  65% (8259/12705)
Updating files:  66% (8386/12705)
Updating files:  67% (8513/12705)
Updating files:  68% (8640/12705)
Updating files:  69% (8767/12705)
Updating files:  70% (8894/12705)
Updating files:  71% (9021/12705)
Updating files:  72% (9148/12705)
Updating files:  73% (9275/12705)
Updating files:  74% (9402/12705)
Updating files:  75% (9529/12705)
Updating files:  76% (9656/12705)
Updating files:  77% (9783/12705)
Updating files:  78% (9910/12705)
Updating files:  79% (10037/12705)
Updating files:  79% (10085/12705)
Updating files:  80% (10164/12705)
Updating files:  81% (10292/12705)
Updating files:  82% (10419/12705)
Updating files:  83% (10546/12705)
Updating files:  84% (10673/12705)
Updating files:  85% (10800/12705)
Updating files:  86% (10927/12705)
Updating files:  87% (11054/12705)
Updating files:  88% (11181/12705)
Updating files:  89% (11308/12705)
Updating files:  90% (11435/12705)
Updating files:  91% (11562/12705)
Updating files:  92% (11689/12705)
Updating files:  93% (11816/12705)
Updating files:  94% (11943/12705)
Updating files:  95% (12070/12705)
Updating files:  96% (12197/12705)
Updating files:  97% (12324/12705)
Updating files:  98% (12451/12705)
Updating files:  99% (12578/12705)
Updating files: 100% (12705/12705)
Updating files: 100% (12705/12705), done.
[INFO] started tweaking git repo https://github.com/tdimino/open-rebellion
[INFO] finished tweaking git repo https://github.com/tdimino/open-rebellion
[INFO] tweaked toml for git repo https://github.com/tdimino/open-rebellion written to /workspace/builds/worker-5-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/tdimino/open-rebellion on toolchain beta-2026-04-21
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+beta-2026-04-21" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/tdimino/open-rebellion 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" "+beta-2026-04-21" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-04-21" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 01c9cc15832f673e39fd7a869c439883b3b9190223cbc9bd915aeddd28b7c40a
[INFO] running `Command { std: "docker" "start" "-a" "01c9cc15832f673e39fd7a869c439883b3b9190223cbc9bd915aeddd28b7c40a", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "01c9cc15832f673e39fd7a869c439883b3b9190223cbc9bd915aeddd28b7c40a", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "01c9cc15832f673e39fd7a869c439883b3b9190223cbc9bd915aeddd28b7c40a", kill_on_drop: false }`
[INFO] [stdout] 01c9cc15832f673e39fd7a869c439883b3b9190223cbc9bd915aeddd28b7c40a
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-04-21" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 4f33c07ed2ad5dca8d6aebd69c0839bc255e5ff77c49b901ff5eae20d4a6b13b
[INFO] running `Command { std: "docker" "start" "-a" "4f33c07ed2ad5dca8d6aebd69c0839bc255e5ff77c49b901ff5eae20d4a6b13b", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]    Compiling quote v1.0.45
[INFO] [stderr]    Compiling unicode-ident v1.0.24
[INFO] [stderr]    Compiling libc v0.2.183
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling zerocopy v0.8.42
[INFO] [stderr]    Compiling simd-adler32 v0.3.8
[INFO] [stderr]    Compiling zmij v1.0.21
[INFO] [stderr]    Compiling adler2 v2.0.1
[INFO] [stderr]    Compiling miniz_oxide v0.8.9
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling byteorder v1.5.0
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling anstyle-parse v0.2.7
[INFO] [stderr]    Compiling fdeflate v0.3.7
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling flate2 v1.1.9
[INFO] [stderr]    Compiling is_terminal_polyfill v1.70.2
[INFO] [stderr]    Compiling anstyle v1.0.13
[INFO] [stderr]    Compiling anstyle-query v1.1.5
[INFO] [stderr]    Compiling colorchoice v1.0.4
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling ttf-parser v0.25.1
[INFO] [stderr]    Compiling anstream v0.6.21
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling ogg v0.7.1
[INFO] [stderr]    Compiling slotmap v1.1.1
[INFO] [stderr]    Compiling once_cell v1.21.4
[INFO] [stderr]    Compiling ab_glyph_rasterizer v0.1.10
[INFO] [stderr]    Compiling derive_pod v0.1.2
[INFO] [stderr]    Compiling anyhow v1.0.102
[INFO] [stderr]    Compiling clap_lex v1.0.0
[INFO] [stderr]    Compiling miniquad v0.4.8
[INFO] [stderr]    Compiling bitflags v2.11.0
[INFO] [stderr]    Compiling clap_builder v4.5.60
[INFO] [stderr]    Compiling dataview v1.0.2
[INFO] [stderr]    Compiling lewton v0.9.4
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling pelite-macros v0.1.1
[INFO] [stderr]    Compiling profiling v1.0.17
[INFO] [stderr]    Compiling no-std-compat v0.4.1
[INFO] [stderr]    Compiling nohash-hasher v0.2.0
[INFO] [stderr]    Compiling epaint_default_fonts v0.31.1
[INFO] [stderr]    Compiling hound v3.5.1
[INFO] [stderr]    Compiling quad-snd v0.2.8
[INFO] [stderr]    Compiling pelite v0.10.0
[INFO] [stderr]    Compiling indexmap v2.13.0
[INFO] [stderr]    Compiling audrey v0.3.0
[INFO] [stderr]    Compiling owned_ttf_parser v0.25.1
[INFO] [stderr]    Compiling ab_glyph v0.2.32
[INFO] [stderr]    Compiling inotify-sys v0.1.5
[INFO] [stderr]    Compiling quad-alsa-sys v0.3.2
[INFO] [stderr]    Compiling png v0.17.16
[INFO] [stderr]    Compiling webbrowser v0.5.5
[INFO] [stderr]    Compiling toml_write v0.1.2
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling ttf-parser v0.21.1
[INFO] [stderr]    Compiling winnow v0.7.15
[INFO] [stderr]    Compiling mio v0.8.11
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling bytemuck_derive v1.10.2
[INFO] [stderr]    Compiling clap_derive v4.5.55
[INFO] [stderr]    Compiling fontdue v0.9.3
[INFO] [stderr]    Compiling bytemuck v1.25.0
[INFO] [stderr]    Compiling quad-url v0.1.2
[INFO] [stderr]    Compiling inotify v0.9.6
[INFO] [stderr]    Compiling emath v0.31.1
[INFO] [stderr]    Compiling ecolor v0.31.1
[INFO] [stderr]    Compiling image v0.24.9
[INFO] [stderr]    Compiling crossbeam-channel v0.5.15
[INFO] [stderr]    Compiling filetime v0.2.27
[INFO] [stderr]    Compiling pxfm v0.1.28
[INFO] [stderr]    Compiling epaint v0.31.1
[INFO] [stderr]    Compiling quad-rand v0.2.3
[INFO] [stderr]    Compiling macroquad_macro v0.1.8
[INFO] [stderr]    Compiling glam v0.27.0
[INFO] [stderr]    Compiling notify v6.1.1
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling clap v4.5.60
[INFO] [stderr]    Compiling rand_xoshiro v0.6.0
[INFO] [stderr]    Compiling png v0.18.1
[INFO] [stderr]    Compiling semver v1.0.27
[INFO] [stderr]    Compiling egui v0.31.1
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling dat-dumper v0.1.0 (/opt/rustwide/workdir/tools/dat-dumper)
[INFO] [stderr]    Compiling rebellion-core v0.1.0 (/opt/rustwide/workdir/crates/rebellion-core)
[INFO] [stderr]    Compiling macroquad v0.4.14
[INFO] [stderr]    Compiling moxcms v0.8.1
[INFO] [stderr]    Compiling bincode v1.3.3
[INFO] [stderr]    Compiling nucleo-matcher v0.3.1
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling egui-miniquad v0.16.0
[INFO] [stderr]    Compiling egui-macroquad v0.17.3
[INFO] [stderr]    Compiling image v0.25.10
[INFO] [stdout] warning: constant `GNPRTB_MAINTENANCE_RATE_NEUTRAL` is never used
[INFO] [stdout]   --> crates/rebellion-core/src/economy.rs:56:7
[INFO] [stdout]    |
[INFO] [stdout] 56 | const GNPRTB_MAINTENANCE_RATE_NEUTRAL: u16 = 7696;   // =30: ticks between maintenance checks (neutral)
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling rebellion-data v0.1.0 (/opt/rustwide/workdir/crates/rebellion-data)
[INFO] [stdout] warning: unused import: `ControlKind`
[INFO] [stdout]   --> crates/rebellion-data/src/save.rs:55:29
[INFO] [stdout]    |
[INFO] [stdout] 55 | use rebellion_core::world::{ControlKind, GameWorld};
[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: `ControlKind`
[INFO] [stdout]   --> crates/rebellion-data/src/simulation.rs:30:29
[INFO] [stdout]    |
[INFO] [stdout] 30 | use rebellion_core::world::{ControlKind, GameWorld, MstbTable};
[INFO] [stdout]    |                             ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling rebellion-render v0.1.0 (/opt/rustwide/workdir/crates/rebellion-render)
[INFO] [stdout] warning: unused variable: `state`
[INFO] [stdout]   --> crates/rebellion-render/src/panels/jedi.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     state: &mut JediPanelState,
[INFO] [stdout]    |     ^^^^^ help: if this is intentional, prefix it with an underscore: `_state`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling rebellion-playtest v0.1.0 (/opt/rustwide/workdir/crates/rebellion-playtest)
[INFO] [stderr]    Compiling rebellion-app v0.1.0 (/opt/rustwide/workdir/crates/rebellion-app)
[INFO] [stdout] warning: value assigned to `show_officers` is never read
[INFO] [stdout]    --> crates/rebellion-app/src/main.rs:673:29
[INFO] [stdout]     |
[INFO] [stdout] 673 |                             show_officers = false;
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stdout]     |                             ------------ `show_officers` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 687 |             toggle_panel!(KeyCode::O, show_officers);
[INFO] [stdout]     |             ---------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `show_fleets` is never read
[INFO] [stdout]    --> crates/rebellion-app/src/main.rs:674:29
[INFO] [stdout]     |
[INFO] [stdout] 674 |                             show_fleets = false;
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stdout]     |                             ------------ `show_fleets` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 688 |             toggle_panel!(KeyCode::F, show_fleets);
[INFO] [stdout]     |             -------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `show_manufacturing` is never read
[INFO] [stdout]    --> crates/rebellion-app/src/main.rs:675:29
[INFO] [stdout]     |
[INFO] [stdout] 675 |                             show_manufacturing = false;
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stdout]     |                             ------------ `show_manufacturing` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 689 |             toggle_panel!(KeyCode::M, show_manufacturing);
[INFO] [stdout]     |             --------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `show_missions` is never read
[INFO] [stdout]    --> crates/rebellion-app/src/main.rs:676:29
[INFO] [stdout]     |
[INFO] [stdout] 676 |                             show_missions = false;
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stdout]     |                             ------------ `show_missions` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 690 |             toggle_panel!(KeyCode::N, show_missions);
[INFO] [stdout]     |             ---------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `show_research` is never read
[INFO] [stdout]    --> crates/rebellion-app/src/main.rs:677:29
[INFO] [stdout]     |
[INFO] [stdout] 677 |                             show_research = false;
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stdout]     |                             ------------ `show_research` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 691 |             toggle_panel!(KeyCode::T, show_research);
[INFO] [stdout]     |             ---------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `show_jedi` is never read
[INFO] [stdout]    --> crates/rebellion-app/src/main.rs:678:29
[INFO] [stdout]     |
[INFO] [stdout] 678 |                             show_jedi = false;
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stdout]     |                             ------------ `show_jedi` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 692 |             toggle_panel!(KeyCode::J, show_jedi);
[INFO] [stdout]     |             ------------------------------------ in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `show_bombardment` is never read
[INFO] [stdout]    --> crates/rebellion-app/src/main.rs:679:29
[INFO] [stdout]     |
[INFO] [stdout] 679 |                             show_bombardment = false;
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stdout]     |                             ------------ `show_bombardment` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 693 |             toggle_panel!(KeyCode::B, show_bombardment);
[INFO] [stdout]     |             ------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `show_death_star` is never read
[INFO] [stdout]    --> crates/rebellion-app/src/main.rs:680:29
[INFO] [stdout]     |
[INFO] [stdout] 680 |                             show_death_star = false;
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] 681 |                             show_loyalty = false;
[INFO] [stdout] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stdout]     |                             ------------ `show_death_star` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 694 |             toggle_panel!(KeyCode::D, show_death_star);
[INFO] [stdout]     |             ------------------------------------------ in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `show_loyalty` is never read
[INFO] [stdout]    --> crates/rebellion-app/src/main.rs:681:29
[INFO] [stdout]     |
[INFO] [stdout] 681 |                             show_loyalty = false;
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stdout]     |                             ------------ `show_loyalty` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 695 |             toggle_panel!(KeyCode::L, show_loyalty);
[INFO] [stdout]     |             --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player_faction`
[INFO] [stdout]     --> crates/rebellion-app/src/main.rs:2705:5
[INFO] [stdout]      |
[INFO] [stdout] 2705 |     player_faction: &mut MissionFaction,
[INFO] [stdout]      |     ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_player_faction`
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `audio_engine`
[INFO] [stdout]     --> crates/rebellion-app/src/main.rs:2713:41
[INFO] [stdout]      |
[INFO] [stdout] 2713 |     #[cfg(not(target_arch = "wasm32"))] audio_engine: &mut audio::AudioEngine,
[INFO] [stdout]      |                                         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_audio_engine`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `audio_vol`
[INFO] [stdout]     --> crates/rebellion-app/src/main.rs:2714:41
[INFO] [stdout]      |
[INFO] [stdout] 2714 |     #[cfg(not(target_arch = "wasm32"))] audio_vol: &AudioVolumeState,
[INFO] [stdout]      |                                         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_audio_vol`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sounds_dir`
[INFO] [stdout]     --> crates/rebellion-app/src/main.rs:2715:41
[INFO] [stdout]      |
[INFO] [stdout] 2715 |     #[cfg(not(target_arch = "wasm32"))] sounds_dir: &Path,
[INFO] [stdout]      |                                         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sounds_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `VictoryModal` is never constructed
[INFO] [stdout]   --> crates/rebellion-app/src/main.rs:73:5
[INFO] [stdout]    |
[INFO] [stdout] 59 | enum GameMode {
[INFO] [stdout]    |      -------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 73 |     VictoryModal { alliance_won: bool },
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GameMode` 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] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 38s
[INFO] running `Command { std: "docker" "inspect" "4f33c07ed2ad5dca8d6aebd69c0839bc255e5ff77c49b901ff5eae20d4a6b13b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "4f33c07ed2ad5dca8d6aebd69c0839bc255e5ff77c49b901ff5eae20d4a6b13b", kill_on_drop: false }`
[INFO] [stdout] 4f33c07ed2ad5dca8d6aebd69c0839bc255e5ff77c49b901ff5eae20d4a6b13b
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-04-21" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 876a02e8b0e816ed5a0090437bde44d3861ffc5610da47a602ff7ecb43a3a028
[INFO] running `Command { std: "docker" "start" "-a" "876a02e8b0e816ed5a0090437bde44d3861ffc5610da47a602ff7ecb43a3a028", kill_on_drop: false }`
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling bitflags v2.11.0
[INFO] [stderr]    Compiling once_cell v1.21.4
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling png v0.18.1
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling bytemuck_derive v1.10.2
[INFO] [stderr]    Compiling clap_derive v4.5.55
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]    Compiling bytemuck v1.25.0
[INFO] [stderr]    Compiling emath v0.31.1
[INFO] [stderr]    Compiling image v0.24.9
[INFO] [stderr]    Compiling image v0.25.10
[INFO] [stderr]    Compiling strum v0.26.3
[INFO] [stderr]    Compiling ecolor v0.31.1
[INFO] [stderr]    Compiling clap v4.5.60
[INFO] [stderr]    Compiling epaint v0.31.1
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling macroquad v0.4.14
[INFO] [stderr]    Compiling egui v0.31.1
[INFO] [stderr]    Compiling slotmap v1.1.1
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling dat-dumper v0.1.0 (/opt/rustwide/workdir/tools/dat-dumper)
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling rebellion-core v0.1.0 (/opt/rustwide/workdir/crates/rebellion-core)
[INFO] [stderr]    Compiling bincode v1.3.3
[INFO] [stdout] warning: unused import: `ForceTier`
[INFO] [stdout]     --> crates/rebellion-core/src/ai.rs:2156:59
[INFO] [stdout]      |
[INFO] [stdout] 2156 |         CapitalShipClass, Character, FighterClass, Fleet, ForceTier, GameWorld, Sector,
[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: `crate::ids::DatId`
[INFO] [stdout]    --> crates/rebellion-core/src/betrayal.rs:139:9
[INFO] [stdout]     |
[INFO] [stdout] 139 |     use crate::ids::DatId;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ForceTier`
[INFO] [stdout]    --> crates/rebellion-core/src/betrayal.rs:141:35
[INFO] [stdout]     |
[INFO] [stdout] 141 |     use crate::world::{Character, ForceTier, GameWorld, MstbEntry, MstbTable, SkillPair};
[INFO] [stdout]     |                                   ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SkillPair`
[INFO] [stdout]    --> crates/rebellion-core/src/events.rs:821:46
[INFO] [stdout]     |
[INFO] [stdout] 821 |     use crate::world::{Character, ForceTier, SkillPair};
[INFO] [stdout]     |                                              ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ExplorationStatus` and `Faction`
[INFO] [stdout]     --> crates/rebellion-core/src/events.rs:1484:26
[INFO] [stdout]      |
[INFO] [stdout] 1484 |         use crate::dat::{ExplorationStatus, Faction};
[INFO] [stdout]      |                          ^^^^^^^^^^^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Faction`
[INFO] [stdout]     --> crates/rebellion-core/src/events.rs:1750:45
[INFO] [stdout]      |
[INFO] [stdout] 1750 |         use crate::dat::{ExplorationStatus, Faction};
[INFO] [stdout]      |                                             ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::ids::DatId`
[INFO] [stdout]    --> crates/rebellion-core/src/jedi.rs:339:9
[INFO] [stdout]     |
[INFO] [stdout] 339 |     use crate::ids::DatId;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ForceTier`
[INFO] [stdout]     --> crates/rebellion-core/src/missions.rs:1136:35
[INFO] [stdout]      |
[INFO] [stdout] 1136 |     use crate::world::{Character, ForceTier, GameWorld, SkillPair};
[INFO] [stdout]      |                                   ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ForceTier`
[INFO] [stdout]    --> crates/rebellion-core/src/movement.rs:506:45
[INFO] [stdout]     |
[INFO] [stdout] 506 |         CapitalShipClass, Character, Fleet, ForceTier, GameWorld, Sector, ShipInstance,
[INFO] [stdout]     |                                             ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::ids::*`
[INFO] [stdout]    --> crates/rebellion-core/src/repair.rs:129:9
[INFO] [stdout]     |
[INFO] [stdout] 129 |     use crate::ids::*;
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::world::ControlKind`
[INFO] [stdout]    --> crates/rebellion-core/src/research.rs:347:9
[INFO] [stdout]     |
[INFO] [stdout] 347 |     use crate::world::ControlKind;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DatId`
[INFO] [stdout]    --> crates/rebellion-core/src/research.rs:348:36
[INFO] [stdout]     |
[INFO] [stdout] 348 |     use crate::ids::{CharacterKey, DatId};
[INFO] [stdout]     |                                    ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SkillPair`
[INFO] [stdout]    --> crates/rebellion-core/src/story_events.rs:832:53
[INFO] [stdout]     |
[INFO] [stdout] 832 |     use crate::world::{Character, Fleet, ForceTier, SkillPair};
[INFO] [stdout]     |                                                     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling egui-miniquad v0.16.0
[INFO] [stderr]    Compiling egui-macroquad v0.17.3
[INFO] [stdout] warning: unused variable: `interior_sys`
[INFO] [stdout]     --> crates/rebellion-core/src/ai.rs:2960:13
[INFO] [stdout]      |
[INFO] [stdout] 2960 |         let interior_sys = world.systems.insert(System {
[INFO] [stdout]      |             ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_interior_sys`
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sp`
[INFO] [stdout]     --> crates/rebellion-core/src/combat.rs:2285:13
[INFO] [stdout]      |
[INFO] [stdout] 2285 |         let sp = SkillPair { base: 0, variance: 0 };
[INFO] [stdout]      |             ^^ help: if this is intentional, prefix it with an underscore: `_sp`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `target_class`
[INFO] [stdout]     --> crates/rebellion-core/src/combat.rs:2362:13
[INFO] [stdout]      |
[INFO] [stdout] 2362 |         let target_class = make_class(&mut world, 200, 1);
[INFO] [stdout]      |             ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_target_class`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `GNPRTB_MAINTENANCE_RATE_NEUTRAL` is never used
[INFO] [stdout]   --> crates/rebellion-core/src/economy.rs:56:7
[INFO] [stdout]    |
[INFO] [stdout] 56 | const GNPRTB_MAINTENANCE_RATE_NEUTRAL: u16 = 7696;   // =30: ticks between maintenance checks (neutral)
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sys_key`
[INFO] [stdout]     --> crates/rebellion-core/src/economy.rs:1232:13
[INFO] [stdout]      |
[INFO] [stdout] 1232 |         let sys_key = world.systems.insert(crate::world::System {
[INFO] [stdout]      |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sys_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling rebellion-data v0.1.0 (/opt/rustwide/workdir/crates/rebellion-data)
[INFO] [stderr]    Compiling rebellion-render v0.1.0 (/opt/rustwide/workdir/crates/rebellion-render)
[INFO] [stdout] warning: unused import: `ControlKind`
[INFO] [stdout]   --> crates/rebellion-data/src/save.rs:55:29
[INFO] [stdout]    |
[INFO] [stdout] 55 | use rebellion_core::world::{ControlKind, GameWorld};
[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: `ControlKind`
[INFO] [stdout]   --> crates/rebellion-data/src/simulation.rs:30:29
[INFO] [stdout]    |
[INFO] [stdout] 30 | use rebellion_core::world::{ControlKind, GameWorld, MstbTable};
[INFO] [stdout]    |                             ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `world`
[INFO] [stdout]    --> crates/rebellion-core/src/research.rs:515:13
[INFO] [stdout]     |
[INFO] [stdout] 515 |         let world = GameWorld::default();
[INFO] [stdout]     |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_world`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `state`
[INFO] [stdout]   --> crates/rebellion-render/src/panels/jedi.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     state: &mut JediPanelState,
[INFO] [stdout]    |     ^^^^^ help: if this is intentional, prefix it with an underscore: `_state`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `zero_skills` is never used
[INFO] [stdout]     --> crates/rebellion-core/src/ai.rs:2209:8
[INFO] [stdout]      |
[INFO] [stdout] 2209 |     fn zero_skills() -> SkillPair {
[INFO] [stdout]      |        ^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `GNPRTB_MAINTENANCE_RATE_NEUTRAL` is never used
[INFO] [stdout]   --> crates/rebellion-core/src/economy.rs:56:7
[INFO] [stdout]    |
[INFO] [stdout] 56 | const GNPRTB_MAINTENANCE_RATE_NEUTRAL: u16 = 7696;   // =30: ticks between maintenance checks (neutral)
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `zero_skill` is never used
[INFO] [stdout]    --> crates/rebellion-core/src/movement.rs:510:8
[INFO] [stdout]     |
[INFO] [stdout] 510 |     fn zero_skill() -> SkillPair {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `state`
[INFO] [stdout]   --> crates/rebellion-render/src/panels/jedi.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     state: &mut JediPanelState,
[INFO] [stdout]    |     ^^^^^ help: if this is intentional, prefix it with an underscore: `_state`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling rebellion-app v0.1.0 (/opt/rustwide/workdir/crates/rebellion-app)
[INFO] [stderr]    Compiling rebellion-playtest v0.1.0 (/opt/rustwide/workdir/crates/rebellion-playtest)
[INFO] [stdout] warning: value assigned to `show_officers` is never read
[INFO] [stdout]    --> crates/rebellion-app/src/main.rs:673:29
[INFO] [stdout]     |
[INFO] [stdout] 673 |                             show_officers = false;
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stdout]     |                             ------------ `show_officers` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 687 |             toggle_panel!(KeyCode::O, show_officers);
[INFO] [stdout]     |             ---------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `show_fleets` is never read
[INFO] [stdout]    --> crates/rebellion-app/src/main.rs:674:29
[INFO] [stdout]     |
[INFO] [stdout] 674 |                             show_fleets = false;
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stdout]     |                             ------------ `show_fleets` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 688 |             toggle_panel!(KeyCode::F, show_fleets);
[INFO] [stdout]     |             -------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `show_manufacturing` is never read
[INFO] [stdout]    --> crates/rebellion-app/src/main.rs:675:29
[INFO] [stdout]     |
[INFO] [stdout] 675 |                             show_manufacturing = false;
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stdout]     |                             ------------ `show_manufacturing` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 689 |             toggle_panel!(KeyCode::M, show_manufacturing);
[INFO] [stdout]     |             --------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `show_missions` is never read
[INFO] [stdout]    --> crates/rebellion-app/src/main.rs:676:29
[INFO] [stdout]     |
[INFO] [stdout] 676 |                             show_missions = false;
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stdout]     |                             ------------ `show_missions` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 690 |             toggle_panel!(KeyCode::N, show_missions);
[INFO] [stdout]     |             ---------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `show_research` is never read
[INFO] [stdout]    --> crates/rebellion-app/src/main.rs:677:29
[INFO] [stdout]     |
[INFO] [stdout] 677 |                             show_research = false;
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stdout]     |                             ------------ `show_research` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 691 |             toggle_panel!(KeyCode::T, show_research);
[INFO] [stdout]     |             ---------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `show_jedi` is never read
[INFO] [stdout]    --> crates/rebellion-app/src/main.rs:678:29
[INFO] [stdout]     |
[INFO] [stdout] 678 |                             show_jedi = false;
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stdout]     |                             ------------ `show_jedi` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 692 |             toggle_panel!(KeyCode::J, show_jedi);
[INFO] [stdout]     |             ------------------------------------ in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `show_bombardment` is never read
[INFO] [stdout]    --> crates/rebellion-app/src/main.rs:679:29
[INFO] [stdout]     |
[INFO] [stdout] 679 |                             show_bombardment = false;
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stdout]     |                             ------------ `show_bombardment` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 693 |             toggle_panel!(KeyCode::B, show_bombardment);
[INFO] [stdout]     |             ------------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `show_death_star` is never read
[INFO] [stdout]    --> crates/rebellion-app/src/main.rs:680:29
[INFO] [stdout]     |
[INFO] [stdout] 680 |                             show_death_star = false;
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] 681 |                             show_loyalty = false;
[INFO] [stdout] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stdout]     |                             ------------ `show_death_star` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 694 |             toggle_panel!(KeyCode::D, show_death_star);
[INFO] [stdout]     |             ------------------------------------------ in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `show_loyalty` is never read
[INFO] [stdout]    --> crates/rebellion-app/src/main.rs:681:29
[INFO] [stdout]     |
[INFO] [stdout] 681 |                             show_loyalty = false;
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stdout]     |                             ------------ `show_loyalty` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 695 |             toggle_panel!(KeyCode::L, show_loyalty);
[INFO] [stdout]     |             --------------------------------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player_faction`
[INFO] [stdout]     --> crates/rebellion-app/src/main.rs:2705:5
[INFO] [stdout]      |
[INFO] [stdout] 2705 |     player_faction: &mut MissionFaction,
[INFO] [stdout]      |     ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_player_faction`
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `audio_engine`
[INFO] [stdout]     --> crates/rebellion-app/src/main.rs:2713:41
[INFO] [stdout]      |
[INFO] [stdout] 2713 |     #[cfg(not(target_arch = "wasm32"))] audio_engine: &mut audio::AudioEngine,
[INFO] [stdout]      |                                         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_audio_engine`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `audio_vol`
[INFO] [stdout]     --> crates/rebellion-app/src/main.rs:2714:41
[INFO] [stdout]      |
[INFO] [stdout] 2714 |     #[cfg(not(target_arch = "wasm32"))] audio_vol: &AudioVolumeState,
[INFO] [stdout]      |                                         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_audio_vol`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sounds_dir`
[INFO] [stdout]     --> crates/rebellion-app/src/main.rs:2715:41
[INFO] [stdout]      |
[INFO] [stdout] 2715 |     #[cfg(not(target_arch = "wasm32"))] sounds_dir: &Path,
[INFO] [stdout]      |                                         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sounds_dir`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `VictoryModal` is never constructed
[INFO] [stdout]   --> crates/rebellion-app/src/main.rs:73:5
[INFO] [stdout]    |
[INFO] [stdout] 59 | enum GameMode {
[INFO] [stdout]    |      -------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 73 |     VictoryModal { alliance_won: bool },
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GameMode` 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] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 51s
[INFO] running `Command { std: "docker" "inspect" "876a02e8b0e816ed5a0090437bde44d3861ffc5610da47a602ff7ecb43a3a028", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "876a02e8b0e816ed5a0090437bde44d3861ffc5610da47a602ff7ecb43a3a028", kill_on_drop: false }`
[INFO] [stdout] 876a02e8b0e816ed5a0090437bde44d3861ffc5610da47a602ff7ecb43a3a028
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-04-21" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] dcf7bddc703a51acaac1df40aae5026c572ab8617fde1a7a7b9e555830c6b541
[INFO] running `Command { std: "docker" "start" "-a" "dcf7bddc703a51acaac1df40aae5026c572ab8617fde1a7a7b9e555830c6b541", kill_on_drop: false }`
[INFO] [stderr] warning: constant `GNPRTB_MAINTENANCE_RATE_NEUTRAL` is never used
[INFO] [stderr]   --> crates/rebellion-core/src/economy.rs:56:7
[INFO] [stderr]    |
[INFO] [stderr] 56 | const GNPRTB_MAINTENANCE_RATE_NEUTRAL: u16 = 7696;   // =30: ticks between maintenance checks (neutral)
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: `rebellion-core` (lib) generated 1 warning
[INFO] [stderr] warning: unused import: `ControlKind`
[INFO] [stderr]   --> crates/rebellion-data/src/save.rs:55:29
[INFO] [stderr]    |
[INFO] [stderr] 55 | use rebellion_core::world::{ControlKind, GameWorld};
[INFO] [stderr]    |                             ^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ControlKind`
[INFO] [stderr]   --> crates/rebellion-data/src/simulation.rs:30:29
[INFO] [stderr]    |
[INFO] [stderr] 30 | use rebellion_core::world::{ControlKind, GameWorld, MstbTable};
[INFO] [stderr]    |                             ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `rebellion-data` (lib) generated 2 warnings (run `cargo fix --lib -p rebellion-data` to apply 2 suggestions)
[INFO] [stderr] warning: unused variable: `state`
[INFO] [stderr]   --> crates/rebellion-render/src/panels/jedi.rs:29:5
[INFO] [stderr]    |
[INFO] [stderr] 29 |     state: &mut JediPanelState,
[INFO] [stderr]    |     ^^^^^ help: if this is intentional, prefix it with an underscore: `_state`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: `rebellion-render` (lib) generated 1 warning (run `cargo fix --lib -p rebellion-render` to apply 1 suggestion)
[INFO] [stderr] warning: `rebellion-render` (lib test) generated 1 warning (1 duplicate)
[INFO] [stderr] warning: value assigned to `show_officers` is never read
[INFO] [stderr]    --> crates/rebellion-app/src/main.rs:673:29
[INFO] [stderr]     |
[INFO] [stderr] 673 |                             show_officers = false;
[INFO] [stderr]     |                             ^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stderr] ...
[INFO] [stderr] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stderr]     |                             ------------ `show_officers` is overwritten here before the previous value is read
[INFO] [stderr] ...
[INFO] [stderr] 687 |             toggle_panel!(KeyCode::O, show_officers);
[INFO] [stderr]     |             ---------------------------------------- in this macro invocation
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `show_fleets` is never read
[INFO] [stderr]    --> crates/rebellion-app/src/main.rs:674:29
[INFO] [stderr]     |
[INFO] [stderr] 674 |                             show_fleets = false;
[INFO] [stderr]     |                             ^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stderr] ...
[INFO] [stderr] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stderr]     |                             ------------ `show_fleets` is overwritten here before the previous value is read
[INFO] [stderr] ...
[INFO] [stderr] 688 |             toggle_panel!(KeyCode::F, show_fleets);
[INFO] [stderr]     |             -------------------------------------- in this macro invocation
[INFO] [stderr]     |
[INFO] [stderr]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `show_manufacturing` is never read
[INFO] [stderr]    --> crates/rebellion-app/src/main.rs:675:29
[INFO] [stderr]     |
[INFO] [stderr] 675 |                             show_manufacturing = false;
[INFO] [stderr]     |                             ^^^^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stderr] ...
[INFO] [stderr] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stderr]     |                             ------------ `show_manufacturing` is overwritten here before the previous value is read
[INFO] [stderr] ...
[INFO] [stderr] 689 |             toggle_panel!(KeyCode::M, show_manufacturing);
[INFO] [stderr]     |             --------------------------------------------- in this macro invocation
[INFO] [stderr]     |
[INFO] [stderr]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `show_missions` is never read
[INFO] [stderr]    --> crates/rebellion-app/src/main.rs:676:29
[INFO] [stderr]     |
[INFO] [stderr] 676 |                             show_missions = false;
[INFO] [stderr]     |                             ^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stderr] ...
[INFO] [stderr] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stderr]     |                             ------------ `show_missions` is overwritten here before the previous value is read
[INFO] [stderr] ...
[INFO] [stderr] 690 |             toggle_panel!(KeyCode::N, show_missions);
[INFO] [stderr]     |             ---------------------------------------- in this macro invocation
[INFO] [stderr]     |
[INFO] [stderr]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `show_research` is never read
[INFO] [stderr]    --> crates/rebellion-app/src/main.rs:677:29
[INFO] [stderr]     |
[INFO] [stderr] 677 |                             show_research = false;
[INFO] [stderr]     |                             ^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stderr] ...
[INFO] [stderr] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stderr]     |                             ------------ `show_research` is overwritten here before the previous value is read
[INFO] [stderr] ...
[INFO] [stderr] 691 |             toggle_panel!(KeyCode::T, show_research);
[INFO] [stderr]     |             ---------------------------------------- in this macro invocation
[INFO] [stderr]     |
[INFO] [stderr]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `show_jedi` is never read
[INFO] [stderr]    --> crates/rebellion-app/src/main.rs:678:29
[INFO] [stderr]     |
[INFO] [stderr] 678 |                             show_jedi = false;
[INFO] [stderr]     |                             ^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stderr] ...
[INFO] [stderr] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stderr]     |                             ------------ `show_jedi` is overwritten here before the previous value is read
[INFO] [stderr] ...
[INFO] [stderr] 692 |             toggle_panel!(KeyCode::J, show_jedi);
[INFO] [stderr]     |             ------------------------------------ in this macro invocation
[INFO] [stderr]     |
[INFO] [stderr]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `show_bombardment` is never read
[INFO] [stderr]    --> crates/rebellion-app/src/main.rs:679:29
[INFO] [stderr]     |
[INFO] [stderr] 679 |                             show_bombardment = false;
[INFO] [stderr]     |                             ^^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stderr] ...
[INFO] [stderr] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stderr]     |                             ------------ `show_bombardment` is overwritten here before the previous value is read
[INFO] [stderr] ...
[INFO] [stderr] 693 |             toggle_panel!(KeyCode::B, show_bombardment);
[INFO] [stderr]     |             ------------------------------------------- in this macro invocation
[INFO] [stderr]     |
[INFO] [stderr]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `show_death_star` is never read
[INFO] [stderr]    --> crates/rebellion-app/src/main.rs:680:29
[INFO] [stderr]     |
[INFO] [stderr] 680 |                             show_death_star = false;
[INFO] [stderr]     |                             ^^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stderr] 681 |                             show_loyalty = false;
[INFO] [stderr] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stderr]     |                             ------------ `show_death_star` is overwritten here before the previous value is read
[INFO] [stderr] ...
[INFO] [stderr] 694 |             toggle_panel!(KeyCode::D, show_death_star);
[INFO] [stderr]     |             ------------------------------------------ in this macro invocation
[INFO] [stderr]     |
[INFO] [stderr]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `show_loyalty` is never read
[INFO] [stderr]    --> crates/rebellion-app/src/main.rs:681:29
[INFO] [stderr]     |
[INFO] [stderr] 681 |                             show_loyalty = false;
[INFO] [stderr]     |                             ^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stderr] 682 |                             $flag = true; // restore after blanket clear
[INFO] [stderr]     |                             ------------ `show_loyalty` is overwritten here before the previous value is read
[INFO] [stderr] ...
[INFO] [stderr] 695 |             toggle_panel!(KeyCode::L, show_loyalty);
[INFO] [stderr]     |             --------------------------------------- in this macro invocation
[INFO] [stderr]     |
[INFO] [stderr]     = note: this warning originates in the macro `toggle_panel` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `player_faction`
[INFO] [stderr]     --> crates/rebellion-app/src/main.rs:2705:5
[INFO] [stderr]      |
[INFO] [stderr] 2705 |     player_faction: &mut MissionFaction,
[INFO] [stderr]      |     ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_player_faction`
[INFO] [stderr]      |
[INFO] [stderr]      = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `audio_engine`
[INFO] [stderr]     --> crates/rebellion-app/src/main.rs:2713:41
[INFO] [stderr]      |
[INFO] [stderr] 2713 |     #[cfg(not(target_arch = "wasm32"))] audio_engine: &mut audio::AudioEngine,
[INFO] [stderr]      |                                         ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_audio_engine`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `audio_vol`
[INFO] [stderr]     --> crates/rebellion-app/src/main.rs:2714:41
[INFO] [stderr]      |
[INFO] [stderr] 2714 |     #[cfg(not(target_arch = "wasm32"))] audio_vol: &AudioVolumeState,
[INFO] [stderr]      |                                         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_audio_vol`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `sounds_dir`
[INFO] [stderr]     --> crates/rebellion-app/src/main.rs:2715:41
[INFO] [stderr]      |
[INFO] [stderr] 2715 |     #[cfg(not(target_arch = "wasm32"))] sounds_dir: &Path,
[INFO] [stderr]      |                                         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sounds_dir`
[INFO] [stderr] 
[INFO] [stderr] warning: variant `VictoryModal` is never constructed
[INFO] [stderr]   --> crates/rebellion-app/src/main.rs:73:5
[INFO] [stderr]    |
[INFO] [stderr] 59 | enum GameMode {
[INFO] [stderr]    |      -------- variant in this enum
[INFO] [stderr] ...
[INFO] [stderr] 73 |     VictoryModal { alliance_won: bool },
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `GameMode` 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: unused import: `ForceTier`
[INFO] [stderr]     --> crates/rebellion-core/src/ai.rs:2156:59
[INFO] [stderr]      |
[INFO] [stderr] 2156 |         CapitalShipClass, Character, FighterClass, Fleet, ForceTier, GameWorld, Sector,
[INFO] [stderr]      |                                                           ^^^^^^^^^
[INFO] [stderr]      |
[INFO] [stderr]      = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::ids::DatId`
[INFO] [stderr]    --> crates/rebellion-core/src/betrayal.rs:139:9
[INFO] [stderr]     |
[INFO] [stderr] 139 |     use crate::ids::DatId;
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ForceTier`
[INFO] [stderr]    --> crates/rebellion-core/src/betrayal.rs:141:35
[INFO] [stderr]     |
[INFO] [stderr] 141 |     use crate::world::{Character, ForceTier, GameWorld, MstbEntry, MstbTable, SkillPair};
[INFO] [stderr]     |                                   ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `SkillPair`
[INFO] [stderr]    --> crates/rebellion-core/src/events.rs:821:46
[INFO] [stderr]     |
[INFO] [stderr] 821 |     use crate::world::{Character, ForceTier, SkillPair};
[INFO] [stderr]     |                                              ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `ExplorationStatus` and `Faction`
[INFO] [stderr]     --> crates/rebellion-core/src/events.rs:1484:26
[INFO] [stderr]      |
[INFO] [stderr] 1484 |         use crate::dat::{ExplorationStatus, Faction};
[INFO] [stderr]      |                          ^^^^^^^^^^^^^^^^^  ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Faction`
[INFO] [stderr]     --> crates/rebellion-core/src/events.rs:1750:45
[INFO] [stderr]      |
[INFO] [stderr] 1750 |         use crate::dat::{ExplorationStatus, Faction};
[INFO] [stderr]      |                                             ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::ids::DatId`
[INFO] [stderr]    --> crates/rebellion-core/src/jedi.rs:339:9
[INFO] [stderr]     |
[INFO] [stderr] 339 |     use crate::ids::DatId;
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ForceTier`
[INFO] [stderr]     --> crates/rebellion-core/src/missions.rs:1136:35
[INFO] [stderr]      |
[INFO] [stderr] 1136 |     use crate::world::{Character, ForceTier, GameWorld, SkillPair};
[INFO] [stderr]      |                                   ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ForceTier`
[INFO] [stderr]    --> crates/rebellion-core/src/movement.rs:506:45
[INFO] [stderr]     |
[INFO] [stderr] 506 |         CapitalShipClass, Character, Fleet, ForceTier, GameWorld, Sector, ShipInstance,
[INFO] [stderr]     |                                             ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::ids::*`
[INFO] [stderr]    --> crates/rebellion-core/src/repair.rs:129:9
[INFO] [stderr]     |
[INFO] [stderr] 129 |     use crate::ids::*;
[INFO] [stderr]     |         ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::world::ControlKind`
[INFO] [stderr]    --> crates/rebellion-core/src/research.rs:347:9
[INFO] [stderr]     |
[INFO] [stderr] 347 |     use crate::world::ControlKind;
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `DatId`
[INFO] [stderr]    --> crates/rebellion-core/src/research.rs:348:36
[INFO] [stderr]     |
[INFO] [stderr] 348 |     use crate::ids::{CharacterKey, DatId};
[INFO] [stderr]     |                                    ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `SkillPair`
[INFO] [stderr]    --> crates/rebellion-core/src/story_events.rs:832:53
[INFO] [stderr]     |
[INFO] [stderr] 832 |     use crate::world::{Character, Fleet, ForceTier, SkillPair};
[INFO] [stderr]     |                                                     ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `interior_sys`
[INFO] [stderr]     --> crates/rebellion-core/src/ai.rs:2960:13
[INFO] [stderr]      |
[INFO] [stderr] 2960 |         let interior_sys = world.systems.insert(System {
[INFO] [stderr]      |             ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_interior_sys`
[INFO] [stderr]      |
[INFO] [stderr]      = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `sp`
[INFO] [stderr]     --> crates/rebellion-core/src/combat.rs:2285:13
[INFO] [stderr]      |
[INFO] [stderr] 2285 |         let sp = SkillPair { base: 0, variance: 0 };
[INFO] [stderr]      |             ^^ help: if this is intentional, prefix it with an underscore: `_sp`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `target_class`
[INFO] [stderr]     --> crates/rebellion-core/src/combat.rs:2362:13
[INFO] [stderr]      |
[INFO] [stderr] 2362 |         let target_class = make_class(&mut world, 200, 1);
[INFO] [stderr]      |             ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_target_class`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `sys_key`
[INFO] [stderr]     --> crates/rebellion-core/src/economy.rs:1232:13
[INFO] [stderr]      |
[INFO] [stderr] 1232 |         let sys_key = world.systems.insert(crate::world::System {
[INFO] [stderr]      |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sys_key`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `world`
[INFO] [stderr]    --> crates/rebellion-core/src/research.rs:515:13
[INFO] [stderr]     |
[INFO] [stderr] 515 |         let world = GameWorld::default();
[INFO] [stderr]     |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_world`
[INFO] [stderr] 
[INFO] [stderr] warning: function `zero_skills` is never used
[INFO] [stderr]     --> crates/rebellion-core/src/ai.rs:2209:8
[INFO] [stderr]      |
[INFO] [stderr] 2209 |     fn zero_skills() -> SkillPair {
[INFO] [stderr]      |        ^^^^^^^^^^^
[INFO] [stderr]      |
[INFO] [stderr]      = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: constant `GNPRTB_MAINTENANCE_RATE_NEUTRAL` is never used
[INFO] [stderr]   --> crates/rebellion-core/src/economy.rs:56:7
[INFO] [stderr]    |
[INFO] [stderr] 56 | const GNPRTB_MAINTENANCE_RATE_NEUTRAL: u16 = 7696;   // =30: ticks between maintenance checks (neutral)
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `zero_skill` is never used
[INFO] [stderr]    --> crates/rebellion-core/src/movement.rs:510:8
[INFO] [stderr]     |
[INFO] [stderr] 510 |     fn zero_skill() -> SkillPair {
[INFO] [stderr]     |        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `rebellion-app` (bin "open-rebellion" test) generated 14 warnings (run `cargo fix --bin "open-rebellion" -p rebellion-app --tests` to apply 4 suggestions)
[INFO] [stderr] warning: `rebellion-core` (lib test) generated 21 warnings (run `cargo fix --lib -p rebellion-core --tests` to apply 18 suggestions)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.37s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/dat_dumper-45897003e7590fd2)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/dat_dumper-e9854df26558939e)
[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] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/open_rebellion-cb1b69243a5f5d53)
[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] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/rebellion_core-b76c82ef669b1e6a)
[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] [stdout] 
[INFO] [stdout] running 355 tests
[INFO] [stdout] test ai::tests::ai_dispatches_espionage_on_unexplored_system ... ok
[INFO] [stdout] test ai::tests::can_dispatch_fleet_rejects_no_alive_ships ... ok
[INFO] [stdout] test ai::tests::can_dispatch_rejects_killed_character ... ok
[INFO] [stdout] test ai::tests::before_interval_returns_empty ... ok
[INFO] [stdout] test ai::tests::busy_character_tracking ... ok
[INFO] [stdout] test ai::tests::death_star_retreats_when_outgunned ... ok
[INFO] [stdout] test ai::tests::death_star_targets_highest_value_when_no_hq ... ok
[INFO] [stdout] test ai::tests::fleet_directed_to_attack_weak_enemy_system ... ok
[INFO] [stdout] test ai::tests::covert_ops_capped_at_max_per_eval ... ok
[INFO] [stdout] test ai::tests::can_dispatch_to_system_uses_hull_strength ... ok
[INFO] [stdout] test ai::tests::interval_gates_repeated_evaluation ... ok
[INFO] [stdout] test ai::tests::idle_system_with_mfg_gets_fighter_production ... ok
[INFO] [stdout] test ai::tests::high_diplomacy_minor_dispatched_on_diplomacy ... ok
[INFO] [stdout] test ai::tests::no_ticks_returns_empty ... ok
[INFO] [stdout] test ai::tests::low_diplomacy_minor_not_dispatched ... ok
[INFO] [stdout] test ai::tests::low_espionage_character_not_dispatched_on_covert_ops ... ok
[INFO] [stdout] test ai::tests::reconnaissance_targets_explored_enemy_systems ... ok
[INFO] [stdout] test ai::tests::should_evaluate_after_interval ... ok
[INFO] [stdout] test ai::tests::should_evaluate_at_tick_zero ... ok
[INFO] [stdout] test ai::tests::should_not_evaluate_before_interval ... ok
[INFO] [stdout] test betrayal::tests::high_loyalty_no_betrayal ... ok
[INFO] [stdout] test betrayal::tests::cooldown_prevents_recheck ... ok
[INFO] [stdout] test betrayal::tests::is_unable_to_betray_blocks_betrayal ... ok
[INFO] [stdout] test betrayal::tests::killed_character_does_not_betray ... ok
[INFO] [stdout] test betrayal::tests::low_loyalty_low_roll_triggers_betrayal ... ok
[INFO] [stdout] test betrayal::tests::no_events_without_ticks ... ok
[INFO] [stdout] test blockade::tests::blockade_ends_when_defender_arrives ... ok
[INFO] [stdout] test blockade::tests::blockade_starts_when_hostile_fleet_uncontested ... ok
[INFO] [stdout] test blockade::tests::enemy_troop_not_destroyed_by_own_blockade ... ok
[INFO] [stdout] test blockade::tests::is_blockaded_reflects_current_state ... ok
[INFO] [stdout] test blockade::tests::no_blockade_when_contested ... ok
[INFO] [stdout] test blockade::tests::no_blockade_without_hostile_fleet ... ok
[INFO] [stdout] test blockade::tests::troop_destroyed_on_blockade_start ... ok
[INFO] [stdout] test blockade::tests::no_events_without_ticks ... ok
[INFO] [stdout] test bombardment::tests::test_bombardment_euclidean_formula_exact ... ok
[INFO] [stdout] test ai::tests::troop_deployment_prioritizes_frontline_systems ... ok
[INFO] [stdout] test bombardment::tests::test_bombardment_formula_minimum_one_damage ... ok
[INFO] [stdout] test bombardment::tests::test_bombardment_no_self_damage ... ok
[INFO] [stdout] test bombardment::tests::test_bombardment_scales_with_fleet_strength ... ok
[INFO] [stdout] test ai::tests::major_character_dispatched_on_recruitment_when_unrecruited_exist ... ok
[INFO] [stdout] test combat::tests::ds_normal_ships_unaffected_by_shield ... ok
[INFO] [stdout] test combat::tests::ds_shield_blocks_hull_damage ... ok
[INFO] [stdout] test combat::tests::ds_shield_blocks_vs_unshielded_comparison ... ok
[INFO] [stdout] test combat::tests::no_officer_gives_1x_multiplier ... ok
[INFO] [stdout] test combat::tests::officer_combat_bonus_increases_ground_damage ... ok
[INFO] [stdout] test combat::tests::mixed_weapon_types_use_respective_strengths ... ok
[INFO] [stdout] test combat::tests::ds_shield_destroyed_allows_hull_damage ... ok
[INFO] [stdout] test combat::tests::per_weapon_type_attack_strength_amplifies_damage ... ok
[INFO] [stdout] test combat::tests::test_carrier_capacity_limits_fighter_launch ... ok
[INFO] [stdout] test combat::tests::test_asymmetric_fighter_engagement ... ok
[INFO] [stdout] test ai::tests::busy_character_not_redispatched ... ok
[INFO] [stdout] test combat::tests::test_entity_kind_classification ... ok
[INFO] [stdout] test combat::tests::test_extract_difficulty ... ok
[INFO] [stdout] test ai::tests::high_espionage_character_dispatched_on_sabotage ... ok
[INFO] [stdout] test combat::tests::test_fighter_dogfight_maneuverability_advantage ... ok
[INFO] [stdout] test combat::tests::test_fighter_recall_after_carrier_destruction ... ok
[INFO] [stdout] test combat::tests::test_ground_combat_difficulty_scales_damage ... ok
[INFO] [stdout] test combat::tests::test_ground_combat_large_asymmetric_battle ... ok
[INFO] [stdout] test combat::tests::test_ground_combat_defense_facility_helps_defender ... ok
[INFO] [stdout] test combat::tests::test_fighter_vs_capital_uses_attack_strength ... ok
[INFO] [stdout] test combat::tests::test_ground_combat_attacker_wins ... ok
[INFO] [stdout] test combat::tests::test_ground_combat_no_class_data_uses_fallback ... ok
[INFO] [stdout] test combat::tests::test_ground_combat_no_troops_is_draw ... ok
[INFO] [stdout] test combat::tests::test_ion_cannon_2x_shield_damage ... ok
[INFO] [stdout] test combat::tests::test_ground_combat_zero_strength_troops_skip ... ok
[INFO] [stdout] test combat::tests::test_no_fighters_skips_fighter_phase ... ok
[INFO] [stdout] test combat::tests::test_ion_cannon_integration ... ok
[INFO] [stdout] test combat::tests::test_shield_absorbs_damage_before_hull ... ok
[INFO] [stdout] test combat::tests::test_ground_combat_uses_class_attack_defense_stats ... ok
[INFO] [stdout] test combat::tests::test_shield_overflow_damages_hull ... ok
[INFO] [stdout] test combat::tests::test_space_combat_draw_equal_forces ... ok
[INFO] [stdout] test combat::tests::test_space_combat_returns_damage_events ... ok
[INFO] [stdout] test combat::tests::test_shield_recharge_per_tick ... ok
[INFO] [stdout] test combat::tests::test_shield_prevents_death ... ok
[INFO] [stdout] test combat::tests::test_space_combat_attacker_wins_overwhelming_force ... ok
[INFO] [stdout] test combat::tests::zero_attack_strength_uses_raw_weapon_count ... ok
[INFO] [stdout] test combat::tests::test_zero_shield_passes_all_damage_to_hull ... ok
[INFO] [stdout] test combat::tests::test_space_combat_difficulty_scales_hull_damage ... ok
[INFO] [stdout] test death_star::tests::test_clear_construction ... ok
[INFO] [stdout] test combat::tests::test_shield_integration_full_combat ... ok
[INFO] [stdout] test death_star::tests::test_construction_no_double_start ... ok
[INFO] [stdout] test commands::tests::all_categories_known ... ok
[INFO] [stdout] test death_star::tests::test_construction_countdown_completes ... ok
[INFO] [stdout] test death_star::tests::test_fire_after_shield_destroyed ... ok
[INFO] [stdout] test death_star::tests::test_fire_blocked_already_destroyed ... ok
[INFO] [stdout] test death_star::tests::test_fire_succeeds_on_valid_target ... ok
[INFO] [stdout] test death_star::tests::test_fire_blocked_empire_controlled ... ok
[INFO] [stdout] test death_star::tests::test_fire_blocked_by_shield ... ok
[INFO] [stdout] test death_star::tests::test_nearby_warning_emitted_for_close_system ... ok
[INFO] [stdout] test death_star::tests::test_no_events_without_ticks ... ok
[INFO] [stdout] test death_star::tests::test_fire_blocked_no_death_star_fleet ... ok
[INFO] [stdout] test death_star::tests::test_no_nearby_warning_for_distant_system ... ok
[INFO] [stdout] test economy::tests::collection_rate_at_zero_support ... ok
[INFO] [stdout] test economy::tests::economy_advance_skips_destroyed_systems ... ok
[INFO] [stdout] test economy::tests::collection_rate_high_support ... ok
[INFO] [stdout] test economy::tests::energy_overcap_emits_event ... ok
[INFO] [stdout] test economy::tests::fleet_posture_contested_requires_two_per_side ... ok
[INFO] [stdout] test economy::tests::garrison_requirement_below_threshold ... ok
[INFO] [stdout] test economy::tests::garrison_requirement_above_threshold_is_zero ... ok
[INFO] [stdout] test economy::tests::incident_fires_on_state_transition ... ok
[INFO] [stdout] test commands::tests::all_command_ids_unique ... ok
[INFO] [stdout] test economy::tests::collection_rate_low_support ... ok
[INFO] [stdout] test economy::tests::economy_advance_no_ticks_no_events ... ok
[INFO] [stdout] test economy::tests::economy_advance_produces_telemetry ... ok
[INFO] [stdout] test economy::tests::garrison_requirement_empire_halved ... ok
[INFO] [stdout] test economy::tests::garrison_uprising_doubling ... ok
[INFO] [stdout] test economy::tests::informant_incident_on_garrison_shortfall ... ok
[INFO] [stdout] test economy::tests::k3_resource_discovery_fires_on_positive_delta_not_on_seed ... ok
[INFO] [stdout] test economy::tests::k4_maintenance_shortfall_fires_on_30_tick_cooldown ... ok
[INFO] [stdout] test economy::tests::k2_natural_disaster_fires_only_on_flag_transition ... ok
[INFO] [stdout] test economy::tests::raw_material_overcap_emits_event ... ok
[INFO] [stdout] test economy::tests::k1_support_change_fires_only_on_tier_transition ... ok
[INFO] [stdout] test economy::tests::kdy_production_modifier_reduces_with_ships ... ok
[INFO] [stdout] test economy::tests::no_overcap_when_within_limits ... ok
[INFO] [stdout] test economy::tests::kdy_production_modifier_floors_at_zero ... ok
[INFO] [stdout] test economy::tests::side_resolution_alliance_troops_only ... ok
[INFO] [stdout] test economy::tests::side_resolution_no_troops_energy_above_threshold_preserves ... ok
[INFO] [stdout] test economy::tests::side_resolution_no_troops_low_energy_becomes_uncontrolled ... ok
[INFO] [stdout] test economy::tests::support_drift_at_exact_threshold ... ok
[INFO] [stdout] test economy::tests::side_resolution_both_troops_contested ... ok
[INFO] [stdout] test economy::tests::system_summary_fleet_posture ... ok
[INFO] [stdout] test economy::tests::system_summary_troop_surplus ... ok
[INFO] [stdout] test economy::tests::support_drift_empire_troop_doubling ... ok
[INFO] [stdout] test economy::tests::support_drift_no_garrison_low_support ... ok
[INFO] [stdout] test economy::tests::support_drift_with_fleet_suppresses ... ok
[INFO] [stdout] test effects::tests::combine_effects_preserves_phase_order ... ok
[INFO] [stdout] test economy::tests::unpopulated_system_skipped_in_advance ... ok
[INFO] [stdout] test effects::tests::invert_popularity_shift ... ok
[INFO] [stdout] test effects::tests::filter_effects_by_phase ... ok
[INFO] [stdout] test effects::tests::irreversible_effects_return_none ... ok
[INFO] [stdout] test economy::tests::support_drift_with_troops_reduces ... ok
[INFO] [stdout] test effects::tests::system_name_matches_phase ... ok
[INFO] [stdout] test events::tests::and_logic_requires_all_conditions ... ok
[INFO] [stdout] test effects::tests::story_message_and_special_force_are_command_phase ... ok
[INFO] [stdout] test effects::tests::phase_ordering_is_correct ... ok
[INFO] [stdout] test events::tests::character_assigned_to_fleet_false_when_killed ... ok
[INFO] [stdout] test effects::tests::effects_are_serializable ... ok
[INFO] [stdout] test events::tests::character_exists_false_for_removed_character ... ok
[INFO] [stdout] test events::tests::character_assigned_to_fleet_true_when_on_any_fleet ... ok
[INFO] [stdout] test events::tests::character_has_force_level_false_when_tier_too_low ... ok
[INFO] [stdout] test events::tests::character_has_force_level_true_when_tier_matches ... ok
[INFO] [stdout] test events::tests::characters_co_located_across_different_fleets_at_same_system ... ok
[INFO] [stdout] test events::tests::character_is_force_user_true_for_aware_tier ... ok
[INFO] [stdout] test events::tests::characters_co_located_rejects_killed_character ... ok
[INFO] [stdout] test events::tests::characters_co_located_false_for_nonexistent_character ... ok
[INFO] [stdout] test events::tests::characters_co_located_false_when_at_different_systems ... ok
[INFO] [stdout] test events::tests::characters_co_located_true_when_at_same_system ... ok
[INFO] [stdout] test events::tests::characters_co_located_via_current_system ... ok
[INFO] [stdout] test events::tests::characters_co_located_empty_or_single_is_vacuously_true ... ok
[INFO] [stdout] test events::tests::empty_conditions_always_fires ... ok
[INFO] [stdout] test events::tests::event_fired_condition_chains_events ... ok
[INFO] [stdout] test events::tests::fired_event_carries_actions ... ok
[INFO] [stdout] test events::tests::faction_controls_n_systems_counts_correctly ... ok
[INFO] [stdout] test events::tests::no_ticks_no_fires ... ok
[INFO] [stdout] test events::tests::disabled_event_never_fires ... ok
[INFO] [stdout] test events::tests::faction_controls_system_evaluates_correctly ... ok
[INFO] [stdout] test events::tests::fired_event_carries_correct_tick ... ok
[INFO] [stdout] test events::tests::random_fires_when_roll_below_probability ... ok
[INFO] [stdout] test events::tests::repeatable_fires_every_tick ... ok
[INFO] [stdout] test fog::tests::advance_ignores_enemy_transit_orders ... ok
[INFO] [stdout] test events::tests::tick_reached_does_not_fire_after_target ... ok
[INFO] [stdout] test events::tests::one_shot_fires_only_once ... ok
[INFO] [stdout] test events::tests::tick_at_least_fires_at_and_after_threshold ... ok
[INFO] [stdout] test fog::tests::advance_in_transit_reveals_destination_at_half_progress ... ok
[INFO] [stdout] test events::tests::tick_reached_fires_exactly_on_target ... ok
[INFO] [stdout] test fog::tests::advance_no_new_systems_no_events ... ok
[INFO] [stdout] test fog::tests::advance_reveals_new_fleet_location ... ok
[INFO] [stdout] test fog::tests::empire_fog_tracks_empire_fleets ... ok
[INFO] [stdout] test fog::tests::seed_ignores_enemy_fleets ... ok
[INFO] [stdout] test fog::tests::reveal_is_idempotent ... ok
[INFO] [stdout] test fog::tests::sensor_detection_zero_reveals_only_own_system ... ok
[INFO] [stdout] test fog::tests::reveal_makes_system_visible ... ok
[INFO] [stdout] test fog::tests::seed_reveals_faction_fleet_locations ... ok
[INFO] [stdout] test fog::tests::new_fog_is_empty ... ok
[INFO] [stdout] test game_events::tests::all_event_type_constants_are_unique ... ok
[INFO] [stdout] test game_events::tests::record_deserializes_from_json ... ok
[INFO] [stdout] test fog::tests::sensor_radius_reveals_nearby_systems ... ok
[INFO] [stdout] test game_events::tests::record_serializes_to_json ... ok
[INFO] [stdout] test jedi::tests::already_discovered_jedi_not_re_detected ... ok
[INFO] [stdout] test jedi::tests::detection_triggers_on_low_roll ... ok
[INFO] [stdout] test jedi::tests::detection_does_not_trigger_on_high_roll ... ok
[INFO] [stdout] test jedi::tests::experience_accumulates_and_tier_advances ... ok
[INFO] [stdout] test jedi::tests::initial_awakening_respects_probability ... ok
[INFO] [stdout] test jedi::tests::no_ticks_returns_empty ... ok
[INFO] [stdout] test jedi::tests::start_training_is_idempotent ... ok
[INFO] [stdout] test jedi::tests::stop_training_removes_record ... ok
[INFO] [stdout] test jedi::tests::no_trainees_returns_empty ... ok
[INFO] [stdout] test jedi::tests::killed_trainee_completes_training_record ... ok
[INFO] [stdout] test jedi::tests::tier_for_xp_boundaries ... ok
[INFO] [stdout] test jedi::tests::training_completes_at_experienced ... ok
[INFO] [stdout] test manufacturing::tests::advance_overflow_completes_and_starts_next ... ok
[INFO] [stdout] test manufacturing::tests::advance_completes_multiple_items ... ok
[INFO] [stdout] test manufacturing::tests::cancel_active_item ... ok
[INFO] [stdout] test manufacturing::tests::advance_exact_completes_item ... ok
[INFO] [stdout] test manufacturing::tests::advance_partial_progress ... ok
[INFO] [stdout] test manufacturing::tests::enqueue_and_active ... ok
[INFO] [stdout] test manufacturing::tests::integration_clock_drives_manufacturing ... ok
[INFO] [stdout] test manufacturing::tests::k6_manufacturing_idle_skips_blockaded_systems ... ok
[INFO] [stdout] test manufacturing::tests::multiple_systems_advance_independently ... ok
[INFO] [stdout] test manufacturing::tests::progress_fraction ... ok
[INFO] [stdout] test manufacturing::tests::prioritize_moves_item_forward ... ok
[INFO] [stdout] test manufacturing::tests::prioritize_noop_on_front ... ok
[INFO] [stdout] test manufacturing::tests::system_advance_with_tick_events ... ok
[INFO] [stdout] test missions::tests::all_new_kinds_have_tick_ranges_in_bounds ... ok
[INFO] [stdout] test manufacturing::tests::k6_manufacturing_idle_fires_on_empty_transition_only ... ok
[INFO] [stdout] test manufacturing::tests::system_advance_no_ticks_no_completions ... ok
[INFO] [stdout] test missions::tests::assassination_subtracts_target_defense ... ok
[INFO] [stdout] test missions::tests::autoscrap_always_succeeds ... ok
[INFO] [stdout] test missions::tests::cancel_removes_mission ... ok
[INFO] [stdout] test missions::tests::abduction_subtracts_target_defense ... ok
[INFO] [stdout] test missions::tests::character_available_emitted_on_mission_completion ... ok
[INFO] [stdout] test missions::tests::check_escapes_returns_escaped_when_roll_below_prob ... ok
[INFO] [stdout] test missions::tests::check_escapes_skips_non_captive ... ok
[INFO] [stdout] test missions::tests::check_escapes_returns_empty_without_escapetb ... ok
[INFO] [stdout] test missions::tests::decoy_mission_produces_no_effects ... ok
[INFO] [stdout] test missions::tests::decoy_success_at_low_roll ... ok
[INFO] [stdout] test missions::tests::defense_score_zero_with_no_enemies ... ok
[INFO] [stdout] test missions::tests::diplomacy_success_emits_popularity_effect ... ok
[INFO] [stdout] test missions::tests::dispatch_creates_mission_with_valid_duration ... ok
[INFO] [stdout] test missions::tests::dispatch_guarded_blocks_mandatory_mission ... ok
[INFO] [stdout] test missions::tests::foil_prob_enemy_system_increases_with_defense ... ok
[INFO] [stdout] test missions::tests::guaranteed_failure_with_roll_one ... ok
[INFO] [stdout] test missions::tests::espionage_success_emits_intelligence_gathered ... ok
[INFO] [stdout] test missions::tests::guaranteed_success_with_roll_zero ... ok
[INFO] [stdout] test missions::tests::incite_uprising_equals_diplomacy_with_zero_espionage ... ok
[INFO] [stdout] test missions::tests::incite_uprising_success_emits_uprising_started ... ok
[INFO] [stdout] test missions::tests::incite_uprising_reduced_by_espionage_rating ... ok
[INFO] [stdout] test missions::tests::mission_decrements_each_tick ... ok
[INFO] [stdout] test missions::tests::mission_resolves_at_zero_ticks ... ok
[INFO] [stdout] test missions::tests::mstb_key_matches_expected_dat_stems ... ok
[INFO] [stdout] test missions::tests::mstb_table_lookup_used_when_populated ... ok
[INFO] [stdout] test missions::tests::multiple_missions_resolve_independently ... ok
[INFO] [stdout] test missions::tests::no_tick_events_no_results ... ok
[INFO] [stdout] test missions::tests::non_covert_missions_classified_correctly ... ok
[INFO] [stdout] test missions::tests::quadratic_prob_at_zero_score_equals_constant ... ok
[INFO] [stdout] test missions::tests::quadratic_prob_diplomacy_at_max_skill ... ok
[INFO] [stdout] test missions::tests::quadratic_prob_recruitment_at_zero_skill ... ok
[INFO] [stdout] test missions::tests::recruitment_success_emits_recruit_effect ... ok
[INFO] [stdout] test missions::tests::recruitment_uses_target_character_loyalty ... ok
[INFO] [stdout] test missions::tests::sabotage_success_emits_facility_sabotaged ... ok
[INFO] [stdout] test missions::tests::sabotage_uses_composite_espionage_and_combat ... ok
[INFO] [stdout] test missions::tests::own_system_returns_false_for_missing_system ... ok
[INFO] [stdout] test missions::tests::sample_duration_stays_in_range ... ok
[INFO] [stdout] test missions::tests::total_success_prob_full_foil ... ok
[INFO] [stdout] test movement::tests::advance_to_completion_emits_arrival ... ok
[INFO] [stdout] test movement::tests::cancel_removes_order ... ok
[INFO] [stdout] test missions::tests::total_success_prob_no_foil ... ok
[INFO] [stdout] test movement::tests::cross_galaxy_takes_many_ticks ... ok
[INFO] [stdout] test movement::tests::han_bonus_clamped_to_min_ticks ... ok
[INFO] [stdout] test missions::tests::covert_missions_classified_correctly ... ok
[INFO] [stdout] test missions::tests::decoy_mission_can_be_foiled ... ok
[INFO] [stdout] test movement::tests::medium_distance_proportional ... ok
[INFO] [stdout] test missions::tests::foil_prob_own_system_is_zero ... ok
[INFO] [stdout] test movement::tests::fighter_only_fleet_uses_default_hyperdrive ... ok
[INFO] [stdout] test movement::tests::han_solo_bonus_reduces_ticks ... ok
[INFO] [stdout] test movement::tests::multiple_fleets_advance_independently ... ok
[INFO] [stdout] test movement::tests::order_and_get ... ok
[INFO] [stdout] test movement::tests::no_ticks_no_arrivals ... ok
[INFO] [stdout] test movement::tests::partial_advance_does_not_arrive ... ok
[INFO] [stdout] test movement::tests::progress_clamps_at_one ... ok
[INFO] [stdout] test movement::tests::new_order_replaces_existing ... ok
[INFO] [stdout] test movement::tests::progress_at_halfway ... ok
[INFO] [stdout] test movement::tests::overshoot_still_arrives_exactly_once ... ok
[INFO] [stdout] test movement::tests::progress_starts_at_zero ... ok
[INFO] [stdout] test movement::tests::short_distance_clamps_to_min ... ok
[INFO] [stdout] test movement::tests::slow_ship_limits_fleet ... ok
[INFO] [stdout] test net_protocol::tests::all_categories_non_empty ... ok
[INFO] [stdout] test movement::tests::zero_hyperdrive_modifier_no_change ... ok
[INFO] [stdout] test net_protocol::tests::event_ids_are_unique ... ok
[INFO] [stdout] test net_protocol::tests::variant_count_is_183 ... ok
[INFO] [stdout] test net_protocol::tests::known_event_ids ... ok
[INFO] [stdout] test repair::tests::damaged_ship_emits_ship_repaired ... ok
[INFO] [stdout] test repair::tests::full_hull_ship_no_repair_event ... ok
[INFO] [stdout] test repair::tests::no_repair_without_shipyard ... ok
[INFO] [stdout] test net_protocol::tests::serialization_round_trip ... ok
[INFO] [stdout] test repair::tests::no_repair_at_destroyed_system ... ok
[INFO] [stdout] test repair::tests::repair_at_shipyard_emits_check_performed ... ok
[INFO] [stdout] test repair::tests::no_repair_without_ticks ... ok
[INFO] [stdout] test research::tests::advance_returns_correct_new_level ... ok
[INFO] [stdout] test research::tests::dispatch_replaces_existing_project ... ok
[INFO] [stdout] test research::tests::cancel_removes_project ... ok
[INFO] [stdout] test research::tests::is_unlocked_respects_current_level ... ok
[INFO] [stdout] test research::tests::no_ticks_returns_empty ... ok
[INFO] [stdout] test research::tests::ticks_for_next_level_fallback_when_no_classes ... ok
[INFO] [stdout] test research::tests::advance_does_not_mutate_ship_level ... ok
[INFO] [stdout] test research::tests::ship_class_availability_respects_research_order ... ok
[INFO] [stdout] test research::tests::research_level_capped_at_max ... ok
[INFO] [stdout] test research::tests::project_completes_after_ticks ... ok
[INFO] [stdout] test research::tests::ticks_for_next_level_uses_max_difficulty ... ok
[INFO] [stdout] test research::tests::two_factions_advance_independently ... ok
[INFO] [stdout] test story_events::tests::character_force_experience_evaluates_at_threshold ... ok
[INFO] [stdout] test story_events::tests::character_is_captive_evaluates_correctly ... ok
[INFO] [stdout] test story_events::tests::define_story_events_empty_world_does_not_panic ... ok
[INFO] [stdout] test story_events::tests::define_story_events_registers_events_with_characters ... ok
[INFO] [stdout] test story_events::tests::bounty_hunters_require_active_gate ... ok
[INFO] [stdout] test story_events::tests::emperor_arrival_fires_with_empire_dominance ... ok
[INFO] [stdout] test story_events::tests::event_not_fired_returns_true_when_unfired ... ok
[INFO] [stdout] test story_events::tests::emperor_palpatine_adds_emperor_specific_events ... ok
[INFO] [stdout] test story_events::tests::evt_jabba_prisoners_fires_on_leia_capture_only ... ok
[INFO] [stdout] test story_events::tests::evt_jabba_prisoners_fires_on_luke_capture ... ok
[INFO] [stdout] test story_events::tests::evt_jabba_prisoners_self_guard_prevents_refire ... ok
[INFO] [stdout] test story_events::tests::evt_permanent_freeze_blocked_by_self_escape ... ok
[INFO] [stdout] test story_events::tests::evt_permanent_freeze_fires_after_countdown ... ok
[INFO] [stdout] test story_events::tests::evt_permanent_freeze_does_not_refire ... ok
[INFO] [stdout] test story_events::tests::evt_jabba_prisoners_two_captures_same_tick_one_consolidator ... ok
[INFO] [stdout] test story_events::tests::evt_permanent_freeze_blocked_by_rescue ... ok
[INFO] [stdout] test story_events::tests::force_milestone_events_fire_at_correct_tiers ... ok
[INFO] [stdout] test story_events::tests::leia_force_discovery_fires_after_dagobah ... ok
[INFO] [stdout] test story_events::tests::final_battle_chain_requires_dagobah_completion ... ok
[INFO] [stdout] test story_events::tests::leia_force_does_not_fire_before_dagobah ... ok
[INFO] [stdout] test story_events::tests::han_self_escape_fires_with_random_roll ... ok
[INFO] [stdout] test story_events::tests::luke_dagobah_chain_fires_in_sequence ... ok
[INFO] [stdout] test events::tests::character_is_killed_panics_on_missing_character_in_debug - should panic ... ok
[INFO] [stdout] test story_events::tests::notification_events_never_use_random ... ok
[INFO] [stdout] test story_events::tests::one_shot_story_events_do_not_refire ... ok
[INFO] [stdout] test tick::tests::accumulator_carries_remainder ... ok
[INFO] [stdout] test tick::tests::fast_speed_doubles_tick_rate ... ok
[INFO] [stdout] test tick::tests::determinism_same_sequence_same_result ... ok
[INFO] [stdout] test tick::tests::faster_speed_quadruples_tick_rate ... ok
[INFO] [stdout] test tick::tests::paused_emits_no_ticks ... ok
[INFO] [stdout] test tick::tests::tick_events_carry_correct_numbers ... ok
[INFO] [stdout] test tick::tests::zero_or_negative_dt_is_noop ... ok
[INFO] [stdout] test tick::tests::normal_speed_one_tick_per_duration ... ok
[INFO] [stdout] test tick::tests::speed_change_takes_effect_next_advance ... ok
[INFO] [stdout] test uprising::tests::high_loyalty_no_uprising ... ok
[INFO] [stdout] test uprising::tests::subdue_noop_if_no_uprising ... ok
[INFO] [stdout] test uprising::tests::subdue_success ... ok
[INFO] [stdout] test uprising::tests::system_in_active_uprising_skipped_for_new_uprising ... ok
[INFO] [stdout] test uprising::tests::no_events_without_ticks ... ok
[INFO] [stdout] test uprising::tests::unpopulated_system_skipped ... ok
[INFO] [stdout] test uprising::tests::subdue_failure ... ok
[INFO] [stdout] test uprising::tests::very_low_loyalty_fires_incident_and_uprising_on_low_roll ... ok
[INFO] [stdout] test victory::tests::alliance_captures_empire_hq ... ok
[INFO] [stdout] test uprising::tests::very_low_loyalty_fires_incident_but_not_uprising_on_high_roll ... ok
[INFO] [stdout] test victory::tests::contested_hq_no_capture ... ok
[INFO] [stdout] test story_events::tests::palace_events_chain_correctly ... ok
[INFO] [stdout] test events::tests::random_no_roll_available_panics - should panic ... ok
[INFO] [stdout] test victory::tests::death_star_destroyed_alliance_wins ... ok
[INFO] [stdout] test victory::tests::death_star_inactive_no_check ... ok
[INFO] [stdout] test victory::tests::no_outcome_no_fleets ... ok
[INFO] [stdout] test victory::tests::empire_captures_alliance_hq ... ok
[INFO] [stdout] test victory::tests::no_outcome_when_resolved ... ok
[INFO] [stdout] test victory::tests::no_outcome_without_ticks ... ok
[INFO] [stdout] test world::tests::default_character_new_fields_are_zero_false_none ... ok
[INFO] [stdout] test victory::tests::death_star_destroys_alliance_hq ... ok
[INFO] [stdout] test world::tests::character_is_unable_to_betray_serde_roundtrip ... ok
[INFO] [stdout] test world::tests::captive_character_serde_roundtrip ... ok
[INFO] [stdout] test world::tests::mark_killed_is_idempotent ... ok
[INFO] [stdout] test world::tests::mark_killed_preserves_name_and_dat_id ... ok
[INFO] [stdout] test world::tests::current_system_and_fleet_default_to_none ... ok
[INFO] [stdout] test world::tests::hyperdrive_modifier_defaults_to_zero ... ok
[INFO] [stdout] test world::tests::mark_killed_sets_is_killed_and_clears_alive_state ... ok
[INFO] [stdout] test world::tests::serde_backward_compat_missing_new_fields ... ok
[INFO] [stdout] test world::tests::is_known_jedi_implies_aware_tier_convention ... ok
[INFO] [stdout] test ai::tests::can_dispatch_to_system_rejects_destroyed_system ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 355 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.10s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/rebellion_data-9f73d4dcad71e6f2)
[INFO] [stdout] 
[INFO] [stdout] running 50 tests
[INFO] [stdout] test mods::tests::apply_patches_matching_entity ... ok
[INFO] [stdout] test mods::tests::load_order_cycle_errors ... ok
[INFO] [stdout] test mods::tests::load_order_missing_dep_errors ... ok
[INFO] [stdout] test mods::tests::apply_skips_unknown_arena ... ok
[INFO] [stdout] test mods::tests::apply_null_field_removes_it ... ok
[INFO] [stdout] test mods::tests::load_order_simple_chain ... ok
[INFO] [stdout] test mods::tests::manifest_parses_minimal_toml ... ok
[INFO] [stdout] test mods::tests::load_order_version_mismatch_errors ... ok
[INFO] [stdout] test mods::tests::manifest_parses_basic_toml ... ok
[INFO] [stdout] test mods::tests::merge_patch_adds_new_field ... ok
[INFO] [stdout] test mods::tests::merge_patch_nested_object ... ok
[INFO] [stdout] test mods::tests::merge_patch_non_object_replaces ... ok
[INFO] [stdout] test mods::tests::enabled_mod_list_sorted ... ok
[INFO] [stdout] test mods::tests::merge_patch_null_deletes_field ... ok
[INFO] [stdout] test mods::tests::discover_empty_dir ... ok
[INFO] [stdout] test mods::tests::merge_patch_overwrites_field ... ok
[INFO] [stdout] test mods::tests::load_order_no_deps ... ok
[INFO] [stdout] test save::tests::empty_mod_list_round_trip ... ok
[INFO] [stdout] test mods::tests::apply_only_enabled ... ok
[INFO] [stdout] test mods::tests::structured_error_on_missing_dep ... ok
[INFO] [stdout] test save::tests::future_version_rejected ... ok
[INFO] [stdout] test save::tests::delete_slot_removes_file ... ok
[INFO] [stdout] test mods::tests::config_toggle_persistence ... ok
[INFO] [stdout] test save::tests::list_saves_empty_dir ... ok
[INFO] [stdout] test save::tests::v3_save_rejected_with_clear_message ... ok
[INFO] [stdout] test save::tests::mod_hash_round_trip ... ok
[INFO] [stdout] test save::tests::mod_hash_mismatch_still_loads ... ok
[INFO] [stdout] test save::tests::list_saves_after_write ... ok
[INFO] [stdout] test seeds::tests::character_stats_are_rolled_not_raw ... ok
[INFO] [stdout] test seeds::tests::deterministic_rebel_hq_with_same_seed ... ok
[INFO] [stdout] test seeds::tests::budget_differs_by_galaxy_size ... ok
[INFO] [stdout] test seeds::tests::deterministic_stat_rolls_with_same_seed ... ok
[INFO] [stdout] test save::tests::round_trip_save_load ... ok
[INFO] [stdout] test seeds::tests::fixed_fleet_tables_only_target_special_systems ... ok
[INFO] [stdout] test seeds::tests::core_bucket_counts_follow_sdprtb_percentages ... ok
[INFO] [stdout] test seeds::tests::energy_and_raw_materials_respect_param_ranges ... ok
[INFO] [stdout] test seeds::tests::low_support_systems_get_garrison_troops ... ok
[INFO] [stdout] test seeds::tests::fixed_named_characters_spawn_at_expected_systems ... ok
[INFO] [stdout] test seeds::tests::maintenance_budget_seeding_spends_without_overshoot ... ok
[INFO] [stdout] test seeds::tests::roll_skill_pair_unit ... ok
[INFO] [stdout] test seeds::tests::seeds_load_and_populate_world ... ok
[INFO] [stdout] test seeds::tests::special_systems_match_original_roles ... ok
[INFO] [stdout] test seeds::tests::populated_systems_follow_gnprtb_rules ... ok
[INFO] [stdout] test save::tests::v4_or_v5_compatibility_path ... ok
[INFO] [stdout] test seeds::tests::procedural_facilities_placed_at_populated_systems ... ok
[INFO] [stdout] test seeds::tests::roll_skill_pair_zero_variance ... ok
[INFO] [stdout] test simulation::tests::empty_tick_events_returns_empty ... ok
[INFO] [stdout] test simulation::tests::simulation_states_can_be_constructed ... ok
[INFO] [stdout] test seeds::tests::support_ranges_match_original_rules ... ok
[INFO] [stdout] test save::tests::deterministic_hash_order_independent ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 50 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/telemetry_coverage.rs (/opt/rustwide/target/debug/deps/telemetry_coverage-4b73726360439bc5)
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/rebellion_playtest-369d2d33ca1c335e)
[INFO] [stdout] running 1 test
[INFO] [stdout] test telemetry_coverage_all_sys_constants_emit ... ignored
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/rebellion_render-88a8eeee310be2ca)
[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] [stdout] 
[INFO] [stdout] running 57 tests
[INFO] [stdout] test advisor::tests::cascade_rejects_2_byte_stubs ... ok
[INFO] [stdout] test advisor::tests::cascade_v1_explicit_frame_list ... ok
[INFO] [stdout] test advisor::tests::advisor_greet_alliance ... ok
[INFO] [stdout] test advisor::tests::advisor_greet_empire ... ok
[INFO] [stdout] test advisor::tests::cascade_v2_distinguishes_from_v1_with_trailing_zeros ... ok
[INFO] [stdout] test advisor::tests::cascade_v2_sequential_range ... ok
[INFO] [stdout] test advisor::tests::cascade_v2_with_large_count ... ok
[INFO] [stdout] test advisor::tests::cascade_v3_bmp_range ... ok
[INFO] [stdout] test advisor::tests::cascade_v4_bmp_single ... ok
[INFO] [stdout] test advisor::tests::faction_from_cockpit ... ok
[INFO] [stdout] test advisor::tests::high_priority_preempts ... ok
[INFO] [stdout] test advisor::tests::idle_sequence_loops_in_place ... ok
[INFO] [stdout] test advisor::tests::legacy_frame_cycling_fallback_without_bins ... ok
[INFO] [stdout] test advisor::tests::parse_advisor_bin_happy_path ... ok
[INFO] [stdout] test advisor::tests::parse_advisor_bin_rejects_length_mismatch ... ok
[INFO] [stdout] test advisor::tests::parse_advisor_bin_rejects_truncated_frames ... ok
[INFO] [stdout] test advisor::tests::same_priority_does_not_preempt ... ok
[INFO] [stdout] test combat_view::tests::battle_outcome_labels ... ok
[INFO] [stdout] test combat_view::tests::combat_summary_state_push_and_dismiss ... ok
[INFO] [stdout] test combat_view::tests::format_losses_singular_and_plural ... ok
[INFO] [stdout] test combat_view::tests::to_messages_includes_bombardment_note ... ok
[INFO] [stdout] test combat_view::tests::to_messages_includes_losses ... ok
[INFO] [stdout] test combat_view::tests::to_messages_includes_summary_text ... ok
[INFO] [stdout] test combat_view::tests::to_messages_produces_outcome_line ... ok
[INFO] [stdout] test event_screen::tests::final_battle_heritage_known_returns_emperor_vs_knight ... ok
[INFO] [stdout] test event_screen::tests::final_battle_heritage_unknown_returns_vader_vs_student ... ok
[INFO] [stdout] test event_screen::tests::non_final_battle_ignores_heritage ... ok
[INFO] [stdout] test event_screen::tests::unknown_event_returns_none ... ok
[INFO] [stdout] test ground_combat::tests::ground_combat_resolves ... ok
[INFO] [stdout] test ground_combat::tests::ground_combat_stronger_wins ... ok
[INFO] [stdout] test message_log::tests::export_jsonl_round_trip ... ok
[INFO] [stdout] test panels::command_palette::tests::all_commands_have_unique_labels ... ok
[INFO] [stdout] test advisor::tests::bin_state_advances_and_wraps_for_normal_priority ... ok
[INFO] [stdout] test combat_view::tests::combat_summary_state_multiple_results ... ok
[INFO] [stdout] test advisor::tests::cascade_rejects_4_byte_zero_prefix_stubs ... ok
[INFO] [stdout] test advisor::tests::bmp_mapped_falls_back_to_modulo_on_missing_id ... ok
[INFO] [stdout] test advisor::tests::bmp_mapped_sequence_uses_direct_lookup ... ok
[INFO] [stdout] test panels::command_palette::tests::fuzzy_filter_matches_advance ... ok
[INFO] [stdout] test panels::mod_manager::tests::mod_manager_state_default ... ok
[INFO] [stdout] test tactical_view::tests::battle_phase_variants ... ok
[INFO] [stdout] test tactical_view::tests::class_to_sprite_id_in_range ... ok
[INFO] [stdout] test victory_screen::tests::describe_death_star_destroyed ... ok
[INFO] [stdout] test victory_screen::tests::describe_death_star_victory ... ok
[INFO] [stdout] test victory_screen::tests::describe_hq_captured_alliance_wins ... ok
[INFO] [stdout] test victory_screen::tests::describe_hq_captured_empire_wins ... ok
[INFO] [stdout] test victory_screen::tests::game_stats_default ... ok
[INFO] [stdout] test victory_screen::tests::state_is_pending_with_outcome ... ok
[INFO] [stdout] test panels::command_palette::tests::command_palette_state_defaults ... ok
[INFO] [stdout] test panels::command_palette::tests::fuzzy_filter_empty_returns_all ... ok
[INFO] [stdout] test panels::mod_manager::tests::action_variants ... ok
[INFO] [stdout] test panels::mod_manager::tests::mod_info_display ... ok
[INFO] [stdout] test video_player::native::tests::resolves_ref_video_paths_into_decoded_assets ... ok
[INFO] [stdout] test victory_screen::tests::state_not_pending_when_acknowledged ... ok
[INFO] [stdout] test victory_screen::tests::state_reset_clears_all_fields ... ok
[INFO] [stdout] test video_player::native::tests::open_returns_not_decoded_when_cutscene_directory_is_missing ... ok
[INFO] [stdout] test advisor::tests::advisor_message_queue_fifo ... ok
[INFO] [stdout] test advisor::tests::cascade_v1_single_frame ... ok
[INFO] [stderr]    Doc-tests dat_dumper
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 57 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.09s
[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]    Doc-tests rebellion_core
[INFO] [stdout] 
[INFO] [stdout] running 6 tests
[INFO] [stdout] test crates/rebellion-core/src/events.rs - events (line 28) ... ignored
[INFO] [stdout] test crates/rebellion-core/src/fog.rs - fog (line 19) ... ignored
[INFO] [stdout] test crates/rebellion-core/src/research.rs - research::ResearchSystem::advance (line 212) ... ignored
[INFO] [stdout] test crates/rebellion-core/src/tick.rs - tick (line 11) ... ok
[INFO] [stdout] test crates/rebellion-core/src/movement.rs - movement (line 25) ... ok
[INFO] [stdout] test crates/rebellion-core/src/manufacturing.rs - manufacturing (line 20) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 3 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 0.60s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests rebellion_data
[INFO] [stdout] 
[INFO] [stdout] running 1 test
[INFO] [stdout] test crates/rebellion-data/src/integrator.rs - integrator::PerceptionIntegrator (line 124) ... ignored
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests rebellion_render
[INFO] [stdout] 
[INFO] [stdout] running 12 tests
[INFO] [stdout] test crates/rebellion-render/src/audio.rs - audio (line 14) ... ignored
[INFO] [stdout] test crates/rebellion-render/src/combat_view.rs - combat_view (line 15) ... ignored
[INFO] [stdout] test crates/rebellion-render/src/encyclopedia.rs - encyclopedia (line 29) ... ignored
[INFO] [stdout] test crates/rebellion-render/src/fleet_movement.rs - fleet_movement (line 13) ... ignored
[INFO] [stdout] test crates/rebellion-render/src/fog.rs - fog (line 16) ... ignored
[INFO] [stdout] test crates/rebellion-render/src/ground_combat.rs - ground_combat (line 10) ... ignored
[INFO] [stdout] test crates/rebellion-render/src/message_log.rs - message_log (line 14) ... ignored
[INFO] [stdout] test crates/rebellion-render/src/panels/mod.rs - panels (line 13) ... ignored
[INFO] [stdout] test crates/rebellion-render/src/panels/mod_manager.rs - panels::mod_manager (line 5) ... ignored
[INFO] [stdout] test crates/rebellion-render/src/panels/save_load.rs - panels::save_load (line 5) ... ignored
[INFO] [stdout] test crates/rebellion-render/src/tactical_view.rs - tactical_view (line 15) ... ignored
[INFO] [stdout] test crates/rebellion-render/src/victory_screen.rs - victory_screen (line 15) ... ignored
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "dcf7bddc703a51acaac1df40aae5026c572ab8617fde1a7a7b9e555830c6b541", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "dcf7bddc703a51acaac1df40aae5026c572ab8617fde1a7a7b9e555830c6b541", kill_on_drop: false }`
[INFO] [stdout] dcf7bddc703a51acaac1df40aae5026c572ab8617fde1a7a7b9e555830c6b541
