[INFO] cloning repository https://github.com/klampatech/world-factory
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/klampatech/world-factory" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fklampatech%2Fworld-factory", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fklampatech%2Fworld-factory'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 061b8f73f575ef15c95aa77a3a15e274232ff75f
[INFO] checking klampatech/world-factory against a5689b034ad287112f709693384a37f1377eb9cc for pr-129249-3
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fklampatech%2Fworld-factory" "/workspace/builds/worker-2-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc2/source'...
[INFO] [stderr] done.
[INFO] [stderr] Updating files:  89% (1478/1646)
Updating files:  90% (1482/1646)
Updating files:  91% (1498/1646)
Updating files:  92% (1515/1646)
Updating files:  93% (1531/1646)
Updating files:  94% (1548/1646)
Updating files:  95% (1564/1646)
Updating files:  96% (1581/1646)
Updating files:  97% (1597/1646)
Updating files:  98% (1614/1646)
Updating files:  99% (1630/1646)
Updating files: 100% (1646/1646)
Updating files: 100% (1646/1646), done.
[INFO] started tweaking git repo https://github.com/klampatech/world-factory
[INFO] removed 0 missing examples
[INFO] finished tweaking git repo https://github.com/klampatech/world-factory
[INFO] tweaked toml for git repo https://github.com/klampatech/world-factory written to /workspace/builds/worker-2-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/klampatech/world-factory on toolchain a5689b034ad287112f709693384a37f1377eb9cc
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+a5689b034ad287112f709693384a37f1377eb9cc" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/klampatech/world-factory 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" "+a5689b034ad287112f709693384a37f1377eb9cc" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 6520e612c1dd66472b0f73ef78a3368ab99838fd5f4345c8bd6f9554c158d949
[INFO] running `Command { std: "docker" "start" "6520e612c1dd66472b0f73ef78a3368ab99838fd5f4345c8bd6f9554c158d949", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "6520e612c1dd66472b0f73ef78a3368ab99838fd5f4345c8bd6f9554c158d949", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "6520e612c1dd66472b0f73ef78a3368ab99838fd5f4345c8bd6f9554c158d949" "/opt/rustwide/cargo-home/bin/cargo" "+a5689b034ad287112f709693384a37f1377eb9cc" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "6520e612c1dd66472b0f73ef78a3368ab99838fd5f4345c8bd6f9554c158d949", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "6520e612c1dd66472b0f73ef78a3368ab99838fd5f4345c8bd6f9554c158d949" "/opt/rustwide/cargo-home/bin/cargo" "+a5689b034ad287112f709693384a37f1377eb9cc" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]     Checking bitflags v2.11.1
[INFO] [stderr]     Checking getrandom v0.3.4
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]     Checking parking_lot_core v0.9.12
[INFO] [stderr]    Compiling tokio-macros v2.7.0
[INFO] [stderr]     Checking socket2 v0.6.3
[INFO] [stderr]     Checking mio v1.2.0
[INFO] [stderr]     Checking winnow v1.0.2
[INFO] [stderr]     Checking rustix v1.1.4
[INFO] [stderr]     Checking rand_core v0.9.5
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking rand_chacha v0.9.0
[INFO] [stderr]     Checking toml_parser v1.1.2+spec-1.1.0
[INFO] [stderr]    Compiling clap_derive v4.6.1
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]     Checking rand v0.9.4
[INFO] [stderr]     Checking toml_datetime v1.1.1+spec-1.1.0
[INFO] [stderr]     Checking tokio v1.52.3
[INFO] [stderr]     Checking serde_spanned v1.1.1
[INFO] [stderr]     Checking filetime v0.2.27
[INFO] [stderr]     Checking unsafe-libyaml v0.2.11
[INFO] [stderr]     Checking toml_writer v1.1.1+spec-1.1.0
[INFO] [stderr]     Checking futures-task v0.3.32
[INFO] [stderr]     Checking slab v0.4.12
[INFO] [stderr]     Checking sha1_smol v1.0.1
[INFO] [stderr]     Checking futures-util v0.3.32
[INFO] [stderr]     Checking uuid v1.23.1
[INFO] [stderr]     Checking toml v1.1.2+spec-1.1.0
[INFO] [stderr]     Checking bit-vec v0.8.0
[INFO] [stderr]     Checking quick-error v1.2.3
[INFO] [stderr]     Checking axum-core v0.5.6
[INFO] [stderr]     Checking thiserror v2.0.18
[INFO] [stderr]     Checking bit-set v0.8.0
[INFO] [stderr]     Checking tempfile v3.27.0
[INFO] [stderr]     Checking xattr v1.6.1
[INFO] [stderr]     Checking tar v0.4.45
[INFO] [stderr]     Checking rusty-fork v0.3.1
[INFO] [stderr]     Checking rand_xorshift v0.4.0
[INFO] [stderr]     Checking unarray v0.1.4
[INFO] [stderr]     Checking regex-lite v0.1.9
[INFO] [stderr]     Checking proptest v1.11.0
[INFO] [stderr]     Checking clap v4.6.1
[INFO] [stderr]     Checking serde v1.0.228
[INFO] [stderr]     Checking chrono v0.4.44
[INFO] [stderr]     Checking serde_arrays v0.2.0
[INFO] [stderr]     Checking serde_yaml v0.9.34+deprecated
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking world-factory v1.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Checking hyper v1.9.0
[INFO] [stderr]     Checking tower v0.5.3
[INFO] [stderr]     Checking hyper-util v0.1.20
[INFO] [stderr]     Checking axum v0.8.9
[INFO] [stdout] warning: unused imports: `AlignmentBonus`, `BeastBond`, `FactionGoal`, and `FactionType`
[INFO] [stdout]   --> src/faction_turn.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 |     AlignmentBonus, AssetCategory, BeastBond, BeastBondType, CampaignState, Faction, FactionAsset,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^                 ^^^^^^^^^
[INFO] [stdout] 22 |     FactionGoal, FactionRegistry, FactionTurnState, FactionType, GoalType, TurnPhase,
[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: `std::sync::Arc`
[INFO] [stdout]   --> src/terrain/elevation.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BeastElement`, `BeastState`, `PrimalBeast`, and `profiles::get_beast_profile`
[INFO] [stdout]   --> src/beasts/effects.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 |     profiles::get_beast_profile, BeastElement, BeastState, PrimalBeast, PrimalBeastInstance,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BiomeType`
[INFO] [stdout]   --> src/beasts/effects.rs:17:22
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::terrain::{BiomeType, TerrainCell};
[INFO] [stdout]    |                      ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BeastElement` and `PrimalBeast`
[INFO] [stdout]   --> src/beasts/movement.rs:13:13
[INFO] [stdout]    |
[INFO] [stdout] 13 | use super::{BeastElement, BeastState, PrimalBeast, PrimalBeastInstance};
[INFO] [stdout]    |             ^^^^^^^^^^^^              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BeastState`
[INFO] [stdout]  --> src/beasts/profiles.rs:6:38
[INFO] [stdout]   |
[INFO] [stdout] 6 | use super::{BeastElement, BeastForm, BeastState, PrimalBeast};
[INFO] [stdout]   |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::types::EntityId`
[INFO] [stdout]  --> src/beasts/profiles.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::types::EntityId;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::f32::consts::PI`
[INFO] [stdout]   --> src/beasts/remnants.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use std::f32::consts::PI;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `uuid::Uuid`
[INFO] [stdout]   --> src/beasts/mod.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 | use uuid::Uuid;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Write`
[INFO] [stdout]  --> src/packaging.rs:9:27
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::io::{self, Read, Write};
[INFO] [stdout]   |                           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `category`
[INFO] [stdout]    --> src/faction_turn.rs:503:36
[INFO] [stdout]     |
[INFO] [stdout] 503 |     pub fn with_category(mut self, category: AssetCategory) -> Self {
[INFO] [stdout]     |                                    ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_category`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fm`
[INFO] [stdout]    --> src/faction_turn.rs:613:25
[INFO] [stdout]     |
[INFO] [stdout] 613 |             if let Some(fm) = fm {
[INFO] [stdout]     |                         ^^ help: if this is intentional, prefix it with an underscore: `_fm`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AlignmentBonus`, `BeastBond`, `FactionGoal`, and `FactionType`
[INFO] [stdout]   --> src/faction_turn.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 |     AlignmentBonus, AssetCategory, BeastBond, BeastBondType, CampaignState, Faction, FactionAsset,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^                 ^^^^^^^^^
[INFO] [stdout] 22 |     FactionGoal, FactionRegistry, FactionTurnState, FactionType, GoalType, TurnPhase,
[INFO] [stdout]    |     ^^^^^^^^^^^                                     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/generation/voronoi.rs:887:34
[INFO] [stdout]     |
[INFO] [stdout] 887 |                     let angle1 = ((window[0].1 - cy).atan2(window[0].0 - cx));
[INFO] [stdout]     |                                  ^                                          ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 887 -                     let angle1 = ((window[0].1 - cy).atan2(window[0].0 - cx));
[INFO] [stdout] 887 +                     let angle1 = (window[0].1 - cy).atan2(window[0].0 - cx);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/generation/voronoi.rs:888:34
[INFO] [stdout]     |
[INFO] [stdout] 888 |                     let angle2 = ((window[1].1 - cy).atan2(window[1].0 - cx));
[INFO] [stdout]     |                                  ^                                          ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 888 -                     let angle2 = ((window[1].1 - cy).atan2(window[1].0 - cx));
[INFO] [stdout] 888 +                     let angle2 = (window[1].1 - cy).atan2(window[1].0 - cx);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::util::Seed`
[INFO] [stdout]    --> src/hydro/rivers.rs:425:9
[INFO] [stdout]     |
[INFO] [stdout] 425 |     use crate::util::Seed;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::Write`
[INFO] [stdout]    --> src/packaging.rs:348:9
[INFO] [stdout]     |
[INFO] [stdout] 348 |     use std::io::Write;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::util::Seed`
[INFO] [stdout]     --> src/settlements/mod.rs:1360:13
[INFO] [stdout]      |
[INFO] [stdout] 1360 |         use crate::util::Seed;
[INFO] [stdout]      |             ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> src/terrain/elevation.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::util::Seed`
[INFO] [stdout]    --> src/terrain/ocean.rs:568:9
[INFO] [stdout]     |
[INFO] [stdout] 568 |     use crate::util::Seed;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: duplicated attribute
[INFO] [stdout]    --> src/util/geometry.rs:258:5
[INFO] [stdout]     |
[INFO] [stdout] 258 |     #[test]
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(duplicate_macro_attributes)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BeastElement`, `BeastState`, `PrimalBeast`, and `profiles::get_beast_profile`
[INFO] [stdout]   --> src/beasts/effects.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 |     profiles::get_beast_profile, BeastElement, BeastState, PrimalBeast, PrimalBeastInstance,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BiomeType`
[INFO] [stdout]   --> src/beasts/effects.rs:17:22
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::terrain::{BiomeType, TerrainCell};
[INFO] [stdout]    |                      ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BeastElement` and `PrimalBeast`
[INFO] [stdout]   --> src/beasts/movement.rs:13:13
[INFO] [stdout]    |
[INFO] [stdout] 13 | use super::{BeastElement, BeastState, PrimalBeast, PrimalBeastInstance};
[INFO] [stdout]    |             ^^^^^^^^^^^^              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BeastState`
[INFO] [stdout]  --> src/beasts/profiles.rs:6:38
[INFO] [stdout]   |
[INFO] [stdout] 6 | use super::{BeastElement, BeastForm, BeastState, PrimalBeast};
[INFO] [stdout]   |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::types::EntityId`
[INFO] [stdout]  --> src/beasts/profiles.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::types::EntityId;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::f32::consts::PI`
[INFO] [stdout]   --> src/beasts/remnants.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use std::f32::consts::PI;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `uuid::Uuid`
[INFO] [stdout]   --> src/beasts/mod.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 | use uuid::Uuid;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/events/mod.rs:264:13
[INFO] [stdout]     |
[INFO] [stdout] 263 |             (start, end) => Some(end - start),
[INFO] [stdout]     |             ------------ matches any value
[INFO] [stdout] 264 |             _ => None,
[INFO] [stdout]     |             ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `final_population` is never read
[INFO] [stdout]    --> src/history/generator.rs:483:36
[INFO] [stdout]     |
[INFO] [stdout] 483 |         let mut final_population = 0u64;
[INFO] [stdout]     |                                    ^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 550 |         final_population = societies_map.values().map(|s| s.population).sum();
[INFO] [stdout]     |         --------------------------------------------------------------------- `final_population` is overwritten here before the previous value is read
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `base_suitability` is never read
[INFO] [stdout]    --> src/settlements/mod.rs:582:41
[INFO] [stdout]     |
[INFO] [stdout] 582 |         let mut base_suitability: f32 = 0.0;
[INFO] [stdout]     |                                         ^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 592 |             base_suitability = (carrying_capacity / 7000.0).min(1.0) * 0.6;
[INFO] [stdout]     |             -------------------------------------------------------------- `base_suitability` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `soil_fertility` is never read
[INFO] [stdout]    --> src/settlements/mod.rs:584:39
[INFO] [stdout]     |
[INFO] [stdout] 584 |           let mut soil_fertility: f32 = 0.0;
[INFO] [stdout]     |                                         ^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 604 | /         soil_fertility = match biome {
[INFO] [stdout] 605 | |             BiomeType::TemperateGrassland | BiomeType::TropicalSavanna => 1.0,
[INFO] [stdout] 606 | |             BiomeType::TemperateDeciduousForest | BiomeType::TemperateMixedForest => 0.8,
[INFO] [stdout] 607 | |             BiomeType::SubtropicalSeasonalForest | BiomeType::TropicalSeasonalForest => 0.7,
[INFO] [stdout] 608 | |             _ => 0.3,
[INFO] [stdout] 609 | |         };
[INFO] [stdout]     | |_________- `soil_fertility` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/simulation/population.rs:551:17
[INFO] [stdout]     |
[INFO] [stdout] 551 |                 _ => 1.0,
[INFO] [stdout]     |                 ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/simulation/population.rs:551:17
[INFO] [stdout]     |
[INFO] [stdout] 545 |                 SpeciesId::Human => 1.0,
[INFO] [stdout]     |                 ---------------- matches some of the same values
[INFO] [stdout] 546 |                 SpeciesId::Elf => 0.8,
[INFO] [stdout]     |                 -------------- matches some of the same values
[INFO] [stdout] 547 |                 SpeciesId::Dwarf => 1.1,
[INFO] [stdout]     |                 ---------------- matches some of the same values
[INFO] [stdout] 548 |                 SpeciesId::Orc => 1.3,
[INFO] [stdout]     |                 -------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 551 |                 _ => 1.0,
[INFO] [stdout]     |                 ^ ...and 2 other patterns collectively make this unreachable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/simulation/population.rs:891:13
[INFO] [stdout]     |
[INFO] [stdout] 891 |             _ => 1.0, // Unknown species get base rate
[INFO] [stdout]     |             ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/simulation/population.rs:891:13
[INFO] [stdout]     |
[INFO] [stdout] 885 |             SpeciesId::Human => 1.0,    // Base - adaptable
[INFO] [stdout]     |             ---------------- matches some of the same values
[INFO] [stdout] 886 |             SpeciesId::Elf => 0.8,      // Slower reproduction
[INFO] [stdout]     |             -------------- matches some of the same values
[INFO] [stdout] 887 |             SpeciesId::Dwarf => 1.1,    // Industrious
[INFO] [stdout]     |             ---------------- matches some of the same values
[INFO] [stdout] 888 |             SpeciesId::Orc => 1.3,      // High birth rate
[INFO] [stdout]     |             -------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 891 |             _ => 1.0, // Unknown species get base rate
[INFO] [stdout]     |             ^ ...and 2 other patterns collectively make this unreachable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]     --> src/simulation/population.rs:1182:9
[INFO] [stdout]      |
[INFO] [stdout] 1168 |         BiomeType::TropicalSeasonalForest => 30_000,
[INFO] [stdout]      |         --------------------------------- matches all the relevant values
[INFO] [stdout] ...
[INFO] [stdout] 1182 |         BiomeType::TropicalSeasonalForest => 35_000,
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/terrain/biome.rs:345:13
[INFO] [stdout]     |
[INFO] [stdout] 315 |             BiomeType::SubtropicalDesert => "Subtropical Desert",
[INFO] [stdout]     |             ---------------------------- matches all the relevant values
[INFO] [stdout] ...
[INFO] [stdout] 345 |             BiomeType::SubtropicalDesert => "Subtropical Desert",
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/terrain/biome.rs:346:13
[INFO] [stdout]     |
[INFO] [stdout] 320 |             BiomeType::TemperateDesert => "Temperate Desert",
[INFO] [stdout]     |             -------------------------- matches all the relevant values
[INFO] [stdout] ...
[INFO] [stdout] 346 |             BiomeType::TemperateDesert => "Temperate Desert",
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/terrain/resource_types.rs:466:13
[INFO] [stdout]     |
[INFO] [stdout] 438 |             ResourceType::Limestone => 0.15,
[INFO] [stdout]     |             ----------------------- matches all the relevant values
[INFO] [stdout] ...
[INFO] [stdout] 466 |             ResourceType::Limestone => 0.35,
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `context`
[INFO] [stdout]    --> src/artifacts.rs:510:9
[INFO] [stdout]     |
[INFO] [stdout] 510 |         context: &ArtifactCreationContext,
[INFO] [stdout]     |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_context`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `position`
[INFO] [stdout]    --> src/beasts/remnants.rs:119:36
[INFO] [stdout]     |
[INFO] [stdout] 119 |     pub fn affects_position(&self, position: u32, distance_km: f32) -> bool {
[INFO] [stdout]     |                                    ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_position`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `position`
[INFO] [stdout]    --> src/beasts/mod.rs:217:35
[INFO] [stdout]     |
[INFO] [stdout] 217 |     pub fn is_in_territory(&self, position: u32, distance_km: f32) -> bool {
[INFO] [stdout]     |                                   ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_position`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `PredictionPattern` is more private than the item `EventPredictor::get_patterns_for`
[INFO] [stdout]    --> src/events/probability/event_predictor.rs:295:5
[INFO] [stdout]     |
[INFO] [stdout] 295 |     pub fn get_patterns_for(&self, event_type: EventType) -> Vec<&PredictionPattern> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `EventPredictor::get_patterns_for` is reachable at visibility `pub`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `PredictionPattern` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/events/probability/event_predictor.rs:338:1
[INFO] [stdout]     |
[INFO] [stdout] 338 | struct PredictionPattern {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `SettlementState` is more private than the item `PopulationGrowthService::get_all_populations`
[INFO] [stdout]    --> src/history/population.rs:258:5
[INFO] [stdout]     |
[INFO] [stdout] 258 |     pub fn get_all_populations(&self) -> &HashMap<Uuid, SettlementState> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `PopulationGrowthService::get_all_populations` is reachable at visibility `pub`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `SettlementState` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/history/population.rs:485:1
[INFO] [stdout]     |
[INFO] [stdout] 485 | struct SettlementState {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `calculate_income` and `update_goal_progress` are never used
[INFO] [stdout]    --> src/faction_integration.rs:115:8
[INFO] [stdout]     |
[INFO] [stdout]  39 | impl FactionTurnProcessor {
[INFO] [stdout]     | ------------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 115 |     fn calculate_income(&self, faction: &Faction) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     fn update_goal_progress(&self, faction: &mut Faction) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `config` is never read
[INFO] [stdout]    --> src/faction_integration.rs:530:5
[INFO] [stdout]     |
[INFO] [stdout] 529 | pub struct FactionGenerator {
[INFO] [stdout]     |            ---------------- field in this struct
[INFO] [stdout] 530 |     config: FactionGeneratorConfig,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_CONFIG_NAME` is never used
[INFO] [stdout]   --> src/config/mod.rs:16:7
[INFO] [stdout]    |
[INFO] [stdout] 16 | const DEFAULT_CONFIG_NAME: &str = "world.toml";
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `dist_sq` is never used
[INFO] [stdout]    --> src/generation/voronoi.rs:100:8
[INFO] [stdout]     |
[INFO] [stdout]  88 | impl Seed {
[INFO] [stdout]     | --------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 100 |     fn dist_sq(&self, other: &Seed) -> f32 {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `species_loader` and `population_simulator` are never read
[INFO] [stdout]    --> src/history/generator.rs:196:5
[INFO] [stdout]     |
[INFO] [stdout] 194 | pub struct HistoryGenerator {
[INFO] [stdout]     |            ---------------- fields in this struct
[INFO] [stdout] 195 |     /// Species template loader.
[INFO] [stdout] 196 |     species_loader: SpeciesLoader,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 205 |     population_simulator: PopulationGrowthService,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `HistoryGenerator` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name`, `x`, `y`, and `biome` are never read
[INFO] [stdout]    --> src/history/generator.rs:740:5
[INFO] [stdout]     |
[INFO] [stdout] 738 | struct SettlementSite {
[INFO] [stdout]     |        -------------- fields in this struct
[INFO] [stdout] 739 |     id: Uuid,
[INFO] [stdout] 740 |     name: String,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 741 |     x: usize,
[INFO] [stdout]     |     ^
[INFO] [stdout] 742 |     y: usize,
[INFO] [stdout]     |     ^
[INFO] [stdout] 743 |     biome: BiomeType,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `SettlementSite` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `seed` is never read
[INFO] [stdout]    --> src/history/population.rs:174:5
[INFO] [stdout]     |
[INFO] [stdout] 161 | pub struct PopulationGrowthService {
[INFO] [stdout]     |            ----------------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 174 |     seed: u64,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `PopulationGrowthService` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ENTRIES_DIR` is never used
[INFO] [stdout]   --> src/packaging.rs:28:7
[INFO] [stdout]    |
[INFO] [stdout] 28 | const ENTRIES_DIR: &str = "entries/";
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `calculate_suitability` is never used
[INFO] [stdout]    --> src/settlements/mod.rs:778:8
[INFO] [stdout]     |
[INFO] [stdout] 250 | impl SettlementGenerator {
[INFO] [stdout]     | ------------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 778 |     fn calculate_suitability(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `calculate_growth_rate` and `get_species_growth_modifier` are never used
[INFO] [stdout]    --> src/simulation/population.rs:864:8
[INFO] [stdout]     |
[INFO] [stdout] 357 | impl PopulationModel {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 864 |     fn calculate_growth_rate(&self, state: &SettlementPopulation) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 883 |     fn get_species_growth_modifier(&self, species_id: SpeciesId) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `add_settlement_raw` is never used
[INFO] [stdout]     --> src/simulation/population.rs:1443:8
[INFO] [stdout]      |
[INFO] [stdout] 1441 | impl PopulationModel {
[INFO] [stdout]      | -------------------- method in this implementation
[INFO] [stdout] 1442 |     /// Add a settlement with raw parameters (internal use).
[INFO] [stdout] 1443 |     fn add_settlement_raw(
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `GLOBAL_STORAGE` is never used
[INFO] [stdout]   --> src/storage.rs:49:8
[INFO] [stdout]    |
[INFO] [stdout] 49 | static GLOBAL_STORAGE: OnceLock<StorageManager> = OnceLock::new();
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_cache_dir` is never used
[INFO] [stdout]   --> src/storage.rs:74:4
[INFO] [stdout]    |
[INFO] [stdout] 74 | fn default_cache_dir() -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_generated_dir` is never used
[INFO] [stdout]   --> src/storage.rs:78:4
[INFO] [stdout]    |
[INFO] [stdout] 78 | fn default_generated_dir() -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_exports_dir` is never used
[INFO] [stdout]   --> src/storage.rs:82:4
[INFO] [stdout]    |
[INFO] [stdout] 82 | fn default_exports_dir() -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `entity_mesh` is never read
[INFO] [stdout]    --> src/terrain/elevation.rs:211:5
[INFO] [stdout]     |
[INFO] [stdout] 205 | pub struct PolygonGraph {
[INFO] [stdout]     |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 211 |     entity_mesh: Option<std::sync::Arc<crate::world::entities::polygon::PolygonMesh>>,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `PolygonGraph` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WonderTypeDef` is never constructed
[INFO] [stdout]   --> src/terrain/natural_wonders/wonder_types.rs:88:12
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub struct WonderTypeDef {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `generator` is never read
[INFO] [stdout]    --> src/terrain/resource_spawner.rs:224:5
[INFO] [stdout]     |
[INFO] [stdout] 221 | pub struct ResourceSpawner {
[INFO] [stdout]     |            --------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 224 |     generator: ResourceGenerator,
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ResourceSpawner` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `determine_spawns` and `get_biome_affinity` are never used
[INFO] [stdout]    --> src/terrain/resource_spawner.rs:412:8
[INFO] [stdout]     |
[INFO] [stdout] 228 | impl ResourceSpawner {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 412 |     fn determine_spawns(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 580 |     fn get_biome_affinity(&self, category: ResourceCategory, biome: BiomeType) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `VIABILITY_MATRIX` is never used
[INFO] [stdout]    --> src/terrain/resource_types.rs:965:8
[INFO] [stdout]     |
[INFO] [stdout] 965 | static VIABILITY_MATRIX: ViabilityMatrix = ViabilityMatrix;
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_grid_modifiers` is never used
[INFO] [stdout]    --> src/terrain/tectonic/elevation_effects.rs:100:8
[INFO] [stdout]     |
[INFO] [stdout] 100 | pub fn calculate_grid_modifiers(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_tectonic_modifiers` is never used
[INFO] [stdout]    --> src/terrain/tectonic/elevation_effects.rs:152:8
[INFO] [stdout]     |
[INFO] [stdout] 152 | pub fn apply_tectonic_modifiers(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `rng` is never read
[INFO] [stdout]    --> src/util/noise.rs:115:5
[INFO] [stdout]     |
[INFO] [stdout] 111 | pub struct SimplexNoise {
[INFO] [stdout]     |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 115 |     rng: Rng,
[INFO] [stdout]     |     ^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `SimplexNoise` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `biome_matrix` is never read
[INFO] [stdout]   --> src/world/generation/geography_generator.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub struct GeographyGenerator {
[INFO] [stdout]    |            ------------------ field in this struct
[INFO] [stdout] 41 |     config: GeographyConfig,
[INFO] [stdout] 42 |     biome_matrix: BiomeAssignmentMatrix,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GeographyGenerator` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `update_mesh_centroids` is never used
[INFO] [stdout]    --> src/world/generation/lloyd_relaxation.rs:269:8
[INFO] [stdout]     |
[INFO] [stdout] 155 | impl LloydRelaxation {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 269 |     fn update_mesh_centroids(&mut self, _mesh: &mut PolygonMesh, _centroids: &[Point2D]) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `concentration_modifier` is never read
[INFO] [stdout]   --> src/artifacts.rs:99:5
[INFO] [stdout]    |
[INFO] [stdout] 97 | pub struct CataclysmTriggerSystem {
[INFO] [stdout]    |            ---------------------- field in this struct
[INFO] [stdout] 98 |     /// Probability modifier based on artifact concentration
[INFO] [stdout] 99 |     concentration_modifier: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_fire_effect` is never used
[INFO] [stdout]   --> src/beasts/effects.rs:64:4
[INFO] [stdout]    |
[INFO] [stdout] 64 | fn calculate_fire_effect(
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_water_effect` is never used
[INFO] [stdout]   --> src/beasts/effects.rs:83:4
[INFO] [stdout]    |
[INFO] [stdout] 83 | fn calculate_water_effect(
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_earth_effect` is never used
[INFO] [stdout]    --> src/beasts/effects.rs:100:4
[INFO] [stdout]     |
[INFO] [stdout] 100 | fn calculate_earth_effect(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_life_effect` is never used
[INFO] [stdout]    --> src/beasts/effects.rs:113:4
[INFO] [stdout]     |
[INFO] [stdout] 113 | fn calculate_life_effect(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `SystemTime`
[INFO] [stdout]    --> src/storage.rs:366:73
[INFO] [stdout]     |
[INFO] [stdout] 366 |                         let modified = metadata.modified().ok().map(|t| t.into());
[INFO] [stdout]     |                                                                         ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: `#[deny(self_type_conversion)]` on by default
[INFO] [stdout] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 366 -                         let modified = metadata.modified().ok().map(|t| t.into());
[INFO] [stdout] 366 +                         let modified = metadata.modified().ok().map(|t| t);
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 366 -                         let modified = metadata.modified().ok().map(|t| t.into());
[INFO] [stdout] 366 +                         let modified = metadata.modified().ok().map(|t| <SystemTime as Into<_>>::into(t));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `next_f64Signed` should have a snake case name
[INFO] [stdout]   --> src/util/noise.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub fn next_f64Signed(&mut self) -> f64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^ help: convert the identifier to snake case: `next_f64_signed`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `world-factory` (lib) due to 1 previous error; 58 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] warning: unused import: `Write`
[INFO] [stdout]  --> src/packaging.rs:9:27
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::io::{self, Read, Write};
[INFO] [stdout]   |                           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `category`
[INFO] [stdout]    --> src/faction_turn.rs:503:36
[INFO] [stdout]     |
[INFO] [stdout] 503 |     pub fn with_category(mut self, category: AssetCategory) -> Self {
[INFO] [stdout]     |                                    ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_category`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fm`
[INFO] [stdout]    --> src/faction_turn.rs:613:25
[INFO] [stdout]     |
[INFO] [stdout] 613 |             if let Some(fm) = fm {
[INFO] [stdout]     |                         ^^ help: if this is intentional, prefix it with an underscore: `_fm`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/events/mod.rs:264:13
[INFO] [stdout]     |
[INFO] [stdout] 263 |             (start, end) => Some(end - start),
[INFO] [stdout]     |             ------------ matches any value
[INFO] [stdout] 264 |             _ => None,
[INFO] [stdout]     |             ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/generation/voronoi.rs:797:13
[INFO] [stdout]     |
[INFO] [stdout] 797 |         let mut graph = gen.build_polygon_graph(&result);
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `river_cells`
[INFO] [stdout]    --> src/generation/mod.rs:271:13
[INFO] [stdout]     |
[INFO] [stdout] 271 |         let river_cells = world.river_cells();
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_river_cells`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `final_population` is never read
[INFO] [stdout]    --> src/history/generator.rs:483:36
[INFO] [stdout]     |
[INFO] [stdout] 483 |         let mut final_population = 0u64;
[INFO] [stdout]     |                                    ^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 550 |         final_population = societies_map.values().map(|s| s.population).sum();
[INFO] [stdout]     |         --------------------------------------------------------------------- `final_population` is overwritten here before the previous value is read
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/packaging.rs:360:13
[INFO] [stdout]     |
[INFO] [stdout] 360 |         let mut temp_file = NamedTempFile::new().unwrap();
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/packaging.rs:392:13
[INFO] [stdout]     |
[INFO] [stdout] 392 |         let mut temp_file = NamedTempFile::new().unwrap();
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/packaging.rs:407:13
[INFO] [stdout]     |
[INFO] [stdout] 407 |         let mut temp_file = NamedTempFile::new().unwrap();
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/packaging.rs:422:13
[INFO] [stdout]     |
[INFO] [stdout] 422 |         let mut temp_file = NamedTempFile::new().unwrap();
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/packaging.rs:436:13
[INFO] [stdout]     |
[INFO] [stdout] 436 |         let mut temp_file = NamedTempFile::new().unwrap();
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/packaging.rs:486:13
[INFO] [stdout]     |
[INFO] [stdout] 486 |         let mut temp_file = NamedTempFile::new().unwrap();
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `base_suitability` is never read
[INFO] [stdout]    --> src/settlements/mod.rs:582:41
[INFO] [stdout]     |
[INFO] [stdout] 582 |         let mut base_suitability: f32 = 0.0;
[INFO] [stdout]     |                                         ^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 592 |             base_suitability = (carrying_capacity / 7000.0).min(1.0) * 0.6;
[INFO] [stdout]     |             -------------------------------------------------------------- `base_suitability` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `soil_fertility` is never read
[INFO] [stdout]    --> src/settlements/mod.rs:584:39
[INFO] [stdout]     |
[INFO] [stdout] 584 |           let mut soil_fertility: f32 = 0.0;
[INFO] [stdout]     |                                         ^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 604 | /         soil_fertility = match biome {
[INFO] [stdout] 605 | |             BiomeType::TemperateGrassland | BiomeType::TropicalSavanna => 1.0,
[INFO] [stdout] 606 | |             BiomeType::TemperateDeciduousForest | BiomeType::TemperateMixedForest => 0.8,
[INFO] [stdout] 607 | |             BiomeType::SubtropicalSeasonalForest | BiomeType::TropicalSeasonalForest => 0.7,
[INFO] [stdout] 608 | |             _ => 0.3,
[INFO] [stdout] 609 | |         };
[INFO] [stdout]     | |_________- `soil_fertility` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/simulation/population.rs:551:17
[INFO] [stdout]     |
[INFO] [stdout] 551 |                 _ => 1.0,
[INFO] [stdout]     |                 ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/simulation/population.rs:551:17
[INFO] [stdout]     |
[INFO] [stdout] 545 |                 SpeciesId::Human => 1.0,
[INFO] [stdout]     |                 ---------------- matches some of the same values
[INFO] [stdout] 546 |                 SpeciesId::Elf => 0.8,
[INFO] [stdout]     |                 -------------- matches some of the same values
[INFO] [stdout] 547 |                 SpeciesId::Dwarf => 1.1,
[INFO] [stdout]     |                 ---------------- matches some of the same values
[INFO] [stdout] 548 |                 SpeciesId::Orc => 1.3,
[INFO] [stdout]     |                 -------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 551 |                 _ => 1.0,
[INFO] [stdout]     |                 ^ ...and 2 other patterns collectively make this unreachable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/simulation/population.rs:891:13
[INFO] [stdout]     |
[INFO] [stdout] 891 |             _ => 1.0, // Unknown species get base rate
[INFO] [stdout]     |             ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/simulation/population.rs:891:13
[INFO] [stdout]     |
[INFO] [stdout] 885 |             SpeciesId::Human => 1.0,    // Base - adaptable
[INFO] [stdout]     |             ---------------- matches some of the same values
[INFO] [stdout] 886 |             SpeciesId::Elf => 0.8,      // Slower reproduction
[INFO] [stdout]     |             -------------- matches some of the same values
[INFO] [stdout] 887 |             SpeciesId::Dwarf => 1.1,    // Industrious
[INFO] [stdout]     |             ---------------- matches some of the same values
[INFO] [stdout] 888 |             SpeciesId::Orc => 1.3,      // High birth rate
[INFO] [stdout]     |             -------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 891 |             _ => 1.0, // Unknown species get base rate
[INFO] [stdout]     |             ^ ...and 2 other patterns collectively make this unreachable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]     --> src/simulation/population.rs:1182:9
[INFO] [stdout]      |
[INFO] [stdout] 1168 |         BiomeType::TropicalSeasonalForest => 30_000,
[INFO] [stdout]      |         --------------------------------- matches all the relevant values
[INFO] [stdout] ...
[INFO] [stdout] 1182 |         BiomeType::TropicalSeasonalForest => 35_000,
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/terrain/biome.rs:345:13
[INFO] [stdout]     |
[INFO] [stdout] 315 |             BiomeType::SubtropicalDesert => "Subtropical Desert",
[INFO] [stdout]     |             ---------------------------- matches all the relevant values
[INFO] [stdout] ...
[INFO] [stdout] 345 |             BiomeType::SubtropicalDesert => "Subtropical Desert",
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/terrain/biome.rs:346:13
[INFO] [stdout]     |
[INFO] [stdout] 320 |             BiomeType::TemperateDesert => "Temperate Desert",
[INFO] [stdout]     |             -------------------------- matches all the relevant values
[INFO] [stdout] ...
[INFO] [stdout] 346 |             BiomeType::TemperateDesert => "Temperate Desert",
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result`
[INFO] [stdout]    --> src/terrain/elevation_assignment.rs:670:13
[INFO] [stdout]     |
[INFO] [stdout] 670 |         let result = assigner.assign_elevation(&mut graph, 42);
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/terrain/elevation_assignment.rs:677:13
[INFO] [stdout]     |
[INFO] [stdout] 677 |         let mut graph = create_test_graph();
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/terrain/elevation_assignment.rs:718:17
[INFO] [stdout]     |
[INFO] [stdout] 718 |             let mut min_path_elev = polygon.elevation;
[INFO] [stdout]     |                 ----^^^^^^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `original_stats`
[INFO] [stdout]    --> src/terrain/erosion.rs:499:13
[INFO] [stdout]     |
[INFO] [stdout] 499 |         let original_stats = calculate_stats(&grid);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_original_stats`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `new_stats`
[INFO] [stdout]    --> src/terrain/erosion.rs:511:13
[INFO] [stdout]     |
[INFO] [stdout] 511 |         let new_stats = calculate_stats(&grid);
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_new_stats`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/terrain/resource_types.rs:466:13
[INFO] [stdout]     |
[INFO] [stdout] 438 |             ResourceType::Limestone => 0.15,
[INFO] [stdout]     |             ----------------------- matches all the relevant values
[INFO] [stdout] ...
[INFO] [stdout] 466 |             ResourceType::Limestone => 0.35,
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/terrain/terrain_generator.rs:515:13
[INFO] [stdout]     |
[INFO] [stdout] 515 |         let mut generator = TerrainGenerator::new(config);
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `grid`
[INFO] [stdout]    --> src/terrain/terrain_generator.rs:574:13
[INFO] [stdout]     |
[INFO] [stdout] 574 |         let grid = generator.generate(TerrainLayer::Mountains);
[INFO] [stdout]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_grid`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `result_full`
[INFO] [stdout]    --> src/world/generation/lloyd_relaxation.rs:453:13
[INFO] [stdout]     |
[INFO] [stdout] 453 |         let result_full = relaxer_full.relax(&mesh, &bounds);
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_result_full`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `context`
[INFO] [stdout]    --> src/artifacts.rs:510:9
[INFO] [stdout]     |
[INFO] [stdout] 510 |         context: &ArtifactCreationContext,
[INFO] [stdout]     |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_context`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `world_id`
[INFO] [stdout]     --> src/artifacts.rs:1452:13
[INFO] [stdout]      |
[INFO] [stdout] 1452 |         let world_id = Uuid::new_v4();
[INFO] [stdout]      |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_world_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `position`
[INFO] [stdout]    --> src/beasts/remnants.rs:119:36
[INFO] [stdout]     |
[INFO] [stdout] 119 |     pub fn affects_position(&self, position: u32, distance_km: f32) -> bool {
[INFO] [stdout]     |                                    ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_position`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `world_id`
[INFO] [stdout]    --> src/beasts/remnants.rs:374:13
[INFO] [stdout]     |
[INFO] [stdout] 374 |         let world_id = Uuid::new_v4();
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_world_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `should_remove`
[INFO] [stdout]    --> src/beasts/remnants.rs:404:17
[INFO] [stdout]     |
[INFO] [stdout] 404 |             let should_remove = remnant.apply_decay();
[INFO] [stdout]     |                 ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_should_remove`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `position`
[INFO] [stdout]    --> src/beasts/mod.rs:217:35
[INFO] [stdout]     |
[INFO] [stdout] 217 |     pub fn is_in_territory(&self, position: u32, distance_km: f32) -> bool {
[INFO] [stdout]     |                                   ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_position`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `PredictionPattern` is more private than the item `event_predictor::EventPredictor::get_patterns_for`
[INFO] [stdout]    --> src/events/probability/event_predictor.rs:295:5
[INFO] [stdout]     |
[INFO] [stdout] 295 |     pub fn get_patterns_for(&self, event_type: EventType) -> Vec<&PredictionPattern> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `event_predictor::EventPredictor::get_patterns_for` is reachable at visibility `pub`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `PredictionPattern` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/events/probability/event_predictor.rs:338:1
[INFO] [stdout]     |
[INFO] [stdout] 338 | struct PredictionPattern {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `SettlementState` is more private than the item `history::population::PopulationGrowthService::get_all_populations`
[INFO] [stdout]    --> src/history/population.rs:258:5
[INFO] [stdout]     |
[INFO] [stdout] 258 |     pub fn get_all_populations(&self) -> &HashMap<Uuid, SettlementState> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `history::population::PopulationGrowthService::get_all_populations` is reachable at visibility `pub`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `SettlementState` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/history/population.rs:485:1
[INFO] [stdout]     |
[INFO] [stdout] 485 | struct SettlementState {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `calculate_income` and `update_goal_progress` are never used
[INFO] [stdout]    --> src/faction_integration.rs:115:8
[INFO] [stdout]     |
[INFO] [stdout]  39 | impl FactionTurnProcessor {
[INFO] [stdout]     | ------------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 115 |     fn calculate_income(&self, faction: &Faction) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     fn update_goal_progress(&self, faction: &mut Faction) {
[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 `DEFAULT_CONFIG_NAME` is never used
[INFO] [stdout]   --> src/config/mod.rs:16:7
[INFO] [stdout]    |
[INFO] [stdout] 16 | const DEFAULT_CONFIG_NAME: &str = "world.toml";
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `dist_sq` is never used
[INFO] [stdout]    --> src/generation/voronoi.rs:100:8
[INFO] [stdout]     |
[INFO] [stdout]  88 | impl Seed {
[INFO] [stdout]     | --------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 100 |     fn dist_sq(&self, other: &Seed) -> f32 {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `species_loader` and `population_simulator` are never read
[INFO] [stdout]    --> src/history/generator.rs:196:5
[INFO] [stdout]     |
[INFO] [stdout] 194 | pub struct HistoryGenerator {
[INFO] [stdout]     |            ---------------- fields in this struct
[INFO] [stdout] 195 |     /// Species template loader.
[INFO] [stdout] 196 |     species_loader: SpeciesLoader,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 205 |     population_simulator: PopulationGrowthService,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `HistoryGenerator` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name`, `x`, `y`, and `biome` are never read
[INFO] [stdout]    --> src/history/generator.rs:740:5
[INFO] [stdout]     |
[INFO] [stdout] 738 | struct SettlementSite {
[INFO] [stdout]     |        -------------- fields in this struct
[INFO] [stdout] 739 |     id: Uuid,
[INFO] [stdout] 740 |     name: String,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 741 |     x: usize,
[INFO] [stdout]     |     ^
[INFO] [stdout] 742 |     y: usize,
[INFO] [stdout]     |     ^
[INFO] [stdout] 743 |     biome: BiomeType,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `SettlementSite` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `seed` is never read
[INFO] [stdout]    --> src/history/population.rs:174:5
[INFO] [stdout]     |
[INFO] [stdout] 161 | pub struct PopulationGrowthService {
[INFO] [stdout]     |            ----------------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 174 |     seed: u64,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `PopulationGrowthService` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ENTRIES_DIR` is never used
[INFO] [stdout]   --> src/packaging.rs:28:7
[INFO] [stdout]    |
[INFO] [stdout] 28 | const ENTRIES_DIR: &str = "entries/";
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `calculate_suitability` is never used
[INFO] [stdout]    --> src/settlements/mod.rs:778:8
[INFO] [stdout]     |
[INFO] [stdout] 250 | impl SettlementGenerator {
[INFO] [stdout]     | ------------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 778 |     fn calculate_suitability(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `calculate_growth_rate` and `get_species_growth_modifier` are never used
[INFO] [stdout]    --> src/simulation/population.rs:864:8
[INFO] [stdout]     |
[INFO] [stdout] 357 | impl PopulationModel {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 864 |     fn calculate_growth_rate(&self, state: &SettlementPopulation) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 883 |     fn get_species_growth_modifier(&self, species_id: SpeciesId) -> f64 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `GLOBAL_STORAGE` is never used
[INFO] [stdout]   --> src/storage.rs:49:8
[INFO] [stdout]    |
[INFO] [stdout] 49 | static GLOBAL_STORAGE: OnceLock<StorageManager> = OnceLock::new();
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_cache_dir` is never used
[INFO] [stdout]   --> src/storage.rs:74:4
[INFO] [stdout]    |
[INFO] [stdout] 74 | fn default_cache_dir() -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_generated_dir` is never used
[INFO] [stdout]   --> src/storage.rs:78:4
[INFO] [stdout]    |
[INFO] [stdout] 78 | fn default_generated_dir() -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `default_exports_dir` is never used
[INFO] [stdout]   --> src/storage.rs:82:4
[INFO] [stdout]    |
[INFO] [stdout] 82 | fn default_exports_dir() -> String {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `entity_mesh` is never read
[INFO] [stdout]    --> src/terrain/elevation.rs:211:5
[INFO] [stdout]     |
[INFO] [stdout] 205 | pub struct PolygonGraph {
[INFO] [stdout]     |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 211 |     entity_mesh: Option<std::sync::Arc<crate::world::entities::polygon::PolygonMesh>>,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `PolygonGraph` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WonderTypeDef` is never constructed
[INFO] [stdout]   --> src/terrain/natural_wonders/wonder_types.rs:88:12
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub struct WonderTypeDef {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `generator` is never read
[INFO] [stdout]    --> src/terrain/resource_spawner.rs:224:5
[INFO] [stdout]     |
[INFO] [stdout] 221 | pub struct ResourceSpawner {
[INFO] [stdout]     |            --------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 224 |     generator: ResourceGenerator,
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ResourceSpawner` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `determine_spawns` and `get_biome_affinity` are never used
[INFO] [stdout]    --> src/terrain/resource_spawner.rs:412:8
[INFO] [stdout]     |
[INFO] [stdout] 228 | impl ResourceSpawner {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 412 |     fn determine_spawns(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 580 |     fn get_biome_affinity(&self, category: ResourceCategory, biome: BiomeType) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `VIABILITY_MATRIX` is never used
[INFO] [stdout]    --> src/terrain/resource_types.rs:965:8
[INFO] [stdout]     |
[INFO] [stdout] 965 | static VIABILITY_MATRIX: ViabilityMatrix = ViabilityMatrix;
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_tectonic_modifiers` is never used
[INFO] [stdout]    --> src/terrain/tectonic/elevation_effects.rs:152:8
[INFO] [stdout]     |
[INFO] [stdout] 152 | pub fn apply_tectonic_modifiers(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `rng` is never read
[INFO] [stdout]    --> src/util/noise.rs:115:5
[INFO] [stdout]     |
[INFO] [stdout] 111 | pub struct SimplexNoise {
[INFO] [stdout]     |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 115 |     rng: Rng,
[INFO] [stdout]     |     ^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `SimplexNoise` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `biome_matrix` is never read
[INFO] [stdout]   --> src/world/generation/geography_generator.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub struct GeographyGenerator {
[INFO] [stdout]    |            ------------------ field in this struct
[INFO] [stdout] 41 |     config: GeographyConfig,
[INFO] [stdout] 42 |     biome_matrix: BiomeAssignmentMatrix,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GeographyGenerator` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `update_mesh_centroids` is never used
[INFO] [stdout]    --> src/world/generation/lloyd_relaxation.rs:269:8
[INFO] [stdout]     |
[INFO] [stdout] 155 | impl LloydRelaxation {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 269 |     fn update_mesh_centroids(&mut self, _mesh: &mut PolygonMesh, _centroids: &[Point2D]) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `concentration_modifier` is never read
[INFO] [stdout]   --> src/artifacts.rs:99:5
[INFO] [stdout]    |
[INFO] [stdout] 97 | pub struct CataclysmTriggerSystem {
[INFO] [stdout]    |            ---------------------- field in this struct
[INFO] [stdout] 98 |     /// Probability modifier based on artifact concentration
[INFO] [stdout] 99 |     concentration_modifier: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_fire_effect` is never used
[INFO] [stdout]   --> src/beasts/effects.rs:64:4
[INFO] [stdout]    |
[INFO] [stdout] 64 | fn calculate_fire_effect(
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_water_effect` is never used
[INFO] [stdout]   --> src/beasts/effects.rs:83:4
[INFO] [stdout]    |
[INFO] [stdout] 83 | fn calculate_water_effect(
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_earth_effect` is never used
[INFO] [stdout]    --> src/beasts/effects.rs:100:4
[INFO] [stdout]     |
[INFO] [stdout] 100 | fn calculate_earth_effect(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_life_effect` is never used
[INFO] [stdout]    --> src/beasts/effects.rs:113:4
[INFO] [stdout]     |
[INFO] [stdout] 113 | fn calculate_life_effect(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: useless conversion to the same type: `SystemTime`
[INFO] [stdout]    --> src/storage.rs:366:73
[INFO] [stdout]     |
[INFO] [stdout] 366 |                         let modified = metadata.modified().ok().map(|t| t.into());
[INFO] [stdout]     |                                                                         ^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: `#[deny(self_type_conversion)]` on by default
[INFO] [stdout] help: consider removing the conversion call
[INFO] [stdout]     |
[INFO] [stdout] 366 -                         let modified = metadata.modified().ok().map(|t| t.into());
[INFO] [stdout] 366 +                         let modified = metadata.modified().ok().map(|t| t);
[INFO] [stdout]     |
[INFO] [stdout] help: you can use the fully-qualified path to avoid triggering this lint
[INFO] [stdout]     |
[INFO] [stdout] 366 -                         let modified = metadata.modified().ok().map(|t| t.into());
[INFO] [stdout] 366 +                         let modified = metadata.modified().ok().map(|t| <SystemTime as Into<_>>::into(t));
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `next_f64Signed` should have a snake case name
[INFO] [stdout]   --> src/util/noise.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub fn next_f64Signed(&mut self) -> f64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^ help: convert the identifier to snake case: `next_f64_signed`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `world-factory` (lib test) due to 1 previous error; 81 warnings emitted
[INFO] running `Command { std: "docker" "inspect" "6520e612c1dd66472b0f73ef78a3368ab99838fd5f4345c8bd6f9554c158d949", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "6520e612c1dd66472b0f73ef78a3368ab99838fd5f4345c8bd6f9554c158d949", kill_on_drop: false }`
[INFO] [stdout] 6520e612c1dd66472b0f73ef78a3368ab99838fd5f4345c8bd6f9554c158d949
