[INFO] cloning repository https://github.com/KooshaPari/phenotype-gfx
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/KooshaPari/phenotype-gfx" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FKooshaPari%2Fphenotype-gfx", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FKooshaPari%2Fphenotype-gfx'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] f840c9574905a6f570410086ba0939738d4bc25c
[INFO] testing KooshaPari/phenotype-gfx against 1.97.0-beta.6 for beta-1.98-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FKooshaPari%2Fphenotype-gfx" "/workspace/builds/worker-7-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/KooshaPari/phenotype-gfx
[INFO] removed 0 missing examples
[INFO] finished tweaking git repo https://github.com/KooshaPari/phenotype-gfx
[INFO] tweaked toml for git repo https://github.com/KooshaPari/phenotype-gfx written to /workspace/builds/worker-7-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/KooshaPari/phenotype-gfx on toolchain 1.97.0-beta.6
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.97.0-beta.6" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/KooshaPari/phenotype-gfx already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.97.0-beta.6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded wasm-bindgen-shared v0.2.125
[INFO] [stderr]   Downloaded wasm-bindgen v0.2.125
[INFO] [stderr]   Downloaded wasm-bindgen-macro v0.2.125
[INFO] [stderr]   Downloaded wasm-bindgen-futures v0.4.75
[INFO] [stderr]   Downloaded is-terminal v0.4.17
[INFO] [stderr]   Downloaded ciborium-io v0.2.2
[INFO] [stderr]   Downloaded plotters-svg v0.3.7
[INFO] [stderr]   Downloaded ciborium-ll v0.2.2
[INFO] [stderr]   Downloaded rusty-fork v0.3.1
[INFO] [stderr]   Downloaded oorandom v11.1.5
[INFO] [stderr]   Downloaded wasm-bindgen-macro-support v0.2.125
[INFO] [stderr]   Downloaded ciborium v0.2.2
[INFO] [stderr]   Downloaded metrics v0.24.6
[INFO] [stderr]   Downloaded rapidhash v4.4.2
[INFO] [stderr]   Downloaded uuid v1.23.3
[INFO] [stderr]   Downloaded zerocopy-derive v0.8.52
[INFO] [stderr]   Downloaded js-sys v0.3.102
[INFO] [stderr]   Downloaded memchr v2.8.2
[INFO] [stderr]   Downloaded regex v1.12.4
[INFO] [stderr]   Downloaded wasip2 v1.0.4+wasi-0.2.12
[INFO] [stderr]   Downloaded cc v1.2.64
[INFO] [stderr]   Downloaded zerocopy v0.8.52
[INFO] [stderr]   Downloaded regex-syntax v0.8.11
[INFO] [stderr]   Downloaded web-sys v0.3.102
[INFO] [stderr]   Downloaded bytes v1.12.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3d5ced03c013a94a2f102a4510f48a6e9184255caf5fd8244f58017bde7f5210" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 381083864e64d8503dcc4e08299e022c3aa20413dc725e565da87478ec72f839
[INFO] running `Command { std: "docker" "start" "381083864e64d8503dcc4e08299e022c3aa20413dc725e565da87478ec72f839", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "381083864e64d8503dcc4e08299e022c3aa20413dc725e565da87478ec72f839", 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" "381083864e64d8503dcc4e08299e022c3aa20413dc725e565da87478ec72f839" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "381083864e64d8503dcc4e08299e022c3aa20413dc725e565da87478ec72f839", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "381083864e64d8503dcc4e08299e022c3aa20413dc725e565da87478ec72f839" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling syn v2.0.118
[INFO] [stderr]    Compiling libc v0.2.186
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]    Compiling serde_json v1.0.150
[INFO] [stderr]    Compiling memchr v2.8.2
[INFO] [stderr]    Compiling bytemuck v1.25.0
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling rapidhash v4.4.2
[INFO] [stderr]    Compiling metrics v0.24.6
[INFO] [stderr]    Compiling uuid v1.23.3
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling glam v0.29.3
[INFO] [stderr]    Compiling phenotype-gfx v0.2.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `PassEffect`, `PostFxContext`, and `PostFxPass`
[INFO] [stdout]   --> src/postfx/post_stack.rs:19:21
[INFO] [stdout]    |
[INFO] [stdout] 19 |     PassDescriptor, PassEffect, PassQuality, PostFxContext, PostFxPass,
[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: `PassQuality`
[INFO] [stdout]   --> src/postfx/ssao_pass.rs:15:33
[INFO] [stdout]    |
[INFO] [stdout] 15 |     PassDescriptor, PassEffect, PassQuality, PostFxContext, PostFxPass,
[INFO] [stdout]    |                                 ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `postfx::rendering::PostFxMaterial`: Use the per-pass config types (BloomConfig, SsaoConfig, ...) directly; this type is a pass-through kept for C# edge compatibility.
[INFO] [stdout]   --> src/postfx/mod.rs:54:21
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub use rendering::{PostFxMaterial, PostFxRenderer, PostFxShader, RenderTarget};
[INFO] [stdout]    |                     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `postfx::rendering::PostFxRenderer`: Use PostStack::describe_passes() + per-pass configs directly; this orchestrator is a pass-through kept for C# edge compatibility.
[INFO] [stdout]   --> src/postfx/mod.rs:54:37
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub use rendering::{PostFxMaterial, PostFxRenderer, PostFxShader, RenderTarget};
[INFO] [stdout]    |                                     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `postfx::rendering::PostFxShader`: Use the engine-side shader lookup; this type is a name-only pass-through kept for C# edge compatibility.
[INFO] [stdout]   --> src/postfx/mod.rs:54:53
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub use rendering::{PostFxMaterial, PostFxRenderer, PostFxShader, RenderTarget};
[INFO] [stdout]    |                                                     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:15:46
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::water::rendering::water_material::WaterMaterial;
[INFO] [stdout]    |                                              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:40:25
[INFO] [stdout]    |
[INFO] [stdout] 40 |     by_id: HashMap<u64, WaterMaterial>,
[INFO] [stdout]    |                         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:81:25
[INFO] [stdout]    |
[INFO] [stdout] 81 |     by_id: HashMap<u64, WaterMaterial>,
[INFO] [stdout]    |                         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:27:31
[INFO] [stdout]    |
[INFO] [stdout] 27 |     fn list(&mut self) -> Vec<WaterMaterial>;
[INFO] [stdout]    |                               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:29:43
[INFO] [stdout]    |
[INFO] [stdout] 29 |     fn find(&mut self, id: u64) -> Option<WaterMaterial>;
[INFO] [stdout]    |                                           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:32:38
[INFO] [stdout]    |
[INFO] [stdout] 32 |     fn register(&mut self, material: WaterMaterial) -> WaterResult<()>;
[INFO] [stdout]    |                                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:59:31
[INFO] [stdout]    |
[INFO] [stdout] 59 |     fn list(&mut self) -> Vec<WaterMaterial> {
[INFO] [stdout]    |                               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:62:43
[INFO] [stdout]    |
[INFO] [stdout] 62 |     fn find(&mut self, id: u64) -> Option<WaterMaterial> {
[INFO] [stdout]    |                                           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:65:38
[INFO] [stdout]    |
[INFO] [stdout] 65 |     fn register(&mut self, material: WaterMaterial) -> WaterResult<()> {
[INFO] [stdout]    |                                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]    --> src/water/ports/material_registry.rs:101:31
[INFO] [stdout]     |
[INFO] [stdout] 101 |     fn list(&mut self) -> Vec<WaterMaterial> {
[INFO] [stdout]     |                               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]    --> src/water/ports/material_registry.rs:105:43
[INFO] [stdout]     |
[INFO] [stdout] 105 |     fn find(&mut self, id: u64) -> Option<WaterMaterial> {
[INFO] [stdout]     |                                           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]    --> src/water/ports/material_registry.rs:109:38
[INFO] [stdout]     |
[INFO] [stdout] 109 |     fn register(&mut self, material: WaterMaterial) -> WaterResult<()> {
[INFO] [stdout]     |                                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_shader::WaterShader`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stdout]  --> src/water/rendering/water_material.rs:7:26
[INFO] [stdout]   |
[INFO] [stdout] 7 | use super::water_shader::WaterShader;
[INFO] [stdout]   |                          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:21:6
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl WaterMaterial {
[INFO] [stdout]    |      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_shader::WaterShader`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:23:51
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub fn new(label: impl Into<String>, shader: &WaterShader) -> Self {
[INFO] [stdout]    |                                                   ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]  --> src/water/rendering/water_renderer.rs:9:28
[INFO] [stdout]   |
[INFO] [stdout] 9 | use super::water_material::WaterMaterial;
[INFO] [stdout]   |                            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:22:22
[INFO] [stdout]    |
[INFO] [stdout] 22 |     material: Option<WaterMaterial>,
[INFO] [stdout]    |                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_renderer::WaterRenderer`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:26:6
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl WaterRenderer {
[INFO] [stdout]    |      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_renderer::WaterRenderer`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:89:18
[INFO] [stdout]    |
[INFO] [stdout] 89 | impl Default for WaterRenderer {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:53:39
[INFO] [stdout]    |
[INFO] [stdout] 53 |     pub fn material(&self) -> Option<&WaterMaterial> {
[INFO] [stdout]    |                                       ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:57:39
[INFO] [stdout]    |
[INFO] [stdout] 57 |     pub fn set_material(&mut self, m: WaterMaterial) {
[INFO] [stdout]    |                                       ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_shader::WaterShader`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stdout]   --> src/water/rendering/water_shader.rs:17:6
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl WaterShader {
[INFO] [stdout]    |      ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::id`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:25:13
[INFO] [stdout]    |
[INFO] [stdout] 25 |             id: crate::water::ports::material_registry::next_handle(),
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::shader_name`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:26:13
[INFO] [stdout]    |
[INFO] [stdout] 26 |             shader_name: shader.name().to_string(),
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::label`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:27:13
[INFO] [stdout]    |
[INFO] [stdout] 27 |             label: label.into(),
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::id`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:32:9
[INFO] [stdout]    |
[INFO] [stdout] 32 |         self.id
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::shader_name`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:36:10
[INFO] [stdout]    |
[INFO] [stdout] 36 |         &self.shader_name
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::label`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:40:10
[INFO] [stdout]    |
[INFO] [stdout] 40 |         &self.label
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::lod`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:30:13
[INFO] [stdout]    |
[INFO] [stdout] 30 |             lod: WaterLod::new(),
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::wave_bank`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:31:13
[INFO] [stdout]    |
[INFO] [stdout] 31 |             wave_bank: None,
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::material`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:32:13
[INFO] [stdout]    |
[INFO] [stdout] 32 |             material: None,
[INFO] [stdout]    |             ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::patch_size`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:33:13
[INFO] [stdout]    |
[INFO] [stdout] 33 |             patch_size: 100.0,
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::lod`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:38:10
[INFO] [stdout]    |
[INFO] [stdout] 38 |         &self.lod
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::lod`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:42:14
[INFO] [stdout]    |
[INFO] [stdout] 42 |         &mut self.lod
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::wave_bank`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:46:9
[INFO] [stdout]    |
[INFO] [stdout] 46 |         self.wave_bank.as_ref()
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::wave_bank`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:50:9
[INFO] [stdout]    |
[INFO] [stdout] 50 |         self.wave_bank = Some(b);
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::material`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:54:9
[INFO] [stdout]    |
[INFO] [stdout] 54 |         self.material.as_ref()
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::material`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:58:9
[INFO] [stdout]    |
[INFO] [stdout] 58 |         self.material = Some(m);
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::patch_size`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:62:9
[INFO] [stdout]    |
[INFO] [stdout] 62 |         self.patch_size
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::patch_size`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:66:9
[INFO] [stdout]    |
[INFO] [stdout] 66 |         self.patch_size = v;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::wave_bank`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:72:20
[INFO] [stdout]    |
[INFO] [stdout] 72 |           let bank = self
[INFO] [stdout]    |  ____________________^
[INFO] [stdout] 73 | |             .wave_bank
[INFO] [stdout]    | |______________________^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::lod`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:76:26
[INFO] [stdout]    |
[INFO] [stdout] 76 |         let resolution = self.lod.select_resolution(distance)?;
[INFO] [stdout]    |                          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::patch_size`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:85:52
[INFO] [stdout]    |
[INFO] [stdout] 85 |         fluid_mesh::build(bank, resolution as u32, self.patch_size, time)
[INFO] [stdout]    |                                                    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_shader::WaterShader::name`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stdout]   --> src/water/rendering/water_shader.rs:20:16
[INFO] [stdout]    |
[INFO] [stdout] 20 |         Self { name: name.into() }
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_shader::WaterShader::name`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stdout]   --> src/water/rendering/water_shader.rs:24:10
[INFO] [stdout]    |
[INFO] [stdout] 24 |         &self.name
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/postfx/ssao_pass.rs:80:17
[INFO] [stdout]    |
[INFO] [stdout] 80 |             let mut x = lerp(-1.0_f32, 1.0_f32, next());
[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: variable does not need to be mutable
[INFO] [stdout]   --> src/postfx/ssao_pass.rs:81:17
[INFO] [stdout]    |
[INFO] [stdout] 81 |             let mut y = lerp(-1.0_f32, 1.0_f32, next());
[INFO] [stdout]    |                 ----^
[INFO] [stdout]    |                 |
[INFO] [stdout]    |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 19.17s
[INFO] running `Command { std: "docker" "inspect" "381083864e64d8503dcc4e08299e022c3aa20413dc725e565da87478ec72f839", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "381083864e64d8503dcc4e08299e022c3aa20413dc725e565da87478ec72f839" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling zerocopy v0.8.52
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling regex-syntax v0.8.11
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]    Compiling plotters-backend v0.3.7
[INFO] [stderr]    Compiling zerocopy-derive v0.8.52
[INFO] [stderr]    Compiling fastrand v2.4.1
[INFO] [stderr]    Compiling ciborium-io v0.2.2
[INFO] [stderr]    Compiling clap_builder v4.6.0
[INFO] [stderr]    Compiling wait-timeout v0.2.1
[INFO] [stderr]    Compiling itertools v0.10.5
[INFO] [stderr]    Compiling quick-error v1.2.3
[INFO] [stderr]    Compiling cast v0.3.0
[INFO] [stderr]    Compiling rand_core v0.9.5
[INFO] [stderr]    Compiling is-terminal v0.4.17
[INFO] [stderr]    Compiling anes v0.1.6
[INFO] [stderr]    Compiling plotters-svg v0.3.7
[INFO] [stderr]    Compiling oorandom v11.1.5
[INFO] [stderr]    Compiling unarray v0.1.4
[INFO] [stderr]    Compiling rand_xorshift v0.4.0
[INFO] [stderr]    Compiling rand v0.9.4
[INFO] [stderr]    Compiling criterion-plot v0.5.0
[INFO] [stderr]    Compiling plotters v0.3.7
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling clap v4.6.1
[INFO] [stderr]    Compiling rusty-fork v0.3.1
[INFO] [stderr]    Compiling serde_json v1.0.150
[INFO] [stderr]    Compiling uuid v1.23.3
[INFO] [stderr]    Compiling glam v0.29.3
[INFO] [stderr]    Compiling tinytemplate v1.2.1
[INFO] [stderr]    Compiling regex v1.12.4
[INFO] [stderr]    Compiling half v2.7.1
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling ciborium-ll v0.2.2
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling ciborium v0.2.2
[INFO] [stderr]    Compiling proptest v1.11.0
[INFO] [stderr]    Compiling criterion v0.5.1
[INFO] [stderr]    Compiling phenotype-gfx v0.2.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `PassEffect`, `PostFxContext`, and `PostFxPass`
[INFO] [stdout]   --> src/postfx/post_stack.rs:19:21
[INFO] [stdout]    |
[INFO] [stdout] 19 |     PassDescriptor, PassEffect, PassQuality, PostFxContext, PostFxPass,
[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: `PassQuality`
[INFO] [stdout]   --> src/postfx/ssao_pass.rs:15:33
[INFO] [stdout]    |
[INFO] [stdout] 15 |     PassDescriptor, PassEffect, PassQuality, PostFxContext, PostFxPass,
[INFO] [stdout]    |                                 ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `postfx::rendering::PostFxMaterial`: Use the per-pass config types (BloomConfig, SsaoConfig, ...) directly; this type is a pass-through kept for C# edge compatibility.
[INFO] [stdout]   --> src/postfx/mod.rs:54:21
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub use rendering::{PostFxMaterial, PostFxRenderer, PostFxShader, RenderTarget};
[INFO] [stdout]    |                     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `postfx::rendering::PostFxRenderer`: Use PostStack::describe_passes() + per-pass configs directly; this orchestrator is a pass-through kept for C# edge compatibility.
[INFO] [stdout]   --> src/postfx/mod.rs:54:37
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub use rendering::{PostFxMaterial, PostFxRenderer, PostFxShader, RenderTarget};
[INFO] [stdout]    |                                     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `postfx::rendering::PostFxShader`: Use the engine-side shader lookup; this type is a name-only pass-through kept for C# edge compatibility.
[INFO] [stdout]   --> src/postfx/mod.rs:54:53
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub use rendering::{PostFxMaterial, PostFxRenderer, PostFxShader, RenderTarget};
[INFO] [stdout]    |                                                     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:15:46
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::water::rendering::water_material::WaterMaterial;
[INFO] [stdout]    |                                              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:40:25
[INFO] [stdout]    |
[INFO] [stdout] 40 |     by_id: HashMap<u64, WaterMaterial>,
[INFO] [stdout]    |                         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:81:25
[INFO] [stdout]    |
[INFO] [stdout] 81 |     by_id: HashMap<u64, WaterMaterial>,
[INFO] [stdout]    |                         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:27:31
[INFO] [stdout]    |
[INFO] [stdout] 27 |     fn list(&mut self) -> Vec<WaterMaterial>;
[INFO] [stdout]    |                               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:29:43
[INFO] [stdout]    |
[INFO] [stdout] 29 |     fn find(&mut self, id: u64) -> Option<WaterMaterial>;
[INFO] [stdout]    |                                           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:32:38
[INFO] [stdout]    |
[INFO] [stdout] 32 |     fn register(&mut self, material: WaterMaterial) -> WaterResult<()>;
[INFO] [stdout]    |                                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:59:31
[INFO] [stdout]    |
[INFO] [stdout] 59 |     fn list(&mut self) -> Vec<WaterMaterial> {
[INFO] [stdout]    |                               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:62:43
[INFO] [stdout]    |
[INFO] [stdout] 62 |     fn find(&mut self, id: u64) -> Option<WaterMaterial> {
[INFO] [stdout]    |                                           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:65:38
[INFO] [stdout]    |
[INFO] [stdout] 65 |     fn register(&mut self, material: WaterMaterial) -> WaterResult<()> {
[INFO] [stdout]    |                                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]    --> src/water/ports/material_registry.rs:101:31
[INFO] [stdout]     |
[INFO] [stdout] 101 |     fn list(&mut self) -> Vec<WaterMaterial> {
[INFO] [stdout]     |                               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]    --> src/water/ports/material_registry.rs:105:43
[INFO] [stdout]     |
[INFO] [stdout] 105 |     fn find(&mut self, id: u64) -> Option<WaterMaterial> {
[INFO] [stdout]     |                                           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]    --> src/water/ports/material_registry.rs:109:38
[INFO] [stdout]     |
[INFO] [stdout] 109 |     fn register(&mut self, material: WaterMaterial) -> WaterResult<()> {
[INFO] [stdout]     |                                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_shader::WaterShader`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stdout]  --> src/water/rendering/water_material.rs:7:26
[INFO] [stdout]   |
[INFO] [stdout] 7 | use super::water_shader::WaterShader;
[INFO] [stdout]   |                          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:21:6
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl WaterMaterial {
[INFO] [stdout]    |      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_shader::WaterShader`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:23:51
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub fn new(label: impl Into<String>, shader: &WaterShader) -> Self {
[INFO] [stdout]    |                                                   ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]  --> src/water/rendering/water_renderer.rs:9:28
[INFO] [stdout]   |
[INFO] [stdout] 9 | use super::water_material::WaterMaterial;
[INFO] [stdout]   |                            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:22:22
[INFO] [stdout]    |
[INFO] [stdout] 22 |     material: Option<WaterMaterial>,
[INFO] [stdout]    |                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_renderer::WaterRenderer`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:26:6
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl WaterRenderer {
[INFO] [stdout]    |      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_renderer::WaterRenderer`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:89:18
[INFO] [stdout]    |
[INFO] [stdout] 89 | impl Default for WaterRenderer {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:53:39
[INFO] [stdout]    |
[INFO] [stdout] 53 |     pub fn material(&self) -> Option<&WaterMaterial> {
[INFO] [stdout]    |                                       ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:57:39
[INFO] [stdout]    |
[INFO] [stdout] 57 |     pub fn set_material(&mut self, m: WaterMaterial) {
[INFO] [stdout]    |                                       ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_shader::WaterShader`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stdout]   --> src/water/rendering/water_shader.rs:17:6
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl WaterShader {
[INFO] [stdout]    |      ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::id`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:25:13
[INFO] [stdout]    |
[INFO] [stdout] 25 |             id: crate::water::ports::material_registry::next_handle(),
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::shader_name`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:26:13
[INFO] [stdout]    |
[INFO] [stdout] 26 |             shader_name: shader.name().to_string(),
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::label`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:27:13
[INFO] [stdout]    |
[INFO] [stdout] 27 |             label: label.into(),
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::id`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:32:9
[INFO] [stdout]    |
[INFO] [stdout] 32 |         self.id
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::shader_name`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:36:10
[INFO] [stdout]    |
[INFO] [stdout] 36 |         &self.shader_name
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::label`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:40:10
[INFO] [stdout]    |
[INFO] [stdout] 40 |         &self.label
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::lod`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:30:13
[INFO] [stdout]    |
[INFO] [stdout] 30 |             lod: WaterLod::new(),
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::wave_bank`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:31:13
[INFO] [stdout]    |
[INFO] [stdout] 31 |             wave_bank: None,
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::material`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:32:13
[INFO] [stdout]    |
[INFO] [stdout] 32 |             material: None,
[INFO] [stdout]    |             ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::patch_size`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:33:13
[INFO] [stdout]    |
[INFO] [stdout] 33 |             patch_size: 100.0,
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::lod`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:38:10
[INFO] [stdout]    |
[INFO] [stdout] 38 |         &self.lod
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::lod`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:42:14
[INFO] [stdout]    |
[INFO] [stdout] 42 |         &mut self.lod
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::wave_bank`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:46:9
[INFO] [stdout]    |
[INFO] [stdout] 46 |         self.wave_bank.as_ref()
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::wave_bank`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:50:9
[INFO] [stdout]    |
[INFO] [stdout] 50 |         self.wave_bank = Some(b);
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::material`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:54:9
[INFO] [stdout]    |
[INFO] [stdout] 54 |         self.material.as_ref()
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::material`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:58:9
[INFO] [stdout]    |
[INFO] [stdout] 58 |         self.material = Some(m);
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::patch_size`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:62:9
[INFO] [stdout]    |
[INFO] [stdout] 62 |         self.patch_size
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::patch_size`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:66:9
[INFO] [stdout]    |
[INFO] [stdout] 66 |         self.patch_size = v;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::wave_bank`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:72:20
[INFO] [stdout]    |
[INFO] [stdout] 72 |           let bank = self
[INFO] [stdout]    |  ____________________^
[INFO] [stdout] 73 | |             .wave_bank
[INFO] [stdout]    | |______________________^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::lod`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:76:26
[INFO] [stdout]    |
[INFO] [stdout] 76 |         let resolution = self.lod.select_resolution(distance)?;
[INFO] [stdout]    |                          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::patch_size`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:85:52
[INFO] [stdout]    |
[INFO] [stdout] 85 |         fluid_mesh::build(bank, resolution as u32, self.patch_size, time)
[INFO] [stdout]    |                                                    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_shader::WaterShader::name`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stdout]   --> src/water/rendering/water_shader.rs:20:16
[INFO] [stdout]    |
[INFO] [stdout] 20 |         Self { name: name.into() }
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_shader::WaterShader::name`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stdout]   --> src/water/rendering/water_shader.rs:24:10
[INFO] [stdout]    |
[INFO] [stdout] 24 |         &self.name
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/postfx/ssao_pass.rs:80:17
[INFO] [stdout]    |
[INFO] [stdout] 80 |             let mut x = lerp(-1.0_f32, 1.0_f32, next());
[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: variable does not need to be mutable
[INFO] [stdout]   --> src/postfx/ssao_pass.rs:81:17
[INFO] [stdout]    |
[INFO] [stdout] 81 |             let mut y = lerp(-1.0_f32, 1.0_f32, next());
[INFO] [stdout]    |                 ----^
[INFO] [stdout]    |                 |
[INFO] [stdout]    |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PassQuality`
[INFO] [stdout]    --> src/postfx/post_fx_pass_registry.rs:179:58
[INFO] [stdout]     |
[INFO] [stdout] 179 |     use crate::postfx::ports::post_fx_pass::{PassEffect, PassQuality, PostFxContext, PostFxPass};
[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: `PostFxContext`
[INFO] [stdout]   --> src/postfx/post_stack.rs:19:46
[INFO] [stdout]    |
[INFO] [stdout] 19 |     PassDescriptor, PassEffect, PassQuality, PostFxContext, PostFxPass,
[INFO] [stdout]    |                                              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `postfx::rendering::PostFxMaterial`: Use the per-pass config types (BloomConfig, SsaoConfig, ...) directly; this type is a pass-through kept for C# edge compatibility.
[INFO] [stdout]   --> src/postfx/mod.rs:54:21
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub use rendering::{PostFxMaterial, PostFxRenderer, PostFxShader, RenderTarget};
[INFO] [stdout]    |                     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `postfx::rendering::PostFxRenderer`: Use PostStack::describe_passes() + per-pass configs directly; this orchestrator is a pass-through kept for C# edge compatibility.
[INFO] [stdout]   --> src/postfx/mod.rs:54:37
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub use rendering::{PostFxMaterial, PostFxRenderer, PostFxShader, RenderTarget};
[INFO] [stdout]    |                                     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `postfx::rendering::PostFxShader`: Use the engine-side shader lookup; this type is a name-only pass-through kept for C# edge compatibility.
[INFO] [stdout]   --> src/postfx/mod.rs:54:53
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub use rendering::{PostFxMaterial, PostFxRenderer, PostFxShader, RenderTarget};
[INFO] [stdout]    |                                                     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:15:46
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::water::rendering::water_material::WaterMaterial;
[INFO] [stdout]    |                                              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:40:25
[INFO] [stdout]    |
[INFO] [stdout] 40 |     by_id: HashMap<u64, WaterMaterial>,
[INFO] [stdout]    |                         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:81:25
[INFO] [stdout]    |
[INFO] [stdout] 81 |     by_id: HashMap<u64, WaterMaterial>,
[INFO] [stdout]    |                         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:27:31
[INFO] [stdout]    |
[INFO] [stdout] 27 |     fn list(&mut self) -> Vec<WaterMaterial>;
[INFO] [stdout]    |                               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:29:43
[INFO] [stdout]    |
[INFO] [stdout] 29 |     fn find(&mut self, id: u64) -> Option<WaterMaterial>;
[INFO] [stdout]    |                                           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:32:38
[INFO] [stdout]    |
[INFO] [stdout] 32 |     fn register(&mut self, material: WaterMaterial) -> WaterResult<()>;
[INFO] [stdout]    |                                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:59:31
[INFO] [stdout]    |
[INFO] [stdout] 59 |     fn list(&mut self) -> Vec<WaterMaterial> {
[INFO] [stdout]    |                               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:62:43
[INFO] [stdout]    |
[INFO] [stdout] 62 |     fn find(&mut self, id: u64) -> Option<WaterMaterial> {
[INFO] [stdout]    |                                           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/ports/material_registry.rs:65:38
[INFO] [stdout]    |
[INFO] [stdout] 65 |     fn register(&mut self, material: WaterMaterial) -> WaterResult<()> {
[INFO] [stdout]    |                                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]    --> src/water/ports/material_registry.rs:101:31
[INFO] [stdout]     |
[INFO] [stdout] 101 |     fn list(&mut self) -> Vec<WaterMaterial> {
[INFO] [stdout]     |                               ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]    --> src/water/ports/material_registry.rs:105:43
[INFO] [stdout]     |
[INFO] [stdout] 105 |     fn find(&mut self, id: u64) -> Option<WaterMaterial> {
[INFO] [stdout]     |                                           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]    --> src/water/ports/material_registry.rs:109:38
[INFO] [stdout]     |
[INFO] [stdout] 109 |     fn register(&mut self, material: WaterMaterial) -> WaterResult<()> {
[INFO] [stdout]     |                                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_shader::WaterShader`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stdout]    --> src/water/ports/material_registry.rs:126:48
[INFO] [stdout]     |
[INFO] [stdout] 126 |     use crate::water::rendering::water_shader::WaterShader;
[INFO] [stdout]     |                                                ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_shader::WaterShader`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stdout]    --> src/water/ports/material_registry.rs:130:22
[INFO] [stdout]     |
[INFO] [stdout] 130 |         let shader = WaterShader::new("Phenotype/Water");
[INFO] [stdout]     |                      ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]    --> src/water/ports/material_registry.rs:132:17
[INFO] [stdout]     |
[INFO] [stdout] 132 |         let a = WaterMaterial::new("Deep", &shader);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]    --> src/water/ports/material_registry.rs:133:17
[INFO] [stdout]     |
[INFO] [stdout] 133 |         let b = WaterMaterial::new("Shallow", &shader);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_shader::WaterShader`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stdout]    --> src/water/ports/material_registry.rs:147:22
[INFO] [stdout]     |
[INFO] [stdout] 147 |         let shader = WaterShader::new("Phenotype/Water");
[INFO] [stdout]     |                      ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]    --> src/water/ports/material_registry.rs:149:17
[INFO] [stdout]     |
[INFO] [stdout] 149 |         let m = WaterMaterial::new("Dirt", &shader);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_shader::WaterShader`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stdout]    --> src/water/ports/material_registry.rs:158:22
[INFO] [stdout]     |
[INFO] [stdout] 158 |         let shader = WaterShader::new("Phenotype/Water");
[INFO] [stdout]     |                      ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]    --> src/water/ports/material_registry.rs:160:17
[INFO] [stdout]     |
[INFO] [stdout] 160 |         let m = WaterMaterial::new("Sand", &shader);
[INFO] [stdout]     |                 ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_shader::WaterShader`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stdout]  --> src/water/rendering/water_material.rs:7:26
[INFO] [stdout]   |
[INFO] [stdout] 7 | use super::water_shader::WaterShader;
[INFO] [stdout]   |                          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:21:6
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl WaterMaterial {
[INFO] [stdout]    |      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_shader::WaterShader`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:23:51
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub fn new(label: impl Into<String>, shader: &WaterShader) -> Self {
[INFO] [stdout]    |                                                   ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]  --> src/water/rendering/water_renderer.rs:9:28
[INFO] [stdout]   |
[INFO] [stdout] 9 | use super::water_material::WaterMaterial;
[INFO] [stdout]   |                            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:22:22
[INFO] [stdout]    |
[INFO] [stdout] 22 |     material: Option<WaterMaterial>,
[INFO] [stdout]    |                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_renderer::WaterRenderer`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:26:6
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl WaterRenderer {
[INFO] [stdout]    |      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_renderer::WaterRenderer`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:89:18
[INFO] [stdout]    |
[INFO] [stdout] 89 | impl Default for WaterRenderer {
[INFO] [stdout]    |                  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:53:39
[INFO] [stdout]    |
[INFO] [stdout] 53 |     pub fn material(&self) -> Option<&WaterMaterial> {
[INFO] [stdout]    |                                       ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:57:39
[INFO] [stdout]    |
[INFO] [stdout] 57 |     pub fn set_material(&mut self, m: WaterMaterial) {
[INFO] [stdout]    |                                       ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `water::rendering::water_shader::WaterShader`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stdout]   --> src/water/rendering/water_shader.rs:17:6
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl WaterShader {
[INFO] [stdout]    |      ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::id`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:25:13
[INFO] [stdout]    |
[INFO] [stdout] 25 |             id: crate::water::ports::material_registry::next_handle(),
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::shader_name`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:26:13
[INFO] [stdout]    |
[INFO] [stdout] 26 |             shader_name: shader.name().to_string(),
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::label`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:27:13
[INFO] [stdout]    |
[INFO] [stdout] 27 |             label: label.into(),
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::id`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:32:9
[INFO] [stdout]    |
[INFO] [stdout] 32 |         self.id
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::shader_name`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:36:10
[INFO] [stdout]    |
[INFO] [stdout] 36 |         &self.shader_name
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::label`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stdout]   --> src/water/rendering/water_material.rs:40:10
[INFO] [stdout]    |
[INFO] [stdout] 40 |         &self.label
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::lod`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:30:13
[INFO] [stdout]    |
[INFO] [stdout] 30 |             lod: WaterLod::new(),
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::wave_bank`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:31:13
[INFO] [stdout]    |
[INFO] [stdout] 31 |             wave_bank: None,
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::material`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:32:13
[INFO] [stdout]    |
[INFO] [stdout] 32 |             material: None,
[INFO] [stdout]    |             ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::patch_size`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:33:13
[INFO] [stdout]    |
[INFO] [stdout] 33 |             patch_size: 100.0,
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::lod`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:38:10
[INFO] [stdout]    |
[INFO] [stdout] 38 |         &self.lod
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::lod`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:42:14
[INFO] [stdout]    |
[INFO] [stdout] 42 |         &mut self.lod
[INFO] [stdout]    |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::wave_bank`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:46:9
[INFO] [stdout]    |
[INFO] [stdout] 46 |         self.wave_bank.as_ref()
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::wave_bank`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:50:9
[INFO] [stdout]    |
[INFO] [stdout] 50 |         self.wave_bank = Some(b);
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::material`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:54:9
[INFO] [stdout]    |
[INFO] [stdout] 54 |         self.material.as_ref()
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::material`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:58:9
[INFO] [stdout]    |
[INFO] [stdout] 58 |         self.material = Some(m);
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::patch_size`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:62:9
[INFO] [stdout]    |
[INFO] [stdout] 62 |         self.patch_size
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::patch_size`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:66:9
[INFO] [stdout]    |
[INFO] [stdout] 66 |         self.patch_size = v;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::wave_bank`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:72:20
[INFO] [stdout]    |
[INFO] [stdout] 72 |           let bank = self
[INFO] [stdout]    |  ____________________^
[INFO] [stdout] 73 | |             .wave_bank
[INFO] [stdout]    | |______________________^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::lod`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:76:26
[INFO] [stdout]    |
[INFO] [stdout] 76 |         let resolution = self.lod.select_resolution(distance)?;
[INFO] [stdout]    |                          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::patch_size`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stdout]   --> src/water/rendering/water_renderer.rs:85:52
[INFO] [stdout]    |
[INFO] [stdout] 85 |         fluid_mesh::build(bank, resolution as u32, self.patch_size, time)
[INFO] [stdout]    |                                                    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_shader::WaterShader::name`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stdout]   --> src/water/rendering/water_shader.rs:20:16
[INFO] [stdout]    |
[INFO] [stdout] 20 |         Self { name: name.into() }
[INFO] [stdout]    |                ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `water::rendering::water_shader::WaterShader::name`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stdout]   --> src/water/rendering/water_shader.rs:24:10
[INFO] [stdout]    |
[INFO] [stdout] 24 |         &self.name
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PostFxPass`
[INFO] [stdout]   --> src/postfx/post_stack.rs:19:61
[INFO] [stdout]    |
[INFO] [stdout] 19 |     PassDescriptor, PassEffect, PassQuality, PostFxContext, PostFxPass,
[INFO] [stdout]    |                                                             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/postfx/ssao_pass.rs:80:17
[INFO] [stdout]    |
[INFO] [stdout] 80 |             let mut x = lerp(-1.0_f32, 1.0_f32, next());
[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: variable does not need to be mutable
[INFO] [stdout]   --> src/postfx/ssao_pass.rs:81:17
[INFO] [stdout]    |
[INFO] [stdout] 81 |             let mut y = lerp(-1.0_f32, 1.0_f32, next());
[INFO] [stdout]    |                 ----^
[INFO] [stdout]    |                 |
[INFO] [stdout]    |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `make_provider` is never used
[INFO] [stdout]    --> src/postfx/post_fx_pass_registry.rs:217:8
[INFO] [stdout]     |
[INFO] [stdout] 217 |     fn make_provider(effect: PassEffect) -> Box<dyn PostFxPassDescriptor> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 36.55s
[INFO] running `Command { std: "docker" "inspect" "381083864e64d8503dcc4e08299e022c3aa20413dc725e565da87478ec72f839", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "381083864e64d8503dcc4e08299e022c3aa20413dc725e565da87478ec72f839" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr] warning: unused imports: `PassEffect`, `PostFxContext`, and `PostFxPass`
[INFO] [stderr]   --> src/postfx/post_stack.rs:19:21
[INFO] [stderr]    |
[INFO] [stderr] 19 |     PassDescriptor, PassEffect, PassQuality, PostFxContext, PostFxPass,
[INFO] [stderr]    |                     ^^^^^^^^^^               ^^^^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `PassQuality`
[INFO] [stderr]   --> src/postfx/ssao_pass.rs:15:33
[INFO] [stderr]    |
[INFO] [stderr] 15 |     PassDescriptor, PassEffect, PassQuality, PostFxContext, PostFxPass,
[INFO] [stderr]    |                                 ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `postfx::rendering::PostFxMaterial`: Use the per-pass config types (BloomConfig, SsaoConfig, ...) directly; this type is a pass-through kept for C# edge compatibility.
[INFO] [stderr]   --> src/postfx/mod.rs:54:21
[INFO] [stderr]    |
[INFO] [stderr] 54 | pub use rendering::{PostFxMaterial, PostFxRenderer, PostFxShader, RenderTarget};
[INFO] [stderr]    |                     ^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(deprecated)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `postfx::rendering::PostFxRenderer`: Use PostStack::describe_passes() + per-pass configs directly; this orchestrator is a pass-through kept for C# edge compatibility.
[INFO] [stderr]   --> src/postfx/mod.rs:54:37
[INFO] [stderr]    |
[INFO] [stderr] 54 | pub use rendering::{PostFxMaterial, PostFxRenderer, PostFxShader, RenderTarget};
[INFO] [stderr]    |                                     ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `postfx::rendering::PostFxShader`: Use the engine-side shader lookup; this type is a name-only pass-through kept for C# edge compatibility.
[INFO] [stderr]   --> src/postfx/mod.rs:54:53
[INFO] [stderr]    |
[INFO] [stderr] 54 | pub use rendering::{PostFxMaterial, PostFxRenderer, PostFxShader, RenderTarget};
[INFO] [stderr]    |                                                     ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]   --> src/water/ports/material_registry.rs:15:46
[INFO] [stderr]    |
[INFO] [stderr] 15 | use crate::water::rendering::water_material::WaterMaterial;
[INFO] [stderr]    |                                              ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]   --> src/water/ports/material_registry.rs:40:25
[INFO] [stderr]    |
[INFO] [stderr] 40 |     by_id: HashMap<u64, WaterMaterial>,
[INFO] [stderr]    |                         ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]   --> src/water/ports/material_registry.rs:81:25
[INFO] [stderr]    |
[INFO] [stderr] 81 |     by_id: HashMap<u64, WaterMaterial>,
[INFO] [stderr]    |                         ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]   --> src/water/ports/material_registry.rs:27:31
[INFO] [stderr]    |
[INFO] [stderr] 27 |     fn list(&mut self) -> Vec<WaterMaterial>;
[INFO] [stderr]    |                               ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]   --> src/water/ports/material_registry.rs:29:43
[INFO] [stderr]    |
[INFO] [stderr] 29 |     fn find(&mut self, id: u64) -> Option<WaterMaterial>;
[INFO] [stderr]    |                                           ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]   --> src/water/ports/material_registry.rs:32:38
[INFO] [stderr]    |
[INFO] [stderr] 32 |     fn register(&mut self, material: WaterMaterial) -> WaterResult<()>;
[INFO] [stderr]    |                                      ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]   --> src/water/ports/material_registry.rs:59:31
[INFO] [stderr]    |
[INFO] [stderr] 59 |     fn list(&mut self) -> Vec<WaterMaterial> {
[INFO] [stderr]    |                               ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]   --> src/water/ports/material_registry.rs:62:43
[INFO] [stderr]    |
[INFO] [stderr] 62 |     fn find(&mut self, id: u64) -> Option<WaterMaterial> {
[INFO] [stderr]    |                                           ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]   --> src/water/ports/material_registry.rs:65:38
[INFO] [stderr]    |
[INFO] [stderr] 65 |     fn register(&mut self, material: WaterMaterial) -> WaterResult<()> {
[INFO] [stderr]    |                                      ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]    --> src/water/ports/material_registry.rs:101:31
[INFO] [stderr]     |
[INFO] [stderr] 101 |     fn list(&mut self) -> Vec<WaterMaterial> {
[INFO] [stderr]     |                               ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]    --> src/water/ports/material_registry.rs:105:43
[INFO] [stderr]     |
[INFO] [stderr] 105 |     fn find(&mut self, id: u64) -> Option<WaterMaterial> {
[INFO] [stderr]     |                                           ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]    --> src/water/ports/material_registry.rs:109:38
[INFO] [stderr]     |
[INFO] [stderr] 109 |     fn register(&mut self, material: WaterMaterial) -> WaterResult<()> {
[INFO] [stderr]     |                                      ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_shader::WaterShader`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stderr]  --> src/water/rendering/water_material.rs:7:26
[INFO] [stderr]   |
[INFO] [stderr] 7 | use super::water_shader::WaterShader;
[INFO] [stderr]   |                          ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]   --> src/water/rendering/water_material.rs:21:6
[INFO] [stderr]    |
[INFO] [stderr] 21 | impl WaterMaterial {
[INFO] [stderr]    |      ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_shader::WaterShader`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stderr]   --> src/water/rendering/water_material.rs:23:51
[INFO] [stderr]    |
[INFO] [stderr] 23 |     pub fn new(label: impl Into<String>, shader: &WaterShader) -> Self {
[INFO] [stderr]    |                                                   ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]  --> src/water/rendering/water_renderer.rs:9:28
[INFO] [stderr]   |
[INFO] [stderr] 9 | use super::water_material::WaterMaterial;
[INFO] [stderr]   |                            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]   --> src/water/rendering/water_renderer.rs:22:22
[INFO] [stderr]    |
[INFO] [stderr] 22 |     material: Option<WaterMaterial>,
[INFO] [stderr]    |                      ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_renderer::WaterRenderer`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stderr]   --> src/water/rendering/water_renderer.rs:26:6
[INFO] [stderr]    |
[INFO] [stderr] 26 | impl WaterRenderer {
[INFO] [stderr]    |      ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_renderer::WaterRenderer`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stderr]   --> src/water/rendering/water_renderer.rs:89:18
[INFO] [stderr]    |
[INFO] [stderr] 89 | impl Default for WaterRenderer {
[INFO] [stderr]    |                  ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]   --> src/water/rendering/water_renderer.rs:53:39
[INFO] [stderr]    |
[INFO] [stderr] 53 |     pub fn material(&self) -> Option<&WaterMaterial> {
[INFO] [stderr]    |                                       ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]   --> src/water/rendering/water_renderer.rs:57:39
[INFO] [stderr]    |
[INFO] [stderr] 57 |     pub fn set_material(&mut self, m: WaterMaterial) {
[INFO] [stderr]    |                                       ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_shader::WaterShader`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stderr]   --> src/water/rendering/water_shader.rs:17:6
[INFO] [stderr]    |
[INFO] [stderr] 17 | impl WaterShader {
[INFO] [stderr]    |      ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::id`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]   --> src/water/rendering/water_material.rs:25:13
[INFO] [stderr]    |
[INFO] [stderr] 25 |             id: crate::water::ports::material_registry::next_handle(),
[INFO] [stderr]    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::shader_name`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]   --> src/water/rendering/water_material.rs:26:13
[INFO] [stderr]    |
[INFO] [stderr] 26 |             shader_name: shader.name().to_string(),
[INFO] [stderr]    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::label`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]   --> src/water/rendering/water_material.rs:27:13
[INFO] [stderr]    |
[INFO] [stderr] 27 |             label: label.into(),
[INFO] [stderr]    |             ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::id`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]   --> src/water/rendering/water_material.rs:32:9
[INFO] [stderr]    |
[INFO] [stderr] 32 |         self.id
[INFO] [stderr]    |         ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::shader_name`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]   --> src/water/rendering/water_material.rs:36:10
[INFO] [stderr]    |
[INFO] [stderr] 36 |         &self.shader_name
[INFO] [stderr]    |          ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_material::WaterMaterial::label`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]   --> src/water/rendering/water_material.rs:40:10
[INFO] [stderr]    |
[INFO] [stderr] 40 |         &self.label
[INFO] [stderr]    |          ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::lod`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stderr]   --> src/water/rendering/water_renderer.rs:30:13
[INFO] [stderr]    |
[INFO] [stderr] 30 |             lod: WaterLod::new(),
[INFO] [stderr]    |             ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::wave_bank`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stderr]   --> src/water/rendering/water_renderer.rs:31:13
[INFO] [stderr]    |
[INFO] [stderr] 31 |             wave_bank: None,
[INFO] [stderr]    |             ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::material`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stderr]   --> src/water/rendering/water_renderer.rs:32:13
[INFO] [stderr]    |
[INFO] [stderr] 32 |             material: None,
[INFO] [stderr]    |             ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::patch_size`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stderr]   --> src/water/rendering/water_renderer.rs:33:13
[INFO] [stderr]    |
[INFO] [stderr] 33 |             patch_size: 100.0,
[INFO] [stderr]    |             ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::lod`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stderr]   --> src/water/rendering/water_renderer.rs:38:10
[INFO] [stderr]    |
[INFO] [stderr] 38 |         &self.lod
[INFO] [stderr]    |          ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::lod`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stderr]   --> src/water/rendering/water_renderer.rs:42:14
[INFO] [stderr]    |
[INFO] [stderr] 42 |         &mut self.lod
[INFO] [stderr]    |              ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::wave_bank`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stderr]   --> src/water/rendering/water_renderer.rs:46:9
[INFO] [stderr]    |
[INFO] [stderr] 46 |         self.wave_bank.as_ref()
[INFO] [stderr]    |         ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::wave_bank`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stderr]   --> src/water/rendering/water_renderer.rs:50:9
[INFO] [stderr]    |
[INFO] [stderr] 50 |         self.wave_bank = Some(b);
[INFO] [stderr]    |         ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::material`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stderr]   --> src/water/rendering/water_renderer.rs:54:9
[INFO] [stderr]    |
[INFO] [stderr] 54 |         self.material.as_ref()
[INFO] [stderr]    |         ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::material`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stderr]   --> src/water/rendering/water_renderer.rs:58:9
[INFO] [stderr]    |
[INFO] [stderr] 58 |         self.material = Some(m);
[INFO] [stderr]    |         ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::patch_size`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stderr]   --> src/water/rendering/water_renderer.rs:62:9
[INFO] [stderr]    |
[INFO] [stderr] 62 |         self.patch_size
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::patch_size`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stderr]   --> src/water/rendering/water_renderer.rs:66:9
[INFO] [stderr]    |
[INFO] [stderr] 66 |         self.patch_size = v;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::wave_bank`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stderr]   --> src/water/rendering/water_renderer.rs:72:20
[INFO] [stderr]    |
[INFO] [stderr] 72 |           let bank = self
[INFO] [stderr]    |  ____________________^
[INFO] [stderr] 73 | |             .wave_bank
[INFO] [stderr]    | |______________________^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::lod`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stderr]   --> src/water/rendering/water_renderer.rs:76:26
[INFO] [stderr]    |
[INFO] [stderr] 76 |         let resolution = self.lod.select_resolution(distance)?;
[INFO] [stderr]    |                          ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_renderer::WaterRenderer::patch_size`: Use FluidMesh::build + WaterLod directly; this orchestrator is a pass-through.
[INFO] [stderr]   --> src/water/rendering/water_renderer.rs:85:52
[INFO] [stderr]    |
[INFO] [stderr] 85 |         fluid_mesh::build(bank, resolution as u32, self.patch_size, time)
[INFO] [stderr]    |                                                    ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_shader::WaterShader::name`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stderr]   --> src/water/rendering/water_shader.rs:20:16
[INFO] [stderr]    |
[INFO] [stderr] 20 |         Self { name: name.into() }
[INFO] [stderr]    |                ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated field `water::rendering::water_shader::WaterShader::name`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stderr]   --> src/water/rendering/water_shader.rs:24:10
[INFO] [stderr]    |
[INFO] [stderr] 24 |         &self.name
[INFO] [stderr]    |          ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/postfx/ssao_pass.rs:80:17
[INFO] [stderr]    |
[INFO] [stderr] 80 |             let mut x = lerp(-1.0_f32, 1.0_f32, next());
[INFO] [stderr]    |                 ----^
[INFO] [stderr]    |                 |
[INFO] [stderr]    |                 help: remove this `mut`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/postfx/ssao_pass.rs:81:17
[INFO] [stderr]    |
[INFO] [stderr] 81 |             let mut y = lerp(-1.0_f32, 1.0_f32, next());
[INFO] [stderr]    |                 ----^
[INFO] [stderr]    |                 |
[INFO] [stderr]    |                 help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: `phenotype-gfx` (lib) generated 52 warnings (run `cargo fix --lib -p phenotype-gfx` to apply 4 suggestions)
[INFO] [stderr] warning: unused import: `PassQuality`
[INFO] [stderr]    --> src/postfx/post_fx_pass_registry.rs:179:58
[INFO] [stderr]     |
[INFO] [stderr] 179 |     use crate::postfx::ports::post_fx_pass::{PassEffect, PassQuality, PostFxContext, PostFxPass};
[INFO] [stderr]     |                                                          ^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `PostFxContext`
[INFO] [stderr]   --> src/postfx/post_stack.rs:19:46
[INFO] [stderr]    |
[INFO] [stderr] 19 |     PassDescriptor, PassEffect, PassQuality, PostFxContext, PostFxPass,
[INFO] [stderr]    |                                              ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_shader::WaterShader`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stderr]    --> src/water/ports/material_registry.rs:126:48
[INFO] [stderr]     |
[INFO] [stderr] 126 |     use crate::water::rendering::water_shader::WaterShader;
[INFO] [stderr]     |                                                ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_shader::WaterShader`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stderr]    --> src/water/ports/material_registry.rs:130:22
[INFO] [stderr]     |
[INFO] [stderr] 130 |         let shader = WaterShader::new("Phenotype/Water");
[INFO] [stderr]     |                      ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]    --> src/water/ports/material_registry.rs:132:17
[INFO] [stderr]     |
[INFO] [stderr] 132 |         let a = WaterMaterial::new("Deep", &shader);
[INFO] [stderr]     |                 ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]    --> src/water/ports/material_registry.rs:133:17
[INFO] [stderr]     |
[INFO] [stderr] 133 |         let b = WaterMaterial::new("Shallow", &shader);
[INFO] [stderr]     |                 ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_shader::WaterShader`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stderr]    --> src/water/ports/material_registry.rs:147:22
[INFO] [stderr]     |
[INFO] [stderr] 147 |         let shader = WaterShader::new("Phenotype/Water");
[INFO] [stderr]     |                      ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]    --> src/water/ports/material_registry.rs:149:17
[INFO] [stderr]     |
[INFO] [stderr] 149 |         let m = WaterMaterial::new("Dirt", &shader);
[INFO] [stderr]     |                 ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_shader::WaterShader`: Use the engine-side shader lookup; this is a name-only pass-through.
[INFO] [stderr]    --> src/water/ports/material_registry.rs:158:22
[INFO] [stderr]     |
[INFO] [stderr] 158 |         let shader = WaterShader::new("Phenotype/Water");
[INFO] [stderr]     |                      ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated struct `water::rendering::water_material::WaterMaterial`: WaterMaterial is a name-only pass-through. Use the engine-side material at render time.
[INFO] [stderr]    --> src/water/ports/material_registry.rs:160:17
[INFO] [stderr]     |
[INFO] [stderr] 160 |         let m = WaterMaterial::new("Sand", &shader);
[INFO] [stderr]     |                 ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `PostFxPass`
[INFO] [stderr]   --> src/postfx/post_stack.rs:19:61
[INFO] [stderr]    |
[INFO] [stderr] 19 |     PassDescriptor, PassEffect, PassQuality, PostFxContext, PostFxPass,
[INFO] [stderr]    |                                                             ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `make_provider` is never used
[INFO] [stderr]    --> src/postfx/post_fx_pass_registry.rs:217:8
[INFO] [stderr]     |
[INFO] [stderr] 217 |     fn make_provider(effect: PassEffect) -> Box<dyn PostFxPassDescriptor> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: `phenotype-gfx` (lib test) generated 62 warnings (50 duplicates) (run `cargo fix --lib -p phenotype-gfx --tests` to apply 2 suggestions)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.25s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/phenotype_gfx-d4f7df40fbf136bf)
[INFO] [stdout] 
[INFO] [stdout] running 296 tests
[INFO] [stdout] test lod::tests::distance_selection_tracks_scale_invariance ... ok
[INFO] [stdout] test lod::tests::fr_civ_scale_001_budget_fits_default_policy ... ok
[INFO] [stdout] test lod::tests::fr_civ_scale_002_bounded_rejects_out_of_extent ... ok
[INFO] [stdout] test lod::tests::fr_civ_scale_002_default_extent_is_unbounded ... ok
[INFO] [stdout] test lod::tests::fr_civ_scale_003_checked_rejects_coarse_below_mesh ... ok
[INFO] [stdout] test lod::tests::fr_civ_scale_003_default_plan_role_layout ... ok
[INFO] [stdout] test lod::tests::fr_civ_scale_004_empty_input_yields_empty_gestalt ... ok
[INFO] [stdout] test lod::tests::plan_is_culled_before_lod_selection ... ok
[INFO] [stdout] test lod::tests::fr_civ_scale_004_fold_is_order_independent ... ok
[INFO] [stdout] test postfx::bloom_pass::tests::blit_count_scales_with_iterations ... ok
[INFO] [stdout] test postfx::bloom_pass::tests::default_config ... ok
[INFO] [stdout] test postfx::bloom_pass::tests::quality_keyword_mapping ... ok
[INFO] [stdout] test postfx::bloom_pass::tests::descriptor_is_stable ... ok
[INFO] [stdout] test postfx::bloom_pass::tests::trait_surface_works ... ok
[INFO] [stdout] test postfx::bloom_pass::tests::validate_variants_fails_when_unavailable ... ok
[INFO] [stdout] test postfx::bloom_pass::tests::validate_variants_passes_with_default ... ok
[INFO] [stdout] test postfx::error::tests::io_error_partial_eq_via_display ... ok
[INFO] [stdout] test postfx::error::tests::shader_variant_error_clone ... ok
[INFO] [stdout] test postfx::ports::lut_pipeline::tests::identity_lut_at_size_2 ... ok
[INFO] [stdout] test postfx::ports::lut_pipeline::tests::lut_format_display ... ok
[INFO] [stdout] test postfx::ports::material_registry::tests::in_memory_register_and_find_roundtrip ... ok
[INFO] [stdout] test postfx::ports::material_registry::tests::in_memory_unregister_removes_entry ... ok
[INFO] [stdout] test postfx::ports::post_fx_pass::tests::pass_descriptor_basic ... ok
[INFO] [stdout] test postfx::ports::post_fx_pass::tests::pass_effect_name_is_stable ... ok
[INFO] [stdout] test postfx::ports::lut_pipeline::tests::identity_lut_size ... ok
[INFO] [stdout] test postfx::ports::post_fx_pass::tests::pass_quality_level ... ok
[INFO] [stdout] test postfx::ports::lut_pipeline::tests::is_identity_detects_modification ... ok
[INFO] [stdout] test postfx::ports::post_fx_pass::tests::post_fx_context_constructs ... ok
[INFO] [stdout] test postfx::ports::post_fx_pass::tests::stub_pass_works ... ok
[INFO] [stdout] test postfx::ports::serialization::tests::json_adapter_load_missing_file_raises ... ok
[INFO] [stdout] test lod::tests::fr_civ_scale_001_mvp_world_edge_is_one_ca_chunk ... ok
[INFO] [stdout] test postfx::ports::shader_availability::tests::default_provider_always_true ... ok
[INFO] [stdout] test postfx::ports::shader_availability::tests::map_provider_explicit_value ... ok
[INFO] [stdout] test postfx::ports::urp_render_graph::tests::brp_to_urp_adapter_delegates ... ok
[INFO] [stdout] test postfx::ports::urp_render_graph::tests::post_fx_urp_context_default ... ok
[INFO] [stdout] test postfx::ports::serialization::tests::json_adapter_round_trips_through_file ... ok
[INFO] [stdout] test postfx::post_fx_pass_registry::tests::empty_registry_has_no_active_passes ... ok
[INFO] [stdout] test postfx::post_fx_pass_registry::tests::get_provider_mut_works ... ok
[INFO] [stdout] test postfx::post_fx_pass_registry::tests::has_any_active_pass_false_when_disabled ... ok
[INFO] [stdout] test postfx::post_fx_pass_registry::tests::has_any_active_pass_true_when_enabled_and_supported ... ok
[INFO] [stdout] test postfx::post_fx_pass_registry::tests::providers_iteration_in_order ... ok
[INFO] [stdout] test postfx::post_fx_pass_registry::tests::render_order_set_then_keep ... ok
[INFO] [stdout] test postfx::post_fx_pass_registry::tests::register_adds_provider ... ok
[INFO] [stdout] test postfx::post_fx_pass_registry::tests::unregister_removes_provider ... ok
[INFO] [stdout] test postfx::post_stack::tests::default_config_baseline ... ok
[INFO] [stdout] test postfx::post_stack::tests::bloom_and_ssao_config_derived ... ok
[INFO] [stdout] test postfx::post_stack::tests::default_postfx_stack_matches_default_config ... ok
[INFO] [stdout] test postfx::post_stack::tests::describe_passes_includes_built_ins ... ok
[INFO] [stdout] test postfx::rendering::tests::deprecated_types_round_trip ... ok
[INFO] [stdout] test postfx::shaders::tests::shader_constants_are_non_empty ... ok
[INFO] [stdout] test postfx::ssao_pass::tests::build_kernel_correct_size ... ok
[INFO] [stdout] test postfx::post_stack::tests::validate_all_supported_with_default ... ok
[INFO] [stdout] test postfx::ssao_pass::tests::default_config ... ok
[INFO] [stdout] test postfx::rendering::tests::render_target_works ... ok
[INFO] [stdout] test postfx::ssao_pass::tests::build_kernel_respects_size_change ... ok
[INFO] [stdout] test postfx::rendering::tests::material_handle_works ... ok
[INFO] [stdout] test postfx::post_stack::tests::validate_with_none_available ... ok
[INFO] [stdout] test postfx::ssao_pass::tests::rebuild_kernel_resizes ... ok
[INFO] [stdout] test postfx::ssao_pass::tests::trait_surface_works ... ok
[INFO] [stdout] test postfx::ssao_pass::tests::validate_variants_fails_when_unavailable ... ok
[INFO] [stdout] test postfx::ssao_pass::tests::validate_variants_passes_with_default ... ok
[INFO] [stdout] test postfx::ssao_pass::tests::kernel_samples_are_normalized ... ok
[INFO] [stdout] test streaming::tests::eviction_key_far_evicts_before_near ... ok
[INFO] [stdout] test streaming::tests::policy_checked_rejects_sim_ring_above_coarse ... ok
[INFO] [stdout] test streaming::tests::policy_checked_rejects_zero_vy_weight ... ok
[INFO] [stdout] test streaming::tests::ring_distance_horizontal_is_chebyshev ... ok
[INFO] [stdout] test streaming::tests::ring_distance_vertical_uses_vy_weight ... ok
[INFO] [stdout] test streaming::tests::window_policy_sim_cohort_bands ... ok
[INFO] [stdout] test terrain::chunk_mesh_builder::tests::build_mesh_invalid_resolution ... ok
[INFO] [stdout] test terrain::chunk_mesh_builder::tests::build_mesh_simple_quad_indices_form_two_triangles ... ok
[INFO] [stdout] test terrain::chunk_mesh_builder::tests::build_mesh_simple_quad_produces_correct_counts ... ok
[INFO] [stdout] test terrain::chunk_mesh_builder::tests::build_mesh_simple_quad_vertices_at_expected_positions ... ok
[INFO] [stdout] test terrain::chunk_mesh_builder::tests::build_mesh_triangle_winding_order_is_upward ... ok
[INFO] [stdout] test terrain::height_field::tests::heightfield_can_be_instantiated ... ok
[INFO] [stdout] test terrain::height_field::tests::heightfield_get_data_returns_copy ... ok
[INFO] [stdout] test terrain::height_field::tests::heightfield_get_height_returns_zero_for_default_data ... ok
[INFO] [stdout] test terrain::height_field::tests::heightfield_invalid_data_length ... ok
[INFO] [stdout] test terrain::chunk_mesh_builder::tests::build_mesh_vertex_count_mid_resolution ... ok
[INFO] [stdout] test terrain::height_field::tests::heightfield_large_1024_can_be_instantiated ... ok
[INFO] [stdout] test terrain::height_field::tests::heightfield_large_1024_read_write_round_trip ... ok
[INFO] [stdout] test terrain::height_field::tests::heightfield_negative_height_round_trip ... ok
[INFO] [stdout] test terrain::height_field::tests::heightfield_negative_heights_via_data_array ... ok
[INFO] [stdout] test terrain::height_field::tests::heightfield_set_get_round_trip ... ok
[INFO] [stdout] test terrain::height_field::tests::heightfield_zero_size_can_be_instantiated ... ok
[INFO] [stdout] test terrain::chunk_mesh_builder::tests::build_mesh_vertex_count_near_resolution ... ok
[INFO] [stdout] test terrain::height_field::tests::heightfield_zero_size_get_height_throws ... ok
[INFO] [stdout] test terrain::height_field::tests::heightfield_zero_size_set_height_throws ... ok
[INFO] [stdout] test terrain::lod::tests::select_tier_culled_returns_culled ... ok
[INFO] [stdout] test terrain::lod::tests::select_tier_far_returns_far ... ok
[INFO] [stdout] test terrain::lod::tests::select_tier_mid_returns_mid ... ok
[INFO] [stdout] test terrain::lod::tests::select_tier_near_returns_near ... ok
[INFO] [stdout] test terrain::lod::tests::select_tier_negative_throws ... ok
[INFO] [stdout] test terrain::lod::tests::validate_thresholds_invalid_mid_cull_throws ... ok
[INFO] [stdout] test terrain::lod::tests::validate_thresholds_invalid_near_mid_throws ... ok
[INFO] [stdout] test streaming::tests::window_policy_classify_inner_is_meshed ... ok
[INFO] [stdout] test terrain::lod::tests::validate_thresholds_valid_does_not_throw ... ok
[INFO] [stdout] test terrain::materials::tests::material_add_property_rejects_duplicate ... ok
[INFO] [stdout] test terrain::materials::tests::material_constructor_assigns_unique_id ... ok
[INFO] [stdout] test terrain::materials::tests::material_constructor_rejects_empty_name ... ok
[INFO] [stdout] test terrain::materials::tests::material_add_property_stores_and_retrieves ... ok
[INFO] [stdout] test terrain::materials::tests::property_color_value_on_non_color_type_errors ... ok
[INFO] [stdout] test terrain::materials::tests::material_remove_property_returns_bool ... ok
[INFO] [stdout] test terrain::materials::tests::property_float_constructor_sets_kind ... ok
[INFO] [stdout] test terrain::materials::tests::property_float_value_can_be_updated ... ok
[INFO] [stdout] test terrain::materials::tests::property_empty_name_panics_in_new_constructor ... ok
[INFO] [stdout] test terrain::materials::tests::property_float_value_on_non_float_type_errors ... ok
[INFO] [stdout] test terrain::materials::tests::property_texture_constructor_sets_kind ... ok
[INFO] [stdout] test terrain::materials::tests::property_texture_path_on_non_texture_type_errors ... ok
[INFO] [stdout] test terrain::materials::tests::property_color_constructor_sets_kind ... ok
[INFO] [stdout] test terrain::materials::tests::property_type_has_expected_variants ... ok
[INFO] [stdout] test terrain::materials::tests::property_vector_constructor_sets_kind ... ok
[INFO] [stdout] test terrain::ports::material_registry::tests::in_memory_list_returns_all ... ok
[INFO] [stdout] test terrain::ports::material_registry::tests::in_memory_register_and_find_round_trip ... ok
[INFO] [stdout] test terrain::ports::material_registry::tests::in_memory_unregister_removes_entry ... ok
[INFO] [stdout] test terrain::ports::material_registry::tests::recording_mock_captures_call_sequence ... ok
[INFO] [stdout] test terrain::ports::material_registry::tests::recording_mock_reset_calls_keeps_state ... ok
[INFO] [stdout] test terrain::materials::tests::property_vector_value_on_non_vector_type_errors ... ok
[INFO] [stdout] test terrain::ports::serialization::tests::json_adapter_load_empty_destination_raises ... ok
[INFO] [stdout] test terrain::terrain_lod::tests::default_resolutions_are_expected ... ok
[INFO] [stdout] test terrain::ports::serialization::tests::json_adapter_load_missing_file_raises ... ok
[INFO] [stdout] test terrain::terrain_lod::tests::select_resolution_far_distance_returns_far_resolution ... ok
[INFO] [stdout] test terrain::ports::serialization::tests::json_adapter_save_empty_destination_raises ... ok
[INFO] [stdout] test terrain::terrain_lod::tests::select_resolution_mid_distance_returns_mid_resolution ... ok
[INFO] [stdout] test terrain::terrain_lod::tests::select_resolution_near_distance_returns_near_resolution ... ok
[INFO] [stdout] test terrain::ports::serialization::tests::json_adapter_round_trips_through_file ... ok
[INFO] [stdout] test terrain::ports::serialization::tests::json_adapter_load_empty_file_raises ... ok
[INFO] [stdout] test voxel::adapters::renderer::tests::reset_counters_preserves_inner_state ... ok
[INFO] [stdout] test terrain::terrain_lod::tests::validate_thresholds_default_does_not_throw ... ok
[INFO] [stdout] test voxel::adapters::storage::tests::drain_dirty_is_sorted ... ok
[INFO] [stdout] test voxel::chunk::tests::default_chunk_has_expected_voxel_count ... ok
[INFO] [stdout] test voxel::adapters::storage::tests::write_read_roundtrip ... ok
[INFO] [stdout] test voxel::chunk::tests::chunk_constants_are_consistent ... ok
[INFO] [stdout] test terrain::terrain_lod::tests::default_thresholds_are_expected ... ok
[INFO] [stdout] test terrain::terrain_lod::tests::select_resolution_culled_returns_zero ... ok
[INFO] [stdout] test voxel::adapters::renderer::tests::invalid_state_propagates ... ok
[INFO] [stdout] test voxel::adapters::renderer::tests::counters_increment_on_forwarded_calls ... ok
[INFO] [stdout] test voxel::coord::tests::negative_coords_use_euclidean_division ... ok
[INFO] [stdout] test voxel::adapters::storage::tests::compact_promotes_uniform_chunk ... ok
[INFO] [stdout] test voxel::adapters::storage::tests::chunks_dense_iterates_in_order ... ok
[INFO] [stdout] test voxel::coord::tests::origin_maps_to_origin_chunk ... ok
[INFO] [stdout] test voxel::cubic_mesher::tests::adjacent_voxels_cull_shared_faces ... ok
[INFO] [stdout] test voxel::cubic_mesher::tests::ao_length_equals_vertex_count ... ok
[INFO] [stdout] test voxel::cubic_mesher::tests::buried_voxel_emits_no_faces ... ok
[INFO] [stdout] test voxel::cubic_mesher::tests::face_normals_are_outward ... ok
[INFO] [stdout] test voxel::cubic_mesher::tests::ao_does_not_change_triangle_counts ... ok
[INFO] [stdout] test voxel::cubic_mesher::tests::crevice_voxel_has_reduced_ao_on_occluded_vertices ... ok
[INFO] [stdout] test voxel::cubic_mesher::tests::single_voxel_emits_all_six_faces ... ok
[INFO] [stdout] test voxel::cubic_mesher::tests::wrong_chunk_size_errors ... ok
[INFO] [stdout] test voxel::cubic_mesher::tests::empty_chunk_meshes_empty ... ok
[INFO] [stdout] test voxel::cubic_mesher::tests::fully_exposed_voxel_has_ao_three_everywhere ... ok
[INFO] [stdout] test voxel::cubic_mesher::tests::empty_chunk_ao_is_empty ... ok
[INFO] [stdout] test voxel::cubic_mesher::tests::mesher_trait_mesh_chunk_matches_mesh_cubic ... ok
[INFO] [stdout] test voxel::cubic_mesher::tests::index_buffer_in_bounds ... ok
[INFO] [stdout] test voxel::cubic_mesher::tests::meshing_is_deterministic ... ok
[INFO] [stdout] test voxel::cubic_mesher::tests::voxel_at_chunk_corner_emits_six_faces ... ok
[INFO] [stdout] test voxel::delta::tests::writeseq_next_is_monotonic ... ok
[INFO] [stdout] test voxel::fixtures::tests::dedup_collapses_ties ... ok
[INFO] [stdout] test voxel::fixtures::tests::sample_sequence_is_meaningful ... ok
[INFO] [stdout] test voxel::fixtures::tests::lod_transition_preserves_order ... ok
[INFO] [stdout] test voxel::delta::tests::events_sort_deterministically ... ok
[INFO] [stdout] test voxel::lod::tests::far_distances_clamp_to_max ... ok
[INFO] [stdout] test voxel::lod::tests::lod_is_scale_invariant ... ok
[INFO] [stdout] test voxel::lod::tests::near_boundary_is_lod_zero ... ok
[INFO] [stdout] test voxel::lod::tests::single_level_policy_always_zero ... ok
[INFO] [stdout] test voxel::greedy_mesher::tests::ao_discontinuity_splits_greedy_quad ... ok
[INFO] [stdout] test voxel::lod::tests::far_boundary_is_max_level ... ok
[INFO] [stdout] test voxel::greedy_mesher::tests::empty_chunk_produces_empty_mesh ... ok
[INFO] [stdout] test voxel::greedy_mesher::tests::greedy_ao_matches_cubic_ao_on_single_voxel ... ok
[INFO] [stdout] test voxel::greedy_mesher::tests::single_voxel_produces_six_quads ... ok
[INFO] [stdout] test voxel::greedy_mesher::tests::surface_area_matches_cubic_for_solid_block ... ok
[INFO] [stdout] test voxel::greedy_mesher::tests::two_by_two_block_merges_faces ... ok
[INFO] [stdout] test voxel::lod::tests::zero_scale_returns_max_level ... ok
[INFO] [stdout] test voxel::material::tests::palette_assigns_sequential_ids ... ok
[INFO] [stdout] test voxel::mesh::tests::interleaved_empty_mesh_produces_empty_vec ... ok
[INFO] [stdout] test voxel::mesh::tests::interleaved_positions_match_vertices ... ok
[INFO] [stdout] test voxel::mesh::tests::interleaved_length_equals_vertex_count_times_stride ... ok
[INFO] [stdout] test voxel::octree::tests::compact_is_idempotent ... ok
[INFO] [stdout] test voxel::octree::tests::compact_multi_level_pyramid_collapses_to_root ... ok
[INFO] [stdout] test voxel::mesh::tests::interleaved_ao_values_match_ao_field ... ok
[INFO] [stdout] test voxel::mesh::tests::counts_agree_with_data ... ok
[INFO] [stdout] test voxel::greedy_mesher::tests::uniform_ao_flat_surface_still_merges ... ok
[INFO] [stdout] test voxel::mesh::tests::default_meshbuffer_is_empty ... ok
[INFO] [stdout] test voxel::octree::tests::compact_mixed_subtree_is_preserved ... ok
[INFO] [stdout] test voxel::greedy_mesher::tests::mesher_trait_delegates_to_mesh_greedy ... ok
[INFO] [stdout] test voxel::ports::material::tests::in_memory_registry_assigns_sequential_ids ... ok
[INFO] [stdout] test voxel::octree::tests::compact_preserves_query_semantics ... ok
[INFO] [stdout] test voxel::octree::tests::compact_uniform_subtree_collapses_to_one_leaf ... ok
[INFO] [stdout] test voxel::octree::tests::uniform_insert_roundtrips ... ok
[INFO] [stdout] test voxel::ports::material::tests::empty_name_rejected ... ok
[INFO] [stdout] test voxel::ports::material::tests::iter_yields_insertion_order ... ok
[INFO] [stdout] test voxel::octree::tests::compact_incomplete_group_not_collapsed ... ok
[INFO] [stdout] test voxel::greedy_mesher::tests::flat_slab_greedy_reduction ... ok
[INFO] [stdout] test voxel::ports::material::tests::mock_records_call_sequence ... ok
[INFO] [stdout] test voxel::ports::serialization::tests::mock_load_without_stage_errors ... ok
[INFO] [stdout] test voxel::octree::tests::dense_marker_distinguished_from_uniform ... ok
[INFO] [stdout] test voxel::octree::tests::empty_octree_has_no_nodes ... ok
[INFO] [stdout] test voxel::ports::storage::tests::mock_write_read_roundtrip ... ok
[INFO] [stdout] test voxel::serial::tests::bad_magic_rejected ... ok
[INFO] [stdout] test voxel::ports::serialization::tests::pvox_rejects_bad_magic ... ok
[INFO] [stdout] test voxel::serial::tests::element_size_mismatch_detected ... ok
[INFO] [stdout] test voxel::shape_hints::tests::case_insensitive ... ok
[INFO] [stdout] test voxel::ports::serialization::tests::pvox_roundtrip_uniform ... ok
[INFO] [stdout] test voxel::ports::storage::tests::mock_compact_is_noop ... ok
[INFO] [stdout] test voxel::ports::storage::tests::mock_idempotent_write_emits_no_event ... ok
[INFO] [stdout] test voxel::ports::storage::tests::mock_record_read_returns_value_or_default ... ok
[INFO] [stdout] test voxel::serial::tests::empty_chunk_roundtrip ... ok
[INFO] [stdout] test voxel::shape_hints::tests::clear_empties ... ok
[INFO] [stdout] test voxel::shape_hints::tests::prefix_at_start_matched ... ok
[INFO] [stdout] test voxel::shape_hints::tests::prefix_after_underscore_matched ... ok
[INFO] [stdout] test voxel::shape_hints::tests::unknown_returns_auto ... ok
[INFO] [stdout] test voxel::shape_hints::tests::custom_registration_first_wins ... ok
[INFO] [stdout] test voxel::shape_hints::tests::empty_string_returns_auto ... ok
[INFO] [stdout] test voxel::greedy_mesher::tests::greedy_meshing_is_deterministic ... ok
[INFO] [stdout] test voxel::shape_hints::tests::prefix_before_underscore_matched ... ok
[INFO] [stdout] test voxel::sprite_voxelizer::tests::balloon_mode_thicker_interior ... ok
[INFO] [stdout] test voxel::shape_hints::tests::wsm3d_defaults_count ... ok
[INFO] [stdout] test voxel::sprite_voxelizer::tests::chunk_transparent_pixels_skipped ... ok
[INFO] [stdout] test voxel::sprite_voxelizer::tests::chunk_empty_sprite_produces_empty_chunk ... ok
[INFO] [stdout] test voxel::sprite_voxelizer::tests::chunk_out_of_bounds_clamped_no_panic ... ok
[INFO] [stdout] test voxel::serial::tests::dense_chunk_roundtrip ... ok
[INFO] [stdout] test voxel::sprite_voxelizer::tests::depth_zero_clamped_to_one ... ok
[INFO] [stdout] test voxel::sprite_voxelizer::tests::flat_depth_1_one_voxel_per_solid_pixel ... ok
[INFO] [stdout] test voxel::sprite_voxelizer::tests::chunk_2x2_opaque_sprite_voxel_count ... ok
[INFO] [stdout] test voxel::sprite_voxelizer::tests::chunk_extrusion_depth_respected ... ok
[INFO] [stdout] test voxel::world::tests::chunk_returns_none_for_empty_world ... ok
[INFO] [stdout] test voxel::ports::serialization::tests::mock_records_and_replays ... ok
[INFO] [stdout] test voxel::sprite_voxelizer::tests::transparent_pixels_skipped ... ok
[INFO] [stdout] test voxel::world::tests::chunk_coord_chunk_id_matches_kernel_packing ... ok
[INFO] [stdout] test voxel::sprite_voxelizer::tests::manhattan_dist_interior_solid_nonzero ... ok
[INFO] [stdout] test voxel::sprite_voxelizer::tests::chunk_palette_mapping_correct ... ok
[INFO] [stdout] test voxel::world::tests::chunk_returns_some_after_write ... ok
[INFO] [stdout] test voxel::world::tests::chunk_returns_none_after_compaction ... ok
[INFO] [stdout] test voxel::world::tests::dirty_events_drain_in_sorted_order ... ok
[INFO] [stdout] test voxel::world::tests::empty_world_reads_default ... ok
[INFO] [stdout] test voxel::world::tests::compact_is_idempotent ... ok
[INFO] [stdout] test voxel::world::tests::compact_skips_non_uniform_chunks ... ok
[INFO] [stdout] test voxel::world::tests::chunks_dense_iterates_in_order ... ok
[INFO] [stdout] test voxel::world::tests::idempotent_write_emits_no_event ... ok
[INFO] [stdout] test voxel::world::tests::out_of_bounds_coords_do_not_panic ... ok
[INFO] [stdout] test voxel::world::tests::replay_is_bit_identical ... ok
[INFO] [stdout] test voxel::world::tests::write_then_read_roundtrips ... ok
[INFO] [stdout] test water::gerstner_wave_bank::tests::empty_bank_displacement_is_zero ... ok
[INFO] [stdout] test water::gerstner_wave_bank::tests::empty_bank_has_no_waves ... ok
[INFO] [stdout] test water::gerstner_wave_bank::tests::empty_bank_normal_is_unit_y ... ok
[INFO] [stdout] test water::gerstner_wave_bank::tests::lake_preset_has_two_waves ... ok
[INFO] [stdout] test water::gerstner_wave_bank::tests::ocean_preset_has_four_waves ... ok
[INFO] [stdout] test water::gerstner_wave_bank::tests::steepness_is_clamped ... ok
[INFO] [stdout] test water::gerstner_wave_bank::tests::ocean_preset_normal_is_unit_length ... ok
[INFO] [stdout] test voxel::world::tests::multiple_writes_to_same_chunk_coexist ... ok
[INFO] [stdout] test voxel::world::tests::compact_promotes_uniform_chunks ... ok
[INFO] [stdout] test voxel::world::tests::replay_holds_across_compact ... ok
[INFO] [stdout] test water::gerstner_wave_bank::tests::zero_direction_falls_back_to_east ... ok
[INFO] [stdout] test water::gerstner_wave_bank::tests::wave_with_zero_amplitude_is_skipped ... ok
[INFO] [stdout] test water::ports::material_registry::tests::in_memory_register_and_find_round_trip ... ok
[INFO] [stdout] test water::gerstner_wave_bank::tests::validate_time_rejects_nan ... ok
[INFO] [stdout] test water::ports::material_registry::tests::in_memory_unregister_removes_entry ... ok
[INFO] [stdout] test water::ports::material_registry::tests::recording_mock_captures_call_sequence ... ok
[INFO] [stdout] test water::ports::serialization::tests::save_empty_destination_raises ... ok
[INFO] [stdout] test water::rendering::fluid_mesh::tests::empty_bank_normals_are_unit_length ... ok
[INFO] [stdout] test water::ports::serialization::tests::json_adapter_load_empty_file_raises ... ok
[INFO] [stdout] test water::ports::serialization::tests::json_adapter_round_trips_through_file ... ok
[INFO] [stdout] test water::ports::serialization::tests::json_adapter_load_missing_file_raises ... ok
[INFO] [stdout] test water::rendering::fluid_mesh::tests::negative_size_raises ... ok
[INFO] [stdout] test water::rendering::fluid_mesh::tests::ocean_preset_normals_are_unit_length ... ok
[INFO] [stdout] test water::rendering::fluid_mesh::tests::uvs_in_zero_one_range ... ok
[INFO] [stdout] test water::rendering::fluid_mesh::tests::index_count_matches_resolution ... ok
[INFO] [stdout] test water::rendering::fluid_mesh::tests::vertex_count_matches_resolution ... ok
[INFO] [stdout] test water::rendering::fluid_mesh::tests::vertices_match_wave_bank_displacement ... ok
[INFO] [stdout] test water::rendering::water_lod::tests::custom_resolutions_respected_by_select_resolution ... ok
[INFO] [stdout] test water::rendering::water_lod::tests::custom_thresholds_respected_by_select_tier ... ok
[INFO] [stdout] test water::rendering::water_lod::tests::default_thresholds_are_expected ... ok
[INFO] [stdout] test water::rendering::water_lod::tests::invalid_thresholds_mid_ge_cull_raises ... ok
[INFO] [stdout] test water::rendering::water_lod::tests::invalid_thresholds_near_ge_mid_raises ... ok
[INFO] [stdout] test water::rendering::water_lod::tests::monotonic_farther_distance_never_finer_resolution ... ok
[INFO] [stdout] test water::rendering::water_lod::tests::negative_distance_raises ... ok
[INFO] [stdout] test water::rendering::water_lod::tests::select_resolution_beyond_cull_returns_zero ... ok
[INFO] [stdout] test water::rendering::water_lod::tests::select_resolution_far_distance_returns_far_resolution ... ok
[INFO] [stdout] test water::rendering::water_lod::tests::select_resolution_mid_distance_returns_mid_resolution ... ok
[INFO] [stdout] test water::rendering::water_lod::tests::select_resolution_near_distance_returns_near_resolution ... ok
[INFO] [stdout] test water::rendering::fluid_mesh::tests::zero_resolution_raises ... ok
[INFO] [stdout] test water::rendering::water_lod::tests::default_resolutions_are_expected ... ok
[INFO] [stdout] test water::rendering::water_lod::tests::select_tier_thresholds_default ... ok
[INFO] [stdout] test water::rendering::water_lod::tests::valid_thresholds_does_not_throw ... ok
[INFO] [stdout] test water::rendering::water_lod::tests::default_resolutions_are_monotonically_decreasing ... ok
[INFO] [stdout] test postfx::ports::material_registry::tests::recording_mock_captures_call_sequence ... ok
[INFO] [stdout] test postfx::ssao_pass::tests::descriptor_is_stable ... ok
[INFO] [stdout] test voxel::cubic_mesher::tests::vertex_material_ids_match_voxels ... ok
[INFO] [stdout] test voxel::lod::tests::lod_increases_with_distance ... ok
[INFO] [stdout] test voxel::mesh::tests::is_empty_empty_buffer ... ok
[INFO] [stdout] test voxel::sprite_voxelizer::tests::flat_depth_n_produces_n_layers ... ok
[INFO] [stdout] test water::gerstner_wave_bank::tests::add_waves_grows_bank ... ok
[INFO] [stdout] test water::rendering::fluid_mesh::tests::empty_bank_flat_grid_y_zero ... ok
[INFO] [stdout] test water::rendering::fluid_mesh::tests::no_degenerate_triangles_empty_bank ... ok
[INFO] [stdout] test voxel::sprite_voxelizer::tests::flat_mode_extrusion_is_z_symmetric ... ok
[INFO] [stdout] test voxel::sprite_voxelizer::tests::transparent_pixels_produce_no_voxels ... ok
[INFO] [stdout] test voxel::sprite_voxelizer::tests::flat_mode_respects_volume_dimensions ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 296 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.25s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/mesher_triangle_regression.rs (/opt/rustwide/target/debug/deps/mesher_triangle_regression-c3d0f2b11882f6db)
[INFO] [stdout] 
[INFO] [stdout] running 4 tests
[INFO] [stdout] test empty_chunk_zero_triangles ... ok
[INFO] [stdout] test sparse_chunk_greedy_le_cubic ... ok
[INFO] [stdout] test dense_solid_chunk_greedy_strictly_fewer_triangles ... ok
[INFO] [stdout] test checkerboard_chunk_greedy_le_cubic ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/perf_regression_guards.rs (/opt/rustwide/target/debug/deps/perf_regression_guards-27c6b731d2c8a3e8)
[INFO] [stdout] 
[INFO] [stdout] running 11 tests
[INFO] [stdout] test ao_single_exposed_voxel_all_lit ... ok
[INFO] [stdout] test dirty_tracking_event_count_exact ... ok
[INFO] [stdout] test serial_empty_smaller_than_alternating ... ok
[INFO] [stdout] test serial_empty_u8_chunk_exact_16_bytes ... ok
[INFO] [stdout] test svo_compact_8_siblings_exact ... ok
[INFO] [stdout] test svo_compact_64_leaf_pyramid_removes_72 ... ok
[INFO] [stdout] test serial_empty_bytes_much_smaller_than_alternating ... ok
[INFO] [stdout] test svo_compact_mixed_siblings_unchanged ... ok
[INFO] [stdout] test dirty_fill_one_chunk_under_1s ... ok
[INFO] [stdout] test dirty_event_count_scales_with_writes ... ok
[INFO] [stderr]    Doc-tests phenotype_gfx
[INFO] [stdout] test ao_len_equals_vertex_len_all_shapes ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 4 tests
[INFO] [stdout] test src/obs.rs - obs (line 22) - compile ... ok
[INFO] [stdout] test src/voxel/shape_hints.rs - voxel::shape_hints (line 16) ... FAILED
[INFO] [stdout] test src/voxel/sprite_voxelizer.rs - voxel::sprite_voxelizer (line 21) ... FAILED
[INFO] [stdout] test src/obs.rs - obs (line 12) - compile ... FAILED
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- src/voxel/shape_hints.rs - voxel::shape_hints (line 16) stdout ----
[INFO] [stdout] error[E0433]: cannot find module or crate `phenotype_voxel` in this scope
[INFO] [stdout]   --> src/voxel/shape_hints.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use phenotype_voxel::shape_hints::{ShapeHint, ShapeHintRegistry};
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^ use of unresolved module or unlinked crate `phenotype_voxel`
[INFO] [stdout]    |
[INFO] [stdout] help: there is a crate or module with a similar name
[INFO] [stdout]    |
[INFO] [stdout] 17 - use phenotype_voxel::shape_hints::{ShapeHint, ShapeHintRegistry};
[INFO] [stdout] 17 + use phenotype_gfx::shape_hints::{ShapeHint, ShapeHintRegistry};
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 1 previous error
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0433`.
[INFO] [stdout] Couldn't compile the test.
[INFO] [stdout] ---- src/voxel/sprite_voxelizer.rs - voxel::sprite_voxelizer (line 21) stdout ----
[INFO] [stdout] error[E0433]: cannot find module or crate `phenotype_voxel` in this scope
[INFO] [stdout]   --> src/voxel/sprite_voxelizer.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use phenotype_voxel::sprite_voxelizer::{VoxelizeConfig, voxelize_image};
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^ use of unresolved module or unlinked crate `phenotype_voxel`
[INFO] [stdout]    |
[INFO] [stdout] help: there is a crate or module with a similar name
[INFO] [stdout]    |
[INFO] [stdout] 22 - use phenotype_voxel::sprite_voxelizer::{VoxelizeConfig, voxelize_image};
[INFO] [stdout] 22 + use phenotype_gfx::sprite_voxelizer::{VoxelizeConfig, voxelize_image};
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 1 previous error
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0433`.
[INFO] [stdout] Couldn't compile the test.
[INFO] [stdout] ---- src/obs.rs - obs (line 12) stdout ----
[INFO] [stdout] error[E0432]: unresolved import `tracing_subscriber`
[INFO] [stdout]   --> src/obs.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tracing_subscriber::EnvFilter;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^ use of unresolved module or unlinked crate `tracing_subscriber`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `tracing_subscriber`, use `cargo add tracing_subscriber` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: cannot find module or crate `tracing_subscriber` in this scope
[INFO] [stdout]   --> src/obs.rs:15:1
[INFO] [stdout]    |
[INFO] [stdout] 15 | tracing_subscriber::fmt()
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^ use of unresolved module or unlinked crate `tracing_subscriber`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `tracing_subscriber`, use `cargo add tracing_subscriber` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 2 previous errors
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0432, E0433.
[INFO] [stdout] For more information about an error, try `rustc --explain E0432`.
[INFO] [stdout] Couldn't compile the test.
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     src/obs.rs - obs (line 12)
[INFO] [stdout]     src/voxel/shape_hints.rs - voxel::shape_hints (line 16)
[INFO] [stdout]     src/voxel/sprite_voxelizer.rs - voxel::sprite_voxelizer (line 21)
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 1 passed; 3 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.23s
[INFO] [stdout] 
[INFO] [stderr] error: doctest failed, to rerun pass `--doc`
[INFO] running `Command { std: "docker" "inspect" "381083864e64d8503dcc4e08299e022c3aa20413dc725e565da87478ec72f839", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "381083864e64d8503dcc4e08299e022c3aa20413dc725e565da87478ec72f839", kill_on_drop: false }`
[INFO] [stdout] 381083864e64d8503dcc4e08299e022c3aa20413dc725e565da87478ec72f839
