[INFO] fetching crate ballistics-engine 0.44.0...
[INFO] testing ballistics-engine-0.44.0 against 1.100.0-beta.1 for beta-1.100-2
[INFO] extracting crate ballistics-engine 0.44.0 into /workspace/builds/worker-2-tc2/source
[INFO] started tweaking crates.io crate ballistics-engine 0.44.0
[INFO] finished tweaking crates.io crate ballistics-engine 0.44.0
[INFO] tweaked toml for crates.io crate ballistics-engine 0.44.0 written to /workspace/builds/worker-2-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate ballistics-engine 0.44.0 on toolchain 1.100.0-beta.1
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate ballistics-engine 0.44.0 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.100.0-beta.1" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3111399a4047eeb3a02b7a90e478d715f38a8c6669b5c4b49d30a17385265909" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 362b7f1424a19e309023c9e4283bf9dda78a62ef9b2b712b9253f3e6901a0b91
[INFO] running `Command { std: "docker" "start" "362b7f1424a19e309023c9e4283bf9dda78a62ef9b2b712b9253f3e6901a0b91", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "362b7f1424a19e309023c9e4283bf9dda78a62ef9b2b712b9253f3e6901a0b91", 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" "362b7f1424a19e309023c9e4283bf9dda78a62ef9b2b712b9253f3e6901a0b91" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "362b7f1424a19e309023c9e4283bf9dda78a62ef9b2b712b9253f3e6901a0b91", 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" "362b7f1424a19e309023c9e4283bf9dda78a62ef9b2b712b9253f3e6901a0b91" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling simd-adler32 v0.3.8
[INFO] [stderr]    Compiling serde_core v1.0.229
[INFO] [stderr]    Compiling quote v1.0.47
[INFO] [stderr]    Compiling hybrid-array v0.4.13
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling proc-macro2-diagnostics v0.10.1
[INFO] [stderr]    Compiling pest v2.8.6
[INFO] [stderr]    Compiling matrixmultiply v0.3.10
[INFO] [stderr]    Compiling yansi v1.0.1
[INFO] [stderr]    Compiling rustls-pki-types v1.14.0
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]    Compiling chacha20 v0.10.2
[INFO] [stderr]    Compiling rawpointer v0.2.1
[INFO] [stderr]    Compiling httparse v1.10.1
[INFO] [stderr]    Compiling thiserror v2.0.20
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling syn v3.0.3
[INFO] [stderr]    Compiling bytemuck v1.25.0
[INFO] [stderr]    Compiling miniz_oxide v0.8.9
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling anstream v1.0.0
[INFO] [stderr]    Compiling rand v0.10.2
[INFO] [stderr]    Compiling bitflags v2.13.1
[INFO] [stderr]    Compiling rustls v0.23.37
[INFO] [stderr]    Compiling crypto-common v0.2.2
[INFO] [stderr]    Compiling block-padding v0.4.2
[INFO] [stderr]    Compiling flate2 v1.1.9
[INFO] [stderr]    Compiling block-buffer v0.12.1
[INFO] [stderr]    Compiling inout v0.2.2
[INFO] [stderr]    Compiling safe_arch v1.0.0
[INFO] [stderr]    Compiling bumpalo v3.20.2
[INFO] [stderr]    Compiling num-integer v0.1.46
[INFO] [stderr]    Compiling num-complex v0.4.6
[INFO] [stderr]    Compiling bytes v1.12.0
[INFO] [stderr]    Compiling clap_builder v4.6.6
[INFO] [stderr]    Compiling approx v0.5.1
[INFO] [stderr]    Compiling pathfinder_geometry v0.5.1
[INFO] [stderr]    Compiling num-bigint v0.4.6
[INFO] [stderr]    Compiling wide v1.5.0
[INFO] [stderr]    Compiling http v1.4.2
[INFO] [stderr]    Compiling zopfli v0.8.3
[INFO] [stderr]    Compiling cipher v0.5.2
[INFO] [stderr]    Compiling digest v0.11.3
[INFO] [stderr]    Compiling pest_meta v2.8.6
[INFO] [stderr]    Compiling aes v0.9.1
[INFO] [stderr]    Compiling ecb v0.2.0
[INFO] [stderr]    Compiling cbc v0.2.1
[INFO] [stderr]    Compiling sha2 v0.11.0
[INFO] [stderr]    Compiling md-5 v0.11.0
[INFO] [stderr]    Compiling nom v8.0.0
[INFO] [stderr]    Compiling base64 v0.23.1
[INFO] [stderr]    Compiling num-conv v0.2.0
[INFO] [stderr]    Compiling weezl v0.2.1
[INFO] [stderr]    Compiling ureq-proto v0.6.1
[INFO] [stderr]    Compiling time v0.3.47
[INFO] [stderr]    Compiling zip v6.0.0
[INFO] [stderr]    Compiling ndarray v0.17.2
[INFO] [stderr]    Compiling num-rational v0.4.2
[INFO] [stderr]    Compiling webpki-roots v1.0.6
[INFO] [stderr]    Compiling utf8-zero v0.8.1
[INFO] [stderr]    Compiling dirs v6.0.0
[INFO] [stderr]    Compiling rand_distr v0.6.0
[INFO] [stderr]    Compiling pest_generator v2.8.6
[INFO] [stderr]    Compiling csv v1.4.0
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling thiserror-impl v2.0.20
[INFO] [stderr]    Compiling clap_derive v4.6.4
[INFO] [stderr]    Compiling enumflags2_derive v0.7.12
[INFO] [stderr]    Compiling ouroboros_macro v0.18.5
[INFO] [stderr]    Compiling nalgebra-macros v0.3.0
[INFO] [stderr]    Compiling pest_derive v2.8.6
[INFO] [stderr]    Compiling enumflags2 v0.7.12
[INFO] [stderr]    Compiling py_literal v0.4.0
[INFO] [stderr]    Compiling lopdf v0.44.0
[INFO] [stderr]    Compiling ouroboros v0.18.5
[INFO] [stderr]    Compiling allsorts-azul v0.17.1
[INFO] [stderr]    Compiling simba v0.10.0
[INFO] [stderr]    Compiling clap v4.6.6
[INFO] [stderr]    Compiling clap_complete v4.6.9
[INFO] [stderr]    Compiling rustls-webpki v0.103.13
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]    Compiling ndarray-npy v0.10.0
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling nalgebra v0.35.0
[INFO] [stderr]    Compiling ureq v3.4.0
[INFO] [stderr]    Compiling printpdf v0.12.6
[INFO] [stderr]    Compiling ballistics-engine v0.44.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stdout]   --> src/angle_calculations.rs:78:43
[INFO] [stdout]    |
[INFO] [stdout] 78 |         let tolerance_scaled = 2.0 * f64::EPSILON * b.abs() + 0.5 * x_tolerance;
[INFO] [stdout]    |                                           ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stdout]   --> src/angle_calculations.rs:92:32
[INFO] [stdout]    |
[INFO] [stdout] 92 |             if fc.abs() < f64::EPSILON || fa.abs() < f64::EPSILON {
[INFO] [stdout]    |                                ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stdout]   --> src/angle_calculations.rs:92:59
[INFO] [stdout]    |
[INFO] [stdout] 92 |             if fc.abs() < f64::EPSILON || fa.abs() < f64::EPSILON {
[INFO] [stdout]    |                                                           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:101:41
[INFO] [stdout]     |
[INFO] [stdout] 101 |                 if (a - c).abs() < f64::EPSILON {
[INFO] [stdout]     |                                         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:123:35
[INFO] [stdout]     |
[INFO] [stdout] 123 |                 if q.abs() > f64::EPSILON
[INFO] [stdout]     |                                   ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:203:28
[INFO] [stdout]     |
[INFO] [stdout] 203 |             Err(_) => f64::NAN, // NaN causes Brent's method to fail gracefully
[INFO] [stdout]     |                            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::INFINITY`: replaced by the `INFINITY` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:236:43
[INFO] [stdout]     |
[INFO] [stdout] 236 |                         final_error: f64::INFINITY,
[INFO] [stdout]     |                                           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:272:52
[INFO] [stdout]     |
[INFO] [stdout] 272 |         trajectory_func(&candidate).unwrap_or(f64::NAN)
[INFO] [stdout]     |                                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:317:37
[INFO] [stdout]     |
[INFO] [stdout] 317 |     let tolerance = if range > f64::EPSILON {
[INFO] [stdout]     |                                     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:377:25
[INFO] [stdout]     |
[INFO] [stdout] 377 |             return f64::NAN;
[INFO] [stdout]     |                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:381:25
[INFO] [stdout]     |
[INFO] [stdout] 381 |             return f64::NAN;
[INFO] [stdout]     |                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 34s
[INFO] running `Command { std: "docker" "inspect" "362b7f1424a19e309023c9e4283bf9dda78a62ef9b2b712b9253f3e6901a0b91", 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" "362b7f1424a19e309023c9e4283bf9dda78a62ef9b2b712b9253f3e6901a0b91" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling unicode-ident v1.0.24
[INFO] [stderr]    Compiling serde_core v1.0.229
[INFO] [stderr]    Compiling wasm-bindgen-shared v0.2.126
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling zerocopy v0.8.54
[INFO] [stderr]    Compiling wasm-bindgen v0.2.126
[INFO] [stderr]    Compiling futures-core v0.3.32
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]    Compiling approx v0.5.1
[INFO] [stderr]    Compiling alloca v0.4.0
[INFO] [stderr]    Compiling regex-syntax v0.8.11
[INFO] [stderr]    Compiling criterion-plot v0.8.2
[INFO] [stderr]    Compiling plotters v0.3.7
[INFO] [stderr]    Compiling page_size v0.6.0
[INFO] [stderr]    Compiling anes v0.1.6
[INFO] [stderr]    Compiling nu-ansi-term v0.50.3
[INFO] [stderr]    Compiling wasm-bindgen-test-shared v0.2.126
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling quote v1.0.47
[INFO] [stderr]    Compiling simba v0.10.0
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling syn v3.0.3
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling csv v1.4.0
[INFO] [stderr]    Compiling regex v1.13.0
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling clap_derive v4.6.4
[INFO] [stderr]    Compiling thiserror-impl v2.0.20
[INFO] [stderr]    Compiling proc-macro2-diagnostics v0.10.1
[INFO] [stderr]    Compiling wasm-bindgen-macro-support v0.2.126
[INFO] [stderr]    Compiling pest_generator v2.8.6
[INFO] [stderr]    Compiling zerocopy-derive v0.8.54
[INFO] [stderr]    Compiling enumflags2_derive v0.7.12
[INFO] [stderr]    Compiling ouroboros_macro v0.18.5
[INFO] [stderr]    Compiling nalgebra-macros v0.3.0
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling wasm-bindgen-test-macro v0.3.76
[INFO] [stderr]    Compiling pest_derive v2.8.6
[INFO] [stderr]    Compiling thiserror v2.0.20
[INFO] [stderr]    Compiling py_literal v0.4.0
[INFO] [stderr]    Compiling lopdf v0.44.0
[INFO] [stderr]    Compiling enumflags2 v0.7.12
[INFO] [stderr]    Compiling nalgebra v0.35.0
[INFO] [stderr]    Compiling ndarray-npy v0.10.0
[INFO] [stderr]    Compiling clap v4.6.6
[INFO] [stderr]    Compiling clap_complete v4.6.9
[INFO] [stderr]    Compiling ouroboros v0.18.5
[INFO] [stderr]    Compiling allsorts-azul v0.17.1
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling tinytemplate v1.2.1
[INFO] [stderr]    Compiling ureq v3.4.0
[INFO] [stderr]    Compiling wasm-bindgen-macro v0.2.126
[INFO] [stderr]    Compiling js-sys v0.3.103
[INFO] [stderr]    Compiling half v2.7.1
[INFO] [stderr]    Compiling ciborium-ll v0.2.2
[INFO] [stderr]    Compiling ciborium v0.2.2
[INFO] [stderr]    Compiling criterion v0.8.2
[INFO] [stderr]    Compiling wasm-bindgen-futures v0.4.76
[INFO] [stderr]    Compiling wasm-bindgen-test v0.3.76
[INFO] [stderr]    Compiling printpdf v0.12.6
[INFO] [stderr]    Compiling ballistics-engine v0.44.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stdout]   --> src/angle_calculations.rs:78:43
[INFO] [stdout]    |
[INFO] [stdout] 78 |         let tolerance_scaled = 2.0 * f64::EPSILON * b.abs() + 0.5 * x_tolerance;
[INFO] [stdout]    |                                           ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stdout]   --> src/angle_calculations.rs:92:32
[INFO] [stdout]    |
[INFO] [stdout] 92 |             if fc.abs() < f64::EPSILON || fa.abs() < f64::EPSILON {
[INFO] [stdout]    |                                ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stdout]   --> src/angle_calculations.rs:92:59
[INFO] [stdout]    |
[INFO] [stdout] 92 |             if fc.abs() < f64::EPSILON || fa.abs() < f64::EPSILON {
[INFO] [stdout]    |                                                           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:101:41
[INFO] [stdout]     |
[INFO] [stdout] 101 |                 if (a - c).abs() < f64::EPSILON {
[INFO] [stdout]     |                                         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:123:35
[INFO] [stdout]     |
[INFO] [stdout] 123 |                 if q.abs() > f64::EPSILON
[INFO] [stdout]     |                                   ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:203:28
[INFO] [stdout]     |
[INFO] [stdout] 203 |             Err(_) => f64::NAN, // NaN causes Brent's method to fail gracefully
[INFO] [stdout]     |                            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::INFINITY`: replaced by the `INFINITY` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:236:43
[INFO] [stdout]     |
[INFO] [stdout] 236 |                         final_error: f64::INFINITY,
[INFO] [stdout]     |                                           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:272:52
[INFO] [stdout]     |
[INFO] [stdout] 272 |         trajectory_func(&candidate).unwrap_or(f64::NAN)
[INFO] [stdout]     |                                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:317:37
[INFO] [stdout]     |
[INFO] [stdout] 317 |     let tolerance = if range > f64::EPSILON {
[INFO] [stdout]     |                                     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:377:25
[INFO] [stdout]     |
[INFO] [stdout] 377 |             return f64::NAN;
[INFO] [stdout]     |                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:381:25
[INFO] [stdout]     |
[INFO] [stdout] 381 |             return f64::NAN;
[INFO] [stdout]     |                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stdout]   --> src/angle_calculations.rs:78:43
[INFO] [stdout]    |
[INFO] [stdout] 78 |         let tolerance_scaled = 2.0 * f64::EPSILON * b.abs() + 0.5 * x_tolerance;
[INFO] [stdout]    |                                           ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stdout]   --> src/angle_calculations.rs:92:32
[INFO] [stdout]    |
[INFO] [stdout] 92 |             if fc.abs() < f64::EPSILON || fa.abs() < f64::EPSILON {
[INFO] [stdout]    |                                ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stdout]   --> src/angle_calculations.rs:92:59
[INFO] [stdout]    |
[INFO] [stdout] 92 |             if fc.abs() < f64::EPSILON || fa.abs() < f64::EPSILON {
[INFO] [stdout]    |                                                           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:101:41
[INFO] [stdout]     |
[INFO] [stdout] 101 |                 if (a - c).abs() < f64::EPSILON {
[INFO] [stdout]     |                                         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:123:35
[INFO] [stdout]     |
[INFO] [stdout] 123 |                 if q.abs() > f64::EPSILON
[INFO] [stdout]     |                                   ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:203:28
[INFO] [stdout]     |
[INFO] [stdout] 203 |             Err(_) => f64::NAN, // NaN causes Brent's method to fail gracefully
[INFO] [stdout]     |                            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::INFINITY`: replaced by the `INFINITY` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:236:43
[INFO] [stdout]     |
[INFO] [stdout] 236 |                         final_error: f64::INFINITY,
[INFO] [stdout]     |                                           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:272:52
[INFO] [stdout]     |
[INFO] [stdout] 272 |         trajectory_func(&candidate).unwrap_or(f64::NAN)
[INFO] [stdout]     |                                                    ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:317:37
[INFO] [stdout]     |
[INFO] [stdout] 317 |     let tolerance = if range > f64::EPSILON {
[INFO] [stdout]     |                                     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:377:25
[INFO] [stdout]     |
[INFO] [stdout] 377 |             return f64::NAN;
[INFO] [stdout]     |                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:381:25
[INFO] [stdout]     |
[INFO] [stdout] 381 |             return f64::NAN;
[INFO] [stdout]     |                         ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `std::f64::NEG_INFINITY`: replaced by the `NEG_INFINITY` associated constant on `f64`
[INFO] [stdout]    --> src/angle_calculations.rs:527:36
[INFO] [stdout]     |
[INFO] [stdout] 527 |             ground_threshold: f64::NEG_INFINITY,
[INFO] [stdout]     |                                    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 45s
[INFO] running `Command { std: "docker" "inspect" "362b7f1424a19e309023c9e4283bf9dda78a62ef9b2b712b9253f3e6901a0b91", 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" "362b7f1424a19e309023c9e4283bf9dda78a62ef9b2b712b9253f3e6901a0b91" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stderr]   --> src/angle_calculations.rs:78:43
[INFO] [stderr]    |
[INFO] [stderr] 78 |         let tolerance_scaled = 2.0 * f64::EPSILON * b.abs() + 0.5 * x_tolerance;
[INFO] [stderr]    |                                           ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(deprecated)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stderr]   --> src/angle_calculations.rs:92:32
[INFO] [stderr]    |
[INFO] [stderr] 92 |             if fc.abs() < f64::EPSILON || fa.abs() < f64::EPSILON {
[INFO] [stderr]    |                                ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stderr]   --> src/angle_calculations.rs:92:59
[INFO] [stderr]    |
[INFO] [stderr] 92 |             if fc.abs() < f64::EPSILON || fa.abs() < f64::EPSILON {
[INFO] [stderr]    |                                                           ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stderr]    --> src/angle_calculations.rs:101:41
[INFO] [stderr]     |
[INFO] [stderr] 101 |                 if (a - c).abs() < f64::EPSILON {
[INFO] [stderr]     |                                         ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stderr]    --> src/angle_calculations.rs:123:35
[INFO] [stderr]     |
[INFO] [stderr] 123 |                 if q.abs() > f64::EPSILON
[INFO] [stderr]     |                                   ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stderr]    --> src/angle_calculations.rs:203:28
[INFO] [stderr]     |
[INFO] [stderr] 203 |             Err(_) => f64::NAN, // NaN causes Brent's method to fail gracefully
[INFO] [stderr]     |                            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `std::f64::INFINITY`: replaced by the `INFINITY` associated constant on `f64`
[INFO] [stderr]    --> src/angle_calculations.rs:236:43
[INFO] [stderr]     |
[INFO] [stderr] 236 |                         final_error: f64::INFINITY,
[INFO] [stderr]     |                                           ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stderr]    --> src/angle_calculations.rs:272:52
[INFO] [stderr]     |
[INFO] [stderr] 272 |         trajectory_func(&candidate).unwrap_or(f64::NAN)
[INFO] [stderr]     |                                                    ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `std::f64::EPSILON`: replaced by the `EPSILON` associated constant on `f64`
[INFO] [stderr]    --> src/angle_calculations.rs:317:37
[INFO] [stderr]     |
[INFO] [stderr] 317 |     let tolerance = if range > f64::EPSILON {
[INFO] [stderr]     |                                     ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stderr]    --> src/angle_calculations.rs:377:25
[INFO] [stderr]     |
[INFO] [stderr] 377 |             return f64::NAN;
[INFO] [stderr]     |                         ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated constant `std::f64::NAN`: replaced by the `NAN` associated constant on `f64`
[INFO] [stderr]    --> src/angle_calculations.rs:381:25
[INFO] [stderr]     |
[INFO] [stderr] 381 |             return f64::NAN;
[INFO] [stderr]     |                         ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `ballistics-engine` (lib) generated 11 warnings
[INFO] [stderr] warning: use of deprecated constant `std::f64::NEG_INFINITY`: replaced by the `NEG_INFINITY` associated constant on `f64`
[INFO] [stderr]    --> src/angle_calculations.rs:527:36
[INFO] [stderr]     |
[INFO] [stderr] 527 |             ground_threshold: f64::NEG_INFINITY,
[INFO] [stderr]     |                                    ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `ballistics-engine` (lib test) generated 12 warnings (11 duplicates)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.54s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/build/ballistics-engine/450478d849f44f61/out/ballistics_engine-450478d849f44f61)
[INFO] [stdout] 
[INFO] [stdout] running 1273 tests
[INFO] [stdout] test adjustment::tests::click_size_mil_converts_via_the_locked_factor_table ... ok
[INFO] [stdout] test adjustment::tests::click_value_deserialize_rejects_what_parse_click_value_rejects ... ok
[INFO] [stdout] test adjustment::tests::clicks_for_is_unchanged_and_delegates ... ok
[INFO] [stdout] test adjustment::tests::clicks_round_to_nearest_whole_click ... ok
[INFO] [stdout] test adjustment::tests::click_value_round_trips_through_json_including_smoa ... ok
[INFO] [stdout] test adjustment::tests::click_value_json_is_pinned_to_the_suffixed_string ... ok
[INFO] [stdout] test adjustment::tests::quantize_reconstruction_identity_is_bit_exact ... ok
[INFO] [stdout] test aerodynamic_jump::tests::litz_sign_flips_with_wind_side_and_twist ... ok
[INFO] [stdout] test adjustment::tests::zero_banner_dial_values_divide_by_the_elevation_cf_and_are_exact_at_one ... ok
[INFO] [stdout] test adjustment::tests::quantize_ties_round_away_from_zero_matching_clicks_for ... ok
[INFO] [stdout] test aerodynamic_jump::tests::sight_correction_rejects_invalid_zero_ranges ... ok
[INFO] [stdout] test aerodynamic_jump::tests::sight_correction_is_the_equal_and_opposite_jump_angle ... ok
[INFO] [stdout] test aerodynamic_jump::tests::litz_regression_can_go_negative_outside_its_fitted_range ... ok
[INFO] [stdout] test angle_calculations::tests::brent_uses_inverse_quadratic_interpolation ... ok
[INFO] [stdout] test aerodynamic_jump::tests::test_crosswind_sensitivity ... ok
[INFO] [stdout] test aerodynamic_jump::tests::test_aerodynamic_jump_zero_conditions ... ok
[INFO] [stdout] test aerodynamic_jump::tests::test_opposite_twist_direction ... ok
[INFO] [stdout] test aerodynamic_jump::tests::stabilization_factor_distinguishes_stable_and_marginal_twists ... ok
[INFO] [stdout] test aerodynamic_jump::tests::litz_is_linear_in_crosswind ... ok
[INFO] [stdout] test aerodynamic_jump::tests::litz_matches_the_published_formula ... ok
[INFO] [stdout] test angle_calculations::tests::test_adjusted_muzzle_velocity_no_sensitivity ... ok
[INFO] [stdout] test angle_calculations::tests::test_brent_root_find_quadratic ... ok
[INFO] [stdout] test angle_calculations::tests::test_brent_root_find_steep_function ... ok
[INFO] [stdout] test angle_calculations::tests::test_zero_angle_bounds ... ok
[INFO] [stdout] test angle_calculations::tests::test_brent_root_find_flat_region ... ok
[INFO] [stdout] test adjustment::tests::quantize_exact_multiples_have_residual_exactly_zero ... ok
[INFO] [stdout] test angle_calculations::tests::test_brent_root_find_linear ... ok
[INFO] [stdout] test angle_calculations::tests::test_brent_root_find_near_zero_function_values ... ok
[INFO] [stdout] test angle_calculations::tests::test_brent_root_find_no_bracket ... ok
[INFO] [stdout] test angle_calculations::tests::test_brent_root_find_oscillating_convergence ... ok
[INFO] [stdout] test angle_calculations::tests::test_quick_drop_estimate ... ok
[INFO] [stdout] test angle_calculations::tests::test_zero_angle_uses_si_distance_and_radians ... ok
[INFO] [stdout] test angle_calculations::tests::test_adjusted_muzzle_velocity_with_sensitivity ... ok
[INFO] [stdout] test angle_calculations::tests::zero_angle_uses_horizontal_range_for_incline_geometry ... ok
[INFO] [stdout] test api_client::tests::cli_hint_maps_auth_errors ... ok
[INFO] [stdout] test api_client::tests::test_api_client_url_normalization ... ok
[INFO] [stdout] test api_client::tests::test_api_error_display ... ok
[INFO] [stdout] test api_client::tests::test_request_builder_all_optional_fields ... ok
[INFO] [stdout] test api_client::tests::test_request_builder_required_fields ... ok
[INFO] [stdout] test atmosphere::tests::density_altitude_round_trips_through_hand_derived_forward_formula ... ok
[INFO] [stdout] test atmosphere::tests::fractional_station_altitude_is_not_quantized ... ok
[INFO] [stdout] test atmosphere::tests::inclined_shot_frame_position_maps_to_world_altitude ... ok
[INFO] [stdout] test api_client::tests::auth_header_present_when_token_set ... ok
[INFO] [stdout] test atmosphere::tests::qnh_reduction_is_identity_at_sea_level ... ok
[INFO] [stdout] test api_client::tests::auth_header_absent_without_token ... ok
[INFO] [stdout] test api_client::tests::test_request_builder_missing_fields ... ok
[INFO] [stdout] test atmosphere::tests::qnh_reduction_matches_hand_computed_value_at_nonzero_altitude ... ok
[INFO] [stdout] test atmosphere::tests::density_altitude_default_temp_pressure_alt_equals_density_alt ... ok
[INFO] [stdout] test atmosphere::tests::density_altitude_explicit_temperature_overrides_isa_default_but_honors_density ... ok
[INFO] [stdout] test atmosphere::tests::density_altitude_pressure_decreases_monotonically ... ok
[INFO] [stdout] test atmosphere::tests::qnh_sea_level_standard_matches_icao_standard_atmosphere_at_every_altitude ... ok
[INFO] [stdout] test atmosphere::tests::resolve_station_conditions_with_pressure_mode_absolute_matches_resolve_station_conditions ... ok
[INFO] [stdout] test atmosphere::tests::local_atmosphere_walks_icao_layers_continuously ... ok
[INFO] [stdout] test atmosphere::tests::resolve_station_conditions_with_pressure_mode_qnh_reduces_pressure_only ... ok
[INFO] [stdout] test atmosphere::tests::local_atmosphere_preserves_nonstandard_station_offset_and_round_trips ... ok
[INFO] [stdout] test atmosphere::tests::resolve_station_pressure_with_mode_absolute_matches_resolve_station_pressure ... ok
[INFO] [stdout] test atmosphere::tests::test_atmo_sock_empty_falls_back_to_isa ... ok
[INFO] [stdout] test atmosphere::tests::resolve_station_pressure_with_mode_qnh_bypasses_the_default_sentinel ... ok
[INFO] [stdout] test atmosphere::tests::standard_atmosphere_converts_geometric_to_geopotential_height ... ok
[INFO] [stdout] test atmosphere::tests::test_altitude_only_default_matches_full_icao_standard ... ok
[INFO] [stdout] test atmosphere::tests::standard_atmosphere_extends_below_sea_level ... ok
[INFO] [stdout] test atmosphere::tests::test_altitude_affects_density_with_default_pressure ... ok
[INFO] [stdout] test atmosphere::tests::test_atmo_sock_boundary_is_upper_exclusive ... ok
[INFO] [stdout] test atmosphere::tests::test_atmo_sock_single_segment_holds_beyond_last ... ok
[INFO] [stdout] test atmosphere::tests::test_atmo_sock_sorts_unordered_segments ... ok
[INFO] [stdout] test atmosphere::tests::test_enhanced_atmosphere_sea_level ... ok
[INFO] [stdout] test atmosphere::tests::test_enhanced_cimp_density ... ok
[INFO] [stdout] test atmosphere::tests::test_icao_standard_atmosphere ... ok
[INFO] [stdout] test atmosphere::tests::test_mba1136_get_local_atmosphere_humid ... ok
[INFO] [stdout] test atmosphere::tests::test_enhanced_atmosphere_stratosphere ... ok
[INFO] [stdout] test atmosphere::tests::test_mba1136_atmosphere_density_is_cipm ... ok
[INFO] [stdout] test atmosphere::tests::test_mba1136_humid_lighter_than_dry ... ok
[INFO] [stdout] test atmosphere::tests::test_variable_lapse_rates ... ok
[INFO] [stdout] test atmosphere_service::tests::a_defaulted_pressure_above_the_troposphere_is_refused_at_altitude_m ... ok
[INFO] [stdout] test atmosphere::tests::test_mba1136_moist_speed_of_sound_extraction ... ok
[INFO] [stdout] test atmosphere::tests::test_resolve_station_pressure_contract ... ok
[INFO] [stdout] test atmosphere::tests::test_resolve_station_temperature_contract ... ok
[INFO] [stdout] test atmosphere_service::tests::a_pressure_outside_the_troposphere_is_refused_at_pressure_pa ... ok
[INFO] [stdout] test atmosphere_service::tests::air_density_is_the_solvers_density ... ok
[INFO] [stdout] test atmosphere_service::tests::density_matched_rises_monotonically_with_humidity ... ok
[INFO] [stdout] test atmosphere::tests::test_cipm_moist_air_matches_python_reference ... ok
[INFO] [stdout] test atmosphere::tests::test_mba1136_density_monotone_in_humidity ... ok
[INFO] [stdout] test atmosphere_service::tests::absurd_inputs_are_echoed_compactly ... ok
[INFO] [stdout] test atmosphere_service::tests::humidity_beyond_the_total_pressure_is_refused_at_relative_humidity ... ok
[INFO] [stdout] test atmosphere_service::tests::humidity_in_percent_is_refused_at_its_path ... ok
[INFO] [stdout] test atmosphere_service::tests::a_qnh_is_reduced_to_station_pressure_first ... ok
[INFO] [stdout] test atmosphere_service::tests::icao_standard_dry_air_is_zero_by_both_definitions ... ok
[INFO] [stdout] test atmosphere_service::tests::malformed_requests_get_the_solves_codes_and_paths ... ok
[INFO] [stdout] test atmosphere_service::tests::humidity_moves_the_density_matched_figure_and_not_the_faa_one ... ok
[INFO] [stdout] test atmosphere_service::tests::every_accepted_atmosphere_reports_finite_figures ... ok
[INFO] [stdout] test atmosphere_service::tests::meters_and_feet_agree ... ok
[INFO] [stdout] test atmosphere_service::tests::omitted_fields_resolve_like_a_solve_and_are_announced ... ok
[INFO] [stdout] test atmosphere_service::tests::the_definitions_differ_in_dry_air_away_from_standard ... ok
[INFO] [stdout] test bc_conversion::tests::candidate_validation_rejects_empty_and_duplicate_sets ... ok
[INFO] [stdout] test atmosphere_service::tests::a_qnh_refusal_blames_the_input_that_is_wrong_and_quotes_what_was_sent ... ok
[INFO] [stdout] test atmosphere_service::tests::a_temperature_no_air_can_have_is_refused_at_temperature_k ... ok
[INFO] [stdout] test angle_calculations::tests::quick_drop_tracks_g1_point_mass_reference ... ok
[INFO] [stdout] test bc_conversion::tests::jbm_g1_0492_at_3000_fps_converts_to_g7_0242 ... ok
[INFO] [stdout] test bc_conversion::tests::constant_g1_schedule_recommends_g1 ... ok
[INFO] [stdout] test bc_conversion::tests::scalar_and_banded_identity_preserve_bc_bits ... ok
[INFO] [stdout] test bc_conversion::tests::scalar_conversion_preserves_reference_retardation ... ok
[INFO] [stdout] test bc_conversion::tests::conversion_ratio_is_mach_dependent_not_the_cluster_shortcut ... ok
[INFO] [stdout] test bc_conversion::tests::scalar_round_trip_recovers_input_at_the_same_mach ... ok
[INFO] [stdout] test bc_conversion::tests::conversion_rejects_endpoint_clamping_and_invalid_values ... ok
[INFO] [stdout] test bc_conversion::tests::sparse_and_placeholder_tables_are_refused ... ok
[INFO] [stdout] test bc_conversion::tests::recommendation_is_scale_invariant ... ok
[INFO] [stdout] test bc_conversion::tests::g1_bands_synthesized_from_constant_g7_recommend_g7 ... ok
[INFO] [stdout] test bc_conversion::tests::combined_formatters_are_complete_newline_terminated_documents ... ok
[INFO] [stdout] test bc_conversion::tests::band_split_and_permutation_leave_fit_nearly_unchanged ... ok
[INFO] [stdout] test bc_estimation::tests::ascending_band_boundary_blends_symmetrically_around_the_boundary ... ok
[INFO] [stdout] test bc_estimation::tests::gapped_table_blends_both_edges_of_the_fallback_gap_and_stays_flat_mid_gap ... ok
[INFO] [stdout] test bc_estimation::tests::descending_stored_order_matches_ascending_boundary_blend ... ok
[INFO] [stdout] test bc_estimation::tests::g7_transition_adjustment_softens_each_band_drop ... ok
[INFO] [stdout] test bc_estimation::tests::cache_gives_each_distinct_table_its_own_byte_identical_answer_when_interleaved ... ok
[INFO] [stdout] test bc_estimation::tests::coverage_entry_and_exit_edges_stay_flat_since_the_clamp_matches_the_bordering_band ... ok
[INFO] [stdout] test bc_estimation::tests::empty_table_never_blends_and_always_returns_the_fallback_exactly ... ok
[INFO] [stdout] test bc_conversion::tests::unsorted_bands_preserve_output_order_and_overlaps_are_rejected ... ok
[INFO] [stdout] test bc_estimation::tests::margin_is_zero_for_degenerate_widths ... ok
[INFO] [stdout] test bc_estimation::tests::margin_uses_25_percent_rule_for_narrow_adjacent_bands ... ok
[INFO] [stdout] test bc_estimation::tests::sectional_density_shapes_only_band_degradation ... ok
[INFO] [stdout] test bc_estimation::tests::single_segment_table_never_blends_and_is_byte_identical_to_the_raw_lookup ... ok
[INFO] [stdout] test bc_estimation::tests::margin_caps_at_50_fps_for_wide_adjacent_bands ... ok
[INFO] [stdout] test bc_estimation::tests::generic_g7_bc_uses_g7_classification_space ... ok
[INFO] [stdout] test bc_estimation::tests::smoothstep_is_centered_and_matches_hermite_formula ... ok
[INFO] [stdout] test bc_estimation::tests::test_bc_estimation ... ok
[INFO] [stdout] test bc_estimation::tests::test_bullet_type_identification ... ok
[INFO] [stdout] test bc_estimation::tests::test_sectional_density ... ok
[INFO] [stdout] test bc_table::tests::test_interp_idx_nan_defaults_to_first_bin ... ok
[INFO] [stdout] test bc_table_5d::tests::ensure_caliber_matches_accepts_the_rounding_bucket_and_refuses_outside_it ... ok
[INFO] [stdout] test bc_table::tests::test_lookup_nan_with_single_bin_axes_uses_only_cell ... ok
[INFO] [stdout] test bc_table::tests::test_interp_idx_out_of_range ... ok
[INFO] [stdout] test bc_estimation::tests::zero_width_adjacent_band_disables_blending_at_its_boundaries ... ok
[INFO] [stdout] test bc_table::tests::test_interp_idx_in_range ... ok
[INFO] [stdout] test atmosphere::tests::test_mba1136_get_local_atmosphere_reference ... ok
[INFO] [stdout] test atmosphere::tests::test_atmo_sock_orders_nan_thresholds_last ... ok
[INFO] [stdout] test atmosphere::tests::test_atmo_sock_nan_uses_first_zone ... ok
[INFO] [stdout] test bc_table_5d::tests::segment_schedule_carries_muzzle_corrected_fallback_bc ... ok
[INFO] [stdout] test bc_table_5d::tests::manager_refuses_a_file_whose_header_caliber_is_foreign ... ok
[INFO] [stdout] test bc_table_5d::tests::test_bin_counts_matches_dimensions ... ok
[INFO] [stdout] test bc_table_5d::tests::test_effective_bc ... ok
[INFO] [stdout] test bc_table_5d::tests::path_cache_guarded_loader_refuses_a_foreign_caliber ... ok
[INFO] [stdout] test bc_table_5d::tests::test_from_bytes_roundtrip ... ok
[INFO] [stdout] test bc_table_5d::tests::path_cache_reuses_parsed_tables_and_detects_replacement ... ok
[INFO] [stdout] test bc_table_5d::tests::test_caliber_to_key ... ok
[INFO] [stdout] test bc_table_5d::tests::test_interp_idx_in_range ... ok
[INFO] [stdout] test bc_table_5d::tests::test_lookup_returns_valid_range ... ok
[INFO] [stdout] test bc_table_5d::tests::test_interp_idx_out_of_range ... ok
[INFO] [stdout] test bc_table_5d::tests::test_table_metadata ... ok
[INFO] [stdout] test bc_table_5d::tests::test_generate_segments ... ok
[INFO] [stdout] test bc_table_5d::tests::test_interp_idx_nan_defaults_to_first_bin ... ok
[INFO] [stdout] test bc_table_download::tests::test_cache_directory ... ok
[INFO] [stdout] test bc_table_download::tests::test_error_display ... ok
[INFO] [stdout] test bridge::ffi::tests::free_null_is_a_no_op ... ok
[INFO] [stdout] test bridge::ffi::tests::c_abi_smoke_meta_version ... ok
[INFO] [stdout] test bridge::ffi::tests::invalid_utf8_is_an_envelope ... ok
[INFO] [stdout] test bc_table_download::tests::test_caliber_key_conversion ... ok
[INFO] [stdout] test bridge::ffi::tests::length_variant_handles_non_terminated_buffers ... ok
[INFO] [stdout] test bc_table_download::tests::test_crc32_calculation ... ok
[INFO] [stdout] test bridge::ffi::tests::modified_utf8_and_utf8_agree_below_the_supplementary_planes ... ok
[INFO] [stdout] test bc_table_5d::tests::test_lookup_nan_with_single_bin_axes_uses_only_cell ... ok
[INFO] [stdout] test bc_table_5d::tests::test_lookup_non_finite_table_cells_are_neutral ... ok
[INFO] [stdout] test bridge::tests::a_bad_magnification_fails_the_batch_before_any_row ... ok
[INFO] [stdout] test bridge::tests::a_batch_agrees_with_the_single_hold_command ... ok
[INFO] [stdout] test bridge::tests::a_document_that_is_not_the_named_format_fails_as_a_command_failure ... ok
[INFO] [stdout] test bridge::ffi::tests::a_request_in_jni_modified_utf8_is_refused ... ok
[INFO] [stdout] test bridge::ffi::tests::null_request_is_an_envelope ... ok
[INFO] [stdout] test bridge::tests::a_malformed_hold_entry_refuses_the_whole_batch ... ok
[INFO] [stdout] test bridge::tests::a_reticle_error_carries_a_stable_reason_and_its_numbers ... ok
[INFO] [stdout] test bridge::tests::a_hold_off_the_marked_part_says_so ... ok
[INFO] [stdout] test bridge::tests::a_generated_reticle_can_be_made_sfp ... ok
[INFO] [stdout] test bridge::tests::a_batch_of_holds_comes_back_in_request_order ... ok
[INFO] [stdout] test bridge::tests::an_unknown_catalog_id_is_refused_rather_than_substituted ... ok
[INFO] [stdout] test bridge::tests::a_bdc_ladder_carries_its_range_labels ... ok
[INFO] [stdout] test bridge::tests::an_unreadable_generator_parameter_names_the_parameter ... ok
[INFO] [stdout] test bridge::tests::a_reticle_with_no_marks_is_refused_by_describe_too ... ok
[INFO] [stdout] test bridge::tests::base64_encoder_matches_the_rfc_4648_vectors ... ok
[INFO] [stdout] test bridge::tests::base64_decoder_round_trips_and_rejects_garbage ... ok
[INFO] [stdout] test bridge::tests::bc5d_info_without_payload_or_with_missing_file_fails_cleanly ... ok
[INFO] [stdout] test bridge::tests::base64_encode_decode_round_trips_arbitrary_bytes ... ok
[INFO] [stdout] test bridge::tests::a_catalog_id_is_the_third_way_to_name_a_reticle ... ok
[INFO] [stdout] test bridge::tests::an_empty_batch_is_an_empty_list_not_an_error ... ok
[INFO] [stdout] test bridge::tests::capabilities_lists_profile_commands_and_gates_import_on_the_feature ... ok
[INFO] [stdout] test bridge::tests::capabilities_lists_the_reticle_family ... ok
[INFO] [stdout] test bridge::tests::capabilities_lists_the_catalog_command ... ok
[INFO] [stdout] test bridge::tests::capabilities_reports_commands_and_versions ... ok
[INFO] [stdout] test bridge::tests::density_altitude_humidity_as_percent_is_located_in_the_solve_envelope ... ok
[INFO] [stdout] test bridge::tests::density_altitude_refuses_celsius_sent_as_kelvin ... ok
[INFO] [stdout] test bc_table_5d::tests::test_crc32 ... ok
[INFO] [stdout] test bridge::tests::density_altitude_rejects_a_unit_suffixed_field_at_its_path ... ok
[INFO] [stdout] test bridge::tests::capabilities_gates_card_pdf_on_the_pdf_feature ... ok
[INFO] [stdout] test bridge::tests::an_sfp_reticle_moves_its_marks_and_the_hold_follows ... ok
[INFO] [stdout] test bridge::tests::every_reticle_command_rejects_a_missing_payload ... ok
[INFO] [stdout] test bridge::tests::density_altitude_reports_both_definitions_at_icao_standard_humid_air ... ok
[INFO] [stdout] test bridge::tests::density_altitude_empty_atmosphere_resolves_to_announced_icao_defaults ... ok
[INFO] [stdout] test bridge::tests::density_altitude_is_listed_right_after_solve ... ok
[INFO] [stdout] test bridge::tests::card_pdf_without_payload_is_invalid_request ... ok
[INFO] [stdout] test bridge::tests::export_a7p_refuses_an_unrepresentable_drag_model_with_a_reason ... ok
[INFO] [stdout] test bridge::tests::every_reticle_command_rejects_an_unknown_request_field ... ok
[INFO] [stdout] test bridge::tests::export_a7p_without_a_payload_is_an_invalid_request ... ok
[INFO] [stdout] test bridge::tests::describe_builds_from_a_generator_and_reports_the_plane ... ok
[INFO] [stdout] test bridge::tests::hold_reports_the_nearest_mark_and_its_label ... ok
[INFO] [stdout] test bridge::tests::export_a7p_produces_a_file_import_a7p_reads_back ... ok
[INFO] [stdout] test aerodynamic_jump::tests::test_aerodynamic_jump_with_crosswind ... ok
[INFO] [stdout] test angle_calculations::tests::brent_angle_tolerance_is_invariant_to_residual_units ... ok
[INFO] [stdout] test bridge::tests::density_altitude_without_payload_is_invalid_request ... ok
[INFO] [stdout] test bridge::tests::invalid_json_is_an_envelope_not_a_panic ... ok
[INFO] [stdout] test bridge::tests::naming_no_reticle_at_all_is_refused ... ok
[INFO] [stdout] test bridge::tests::naming_a_reticle_three_ways_is_refused_too ... ok
[INFO] [stdout] test bridge::tests::plane_overrides_beside_a_full_reticle_are_refused ... ok
[INFO] [stdout] test bridge::tests::the_catalog_lists_what_the_other_commands_will_accept ... ok
[INFO] [stdout] test bridge::tests::unknown_command_lists_supported_ones ... ok
[INFO] [stdout] test bridge::tests::profile_commands_without_payload_are_invalid_requests ... ok
[INFO] [stdout] test bridge::tests::naming_a_reticle_twice_is_refused_rather_than_resolved ... ok
[INFO] [stdout] test atmosphere::tests::test_enhanced_atmosphere_with_humidity ... ok
[INFO] [stdout] test atmosphere::tests::test_mba1136_dry_sea_level_reference ... ok
[INFO] [stdout] test bridge::tests::solve_with_bad_schema_carries_typed_details ... ok
[INFO] [stdout] test bridge::tests::pdf_output_cap_refuses_only_over_the_limit ... ok
[INFO] [stdout] test bridge::tests::importing_a_ventum_document_returns_the_reticle_and_its_report ... ok
[INFO] [stdout] test bridge::tests::solve_without_payload_is_invalid_request ... ok
[INFO] [stdout] test bridge::tests::oversize_request_is_a_resource_limit ... ok
[INFO] [stdout] test bridge::tests::unknown_envelope_field_is_rejected ... ok
[INFO] [stdout] test bc_table_5d::tests::path_cache_detects_same_size_replacement_under_an_identical_mtime ... ok
[INFO] [stdout] test adjustment::tests::parse_click_value_accepts_suffixed_and_rejects_bare ... ok
[INFO] [stdout] test atmosphere_service::tests::faa_rule_is_bit_identical_to_the_card_formula_it_replaced ... ok
[INFO] [stdout] test bridge::tests::wrong_api_version_is_rejected ... ok
[INFO] [stdout] test card::adaptive_card_tests::card_row_field_names_bind_to_their_sentinel_values_in_json ... ok
[INFO] [stdout] test bridge::tests::the_pdf_presentation_block_is_accepted_by_the_on_screen_card_in_every_build ... ok
[INFO] [stdout] test card::adaptive_card_tests::out_of_band_windage_tracking_cf_is_rejected ... ok
[INFO] [stdout] test bridge::tests::an_oversize_reticle_document_is_a_resource_limit_not_a_parse_failure ... ok
[INFO] [stdout] test card::adaptive_card_tests::fixed_step_comparison_is_measured_not_assumed ... ok
[INFO] [stdout] test card::adaptive_card_tests::anchors_always_present_and_determinism ... ok
[INFO] [stdout] test cli_api::bc_fit_objective_tests::candidate_that_misses_an_observation_has_no_score ... ok
[INFO] [stdout] test cli_api::bc_reference_standard_tests::army_standard_metro_scales_mach_keyed_bc_segments ... ok
[INFO] [stdout] test cli_api::bc_reference_standard_tests::army_standard_metro_scales_bc_value_by_exactly_the_derived_ratio ... ok
[INFO] [stdout] test cli_api::bc_reference_standard_tests::asm_to_icao_ratio_matches_documented_value ... ok
[INFO] [stdout] test cli_api::bc_reference_standard_tests::custom_drag_table_inert_warning_fires_only_for_army_standard_metro_with_a_table ... ok
[INFO] [stdout] test cli_api::bc_reference_standard_tests::army_standard_metro_scales_velocity_keyed_bc_segments_data ... ok
[INFO] [stdout] test cli_api::bc_reference_standard_tests::default_bc_reference_standard_is_icao ... ok
[INFO] [stdout] test card::adaptive_card_tests::moa_cards_use_the_locked_3438_ratio ... ok
[INFO] [stdout] test cli_api::bc_reference_standard_tests::army_standard_metro_moves_impact_in_the_more_drag_direction ... ok
[INFO] [stdout] test cli_api::bc_reference_standard_tests::custom_drag_table_makes_bc_reference_standard_numerically_inert ... ok
[INFO] [stdout] test cli_api::bc_reference_standard_tests::icao_reference_leaves_bc_value_bit_identical ... ok
[INFO] [stdout] test card::adaptive_card_tests::adaptive_rows_concentrate_where_the_curve_bends ... ok
[INFO] [stdout] test cli_api::cant_tests::incline_and_cant_compose_without_breaking ... ok
[INFO] [stdout] test cli_api::cant_tests::cant_sign_clockwise_up_offset_goes_right_and_low ... ok
[INFO] [stdout] test cli_api::cant_tests::pure_cant_shows_bore_offset_near_range ... ok
[INFO] [stdout] test cli_api::cant_tests::nonfinite_cant_is_rejected ... ok
[INFO] [stdout] test card::adaptive_card_tests::quantization_floor_is_honest_and_terminates ... ok
[INFO] [stdout] test cli_api::cd_scale_tests::cd_scale_absent_is_byte_identical_to_explicit_one ... ok
[INFO] [stdout] test cli_api::cd_scale_tests::cd_scale_is_inert_without_a_custom_drag_table ... ok
[INFO] [stdout] test cli_api::cd_scale_tests::cd_scale_multiplies_the_interpolated_cd_exactly ... ok
[INFO] [stdout] test cli_api::bc_reference_standard_tests::default_inputs_solve_is_unaffected_by_the_new_field_existing ... ok
[INFO] [stdout] test card::adaptive_card_tests::verification_pass_confirms_every_audited_point_within_bounds ... ok
[INFO] [stdout] test card::adaptive_card_tests::printed_pipeline_keeps_the_locked_bias_then_cf_then_quantize_order ... ok
[INFO] [stdout] test cli_api::cd_scale_tests::default_cd_scale_is_one ... ok
[INFO] [stdout] test card::adaptive_card_tests::report_carries_method_and_all_five_assumptions ... ok
[INFO] [stdout] test cli_api::cd_scale_tests::validate_for_solve_rejects_invalid_cd_scale_without_a_custom_drag_table ... ok
[INFO] [stdout] test cli_api::cluster_bc_reference_space_tests::mach_bc_segments_are_not_cluster_corrected_twice ... ok
[INFO] [stdout] test cli_api::cluster_bc_reference_space_tests::velocity_bc_segments_are_not_cluster_corrected_twice ... ok
[INFO] [stdout] test cli_api::cluster_bc_reference_space_tests::solver_passes_g7_reference_model_to_cluster_classifier ... ok
[INFO] [stdout] test cli_api::coriolis_direction_tests::humidity_percent_converts_and_clamps ... ok
[INFO] [stdout] test cli_api::cd_scale_tests::validate_for_solve_rejects_invalid_cd_scale ... ok
[INFO] [stdout] test cli_api::coriolis_direction_tests::mach_transition_tracker_labels_0_9_without_touching_the_flat_vec ... ok
[INFO] [stdout] test cli_api::coriolis_direction_tests::mach_transition_tracker_requires_a_downward_crossing ... ok
[INFO] [stdout] test card::adaptive_card_tests::max_rows_caps_with_capped_flag ... ok
[INFO] [stdout] test card::adaptive_card_tests::request_validation_reports_every_structured_error ... ok
[INFO] [stdout] test cli_api::coriolis_direction_tests::labeled_mach_crossings_are_none_for_a_fully_supersonic_trajectory ... ok
[INFO] [stdout] test card::adaptive_card_tests::verification_grid_lands_on_the_curves_native_samples ... ok
[INFO] [stdout] test card::adaptive_card_tests::report_serializes_verbatim_with_stable_field_names ... ok
[INFO] [stdout] test cli_api::effective_drag_coefficient_tests::a_velocity_segmented_bc_steps_the_reported_cd ... ok
[INFO] [stdout] test cli_api::effective_drag_coefficient_tests::a_custom_drag_table_passes_through_unscaled ... ok
[INFO] [stdout] test cli_api::effective_drag_coefficient_tests::is_absent_when_sectional_density_is_unknown ... ok
[INFO] [stdout] test cli_api::effective_drag_coefficient_tests::reports_the_projectiles_own_cd_not_the_reference_tables ... ok
[INFO] [stdout] test cli_api::effective_drag_coefficient_tests::the_json_emit_rule_is_flag_gated_and_absent_when_cd_is_unknown ... ok
[INFO] [stdout] test cli_api::cd_scale_tests::cd_scale_shifts_all_three_solver_paths_in_the_same_direction ... ok
[INFO] [stdout] test cli_api::ground_termination_tests::every_solver_reports_one_exact_early_ground_endpoint ... ok
[INFO] [stdout] test cli_api::custom_drag_table_validation_tests::solve_still_requires_bc_without_table ... ok
[INFO] [stdout] test cli_api::humid_local_mach_tests::active_atmosphere_zone_uses_zone_humidity_instead_of_station_humidity ... ok
[INFO] [stdout] test cli_api::humid_local_mach_tests::local_mach_uses_station_humidity_when_density_is_held_constant ... ok
[INFO] [stdout] test cli_api::inclined_atmosphere_frame_tests::inclined_coriolis_is_rotated_into_solver_frame ... ok
[INFO] [stdout] test cli_api::inclined_atmosphere_frame_tests::inclined_headwind_is_rotated_into_solver_frame ... ok
[INFO] [stdout] test cli_api::inclined_atmosphere_frame_tests::inclined_positions_at_same_world_altitude_have_same_solver_acceleration ... ok
[INFO] [stdout] test cli_api::mach_bc_segment_tests::trajectory_solver_interpolates_explicit_mach_bc_segments ... ok
[INFO] [stdout] test cli_api::magnus_stability_tests::magnus_force_grows_as_fixed_spin_projectile_slows ... ok
[INFO] [stdout] test cli_api::magnus_stability_tests::magnus_uses_velocity_corrected_muzzle_stability_gate ... ok
[INFO] [stdout] test cli_api::magnus_stability_tests::yaw_of_repose_magnus_force_is_vertical_and_twist_signed ... ok
[INFO] [stdout] test cli_api::mba1302_solver_seam_tests::authoritative_station_atmosphere_preserves_explicit_standard_values_at_altitude ... ok
[INFO] [stdout] test cli_api::effective_drag_coefficient_tests::every_point_of_a_solved_trajectory_carries_the_value ... ok
[INFO] [stdout] test card::adaptive_card_tests::out_of_band_elevation_tracking_cf_is_rejected ... ok
[INFO] [stdout] test cli_api::custom_drag_table_validation_tests::solve_accepts_zero_bc_when_custom_table_present ... ok
[INFO] [stdout] test cli_api::mba737_powder_resolution_tests::curve_falls_back_to_ambient_and_clamps ... ok
[INFO] [stdout] test cli_api::mba737_powder_resolution_tests::curve_overrides_linear_and_interpolates_at_powder_temp ... ok
[INFO] [stdout] test cli_api::mba737_powder_resolution_tests::disabled_flag_is_passthrough ... ok
[INFO] [stdout] test cli_api::mba737_powder_resolution_tests::empty_curve_suppresses_linear_fallback ... ok
[INFO] [stdout] test cli_api::mba737_powder_resolution_tests::linear_model_cold_powder_subtracts ... ok
[INFO] [stdout] test cli_api::mba737_powder_resolution_tests::linear_model_hot_powder_adds ... ok
[INFO] [stdout] test card::adaptive_card_tests::tightening_the_budget_never_decreases_row_count ... ok
[INFO] [stdout] test cli_api::mba737_powder_resolution_tests::solver_and_helper_agree_on_linear_model ... ok
[INFO] [stdout] test cli_api::mba737_powder_resolution_tests::sweep_fractional_step_keeps_end_row ... ok
[INFO] [stdout] test cli_api::mba737_powder_resolution_tests::sweep_huge_range_errors_instead_of_overflowing ... ok
[INFO] [stdout] test cli_api::form_factor_drag_tests::measured_bc_drag_does_not_apply_name_based_form_factor_again ... ok
[INFO] [stdout] test cli_api::mba1302_solver_seam_tests::precomputed_absolute_resolution_via_authoritative_matches_legacy_new ... ok
[INFO] [stdout] test cli_api::monte_carlo_result_tests::all_shortfalls_have_no_cep_but_still_count_as_misses ... ok
[INFO] [stdout] test cli_api::monte_carlo_result_tests::rect_hit_probability_matches_circular_hit_probability_for_a_centered_hit ... ok
[INFO] [stdout] test cli_api::monte_carlo_result_tests::rect_hit_probability_is_zero_for_empty_or_nonpositive_dimensions ... ok
[INFO] [stdout] test cli_api::monte_carlo_result_tests::target_plane_cep_excludes_shortfall_markers ... ok
[INFO] [stdout] test cli_api::monte_carlo_result_tests::rect_hit_probability_checks_independent_axis_halves ... ok
[INFO] [stdout] test cli_api::coriolis_direction_tests::eotvos_east_higher_than_west ... ok
[INFO] [stdout] test cli_api::monte_carlo_seeded_tests::adaptive_rejects_nonsense_convergence ... ok
[INFO] [stdout] test cli_api::mba1302_solver_seam_tests::configured_zero_keeps_segments_method_and_time_step_then_sets_base_angle ... ok
[INFO] [stdout] test bridge::tests::too_many_holds_is_a_resource_limit ... ok
[INFO] [stdout] test cli_api::cd_scale_tests::cd_scale_direction_on_cli_api_solver ... ok
[INFO] [stdout] test cli_api::cant_tests::zero_angle_is_independent_of_cant ... ok
[INFO] [stdout] test cli_api::coriolis_direction_tests::labeled_mach_crossings_match_pinned_pre_change_flat_vec_across_solvers ... ok
[INFO] [stdout] test cli_api::coriolis_direction_tests::subsonic_launch_does_not_flag_a_muzzle_transition ... ok
[INFO] [stdout] test cli_api::bc_reference_standard_tests::monte_carlo_inherits_the_normalized_bc_reference ... ok
[INFO] [stdout] test cli_api::mba1302_solver_seam_tests::inclined_shot_zeroes_like_a_level_rifle ... ok
[INFO] [stdout] test cli_api::monte_carlo_wind_sampling_tests::base_vertical_wind_rides_into_every_mc_sample ... ok
[INFO] [stdout] test cli_api::monte_carlo_wind_sampling_tests::direction_sigma_controls_seeded_angular_spread_in_radians ... ok
[INFO] [stdout] test cli_api::monte_carlo_wind_sampling_tests::direction_sigma_rejects_negative_or_nonfinite_values ... ok
[INFO] [stdout] test cli_api::monte_carlo_wind_sampling_tests::negative_speed_sample_reverses_wind_direction ... ok
[INFO] [stdout] test cli_api::monte_carlo_wind_sampling_tests::zero_direction_sigma_has_no_angular_jitter ... ok
[INFO] [stdout] test cli_api::precession_inertia_wiring_tests::solver_uses_projectile_specific_moments_of_inertia ... ok
[INFO] [stdout] test cli_api::result_sanity_tests::mba1293_negative_scalars_fail_the_result_postcondition ... ok
[INFO] [stdout] test cli_api::result_sanity_tests::mba1293_speed_budget_bounds_legitimate_states_and_rejects_divergence ... ok
[INFO] [stdout] test cli_api::rk45_adaptivity_tests::cli_rk45_error_norm_scales_components_independently ... ok
[INFO] [stdout] test cli_api::rk45_adaptivity_tests::rk45_retries_discontinuous_trial_before_advancing ... ok
[INFO] [stdout] test cli_api::monte_carlo_wind_sampling_tests::wind_speed_sigma_does_not_change_seeded_direction_draws ... ok
[INFO] [stdout] test cli_api::terminal_range_interpolation_tests::every_solver_appends_an_exact_max_range_endpoint ... ok
[INFO] [stdout] test cli_api::terminal_range_interpolation_tests::sub_ulp_terminal_crossing_replaces_instead_of_duplicating_range ... ok
[INFO] [stdout] test cli_api::trajectory_point_budget_tests::mba1283_every_solver_errors_instead_of_exceeding_point_budget ... ok
[INFO] [stdout] test cli_api::trajectory_point_budget_tests::mba1283_interpolated_endpoint_counts_toward_point_budget ... ok
[INFO] [stdout] test cli_api::trajectory_point_budget_tests::mba1299_every_solver_preflights_the_sample_budget ... ok
[INFO] [stdout] test cli_api::trajectory_point_budget_tests::mba1299_normal_sampling_does_not_change_solver_results ... ok
[INFO] [stdout] test cli_api::velocity_bc_flag_tests::velocity_bc_data_requires_opt_in_in_trajectory_solver ... ok
[INFO] [stdout] test cli_api::terminal_range_interpolation_tests::terminal_finalizer_selects_the_earliest_crossed_boundary ... ok
[INFO] [stdout] test cli_api::vertical_wind_tests::zero_vertical_is_default_and_finite_required ... ok
[INFO] [stdout] test cluster_bc::tests::g7_reference_ladder_is_inert_for_other_drag_models ... ok
[INFO] [stdout] test cluster_bc::tests::test_apply_correction_g7 ... ok
[INFO] [stdout] test cluster_bc::tests::test_bc_multiplier_g7_semantics ... ok
[INFO] [stdout] test cluster_bc::tests::test_caliber_must_be_inches_not_meters ... ok
[INFO] [stdout] test cluster_bc::tests::test_cluster_prediction ... ok
[INFO] [stdout] test cluster_bc::tests::test_parity_with_python_reference ... ok
[INFO] [stdout] test constants::tests::grams_per_grain_matches_independent_ground_truth ... ok
[INFO] [stdout] test constants::tests::powder_reference_temperature_defaults_are_equivalent ... ok
[INFO] [stdout] test credentials::tests::env_var_takes_precedence_over_file ... ok
[INFO] [stdout] test credentials::tests::load_from_missing_file_is_none ... ok
[INFO] [stdout] test cli_api::vertical_wind_tests::updraft_raises_poi_downrange ... ok
[INFO] [stdout] test credentials::tests::saved_file_is_0600 ... ok
[INFO] [stdout] test credentials::tests::save_and_load_roundtrip ... ok
[INFO] [stdout] test derivatives::tests::cd_scale_default_is_one_and_absent_matches_explicit ... ok
[INFO] [stdout] test derivatives::tests::cd_scale_is_inert_without_a_custom_drag_table ... ok
[INFO] [stdout] test derivatives::tests::dry_air_sound_speed_round_trips_to_local_celsius ... ok
[INFO] [stdout] test derivatives::tests::empty_mach_segments_preserve_active_bc_used ... ok
[INFO] [stdout] test derivatives::tests::estimated_segments_inherit_typed_g7_drag_model ... ok
[INFO] [stdout] test derivatives::tests::explicit_velocity_segment_gap_uses_scalar_bc_without_auto_estimation ... ok
[INFO] [stdout] test derivatives::tests::inclined_coriolis_is_rotated_into_solver_frame ... ok
[INFO] [stdout] test derivatives::tests::cd_scale_direction_on_derivatives_kernel ... ok
[INFO] [stdout] test derivatives::tests::inclined_headwind_is_rotated_into_solver_frame ... ok
[INFO] [stdout] test derivatives::tests::inclined_positions_at_same_world_altitude_have_same_atmospheric_acceleration ... ok
[INFO] [stdout] test derivatives::tests::level_vector_projection_is_bit_exact_at_zero_incline ... ok
[INFO] [stdout] test derivatives::tests::magnus_force_grows_as_fixed_spin_projectile_slows ... ok
[INFO] [stdout] test derivatives::tests::magnus_uses_velocity_corrected_muzzle_stability_gate ... ok
[INFO] [stdout] test derivatives::tests::measured_bc_drag_ignores_name_based_form_factor_flag ... ok
[INFO] [stdout] test derivatives::tests::standard_atmosphere_zero_ratio_uses_sea_level_fallback ... ok
[INFO] [stdout] test derivatives::tests::test_compute_derivatives_with_coriolis ... ok
[INFO] [stdout] test derivatives::tests::test_compute_derivatives_with_wind ... ok
[INFO] [stdout] test derivatives::tests::test_compute_derivatives_basic ... ok
[INFO] [stdout] test derivatives::tests::test_interpolated_bc ... ok
[INFO] [stdout] test derivatives::tests::test_interpolated_bc_edge_cases ... ok
[INFO] [stdout] test derivatives::tests::test_magnus_effect ... ok
[INFO] [stdout] test derivatives::tests::test_mba955_bc_segments_prepopulate_byte_identical ... ok
[INFO] [stdout] test derivatives::tests::test_magnus_moment_coefficient ... ok
[INFO] [stdout] test derivatives::tests::tipoff_yaw_uses_documented_radians_for_drag_and_decay ... ok
[INFO] [stdout] test drag::reference_drag_table_tests::every_model_has_a_usable_table ... ok
[INFO] [stdout] test drag::reference_drag_table_tests::the_exposed_table_is_the_one_the_solver_interpolates ... ok
[INFO] [stdout] test drag::tests::embedded_family_tables_have_ascending_mach_and_positive_cd ... ok
[INFO] [stdout] test drag::reference_drag_table_tests::the_mach_domain_is_per_table_not_universal ... ok
[INFO] [stdout] test drag::tests::from_csv_str_rejects_empty ... ok
[INFO] [stdout] test drag::tests::from_csv_str_parses_with_header_and_comments ... ok
[INFO] [stdout] test drag::tests::from_csv_str_rejects_malformed_first_data_row ... ok
[INFO] [stdout] test drag::tests::from_csv_str_roundtrips_shipped_g7 ... ok
[INFO] [stdout] test drag::tests::from_csv_str_rejects_malformed_data_row ... ok
[INFO] [stdout] test drag::tests::interpolate_does_not_panic_on_mismatched_table ... ok
[INFO] [stdout] test drag::tests::from_csv_str_still_skips_textual_header ... ok
[INFO] [stdout] test cli_api::ground_termination_tests::rk4_and_rk45_descend_to_ground_threshold ... ok
[INFO] [stdout] test drag::tests::mba1386_ra4_solver_smoke ... ok
[INFO] [stdout] test drag::tests::nonuniform_cubic_is_c1_at_spacing_transition ... ok
[INFO] [stdout] test drag::tests::nonuniform_cubic_reproduces_affine_data ... ok
[INFO] [stdout] test drag::tests::out_of_range_mach_holds_boundary_cd ... ok
[INFO] [stdout] test drag::tests::standard_g_table_transonic_option_does_not_double_count_drag_rise ... ok
[INFO] [stdout] test drag::tests::test_drag_coefficient_continuity ... ok
[INFO] [stdout] test drag::tests::test_drag_table_creation ... ok
[INFO] [stdout] test drag::tests::test_drag_table_empty ... ok
[INFO] [stdout] test drag::tests::test_drag_table_single_point ... ok
[INFO] [stdout] test drag::tests::test_cubic_interpolation ... ok
[INFO] [stdout] test drag::tests::test_endpoint_bounds ... ok
[INFO] [stdout] test drag::tests::test_drag_table_two_points ... ok
[INFO] [stdout] test drag::tests::test_g1_drag_coefficient_interpolation ... ok
[INFO] [stdout] test drag::tests::test_g2_drag_coefficient_spot_values ... ok
[INFO] [stdout] test drag::tests::test_g5_drag_coefficient_spot_values ... ok
[INFO] [stdout] test drag::tests::test_g7_drag_coefficient_interpolation ... ok
[INFO] [stdout] test drag::tests::test_gi_drag_coefficient_spot_values ... ok
[INFO] [stdout] test drag::tests::test_gs_drag_coefficient_spot_values ... ok
[INFO] [stdout] test drag::tests::test_known_drag_values ... ok
[INFO] [stdout] test drag::tests::test_linear_interpolation ... ok
[INFO] [stdout] test drag::tests::test_load_drag_table_fallback ... ok
[INFO] [stdout] test drag::tests::test_monotonicity_properties ... ok
[INFO] [stdout] test drag::tests::test_performance_characteristics ... ok
[INFO] [stdout] test drag::tests::test_physical_constraints ... ok
[INFO] [stdout] test drag::tests::test_ra4_drag_coefficient_spot_values ... ok
[INFO] [stdout] test drag::tests::try_new_accepts_valid_table ... ok
[INFO] [stdout] test drag::tests::try_new_rejects_mismatched_lengths ... ok
[INFO] [stdout] test drag::tests::try_new_rejects_non_ascending_mach ... ok
[INFO] [stdout] test drag::tests::try_new_rejects_nonpositive_or_nonfinite_cd ... ok
[INFO] [stdout] test drag::tests::try_new_rejects_too_few_points ... ok
[INFO] [stdout] test drag_file::tests::accepts_cd_mach_column_order_like_the_real_vendor_format ... ok
[INFO] [stdout] test drag_file::tests::both_ascend_larger_max_col0_is_mach ... ok
[INFO] [stdout] test drag_file::tests::both_ascend_larger_max_col1_rescues_subsonic_only_cd_mach_deck ... ok
[INFO] [stdout] test drag_file::tests::both_ascend_similar_maxima_is_ambiguous_error ... ok
[INFO] [stdout] test drag_file::tests::header_line_with_prose_and_comma_number_is_skipped_not_flagged_as_decimal_comma ... ok
[INFO] [stdout] test drag::tests::test_find_drag_tables_dir ... ok
[INFO] [stdout] test drag_file::tests::headerless_csv_has_no_name ... ok
[INFO] [stdout] test drag_file::tests::looks_like_drg_is_false_for_empty_and_single_row ... ok
[INFO] [stdout] test drag_file::tests::mach_may_start_at_zero ... ok
[INFO] [stdout] test drag_file::tests::rejects_bad_decks ... ok
[INFO] [stdout] test drag_file::tests::parses_synthetic_drg_with_header ... ok
[INFO] [stdout] test drag_file::tests::semicolon_separated_rows_are_accepted ... ok
[INFO] [stdout] test drag::tests::mba1386_g2_g5_gi_gs_drop_differs_from_g1_now_that_fallback_is_gone ... ok
[INFO] [stdout] test drag_file::tests::sniff_distinguishes_drg_from_csv_and_junk ... ok
[INFO] [stdout] test drag_model::tests::test_drag_model_clone ... ok
[INFO] [stdout] test drag_model::tests::test_drag_model_copy ... ok
[INFO] [stdout] test drag_model::tests::test_drag_model_debug ... ok
[INFO] [stdout] test drag_model::tests::ra4_from_str_roundtrip ... ok
[INFO] [stdout] test drag_model::tests::test_drag_model_display ... ok
[INFO] [stdout] test drag_model::tests::test_drag_model_equality ... ok
[INFO] [stdout] test drag_model::tests::test_drag_model_from_str ... ok
[INFO] [stdout] test drag_model::tests::test_drag_model_from_str_case_insensitive ... ok
[INFO] [stdout] test drag_model::tests::test_drag_model_from_str_invalid ... ok
[INFO] [stdout] test drag_file::tests::row_cap_enforced ... ok
[INFO] [stdout] test error_budget::tests::a_degenerate_target_can_never_be_hit_regardless_of_covariance ... ok
[INFO] [stdout] test error_budget::tests::a_negative_range_is_rejected_directly ... ok
[INFO] [stdout] test error_budget::tests::a_duplicate_axis_declaration_is_rejected ... ok
[INFO] [stdout] test error_budget::tests::a_duplicate_axis_is_found_even_when_not_adjacent ... ok
[INFO] [stdout] test error_budget::tests::a_range_beyond_max_range_m_is_rejected_directly_not_laundered_per_axis ... ok
[INFO] [stdout] test error_budget::tests::a_range_within_max_range_m_but_beyond_the_actual_trajectory_is_rejected_with_the_real_extent ... ok
[INFO] [stdout] test error_budget::tests::a_non_finite_or_negative_sigma_is_rejected ... ok
[INFO] [stdout] test error_budget::tests::a_non_central_scheme_is_surfaced_in_the_source_and_the_priority_statement ... ok
[INFO] [stdout] test error_budget::tests::a_strongly_correlated_case_differs_materially_from_the_wrong_separable_approximation ... ok
[INFO] [stdout] test error_budget::tests::a_three_way_tie_is_fully_deterministic_across_every_rotation ... ok
[INFO] [stdout] test cli_api::coriolis_direction_tests::supersonic_crossing_flags_a_positive_range_sample ... ok
[INFO] [stdout] test error_budget::tests::a_single_declared_source_gives_a_well_formed_rank_one_p_hit_not_nan_or_negative ... ok
[INFO] [stdout] test error_budget::tests::an_unavailable_source_has_no_gain_field_while_the_evaluated_sibling_does_when_a_target_is_supplied ... ok
[INFO] [stdout] test error_budget::tests::circle_matches_the_rayleigh_closed_form_when_uncorrelated_and_isotropic ... ok
[INFO] [stdout] test error_budget::tests::circle_probability_is_rotation_invariant ... ok
[INFO] [stdout] test error_budget::tests::a_zero_sigma_source_contributes_exactly_zero ... ok
[INFO] [stdout] test error_budget::tests::correlation_crossing_split_matches_the_near_degenerate_line_limit ... ok
[INFO] [stdout] test error_budget::tests::an_unavailable_source_is_recorded_not_silently_dropped ... ok
[INFO] [stdout] test error_budget::tests::drop_deterministic_windage_random_matches_closed_form_not_hardcoded_zero ... ok
[INFO] [stdout] test error_budget::tests::declaring_no_sources_is_well_defined ... ok
[INFO] [stdout] test error_budget::tests::an_astronomically_large_sigma_does_not_panic_the_sort ... ok
[INFO] [stdout] test error_budget::tests::every_source_unavailable_still_produces_a_well_formed_report ... ok
[INFO] [stdout] test error_budget::tests::ellipse_area_reduction_is_nonzero_and_discriminating_with_three_or_more_sources ... ok
[INFO] [stdout] test cli_api::monte_carlo_powder_curve_tests::powder_curve_preserves_sampled_muzzle_velocity_dispersion ... ok
[INFO] [stdout] test error_budget::tests::p_hit_fields_are_none_when_no_target_is_supplied ... ok
[INFO] [stdout] test error_budget::tests::every_declared_source_appears_individually ... ok
[INFO] [stdout] test error_budget::tests::p_hit_grows_with_target_size_for_a_rectangle_too ... ok
[INFO] [stdout] test error_budget::tests::p_hit_is_bounded_and_grows_with_target_size ... ok
[INFO] [stdout] test error_budget::tests::p_hit_and_gain_round_trip_through_json_when_present ... ok
[INFO] [stdout] test cli_api::bc_reference_standard_tests::estimate_bc_fit_recovers_an_icao_referenced_bc ... ok
[INFO] [stdout] test error_budget::tests::p_hit_is_computed_from_the_rows_own_covariance_not_a_constant ... ok
[INFO] [stdout] test error_budget::tests::p_hit_is_monotone_in_target_size_across_a_sweep_including_near_rank_one_correlation ... ok
[INFO] [stdout] test error_budget::tests::p_hit_gain_if_perfect_discriminates_with_only_two_sources ... ok
[INFO] [stdout] test error_budget::tests::error_budget_computes_a_correctly_indexed_row_per_requested_range ... ok
[INFO] [stdout] test error_budget::tests::single_source_ellipse_matches_the_closed_form_rank_one_case ... ok
[INFO] [stdout] test error_budget::tests::step_out_of_domain_reason_blames_the_default_step_not_the_sigma ... ok
[INFO] [stdout] test error_budget::tests::target_geometry_serializes_snake_case_externally_tagged ... ok
[INFO] [stdout] test error_budget::tests::perfecting_a_source_never_lowers_p_hit ... ok
[INFO] [stdout] test error_budget::tests::the_priority_statement_is_unchanged_with_no_target_supplied ... ok
[INFO] [stdout] test error_budget::tests::ranking_is_invariant_to_declaration_order ... ok
[INFO] [stdout] test error_budget::tests::the_priority_statement_is_unchanged_when_the_leaders_coincide ... ok
[INFO] [stdout] test error_budget::tests::sigma_covariance_and_rotation_are_verified_independently_not_against_themselves ... ok
[INFO] [stdout] test error_budget::tests::the_report_declares_the_gaussian_ellipse_assumption_and_the_two_added_caveats ... ok
[INFO] [stdout] test error_budget::tests::tied_variance_shares_break_deterministically_regardless_of_input_order ... ok
[INFO] [stdout] test error_budget::tests::the_report_declares_independence_and_linearity ... ok
[INFO] [stdout] test error_budget::tests::unavailable_reason_classifies_every_kernel_error_variant ... ok
[INFO] [stdout] test error_budget::tests::uncorrelated_rectangle_matches_the_separable_closed_form ... ok
[INFO] [stdout] test error_budget::tests::the_report_round_trips_through_json_including_unavailable_sources_and_scheme ... ok
[INFO] [stdout] test error_budget::tests::the_priority_statement_names_the_gain_leader_when_it_diverges_from_the_variance_leader ... ok
[INFO] [stdout] test error_budget::tests::windage_deterministic_drop_random_matches_closed_form ... ok
[INFO] [stdout] test error_budget::tests::zero_total_variance_means_a_deterministic_impact_at_the_nominal_point ... ok
[INFO] [stdout] test error_budget::tests::the_report_names_the_quadrature_and_the_aim_point_assumption_only_when_a_target_is_supplied ... ok
[INFO] [stdout] test error_budget::tests::variance_shares_sum_to_one ... ok
[INFO] [stdout] test error_budget::tests::variance_shares_sum_to_one_against_an_independently_recomputed_total ... ok
[INFO] [stdout] test error_budget::tests::p_hit_gain_if_perfect_matches_an_independent_oracle_and_discriminates_with_three_sources ... ok
[INFO] [stdout] test error_budget::tests::two_sources_contributions_are_not_transposed ... ok
[INFO] [stdout] test explain::tests::coriolis_conflict_with_missing_latitude_is_excluded_not_a_hard_abort ... ok
[INFO] [stdout] test cli_api::monte_carlo_seeded_tests::different_seeds_generally_produce_different_draws ... ok
[INFO] [stdout] test explain::tests::altitude_is_skipped_and_recorded_under_qnh_pressure ... ok
[INFO] [stdout] test cli_api::monte_carlo_seeded_tests::adaptive_report_carries_schema_method_and_all_four_assumptions ... ok
[INFO] [stdout] test explain::tests::contributions_plus_remainder_equal_the_total ... ok
[INFO] [stdout] test explain::tests::altitude_exclusion_does_not_leak_a_partial_effect_into_atmosphere ... ok
[INFO] [stdout] test explain::tests::coriolis_still_swaps_when_both_requests_have_latitude ... ok
[INFO] [stdout] test explain::tests::contribution_is_the_mean_of_a_genuinely_different_forward_and_backward ... ok
[INFO] [stdout] test explain::tests::an_axis_present_on_only_one_side_is_skipped_and_recorded_symmetrically ... ok
[INFO] [stdout] test explain::tests::pressure_and_altitude_exclusion_give_an_exactly_zero_atmosphere_contribution_when_nothing_else_differs ... ok
[INFO] [stdout] test cli_api::monte_carlo_seeded_tests::wilson_companion_matches_hit_probability_and_wilson_interval ... ok
[INFO] [stdout] test explain::tests::magnus_and_enhanced_spin_drift_conflict_is_excluded_not_a_hard_abort ... ok
[INFO] [stdout] test explain::tests::pressure_is_still_swapped_when_the_altitude_matches ... ok
[INFO] [stdout] test explain::tests::identical_requests_produce_zero_everything ... ok
[INFO] [stdout] test explain::tests::pressure_exclusion_does_not_leak_a_partial_effect_into_atmosphere ... ok
[INFO] [stdout] test explain::tests::schema_version_matches_the_declared_constant ... ok
[INFO] [stdout] test explain::tests::muzzle_angle_is_still_swapped_for_an_angle_only_request ... ok
[INFO] [stdout] test explain::tests::shot_azimuth_is_refused_even_when_other_shot_geometry_axes_are_applied_first ... ok
[INFO] [stdout] test fast_trajectory::tests::cd_scale_default_is_one_and_absent_matches_explicit ... ok
[INFO] [stdout] test fast_trajectory::tests::cd_scale_direction_on_fast_trajectory_kernel ... ok
[INFO] [stdout] test fast_trajectory::tests::cd_scale_is_inert_without_a_custom_drag_table ... ok
[INFO] [stdout] test fast_trajectory::tests::fast_path_carries_real_bullet_geometry ... ok
[INFO] [stdout] test fast_trajectory::tests::fast_path_coriolis_independent_of_advanced_effects ... ok
[INFO] [stdout] test fast_trajectory::tests::fast_path_coriolis_uses_shot_direction ... ok
[INFO] [stdout] test fast_trajectory::tests::fast_path_rejects_degenerate_atmosphere ... ok
[INFO] [stdout] test fast_trajectory::tests::fast_paths_reject_invalid_wind_segments ... ok
[INFO] [stdout] test fast_trajectory::tests::inclined_coriolis_is_rotated_into_solver_frame ... ok
[INFO] [stdout] test fast_trajectory::tests::inclined_headwind_is_rotated_into_solver_frame ... ok
[INFO] [stdout] test fast_trajectory::tests::inclined_positions_at_same_world_altitude_have_same_fast_acceleration ... ok
[INFO] [stdout] test fast_trajectory::tests::measured_bc_fast_drag_ignores_name_based_form_factor_flag ... ok
[INFO] [stdout] test fast_trajectory::tests::plain_fast_kernel_applies_power_law_wind_shear ... ok
[INFO] [stdout] test fast_trajectory::tests::plain_fast_path_honors_direct_atmosphere_values ... ok
[INFO] [stdout] test fast_trajectory::tests::plain_fast_path_interpolates_the_target_crossing ... ok
[INFO] [stdout] test explain::tests::every_groups_contribution_matches_an_independent_recomputation_bc_and_wind_fixture ... ok
[INFO] [stdout] test explain::tests::wind_direction_is_excluded_under_compass_wind_even_with_an_identical_raw_bearing ... ok
[INFO] [stdout] test fast_trajectory::tests::segmented_fast_path_nonpositive_density_ratio_uses_standard_fallback ... ok
[INFO] [stdout] test fast_trajectory::tests::plain_fast_path_wind_shear_changes_high_arc_drift ... ok
[INFO] [stdout] test fast_trajectory::tests::test_bc_from_velocity_segments ... ok
[INFO] [stdout] test fast_trajectory::tests::test_bc_segments_boundary_conditions ... ok
[INFO] [stdout] test fast_trajectory::tests::test_bc_segments_empty_fallback ... ok
[INFO] [stdout] test fast_trajectory::tests::test_fast_integration_params ... ok
[INFO] [stdout] test fast_trajectory::tests::test_fast_solution_event_arrays ... ok
[INFO] [stdout] test fast_trajectory::tests::test_fast_solution_from_trajectory_data ... ok
[INFO] [stdout] test fast_trajectory::tests::test_fast_solution_interpolation ... ok
[INFO] [stdout] test fast_trajectory::tests::test_fast_solution_interpolation_edge_cases ... ok
[INFO] [stdout] test fast_trajectory::tests::velocity_bc_data_requires_opt_in_in_plain_fast_kernel ... ok
[INFO] [stdout] test fast_trajectory::tests::velocity_segment_gaps_and_clamps_do_not_depend_on_order ... ok
[INFO] [stdout] test ffi::tests::asking_for_shear_over_the_c_abi_names_a_profile_the_fast_path_keeps ... ok
[INFO] [stdout] test ffi::tests::bc_for_reference_standard_army_standard_metro_applies_the_documented_ratio ... ok
[INFO] [stdout] test ffi::tests::bc_for_reference_standard_icao_is_a_byte_identical_no_op ... ok
[INFO] [stdout] test ffi::tests::bc_for_reference_standard_unrecognized_value_falls_back_to_icao ... ok
[INFO] [stdout] test ffi::tests::bc_type_8_maps_to_ra4 ... ok
[INFO] [stdout] test ffi::tests::density_altitude_ffi_explicit_temperature_is_honored_exactly ... ok
[INFO] [stdout] test ffi::tests::density_altitude_ffi_exports_match_the_library_function ... ok
[INFO] [stdout] test ffi::tests::density_altitude_ffi_non_finite_input_returns_nan ... ok
[INFO] [stdout] test explain::tests::wind_direction_is_still_swapped_when_the_shot_azimuth_matches ... ok
[INFO] [stdout] test ffi::tests::drag_table_len_above_cap_is_rejected ... ok
[INFO] [stdout] test fast_trajectory::tests::segmented_fast_path_interpolates_max_ordinate_between_saved_points ... ok
[INFO] [stdout] test ffi::tests::drag_table_len_at_cap_is_accepted ... ok
[INFO] [stdout] test ffi::tests::ffi_hold_point_maps_each_error_class_to_its_own_code ... ok
[INFO] [stdout] test ffi::tests::ffi_hold_point_matches_the_rust_api_on_both_focal_planes ... ok
[INFO] [stdout] test ffi::tests::ffi_cant_angle_deflects_laterally ... ok
[INFO] [stdout] test ffi::tests::ffi_hold_point_bounds_check_marks_len_before_reading ... ok
[INFO] [stdout] test fast_trajectory::tests::segmented_fast_spin_flags_do_not_depend_on_advanced_umbrella ... ok
[INFO] [stdout] test explain::tests::every_groups_contribution_matches_an_independent_recomputation ... ok
[INFO] [stdout] test ffi::tests::leaving_shear_off_over_the_c_abi_names_no_profile ... ok
[INFO] [stdout] test ffi::tests::ffi_trajectory_uses_the_density_altitude_derived_station_values ... ok
[INFO] [stdout] test ffi::tests::mba1283_ffi_enforces_step_floor_for_every_solver_mode ... ok
[INFO] [stdout] test ffi::tests::monte_carlo_params_legacy_abi_size_is_unchanged ... ok
[INFO] [stdout] test ffi::tests::ffi_vertical_wind_raises_trajectory ... ok
[INFO] [stdout] test ffi::tests::reduce_qnh_pressure_matches_the_library_function_and_lowers_pressure ... ok
[INFO] [stdout] test ffi::tests::ffi_trajectory_uses_the_reduced_pressure_not_the_raw_qnh ... ok
[INFO] [stdout] test ffi::tests::reticle_addition_does_not_disturb_existing_layouts ... ok
[INFO] [stdout] test ffi::tests::null_pointer_contracts_return_sentinels_and_free_safely ... ok
[INFO] [stdout] test ffi::tests::reduce_qnh_pressure_passes_through_non_finite_inputs ... ok
[INFO] [stdout] test ffi::tests::trajectory_scaled_at_one_matches_unscaled_export ... ok
[INFO] [stdout] test ffi::tests::trajectory_scaled_at_1_10_lowers_impact_velocity ... ok
[INFO] [stdout] test ffi::tests::trajectory_scaled_rejects_invalid_cd_scale ... ok
[INFO] [stdout] test ffi::tests::trajectory_with_drag_table_rejects_invalid_decks ... ok
[INFO] [stdout] test ffi::tests::trajectory_with_drag_table_applies_the_deck ... ok
[INFO] [stdout] test explain::tests::the_report_states_its_method_and_assumptions ... ok
[INFO] [stdout] test ffi::tests::zero_angle_scaled_rejects_invalid_cd_scale ... ok
[INFO] [stdout] test explain::tests::source_requests_are_not_mutated_by_the_comparison ... ok
[INFO] [stdout] test ffi::tests::zero_angle_with_drag_table_rejects_invalid_decks ... ok
[INFO] [stdout] test ffi::tests::zero_angle_scaled_at_one_matches_unscaled_export ... ok
[INFO] [stdout] test ffi::tests::legacy_drag_table_exports_unaffected_by_cd_scale_plumbing ... ok
[INFO] [stdout] test form_factor::tests::test_case_insensitive ... ok
[INFO] [stdout] test form_factor::tests::test_apply_form_factor ... ok
[INFO] [stdout] test form_factor::tests::test_g7_form_factors ... ok
[INFO] [stdout] test form_factor::tests::test_g1_form_factors ... ok
[INFO] [stdout] test ffi::tests::zero_then_fly_with_same_deck_is_consistent ... ok
[INFO] [stdout] test ffi::tests::zero_angle_scaled_at_1_10_differs_from_baseline ... ok
[INFO] [stdout] test mc_stats::tests::confidence_level_accessors_are_pinned_exactly ... ok
[INFO] [stdout] test mc_stats::tests::cs_bounds_are_deterministic_and_batch_order_invariant ... ok
[INFO] [stdout] test cli_api::monte_carlo_seeded_tests::seeded_runs_are_deterministic_and_match_the_using_rng_path ... ok
[INFO] [stdout] test hold_curve::tests::at_range_outside_the_sampled_span_returns_none ... ok
[INFO] [stdout] test mc_stats::tests::cs_edges_saturate_exactly ... ok
[INFO] [stdout] test mc_stats::tests::cs_is_wider_than_wilson_at_the_same_n ... ok
[INFO] [stdout] test hold_curve::tests::sample_ranges_m_is_the_exact_multiples_of_the_sample_interval ... ok
[INFO] [stdout] test mc_stats::tests::cs_starts_ignorant_and_shrinks_monotonically_in_n ... ok
[INFO] [stdout] test mc_stats::tests::welford_empty_and_single_are_defined ... ok
[INFO] [stdout] test mc_stats::tests::welford_matches_two_pass_moments_on_a_hostile_fixture ... ok
[INFO] [stdout] test mc_stats::tests::wilson_interval_saturates_when_successes_exceeds_trials ... ok
[INFO] [stdout] test mc_stats::tests::wilson_edges_and_ordering_properties ... ok
[INFO] [stdout] test mc_stats::tests::wilson_two_algebraic_forms_agree ... ok
[INFO] [stdout] test monte_carlo::tests::test_calculate_cep ... ok
[INFO] [stdout] test monte_carlo::tests::test_calculate_confidence_ellipse ... ok
[INFO] [stdout] test mc_stats::tests::wilson_matches_the_newcombe_canonical_example ... ok
[INFO] [stdout] test monte_carlo::tests::test_percentile ... ok
[INFO] [stdout] test monte_carlo::tests::test_sample_points ... ok
[INFO] [stdout] test moving_target::tests::invalid_inputs_are_rejected ... ok
[INFO] [stdout] test moving_target::tests::lead_from_tof_perpendicular_is_speed_times_tof ... ok
[INFO] [stdout] test moving_target::tests::inbound_gives_shorter_corrected_range ... ok
[INFO] [stdout] test moving_target::tests::moa_mil_ratio_is_exactly_3_438 ... ok
[INFO] [stdout] test moving_target::tests::over_closing_target_is_a_typed_error ... ok
[INFO] [stdout] test moving_target::tests::pure_radial_motion_has_zero_lead ... ok
[INFO] [stdout] test moving_target::tests::right_to_left_lead_is_negative ... ok
[INFO] [stdout] test moving_target::tests::outbound_45_converges_fast_and_grows_range ... ok
[INFO] [stdout] test hold_curve::tests::at_range_matches_an_independent_direct_solves_sampled_observation ... ok
[INFO] [stdout] test optic::plan_corrections_tests::cf_dial_space_worked_example ... ok
[INFO] [stdout] test moving_target::tests::zero_speed_gives_zero_lead_solution ... ok
[INFO] [stdout] test optic::plan_corrections_tests::exact_click_dope_has_residual_exactly_zero ... ok
[INFO] [stdout] test optic::plan_corrections_tests::hold_all_hold_is_never_cf_scaled ... ok
[INFO] [stdout] test optic::plan_corrections_tests::direction_wire_form_is_unchanged_and_the_full_report_round_trips ... ok
[INFO] [stdout] test optic::plan_corrections_tests::fractional_click_reports_rounding_and_linear_error ... ok
[INFO] [stdout] test optic::plan_corrections_tests::hold_bound_mapping_matches_reticle_space_not_correction_space ... ok
[INFO] [stdout] test optic::plan_corrections_tests::infeasible_is_reported_never_silently_clamped ... ok
[INFO] [stdout] test optic::plan_corrections_tests::infeasible_plans_never_outrank_a_feasible_one ... ok
[INFO] [stdout] test optic::plan_corrections_tests::max_clicks_within_handles_exact_and_fractional_boundaries ... ok
[INFO] [stdout] test optic::plan_corrections_tests::missing_hold_bound_data_is_disclosed_and_gates_hold_all_and_hybrid ... ok
[INFO] [stdout] test optic::plan_corrections_tests::mil_and_moa_optics_are_physically_equivalent ... ok
[INFO] [stdout] test optic::plan_corrections_tests::missing_travel_data_is_disclosed_and_gates_dial_all_but_not_hybrid ... ok
[INFO] [stdout] test optic::plan_corrections_tests::non_positive_or_non_finite_tracking_factor_is_rejected ... ok
[INFO] [stdout] test optic::plan_corrections_tests::plan_corrections_rejects_an_invalid_profile ... ok
[INFO] [stdout] test optic::plan_corrections_tests::preferences_default_prefers_dial_with_no_hold_cap ... ok
[INFO] [stdout] test optic::plan_corrections_tests::ranking_is_deterministic_and_preference_respected ... ok
[INFO] [stdout] test optic::plan_corrections_tests::report_carries_method_and_all_five_assumptions ... ok
[INFO] [stdout] test optic::plan_corrections_tests::revolutions_and_zero_stop ... ok
[INFO] [stdout] test optic::plan_corrections_tests::travel_clamped_hybrid_with_an_unsupportable_hold_is_infeasible ... ok
[INFO] [stdout] test optic::plan_corrections_tests::travel_violation_needed_mil_is_dial_space_not_true_space_at_nonunit_cf ... ok
[INFO] [stdout] test optic::tests::optic_profile_json_pins_click_fields_to_the_suffixed_string ... ok
[INFO] [stdout] test optic::tests::optic_profile_json_pins_option_field_presence_and_absence ... ok
[INFO] [stdout] test optic::tests::optic_profile_round_trips_through_json ... ok
[INFO] [stdout] test optic::tests::revolution_annotation_matches_known_points_at_cpr_ten ... ok
[INFO] [stdout] test optic::tests::revolution_annotation_negative_input_is_none ... ok
[INFO] [stdout] test optic::tests::revolution_annotation_reconstructs_the_input_over_a_range ... ok
[INFO] [stdout] test optic::tests::revolution_annotation_zero_clicks_per_revolution_is_none_not_a_panic ... ok
[INFO] [stdout] test optic::tests::validate_accepts_a_full_realistic_profile ... ok
[INFO] [stdout] test optic::plan_corrections_tests::windage_arm_uses_its_own_click_cf_and_contributes_to_the_rss ... ok
[INFO] [stdout] test optic::tests::validate_rejects_negative_travel ... ok
[INFO] [stdout] test optic::tests::validate_rejects_non_positive_click_size ... ok
[INFO] [stdout] test optic::tests::validate_rejects_turret_state_outside_travel ... ok
[INFO] [stdout] test optic::tests::validate_rejects_zero_clicks_per_revolution ... ok
[INFO] [stdout] test pdf_dope_card::tests::density_altitude_uses_published_nws_pressure_altitude_equation ... ok
[INFO] [stdout] test pdf_dope_card::tests::dope_card_page_count_rounds_up_and_reports_zero_for_no_rows ... ok
[INFO] [stdout] test optic::tests::validate_rejects_non_finite_fields ... ok
[INFO] [stdout] test optic::plan_corrections_tests::turret_state_shifts_delta_but_not_target ... ok
[INFO] [stdout] test pdf_dope_card::tests::dope_card_rows_per_page_pins_the_preset_scales ... ok
[INFO] [stdout] test pdf_dope_card::tests::format_adjustment_pins_one_decimal_place_including_the_near_ties ... ok
[INFO] [stdout] test pdf_dope_card::tests::format_adjustment_cell_renders_none_as_an_em_dash_not_a_fake_zero ... ok
[INFO] [stdout] test pdf_dope_card::tests::format_adjustment_drops_the_decimal_for_clicks_only ... ok
[INFO] [stdout] test pdf_dope_card::tests::format_range_pinned_examples ... ok
[INFO] [stdout] test pdf_dope_card::tests::format_range_renders_one_decimal_outside_the_noise_band ... ok
[INFO] [stdout] test pdf_dope_card::tests::format_range_absorbs_floating_point_noise_around_a_whole_number ... ok
[INFO] [stdout] test pdf_dope_card::tests::generate_dope_card_pdf_rejects_empty_rows ... ok
[INFO] [stdout] test ffi::tests::zero_angle_with_drag_table_applies_the_deck ... ok
[INFO] [stdout] test pdf_dope_card::tests::generate_dope_card_pdf_is_non_empty_for_a_single_row ... ok
[INFO] [stdout] test pdf_dope_card::tests::range_unit_label_matches_its_variant ... ok
[INFO] [stdout] test pdf_dope_card::tests::test_density_altitude ... ok
[INFO] [stdout] test pdf_dope_card::tests::generate_dope_card_pdf_succeeds_when_lead_adj_is_none ... ok
[INFO] [stdout] test perturbation::access::tests::altitude_axis_is_perturbable_when_pressure_is_explicitly_absolute ... ok
[INFO] [stdout] test perturbation::access::tests::altitude_axis_is_perturbable_when_pressure_is_absolute ... ok
[INFO] [stdout] test perturbation::access::tests::altitude_axis_is_unsupported_when_the_original_pressure_was_qnh ... ok
[INFO] [stdout] test pdf_dope_card::tests::generate_dope_card_pdf_is_non_empty_for_120_rows_pagination ... ok
[INFO] [stdout] test perturbation::access::tests::drag_model_axis_reads_and_writes_the_enum_value ... ok
[INFO] [stdout] test explain::tests::wind_axes_are_skipped_and_recorded_under_segmented_wind_on_either_side ... ok
[INFO] [stdout] test perturbation::access::tests::every_axis_writes_to_its_own_named_destination_field ... ok
[INFO] [stdout] test perturbation::access::tests::effect_flags_round_trip ... ok
[INFO] [stdout] test mc_stats::tests::cs_brackets_the_mle_and_nests_by_confidence_level ... ok
[INFO] [stdout] test perturbation::access::tests::every_present_axis_round_trips_without_disturbing_any_other_field ... ok
[INFO] [stdout] test perturbation::access::tests::rezero_axis_does_not_clear_the_angle_when_no_zero_distance_is_present ... ok
[INFO] [stdout] test perturbation::access::tests::shot_azimuth_axis_is_perturbable_when_wind_is_explicitly_shooter_relative ... ok
[INFO] [stdout] test perturbation::access::tests::shot_azimuth_axis_is_perturbable_when_wind_is_shooter_relative ... ok
[INFO] [stdout] test perturbation::access::tests::non_rezero_axis_preserves_the_carried_muzzle_angle ... ok
[INFO] [stdout] test perturbation::access::tests::read_then_write_is_identity ... ok
[INFO] [stdout] test perturbation::access::tests::shot_azimuth_axis_is_unsupported_when_the_original_wind_was_compass_referenced ... ok
[INFO] [stdout] test perturbation::access::tests::rezero_axis_clears_the_carried_muzzle_angle_when_a_zero_distance_is_present ... ok
[INFO] [stdout] test perturbation::access::tests::wind_axes_are_absent_under_segmented_wind ... ok
[INFO] [stdout] test pdf_dope_card::tests::generated_pdf_grows_when_page_count_grows ... ok
[INFO] [stdout] test perturbation::access::tests::twist_direction_axis_reads_and_writes_the_enum_value ... ok
[INFO] [stdout] test perturbation::access::tests::writing_a_scalar_into_the_drag_model_axis_is_a_type_error ... ok
[INFO] [stdout] test perturbation::access::tests::writing_a_drag_model_into_a_scalar_axis_is_a_type_error ... ok
[INFO] [stdout] test perturbation::access::tests::writing_zero_distance_onto_an_angle_only_request_clears_the_carried_angle ... ok
[INFO] [stdout] test perturbation::access::tests::twist_rate_and_muzzle_height_and_target_height_round_trip ... ok
[INFO] [stdout] test perturbation::access::tests::writing_a_twist_direction_into_the_drag_model_axis_is_a_type_error ... ok
[INFO] [stdout] test perturbation::access::tests::writing_a_flag_into_a_scalar_axis_is_a_type_error ... ok
[INFO] [stdout] test perturbation::derive::tests::bisect_axis_propagates_axis_unsupported_for_request ... ok
[INFO] [stdout] test perturbation::access::tests::writing_an_axis_changes_only_that_axis ... ok
[INFO] [stdout] test perturbation::derive::tests::bisect_axis_reports_axis_absent_for_wind_axes_under_segmented_wind ... ok
[INFO] [stdout] test perturbation::derive::tests::bisect_axis_refuses_categorical_axes ... ok
[INFO] [stdout] test perturbation::derive::tests::bisect_axis_returns_none_when_the_predicate_never_flips ... ok
[INFO] [stdout] test perturbation::derive::tests::categorical_axes_cannot_be_differentiated ... ok
[INFO] [stdout] test perturbation::derive::tests::bisect_axis_converges_to_the_vacuum_analytic_root_not_the_domain_midpoint ... ok
[INFO] [stdout] test perturbation::derive::tests::both_sides_out_of_domain_reports_step_out_of_domain ... ok
[INFO] [stdout] test perturbation::derive::tests::central_difference_matches_the_vacuum_oracle_at_every_requested_range ... ok
[INFO] [stdout] test perturbation::derive::tests::central_difference_matches_the_vacuum_analytic_derivative ... ok
[INFO] [stdout] test perturbation::derive::tests::central_difference_reports_axis_absent_for_wind_axes_under_segmented_wind ... ok
[INFO] [stdout] test perturbation::derive::tests::central_difference_propagates_axis_unsupported_for_request ... ok
[INFO] [stdout] test perturbation::derive::tests::explicit_step_overrides_the_default_and_still_matches_the_vacuum_oracle ... ok
[INFO] [stdout] test perturbation::derive::tests::non_finite_or_non_positive_explicit_step_is_rejected ... ok
[INFO] [stdout] test perturbation::derive::tests::step_used_follows_the_crate_convention ... ok
[INFO] [stdout] test perturbation::derive::tests::a_genuine_non_convergent_zero_search_on_one_side_propagates_not_falls_back ... ok
[INFO] [stdout] test perturbation::derive::tests::bisect_axis_returns_none_when_the_predicate_is_false_at_both_ends ... ok
[INFO] [stdout] test perturbation::derive::tests::relative_humidity_falls_back_to_one_sided_at_the_dry_air_boundary ... ok
[INFO] [stdout] test perturbation::derive::tests::drop_derivative_wrt_muzzle_velocity_is_negative ... ok
[INFO] [stdout] test perturbation::eval_tests::an_invalid_request_is_a_solve_error_not_a_panic_or_silent_success ... ok
[INFO] [stdout] test perturbation::derive::tests::target_distance_falls_back_to_one_sided_when_queried_near_its_own_max_range ... ok
[INFO] [stdout] test perturbation::eval_tests::a_range_beyond_the_trajectory_is_an_error_not_a_clamp ... ok
[INFO] [stdout] test perturbation::derive::tests::wind_speed_falls_back_to_one_sided_in_still_air ... ok
[INFO] [stdout] test perturbation::eval_tests::evaluate_ignores_drops_reference_and_always_reports_los_drop ... ok
[INFO] [stdout] test perturbation::eval_tests::evaluate_matches_solve_v1_when_an_explicit_angle_and_zero_distance_are_both_present ... ok
[INFO] [stdout] test perturbation::eval_tests::evaluate_matches_solve_v1_when_no_zero_distance_is_present_at_all ... ok
[INFO] [stdout] test perturbation::derive::tests::windage_derivative_wrt_wind_speed_dominates_and_matches_the_baseline_sign ... ok
[INFO] [stdout] test perturbation::taxonomy::tests::effects_are_categorical ... ok
[INFO] [stdout] test perturbation::taxonomy::tests::only_zero_affecting_axes_require_rezero ... ok
[INFO] [stdout] test perturbation::taxonomy::tests::taxonomy_is_a_partition ... ok
[INFO] [stdout] test pitch_damping::tests::crosswind_is_not_persistent_equilibrium_yaw ... ok
[INFO] [stdout] test pitch_damping::tests::damped_yaw_convergence_rate_preserves_stability_sign ... ok
[INFO] [stdout] test pitch_damping::tests::default_308_pitch_rate_damps_on_small_arms_timescale ... ok
[INFO] [stdout] test pitch_damping::tests::gravity_yaw_of_repose_matches_classical_stability_reduction ... ok
[INFO] [stdout] test pitch_damping::tests::precession_uses_slow_epicyclic_frequency ... ok
[INFO] [stdout] test pitch_damping::tests::test_angular_acceleration ... ok
[INFO] [stdout] test pitch_damping::tests::test_bullet_type_coefficients ... ok
[INFO] [stdout] test pitch_damping::tests::test_damped_yaw_of_repose ... ok
[INFO] [stdout] test pitch_damping::tests::test_default_implementation ... ok
[INFO] [stdout] test pitch_damping::tests::test_mach_interpolation ... ok
[INFO] [stdout] test pitch_damping::tests::test_pitch_damping_coefficient ... ok
[INFO] [stdout] test pitch_damping::tests::test_pitch_damping_edge_cases ... ok
[INFO] [stdout] test pitch_damping::tests::test_pitch_damping_moment ... ok
[INFO] [stdout] test pitch_damping::tests::test_precession_with_damping ... ok
[INFO] [stdout] test pitch_damping::tests::test_transonic_instability ... ok
[INFO] [stdout] test pitch_damping::tests::test_transonic_jump ... ok
[INFO] [stdout] test pitch_damping::tests::test_transverse_moment_of_inertia ... ok
[INFO] [stdout] test power_factor::tests::every_pf_threshold_boundary_both_sides ... ok
[INFO] [stdout] test power_factor::tests::idpa_truncation_example ... ok
[INFO] [stdout] test power_factor::tests::non_sass_rows_have_no_velocity_gate ... ok
[INFO] [stdout] test power_factor::tests::realistic_9mm_load_cross_check ... ok
[INFO] [stdout] test power_factor::tests::sass_velocity_boundaries_both_sides ... ok
[INFO] [stdout] test power_factor::tests::sass_worked_examples ... ok
[INFO] [stdout] test power_factor::tests::table_has_expected_row_count_and_orgs ... ok
[INFO] [stdout] test power_factor::tests::uspsa_truncation_example ... ok
[INFO] [stdout] test precession_nutation::tests::combined_motion_applies_velocity_and_density_to_stability ... ok
[INFO] [stdout] test precession_nutation::tests::combined_motion_yaw_rate_is_derivative_of_yaw ... ok
[INFO] [stdout] test precession_nutation::tests::epicyclic_motion_satisfies_supplied_initial_conditions ... ok
[INFO] [stdout] test precession_nutation::tests::inertia_aware_limit_cycle_yaw_matches_gravity_gyroscopic_balance ... ok
[INFO] [stdout] test precession_nutation::tests::limit_cycle_yaw_excludes_crosswind_and_fabricated_instability_step ... ok
[INFO] [stdout] test precession_nutation::tests::projectile_inertias_match_reference_and_geometry_scaling ... ok
[INFO] [stdout] test precession_nutation::tests::projectile_inertias_reject_invalid_geometry ... ok
[INFO] [stdout] test precession_nutation::tests::test_angular_state_evolution ... ok
[INFO] [stdout] test precession_nutation::tests::test_combined_angular_motion ... ok
[INFO] [stdout] test precession_nutation::tests::test_damping_time_evolution ... ok
[INFO] [stdout] test precession_nutation::tests::test_default_params ... ok
[INFO] [stdout] test precession_nutation::tests::test_epicyclic_motion ... ok
[INFO] [stdout] test precession_nutation::tests::test_mba941_epicyclic_relations_and_limits ... ok
[INFO] [stdout] test precession_nutation::tests::test_nutation_amplitude_bounds ... ok
[INFO] [stdout] test precession_nutation::tests::test_nutation_damping ... ok
[INFO] [stdout] test precession_nutation::tests::test_nutation_edge_cases ... ok
[INFO] [stdout] test precession_nutation::tests::test_nutation_frequency ... ok
[INFO] [stdout] test precession_nutation::tests::test_precession_edge_cases ... ok
[INFO] [stdout] test precession_nutation::tests::test_precession_frequency ... ok
[INFO] [stdout] test precession_nutation::tests::test_stability_effects ... ok
[INFO] [stdout] test profile::tests::legacy_minimal_document_defaults_and_reserializes_with_stable_keys ... ok
[INFO] [stdout] test profile::tests::validation_warnings_mirror_the_cli_gates ... ok
[INFO] [stdout] test profile::tests::wire_shape_round_trips_field_for_field ... ok
[INFO] [stdout] test profile_export::a7p::tests::a_custom_drag_curve_round_trips_as_mach_cd_rows ... ok
[INFO] [stdout] test profile_export::a7p::tests::a_drag_model_the_format_cannot_name_is_refused ... ok
[INFO] [stdout] test profile_export::a7p::tests::a_value_that_does_not_fit_the_fixed_point_grid_is_warned_about ... ok
[INFO] [stdout] test profile_export::a7p::tests::an_absent_twist_rate_warns_rather_than_refusing_and_that_is_deliberate ... ok
[INFO] [stdout] test profile_export::a7p::tests::an_imperial_profile_and_its_metric_twin_encode_identically ... ok
[INFO] [stdout] test profile_export::a7p::tests::an_unusable_measurement_is_a_named_field_error ... ok
[INFO] [stdout] test profile_export::a7p::tests::custom_without_a_curve_is_refused ... ok
[INFO] [stdout] test profile_export::a7p::tests::every_export_carries_the_minimum_four_switch_positions ... ok
[INFO] [stdout] test perturbation::eval_tests::evaluate_actually_zeroes_drop_is_near_zero_at_the_zero_distance ... ok
[INFO] [stdout] test profile_export::a7p::tests::fields_the_format_requires_are_refused_when_absent_not_invented ... ok
[INFO] [stdout] test profile_export::a7p::tests::not_carried_names_real_populated_fields_with_their_values ... ok
[INFO] [stdout] test profile_export::a7p::tests::round_trip_through_the_importer_preserves_every_carried_field ... ok
[INFO] [stdout] test profile_export::a7p::tests::values_outside_what_the_ecosystem_accepts_are_refused_by_name ... ok
[INFO] [stdout] test profile_export::a7p::tests::not_carried_and_carried_cover_every_profile_field ... ok
[INFO] [stdout] test profile_export::wire::tests::negative_int32_is_sign_extended_to_ten_bytes ... ok
[INFO] [stdout] test profile_export::wire::tests::packed_repeated_is_one_length_delimited_field ... ok
[INFO] [stdout] test profile_import::a7p::tests::corrupted_envelope_is_reported_not_fatal ... ok
[INFO] [stdout] test profile_import::a7p::tests::custom_rows_is_empty_when_no_coef_rows_present ... ok
[INFO] [stdout] test profile_import::a7p::tests::custom_rows_uses_the_mach_scale_not_the_velocity_scale ... ok
[INFO] [stdout] test profile_import::a7p::tests::out_of_range_zero_index_yields_none ... ok
[INFO] [stdout] test profile_export::wire::tests::varint_matches_the_spec_examples ... ok
[INFO] [stdout] test profile_import::a7p::tests::parses_synthetic_profile_with_verified_envelope ... ok
[INFO] [stdout] test profile_import::a7p::tests::proto3_defaults_apply_when_fields_are_absent ... ok
[INFO] [stdout] test profile_import::md5::tests::multi_block_message ... ok
[INFO] [stdout] test profile_import::md5::tests::rfc1321_test_vectors ... ok
[INFO] [stdout] test profile_import::a7p::tests::short_files_and_garbage_are_clean_errors ... ok
[INFO] [stdout] test profile_import::wire::tests::fixed32_and_fixed64_are_consumed_not_confused ... ok
[INFO] [stdout] test profile_import::wire::tests::group_wire_types_are_rejected ... ok
[INFO] [stdout] test profile_import::wire::tests::huge_length_claim_is_truncated_error ... ok
[INFO] [stdout] test profile_import::wire::tests::oversized_field_number_is_an_error ... ok
[INFO] [stdout] test profile_import::wire::tests::parses_mixed_fields_and_preserves_order ... ok
[INFO] [stdout] test perturbation::eval_tests::evaluate_preserves_the_caller_supplied_range_order_and_repeats ... ok
[INFO] [stdout] test profile_import::wire::tests::negative_int32_arrives_as_ten_byte_varint ... ok
[INFO] [stdout] test profile_import::wire::tests::repeated_i32_accepts_packed_and_unpacked ... ok
[INFO] [stdout] test profile_import::wire::tests::truncated_varint_is_an_error ... ok
[INFO] [stdout] test profile_import::wire::tests::truncated_length_delimited_is_an_error ... ok
[INFO] [stdout] test recoil::tests::accepts_zero_gas_velocity ... ok
[INFO] [stdout] test profile_import::wire::tests::varint_roundtrip_boundaries ... ok
[INFO] [stdout] test recoil::tests::gas_velocity_model_variants_resolve ... ok
[INFO] [stdout] test recoil::tests::heavier_firearm_reduces_recoil_energy ... ok
[INFO] [stdout] test recoil::tests::rejects_non_positive_bullet_weight ... ok
[INFO] [stdout] test recoil::tests::rejects_non_positive_firearm_weight ... ok
[INFO] [stdout] test recoil::tests::rejects_non_positive_muzzle_velocity ... ok
[INFO] [stdout] test recoil::tests::saami_gas_factors_by_firearm_type ... ok
[INFO] [stdout] test recoil::tests::saami_shotgun_worked_example ... ok
[INFO] [stdout] test recoil::tests::zero_charge_weight_is_bullet_only_momentum ... ok
[INFO] [stdout] test recoil::tests::rejects_non_finite_inputs ... ok
[INFO] [stdout] test recoil::tests::impulse_matches_firearm_momentum ... ok
[INFO] [stdout] test perturbation::eval_tests::evaluate_returns_one_observation_per_requested_range ... ok
[INFO] [stdout] test request_roundtrip::tests::roundtrip_does_not_double_reference_a_compass_wind ... ok
[INFO] [stdout] test request_roundtrip::tests::roundtrip_does_not_double_reduce_a_qnh_pressure ... ok
[INFO] [stdout] test perturbation::eval_tests::evaluate_matches_solve_v1_when_zero_distance_alone_searches_the_elevation ... ok
[INFO] [stdout] test reticle::tests::bdc_from_drops_is_pure_data_assembly ... ok
[INFO] [stdout] test reticle::tests::description_round_trips_through_serde ... ok
[INFO] [stdout] test reticle::tests::ffp_marks_are_invariant_across_magnification ... ok
[INFO] [stdout] test reticle::tests::formatters_are_stable_and_json_is_the_schema ... ok
[INFO] [stdout] test reticle::tests::generator_sizes_cannot_overflow_past_the_cap ... ok
[INFO] [stdout] test reticle::tests::generators_reject_bad_parameters ... ok
[INFO] [stdout] test reticle::tests::hold_on_a_mark_has_zero_distance ... ok
[INFO] [stdout] test reticle::tests::hold_round_trips_through_serde ... ok
[INFO] [stdout] test reticle::tests::mil_grid_generates_a_cross_not_a_filled_grid ... ok
[INFO] [stdout] test reticle::tests::off_reticle_boundary_follows_the_documented_margin ... ok
[INFO] [stdout] test reticle::tests::rejects_empty_and_non_finite_descriptions ... ok
[INFO] [stdout] test request_roundtrip::tests::roundtrip_preserves_the_effective_muzzle_angle ... ok
[INFO] [stdout] test request_roundtrip::tests::resolution_is_idempotent_through_roundtrip ... ok
[INFO] [stdout] test reticle::tests::sfp_marks_scale_by_reference_over_current_magnification ... ok
[INFO] [stdout] test reticle::tests::sfp_nearest_mark_is_measured_in_true_angular_space ... ok
[INFO] [stdout] test reticle::tests::sfp_off_reticle_uses_the_scaled_bounding_box ... ok
[INFO] [stdout] test reticle::tests::sfp_rejects_a_non_positive_reference_magnification_but_ffp_ignores_it ... ok
[INFO] [stdout] test reticle::tests::tree_widens_one_step_per_row ... ok
[INFO] [stdout] test reticle::tests::rejects_non_physical_magnification_on_both_planes ... ok
[INFO] [stdout] test reticle_catalog::tests::a_moa_ladder_falls_on_moa_multiples ... ok
[INFO] [stdout] test reticle_catalog::tests::a_four_dot_scope_holds_the_same_as_a_five_dot_one ... ok
[INFO] [stdout] test reticle_catalog::tests::an_unknown_id_is_none_rather_than_a_substitute ... ok
[INFO] [stdout] test reticle_catalog::tests::every_ladder_is_a_cross_and_carries_its_centre ... ok
[INFO] [stdout] test reticle_catalog::tests::it_is_a_cross_not_a_grid ... ok
[INFO] [stdout] test reticle_catalog::tests::every_entry_names_a_source_and_builds ... ok
[INFO] [stdout] test reticle_catalog::tests::the_generic_ladders_say_they_are_generic ... ok
[INFO] [stdout] test reticle_catalog::tests::zero_dots_is_refused ... ok
[INFO] [stdout] test reticle_catalog::tests::mil_dot_puts_its_dots_on_one_mil_centres ... ok
[INFO] [stdout] test reticle_document_import::tests::a_bdc_wrapper_is_not_itself_a_mark ... ok
[INFO] [stdout] test reticle_document_import::tests::a_non_positive_canvas_is_refused ... ok
[INFO] [stdout] test reticle_document_import::tests::a_mark_above_the_zero_imports_as_negative_down ... ok
[INFO] [stdout] test reticle_document_import::tests::an_imported_ladder_hold_solves ... ok
[INFO] [stdout] test reticle_document_import::tests::a_value_this_module_cannot_scale_is_refused_rather_than_guessed ... ok
[INFO] [stdout] test reticle_document_import::tests::an_all_decoration_document_imports_with_no_marks ... ok
[INFO] [stdout] test reticle_document_import::tests::each_value_converts_on_its_own_unit_suffix ... ok
[INFO] [stdout] test reticle_document_import::tests::entities_in_the_name_are_decoded ... ok
[INFO] [stdout] test reticle_document_import::tests::dropped_geometry_is_never_read_as_an_angle ... ok
[INFO] [stdout] test reticle_document_import::tests::nesting_deeper_than_the_cap_is_refused_without_recursing ... ok
[INFO] [stdout] test reticle_document_import::tests::malformed_documents_report_invalid_spec ... ok
[INFO] [stdout] test reticle_document_import::tests::positive_y_in_the_document_is_down_negated_in_the_engine ... ok
[INFO] [stdout] test reticle_document_import::tests::the_canvas_and_zero_are_reported_in_milliradians ... ok
[INFO] [stdout] test reticle_document_import::tests::the_import_is_always_ffp_identity_because_the_format_says_nothing ... ok
[INFO] [stdout] test reticle_document_import::tests::bdc_entries_are_the_only_holds_and_the_drawing_is_dropped ... ok
[INFO] [stdout] test reticle_document_import::tests::prologue_comments_and_cdata_are_skipped ... ok
[INFO] [stdout] test reticle_import::tests::a_center_that_cannot_be_read_leaves_the_arc_unresolved ... ok
[INFO] [stdout] test reticle_import::tests::a_centered_asymmetric_arc_still_gets_its_mirrored_twin ... ok
[INFO] [stdout] test request_roundtrip::tests::roundtrip_preserves_the_windage_zero_bias ... ok
[INFO] [stdout] test reticle_import::tests::a_centered_symmetric_arc_is_still_deduped ... ok
[INFO] [stdout] test reticle_import::tests::a_circle_counts_against_the_mark_cap_unlike_0_32_0 ... ok
[INFO] [stdout] test reticle_import::tests::a_declared_sweep_that_cannot_be_read_is_reported_not_quietly_a_ring ... ok
[INFO] [stdout] test reticle_import::tests::a_fully_representable_reticle_reports_nothing_dropped ... ok
[INFO] [stdout] test reticle_import::tests::a_horseshoe_apex_resolves_to_the_top_of_the_reticle ... ok
[INFO] [stdout] test reticle_import::tests::a_lone_angle_is_a_ring_whether_or_not_it_can_be_read ... ok
[INFO] [stdout] test reticle_import::tests::a_marks_own_position_refuses_a_null_like_any_other_wrong_value ... ok
[INFO] [stdout] test reticle_import::tests::a_mirrored_arc_reflects_its_angles_not_just_its_center ... ok
[INFO] [stdout] test reticle_import::tests::a_mirrored_arcs_reported_angles_are_clockwise_bearings ... ok
[INFO] [stdout] test reticle_import::tests::a_non_numeric_radius_is_ignored_rather_than_rejected ... ok
[INFO] [stdout] test reticle_import::tests::a_numeric_arc_still_resolves_beside_a_cosmetic_one ... ok
[INFO] [stdout] test reticle_import::tests::a_readable_repeat_on_a_circle_still_stamps_its_copies ... ok
[INFO] [stdout] test reticle_import::tests::a_refusal_that_is_not_about_a_key_falls_on_every_element_type_alike ... ok
[INFO] [stdout] test reticle_document_import::tests::the_zero_attributes_place_the_canvas_and_never_move_a_mark ... ok
[INFO] [stdout] test reticle_import::tests::a_circle_accepts_cx_cy_and_defaults_to_the_center ... ok
[INFO] [stdout] test reticle_import::tests::a_repeat_counts_per_instance_for_text_and_once_for_a_dropped_shape ... ok
[INFO] [stdout] test reticle_import::tests::a_repeated_circle_key_takes_its_last_value ... ok
[INFO] [stdout] test reticle_import::tests::a_ring_is_counted_as_a_circle_and_an_arc_as_an_arc ... ok
[INFO] [stdout] test reticle_import::tests::a_runaway_repeat_is_capped_promptly ... ok
[INFO] [stdout] test reticle_import::tests::an_arc_is_reported_but_never_becomes_a_mark ... ok
[INFO] [stdout] test reticle_import::tests::an_arc_resolves_only_from_a_center_a_positive_radius_and_a_sweep ... ok
[INFO] [stdout] test reticle_import::tests::an_arc_without_a_radius_is_counted_as_unresolved ... ok
[INFO] [stdout] test reticle_import::tests::an_arc_with_an_unreadable_radius_is_counted_as_unresolved ... ok
[INFO] [stdout] test reticle_import::tests::an_unreadable_center_on_a_plain_ring_is_just_a_counted_ring ... ok
[INFO] [stdout] test reticle_import::tests::an_unmirrored_arcs_angles_are_the_documents_own ... ok
[INFO] [stdout] test reticle_import::tests::an_absent_or_null_center_is_the_reticle_center ... ok
[INFO] [stdout] test reticle_import::tests::an_unusable_repeat_on_a_circle_is_ignored_rather_than_rejected ... ok
[INFO] [stdout] test reticle_import::tests::decoration_and_unknown_elements_are_dropped ... ok
[INFO] [stdout] test reticle_import::tests::an_unusable_repeat_on_a_hold_bearing_mark_still_fails_loudly ... ok
[INFO] [stdout] test reticle_import::tests::imported_mbr_reticle_hold_solves ... ok
[INFO] [stdout] test reticle_import::tests::label_numbers_print_integers_without_a_decimal ... ok
[INFO] [stdout] test reticle_import::tests::malformed_json_reports_invalid_spec ... ok
[INFO] [stdout] test reticle_import::tests::mbr_array_form_expands_to_the_full_dot_tree ... ok
[INFO] [stdout] test reticle_import::tests::mbr_string_form_parses_identically_to_the_array_form ... ok
[INFO] [stdout] test reticle_import::tests::mirror_never_duplicates_a_center_mark ... ok
[INFO] [stdout] test reticle_import::tests::moa_coordinates_convert_to_milliradians ... ok
[INFO] [stdout] test reticle_import::tests::moa_scales_an_arcs_lengths_but_never_its_angles ... ok
[INFO] [stdout] test reticle_import::tests::normalize_degrees_lands_in_range ... ok
[INFO] [stdout] test reticle_import::tests::no_circle_key_refuses_a_document_however_it_is_spelled_or_repeated ... ok
[INFO] [stdout] test reticle_import::tests::sfp_carries_reference_magnification_but_ffp_normalizes_it ... ok
[INFO] [stdout] test reticle_document_import::tests::too_many_bdc_entries_are_capped_during_collection ... ok
[INFO] [stdout] test reticle_import::tests::an_unreadable_centered_arc_keeps_its_mirrored_twin ... ok
[INFO] [stdout] test reticle_import::tests::null_is_read_as_absence_not_as_a_bad_value ... ok
[INFO] [stdout] test reticle_import::tests::text_binds_to_the_nearest_mark_and_far_text_is_dropped ... ok
[INFO] [stdout] test reticle_import::tests::the_report_tallies_every_dropped_type_including_unbound_text ... ok
[INFO] [stdout] test reticle_import::tests::text_ladder_auto_numbers_each_copy ... ok
[INFO] [stdout] test reynolds::tests::low_re_correction_uses_normalized_sphere_drag_curve ... ok
[INFO] [stdout] test reynolds::tests::ordinary_rifle_reynolds_range_uses_standard_table_unchanged ... ok
[INFO] [stdout] test reynolds::tests::low_re_residual_fades_to_identity_at_mach_one ... ok
[INFO] [stdout] test reticle_import::tests::the_centered_mirror_dedupe_table ... ok
[INFO] [stdout] test reynolds::tests::reynolds_correction_is_continuous_at_low_re_curve_seam ... ok
[INFO] [stdout] test reynolds::tests::reynolds_correction_is_continuous_at_standard_table_threshold ... ok
[INFO] [stdout] test reynolds::tests::reynolds_correction_is_continuous_at_mach_one ... ok
[INFO] [stdout] test reynolds::tests::test_air_viscosity ... ok
[INFO] [stdout] test reticle_import::tests::strictness_is_exactly_what_a_hold_is_built_from ... ok
[INFO] [stdout] test reynolds::tests::test_reynolds_correction ... ok
[INFO] [stdout] test reynolds::tests::test_flow_regime ... ok
[INFO] [stdout] test reynolds::tests::test_reynolds_number ... ok
[INFO] [stdout] test solve_json::request_range_tests::an_ordinary_request_still_decodes ... ok
[INFO] [stdout] test solve_json::request_range_tests::each_bounded_field_reports_its_own_path ... ok
[INFO] [stdout] test solve_v1::tests::absent_pressure_reference_matches_explicit_absolute ... ok
[INFO] [stdout] test solve_v1::tests::defaults_are_resolved_in_deterministic_request_field_order ... ok
[INFO] [stdout] test solve_json::request_range_tests::the_fuzz_reproducer_is_now_a_clean_typed_rejection ... ok
[INFO] [stdout] test solve_v1::tests::explicit_muzzle_angle_wins_over_zero_distance_when_both_are_supplied ... ok
[INFO] [stdout] test solve_v1::tests::explicit_standard_station_values_at_altitude_remain_authoritative ... ok
[INFO] [stdout] test solve_v1::tests::partial_segmented_wind_maps_units_and_warns_without_extending_coverage ... ok
[INFO] [stdout] test solve_v1::tests::enum_mappers_cover_every_engine_metadata_variant ... ok
[INFO] [stdout] test solve_v1::tests::partial_wind_coverage_includes_a_zero_beyond_the_output_range ... ok
[INFO] [stdout] test solve_json::request_range_tests::muzzle_velocity_is_deliberately_left_unbounded ... ok
[INFO] [stdout] test solve_json::request_range_tests::the_rejection_envelope_round_trips ... ok
[INFO] [stdout] test special::tests::erf_and_normal_cdf_are_monotonic_and_bounded_over_a_sweep ... ok
[INFO] [stdout] test solve_v1::tests::qnh_pressure_reference_reduces_to_station_pressure_and_is_noted ... ok
[INFO] [stdout] test solve_v1::tests::qnh_pressure_reference_with_omitted_pressure_matches_absolute_default ... ok
[INFO] [stdout] test special::tests::erf_is_odd_and_bounded ... ok
[INFO] [stdout] test special::tests::erf_matches_libm_cross_check_over_a_range ... ok
[INFO] [stdout] test special::tests::erf_matches_published_reference_values ... ok
[INFO] [stdout] test solve_v1::tests::semantic_conflicts_and_invalid_values_keep_exact_paths ... ok
[INFO] [stdout] test special::tests::ln_gamma_rejects_nonpositive_and_nonfinite ... ok
[INFO] [stdout] test special::tests::non_finite_inputs_are_well_defined ... ok
[INFO] [stdout] test special::tests::normal_cdf_hits_known_points ... ok
[INFO] [stdout] test special::tests::normal_cdf_symmetry_around_zero ... ok
[INFO] [stdout] test special::tests::normal_cdf_tail_is_real_not_flushed_to_zero ... ok
[INFO] [stdout] test spin_decay::tests::physical_spin_decay_matches_empirical_reference_rate ... ok
[INFO] [stdout] test spin_decay::tests::roll_damping_moment_has_physical_scaling ... ok
[INFO] [stdout] test spin_decay::tests::roll_damping_rejects_nonphysical_inputs ... ok
[INFO] [stdout] test spin_decay::tests::roll_damping_uses_canonical_reduced_spin_moment ... ok
[INFO] [stdout] test spin_decay::tests::spin_decay_always_opposes_spin_direction ... ok
[INFO] [stdout] test special::tests::ln_beta_is_the_gamma_combination_and_is_symmetric ... ok
[INFO] [stdout] test spin_decay::tests::test_default_impl ... ok
[INFO] [stdout] test special::tests::ln_gamma_matches_published_reference_values ... ok
[INFO] [stdout] test special::tests::ln_gamma_satisfies_the_recurrence_identity ... ok
[INFO] [stdout] test spin_decay::tests::test_different_bullet_types ... ok
[INFO] [stdout] test spin_decay::tests::test_mass_factor_effects ... ok
[INFO] [stdout] test spin_decay::tests::test_spin_damping_moment ... ok
[INFO] [stdout] test spin_decay::tests::test_spin_decay_bounds ... ok
[INFO] [stdout] test spin_decay::tests::test_spin_decay_correction_factor ... ok
[INFO] [stdout] test spin_decay::tests::test_spin_decay_parameters ... ok
[INFO] [stdout] test spin_decay::tests::test_spin_decay_rate ... ok
[INFO] [stdout] test spin_decay::tests::test_spin_decay_realistic ... ok
[INFO] [stdout] test spin_drift::tests::applied_spin_drift_uses_litz_power_law_acceleration ... ok
[INFO] [stdout] test spin_decay::tests::test_moment_of_inertia ... ok
[INFO] [stdout] test spin_decay::tests::test_velocity_factor_effects ... ok
[INFO] [stdout] test spin_drift::tests::gyroscopic_drift_is_continuous_at_legacy_velocity_threshold ... ok
[INFO] [stdout] test spin_drift::tests::gyroscopic_drift_preserves_accumulation_below_velocity_threshold ... ok
[INFO] [stdout] test spin_decay::tests::test_moment_of_inertia_shapes ... ok
[INFO] [stdout] test spin_drift::tests::magnus_spin_is_set_at_muzzle_while_spin_parameter_grows_downrange ... ok
[INFO] [stdout] test spin_drift::tests::test_applied_spin_drift_flips_with_twist ... ok
[INFO] [stdout] test spin_drift::tests::test_calculate_yaw_of_repose ... ok
[INFO] [stdout] test spin_drift::tests::test_effective_sg_from_inputs_includes_velocity_term_and_length_fallback ... ok
[INFO] [stdout] test spin_drift::tests::test_effective_sg_preserves_short_handgun_length_estimate ... ok
[INFO] [stdout] test spin_drift::tests::test_enhanced_spin_drift_calculation ... ok
[INFO] [stdout] test spin_drift::tests::test_calculate_dynamic_stability ... ok
[INFO] [stdout] test spin_drift::tests::test_calculate_spin_rate ... ok
[INFO] [stdout] test spin_drift::tests::test_miller_stability_308_168gr ... ok
[INFO] [stdout] test spin_drift::tests::test_miller_stability_invalid_inputs_zero ... ok
[INFO] [stdout] test spin_drift::tests::test_opposite_twist_directions ... ok
[INFO] [stdout] test spin_drift::tests::yaw_of_repose_increases_with_physical_spin_stability ... ok
[INFO] [stdout] test spin_drift_advanced::tests::advanced_spin_drift_has_no_fixed_jump_intercept ... ok
[INFO] [stdout] test spin_drift_advanced::tests::advanced_spin_drift_matches_canonical_litz_total ... ok
[INFO] [stdout] test spin_drift_advanced::tests::advanced_yaw_of_repose_matches_gravity_gyroscopic_scaling ... ok
[INFO] [stdout] test spin_drift_advanced::tests::litz_total_ignores_legacy_refinement_arguments ... ok
[INFO] [stdout] test spin_drift_advanced::tests::test_advanced_spin_drift ... ok
[INFO] [stdout] test spin_drift_advanced::tests::test_advanced_yaw_of_repose ... ok
[INFO] [stdout] test spin_drift::tests::test_litz_drift_helpers_sign_and_magnitude ... ok
[INFO] [stdout] test spin_drift_advanced::tests::test_ml_correction_placeholder ... ok
[INFO] [stdout] test spin_drift_advanced::tests::test_spin_drift_coefficients_bullet_types ... ok
[INFO] [stdout] test spin_drift::tests::crosswind_does_not_change_yaw_of_repose_in_either_model ... ok
[INFO] [stdout] test spin_drift_advanced::tests::test_spin_drift_direction ... ok
[INFO] [stdout] test spin_drift::tests::yaw_of_repose_has_inverse_cube_velocity_scaling ... ok
[INFO] [stdout] test spin_drift_advanced::tests::test_spin_drift_edge_cases ... ok
[INFO] [stdout] test spin_drift_advanced::tests::test_spin_drift_increases_with_time ... ok
[INFO] [stdout] test stability::tests::test_compute_spin_drift ... ok
[INFO] [stdout] test stability::tests::test_compute_spin_drift_scaling ... ok
[INFO] [stdout] test stability::tests::test_compute_spin_drift_zero_cases ... ok
[INFO] [stdout] test stability::tests::test_compute_stability_coefficient ... ok
[INFO] [stdout] test stability::tests::test_compute_stability_coefficient_atmospheric_effects ... ok
[INFO] [stdout] test stability::tests::test_compute_stability_coefficient_zero_cases ... ok
[INFO] [stdout] test stability::tests::test_default_twist_reference_bullets ... ok
[INFO] [stdout] test stability::tests::test_default_twist_yields_target_sg ... ok
[INFO] [stdout] test stability::tests::test_estimate_bullet_length_clamps_ld_ratio ... ok
[INFO] [stdout] test stability::tests::test_estimate_bullet_length_degenerate_inputs ... ok
[INFO] [stdout] test stability::tests::test_estimate_bullet_length_preserves_handgun_geometry ... ok
[INFO] [stdout] test stability::tests::test_estimate_bullet_length_reference_bullets ... ok
[INFO] [stdout] test stability::tests::test_default_twist_degenerate_inputs_fall_back ... ok
[INFO] [stdout] test stability::tests::test_print_reference_estimates ... ok
[INFO] [stdout] test stability_advanced::tests::advanced_stability_does_not_double_count_temperature_at_fixed_density ... ok
[INFO] [stdout] test stability::tests::test_heavier_bullet_needs_faster_twist ... ok
[INFO] [stdout] test stability_advanced::tests::advanced_stability_is_continuous_above_3000_fps ... ok
[INFO] [stdout] test stability_advanced::tests::atmospheric_correction_is_only_inverse_density_ratio ... ok
[INFO] [stdout] test stability_advanced::tests::courtney_miller_correction_requires_physical_tip_geometry ... ok
[INFO] [stdout] test spin_drift_advanced::tests::test_yaw_of_repose_edge_cases ... ok
[INFO] [stdout] test stability_advanced::tests::courtney_miller_correction_uses_metal_length_only_in_inertia_term ... ok
[INFO] [stdout] test stability_advanced::tests::legacy_dynamic_stability_is_neutral_without_aerodynamic_derivatives ... ok
[INFO] [stdout] test stability_advanced::tests::plastic_tip_flag_never_reduces_advanced_stability ... ok
[INFO] [stdout] test stability_advanced::tests::subsonic_velocity_uses_canonical_miller_cube_root ... ok
[INFO] [stdout] test stability_advanced::tests::test_advanced_stability ... ok
[INFO] [stdout] test stability_advanced::tests::test_atmospheric_correction ... ok
[INFO] [stdout] test stability_advanced::tests::test_boat_tail_vs_flat_base ... ok
[INFO] [stdout] test stability_advanced::tests::test_different_calibers_stability ... ok
[INFO] [stdout] test stability_advanced::tests::test_predict_stability_at_distance ... ok
[INFO] [stdout] test stability_advanced::tests::test_predict_stability_edge_cases ... ok
[INFO] [stdout] test stability_advanced::tests::test_stability_edge_cases ... ok
[INFO] [stdout] test stability_advanced::tests::test_stability_parameters_bullet_types ... ok
[INFO] [stdout] test stability_advanced::tests::test_stability_prediction ... ok
[INFO] [stdout] test stability::tests::test_resolve_twist_preserves_explicit_or_uses_miller_default ... ok
[INFO] [stdout] test stability_advanced::tests::test_trajectory_stability_status_messages ... ok
[INFO] [stdout] test stability_advanced::tests::test_velocity_correction ... ok
[INFO] [stdout] test stability_advanced::tests::velocity_correction_is_continuous_at_1400_fps ... ok
[INFO] [stdout] test terminal_plot::tests::ascii_blank_cell_is_space ... ok
[INFO] [stdout] test terminal_plot::tests::ascii_out_of_range_set_is_ignored ... ok
[INFO] [stdout] test terminal_plot::tests::ascii_two_cell_row ... ok
[INFO] [stdout] test terminal_plot::tests::braille_blank_cell_is_u2800 ... ok
[INFO] [stdout] test terminal_plot::tests::braille_multirow_multicol_layout ... ok
[INFO] [stdout] test terminal_plot::tests::braille_out_of_range_set_is_ignored_not_panicking ... ok
[INFO] [stdout] test terminal_plot::tests::braille_full_cell_is_all_eight_dots ... ok
[INFO] [stdout] test terminal_plot::tests::braille_single_dot_bottom_right ... ok
[INFO] [stdout] test terminal_plot::tests::ascii_any_dot_in_cell_renders_star ... ok
[INFO] [stdout] test stability_advanced::tests::atmospheric_correction_rejects_nonphysical_density ... ok
[INFO] [stdout] test terminal_plot::tests::render_chart_empty_series_still_frames_with_placeholder_range ... ok
[INFO] [stdout] test terminal_plot::tests::render_chart_exact_text_single_point_braille ... ok
[INFO] [stdout] test terminal_plot::tests::braille_single_dot_top_left ... ok
[INFO] [stdout] test terminal_plot::tests::render_chart_exact_text_two_point_diagonal_ascii ... ok
[INFO] [stdout] test terminal_plot::tests::render_chart_frame_dimensions_and_borders ... ok
[INFO] [stdout] test terminal_plot::tests::braille_two_cell_row_addresses_columns_independently ... ok
[INFO] [stdout] test terminal_plot::tests::render_chart_ignores_non_finite_points ... ok
[INFO] [stdout] test terminal_plot::tests::render_chart_long_label_is_truncated_not_panicking ... ok
[INFO] [stdout] test request_roundtrip::tests::roundtrip_preserves_the_wind_shear_model ... ok
[INFO] [stdout] test terminal_plot::tests::render_chart_multiple_series_labels_joined_in_border ... ok
[INFO] [stdout] test perturbation::derive::tests::bisect_finds_the_crossing ... ok
[INFO] [stdout] test tolerance::tests::a_categorical_axis_is_recorded_unavailable_not_silently_dropped_or_hard_failed ... ok
[INFO] [stdout] test tolerance::tests::a_degenerate_target_is_flagged_nominal_outside_not_confused_with_unbounded ... ok
[INFO] [stdout] test cli_api::monte_carlo_seeded_tests::legacy_seeded_estimates_are_pinned_bit_for_bit ... ok
[INFO] [stdout] test explain::tests::the_decomposition_is_antisymmetric ... ok
[INFO] [stdout] test tolerance::tests::a_genuine_observation_error_propagates_not_recorded_as_unavailable ... ok
[INFO] [stdout] test tolerance::tests::a_missing_domain_is_reported_as_invalid_not_defaulted ... ok
[INFO] [stdout] test tolerance::tests::altitude_under_qnh_is_recorded_unavailable_not_hard_failed ... ok
[INFO] [stdout] test tolerance::tests::a_wind_axis_under_segmented_wind_is_recorded_unavailable ... ok
[INFO] [stdout] test tolerance::tests::a_found_bound_sits_on_the_target_boundary_verified_independently_of_with_axis ... ok
[INFO] [stdout] test tolerance::tests::a_narrow_domain_gets_real_bisection_not_an_immediate_midpoint_return ... ok
[INFO] [stdout] test tolerance::tests::an_out_of_range_query_is_rejected_directly ... ok
[INFO] [stdout] test tolerance::tests::an_axis_that_never_exits_is_flagged_not_bounded ... ok
[INFO] [stdout] test tolerance::tests::an_inverted_domain_is_rejected ... ok
[INFO] [stdout] test tolerance::tests::bisection_tolerance_scales_with_domain_width_not_a_flat_constant ... ok
[INFO] [stdout] test tolerance::tests::limiting_boundary_uses_the_correct_axis_for_each_deviation_not_swapped ... ok
[INFO] [stdout] test ffi::tests::shear_moves_the_monte_carlo_result_it_used_to_leave_untouched ... ok
[INFO] [stdout] test mc_stats::tests::cs_coverage_survives_optional_stopping ... ok
[INFO] [stdout] test tolerance::tests::drop_dominant_axis_reports_top_or_bottom_not_left_or_right ... ok
[INFO] [stdout] test tolerance::tests::assumptions_cover_all_four_correctness_requirements ... ok
[INFO] [stdout] test tolerance::tests::a_circle_target_always_reports_radial ... ok
[INFO] [stdout] test tolerance::tests::bisection_bounds_match_the_vacuum_analytic_crossing ... ok
[INFO] [stdout] test tolerance::tests::nominal_at_the_lower_domain_edge_is_rejected ... ok
[INFO] [stdout] test tolerance::tests::nominal_at_the_upper_domain_edge_is_rejected ... ok
[INFO] [stdout] test tolerance::tests::nominal_outside_the_configured_domain_is_rejected ... ok
[INFO] [stdout] test trajectory_integration::tests::already_at_or_past_target_returns_initial_state_without_advancing ... ok
[INFO] [stdout] test trajectory_integration::tests::derivative_inputs_preserve_initial_velocity_as_muzzle_speed ... ok
[INFO] [stdout] test trajectory_integration::tests::integrated_magnus_retains_nonzero_launch_spin ... ok
[INFO] [stdout] test trajectory_integration::tests::integration_normalizes_wind_segments_by_distance ... ok
[INFO] [stdout] test trajectory_integration::tests::rk45_error_norm_scales_components_independently ... ok
[INFO] [stdout] test trajectory_integration::tests::rk45_retries_rejected_wind_boundary_step ... ok
[INFO] [stdout] test tolerance::tests::the_report_refuses_to_imply_probability ... ok
[INFO] [stdout] test trajectory_integration::tests::rk4_target_crossing_interpolates_complete_state_and_time ... ok
[INFO] [stdout] test trajectory_integration::tests::rk45_target_crossing_uses_the_accepted_state_and_time ... ok
[INFO] [stdout] test trajectory_integration::tests::target_crossing_helper_interpolates_every_component ... ok
[INFO] [stdout] test trajectory_integration::tests::test_integrate_trajectory_basic ... ok
[INFO] [stdout] test trajectory_integration::tests::test_left_vs_right_twist ... ok
[INFO] [stdout] test trajectory_integration::tests::test_ground_impact_detection ... ok
[INFO] [stdout] test tolerance::tests::a_larger_target_never_shrinks_a_bound ... ok
[INFO] [stdout] test trajectory_integration::tests::test_solve_trajectory_rust_output_format ... ok
[INFO] [stdout] test trajectory_integration::tests::test_target_distance_reached ... ok
[INFO] [stdout] test trajectory_integration::tests::test_wind_affects_trajectory ... ok
[INFO] [stdout] test tolerance::tests::schema_version_matches_the_declared_constant ... ok
[INFO] [stdout] test trajectory_integration::tests::try_integrate_trajectory_rejects_malformed_segments_before_any_points ... ok
[INFO] [stdout] test trajectory_integration::tests::try_integrate_trajectory_matches_unchecked_on_valid_input ... ok
[INFO] [stdout] test trajectory_integration::tests::try_solve_trajectory_rust_rejects_malformed_segments ... ok
[INFO] [stdout] test trajectory_observation::tests::bracket_param_degenerate_dx_reuses_the_lower_point ... ok
[INFO] [stdout] test trajectory_observation::tests::bracket_param_interpolates_an_interior_point ... ok
[INFO] [stdout] test trajectory_observation::tests::bracket_param_is_below_or_above_the_key_span ... ok
[INFO] [stdout] test trajectory_observation::tests::bracket_param_is_degenerate_below_two_keys ... ok
[INFO] [stdout] test trajectory_observation::tests::bracket_param_of_nan_x_returns_inside_lo_zero_with_nan_t ... ok
[INFO] [stdout] test trajectory_observation::tests::bracket_param_pins_exact_endpoint_hits ... ok
[INFO] [stdout] test trajectory_observation::tests::enforces_caller_and_engine_sample_caps_before_allocation ... ok
[INFO] [stdout] test trajectory_observation::tests::interpolates_full_state_with_documented_drop_and_windage_signs ... ok
[INFO] [stdout] test trajectory_observation::tests::interval_ratio_underflow_still_includes_both_endpoints ... ok
[INFO] [stdout] test trajectory_observation::tests::preserves_exact_endpoints_and_marks_only_the_terminal_endpoint ... ok
[INFO] [stdout] test trajectory_observation::tests::regular_grid_appends_an_off_grid_terminal_and_deduplicates_an_on_grid_terminal ... ok
[INFO] [stdout] test trajectory_observation::tests::rejects_duplicate_or_reversing_distances ... ok
[INFO] [stdout] test trajectory_observation::tests::rejects_huge_or_unrepresentable_grids_in_bounded_work ... ok
[INFO] [stdout] test trajectory_observation::tests::rejects_non_finite_state_metadata_and_derived_values ... ok
[INFO] [stdout] test trajectory_observation::tests::rejects_out_of_range_and_non_finite_queries_instead_of_clamping ... ok
[INFO] [stdout] test trajectory_sampling::tests::mba1299_projected_sample_count_checks_exact_limit_and_overflow ... ok
[INFO] [stdout] test tolerance::tests::the_report_round_trips_through_json ... ok
[INFO] [stdout] test trajectory_integration::tests::test_rk4_vs_rk45_consistency ... ok
[INFO] [stdout] test trajectory_sampling::tests::sampled_energy_is_derived_from_interpolated_speed ... ok
[INFO] [stdout] test trajectory_sampling::tests::test_detect_zero_crossings ... ok
[INFO] [stdout] test trajectory_sampling::tests::test_find_closest_sample_index ... ok
[INFO] [stdout] test trajectory_sampling::tests::test_interpolate ... ok
[INFO] [stdout] test trajectory_sampling::tests::test_sample_trajectory_basic ... ok
[INFO] [stdout] test trajectory_integration::tests::try_solve_trajectory_rust_succeeds_on_valid_segments ... ok
[INFO] [stdout] test transonic_drag::tests::test_critical_mach ... ok
[INFO] [stdout] test transonic_drag::tests::prandtl_glauert_follows_the_curve_until_the_cap ... ok
[INFO] [stdout] test transonic_drag::tests::test_mba949_resolve_projectile_shape ... ok
[INFO] [stdout] test transonic_drag::tests::test_projectile_shape_estimation ... ok
[INFO] [stdout] test transonic_drag::tests::test_transonic_drag_rise ... ok
[INFO] [stdout] test transonic_drag::tests::transonic_drag_rise_is_continuous_at_sonic_and_peak ... ok
[INFO] [stdout] test transonic_drag::tests::wave_drag_is_bounded_and_continuous_at_sonic ... ok
[INFO] [stdout] test truing::chrono_correction_tests::convergence_across_the_3_to_25_m_band ... ok
[INFO] [stdout] test truing::chrono_correction_tests::drag_model_is_actually_consulted_g1_vs_g7_diverge ... ok
[INFO] [stdout] test truing::chrono_correction_tests::hand_computed_pin_168gr_308_bc475_g7_15ft ... ok
[INFO] [stdout] test transonic_drag::tests::test_prandtl_glauert ... ok
[INFO] [stdout] test truing::chrono_correction_tests::out_of_band_distances_are_rejected ... ok
[INFO] [stdout] test truing::chrono_correction_tests::smoke_2680fps_at_15ft_corrects_upward_by_a_plausible_margin ... ok
[INFO] [stdout] test truing::chrono_correction_tests::zero_distance_is_rejected_by_the_low_level_solver ... ok
[INFO] [stdout] test truing::chrono_correction_tests::invalid_measured_velocity_is_rejected ... ok
[INFO] [stdout] test truing::window_helper_tests::dsf_window_start_is_90_percent_of_the_0_9_crossing ... ok
[INFO] [stdout] test truing::window_helper_tests::dsf_window_start_exact_arithmetic_at_a_representative_distance ... ok
[INFO] [stdout] test truing::window_helper_tests::dsf_window_start_passes_through_none ... ok
[INFO] [stdout] test truing::window_helper_tests::mv_calibration_window_is_90_to_100_percent_of_the_1_2_crossing ... ok
[INFO] [stdout] test truing::window_helper_tests::mv_calibration_window_passes_through_none ... ok
[INFO] [stdout] test truing::window_helper_tests::scale_report_dial_values_scales_drops_and_rms_only ... ok
[INFO] [stdout] test truing_dsf::tests::apply_dsf_leaves_sampled_points_none_when_absent ... ok
[INFO] [stdout] test truing_dsf::tests::apply_dsf_scales_only_drop_leaving_everything_else_byte_identical ... ok
[INFO] [stdout] test truing_dsf::tests::apply_dsf_with_empty_table_leaves_drop_unchanged ... ok
[INFO] [stdout] test truing_dsf::tests::factor_at_empty_table_is_always_identity ... ok
[INFO] [stdout] test truing_dsf::tests::factor_at_flat_clamp_below_lowest ... ok
[INFO] [stdout] test truing_dsf::tests::factor_at_identity_at_and_above_ceiling ... ok
[INFO] [stdout] test truing_dsf::tests::factor_at_interpolates_between_highest_key_and_anchor ... ok
[INFO] [stdout] test truing_dsf::tests::factor_at_linear_between_two_keys ... ok
[INFO] [stdout] test truing_dsf::tests::factor_at_single_point_interpolates_to_the_implicit_anchor ... ok
[INFO] [stdout] test truing_dsf::tests::from_points_rejects_dsf_out_of_range ... ok
[INFO] [stdout] test truing_dsf::tests::from_points_rejects_mach_at_or_above_ceiling ... ok
[INFO] [stdout] test truing_dsf::tests::from_points_rejects_more_than_six_points ... ok
[INFO] [stdout] test truing_dsf::tests::from_points_rejects_non_positive_mach ... ok
[INFO] [stdout] test truing_dsf::tests::from_points_sorts_ascending_by_mach ... ok
[INFO] [stdout] test truing_dsf::tests::upsert_appends_when_no_existing_point_is_within_tolerance ... ok
[INFO] [stdout] test truing_dsf::tests::upsert_boundary_just_outside_tolerance_appends ... ok
[INFO] [stdout] test truing_dsf::tests::upsert_errors_at_seventh_distinct_point_naming_the_cap ... ok
[INFO] [stdout] test truing_dsf::tests::upsert_rejects_invalid_point_without_mutating_table ... ok
[INFO] [stdout] test truing_dsf::tests::upsert_replaces_within_tolerance ... ok
[INFO] [stdout] test truing_plan::tests::exhaustive_search_honors_count_and_separation ... ok
[INFO] [stdout] test truing_plan::tests::information_metrics_distinguish_collinear_rows ... ok
[INFO] [stdout] test truing_plan::tests::interval_discretization_stays_on_grid ... ok
[INFO] [stdout] test truing::window_helper_tests::mv_calibration_window_exact_arithmetic_at_a_representative_distance ... ok
[INFO] [stdout] test truing_plan::tests::large_space_uses_deterministic_feasible_greedy_exchange ... ok
[INFO] [stdout] test truing_service::tests::dsf_derives_a_point_and_refuses_a_supersonic_observation ... ok
[INFO] [stdout] test trajectory_sampling::tests::mba1299_public_sampler_rejects_oversized_grids_before_allocation ... ok
[INFO] [stdout] test truing_service::tests::dsf_rejects_invalid_range_and_observed_drop ... ok
[INFO] [stdout] test truing_service::tests::service_reproduces_the_cli_imperial_and_metric_ratios ... ok
[INFO] [stdout] test truing_service::tests::tall_target_matches_the_cli_arithmetic_and_rejects_clicks ... ok
[INFO] [stdout] test truing_service::tests::dsf_derive_from_solve_matches_derive_dsf_point_v1 ... ok
[INFO] [stdout] test truing_uncertainty::tests::request_deserializes_from_the_wire_and_rejects_unknown_fields ... ok
[INFO] [stdout] test truing_service::tests::dsf_out_of_range_and_degenerate_drop_errors ... ok
[INFO] [stdout] test truing_wind::tests::identical_observations_without_sigma_report_zero_spread_honestly ... ok
[INFO] [stdout] test truing_wind::tests::interval_uses_scatter_when_no_sigmas_supplied ... ok
[INFO] [stdout] test truing_wind::tests::an_unreachable_miss_is_rejected_with_the_solvable_band ... ok
[INFO] [stdout] test trajectory_integration::tests::test_mba954_ground_threshold_honored ... ok
[INFO] [stdout] test truing_wind::tests::optimistic_supplied_sigmas_lose_to_observed_scatter ... ok
[INFO] [stdout] test truing_wind::tests::parse_wind_observation_units_and_errors ... ok
[INFO] [stdout] test trajectory_sampling::tests::mba1299_public_sampler_accepts_the_exact_cap ... ok
[INFO] [stdout] test truing_wind::tests::coriolis_is_subtracted_when_latitude_and_azimuth_are_supplied ... ok
[INFO] [stdout] test truing_wind::tests::json_value_nulls_absent_optional_fields ... ok
[INFO] [stdout] test truing_wind::tests::pure_spin_drift_solves_to_zero_wind ... ok
[INFO] [stdout] test truing_wind::tests::single_observation_with_sigma_still_gets_an_interval ... ok
[INFO] [stdout] test truing_wind::tests::single_observation_without_sigma_is_explained_not_omitted ... ok
[INFO] [stdout] test truing_wind::tests::t_multiplier_table_matches_published_values ... ok
[INFO] [stdout] test truing_wind::tests::tight_scatter_lets_supplied_sigmas_win ... ok
[INFO] [stdout] test tolerance::tests::windage_dominant_axis_reports_left_or_right_not_top_or_bottom ... ok
[INFO] [stdout] test truing_wind::tests::uncertainty_is_always_present_in_the_serialized_report ... ok
[INFO] [stdout] test truing_wind::tests::validation_rejects_degenerate_requests ... ok
[INFO] [stdout] test truing_wind::tests::request_deserializes_and_report_serializes ... ok
[INFO] [stdout] test tolerance::tests::a_larger_circle_never_shrinks_a_bound_across_a_size_sweep ... ok
[INFO] [stdout] test wez::wez_tests::attribution_shares_for_a_fixed_configuration ... ok
[INFO] [stdout] test wez::wez_tests::attribution_unavailable_with_a_custom_drag_table ... ok
[INFO] [stdout] test truing_wind::tests::sigmas_are_all_or_none_and_drive_inverse_variance_weighting ... ok
[INFO] [stdout] test wez::wez_tests::every_engine_drag_model_maps_to_its_exact_wire_variant ... ok
[INFO] [stdout] test truing_wind::tests::miss_right_solves_positive_and_miss_left_solves_negative ... ok
[INFO] [stdout] test wez::wez_tests::gi_attribution_is_available ... ok
[INFO] [stdout] test wez::wez_tests::g5_attribution_is_available ... ok
[INFO] [stdout] test wez::wez_tests::g2_attribution_is_available ... ok
[INFO] [stdout] test wez::wez_tests::parse_target_size_accepts_a_single_radius ... ok
[INFO] [stdout] test wez::wez_tests::parse_target_size_accepts_a_wxh_rectangle ... ok
[INFO] [stdout] test wez::wez_tests::parse_target_size_rejects_garbage ... ok
[INFO] [stdout] test wez::wez_tests::gs_attribution_is_available ... ok
[INFO] [stdout] test wez::wez_tests::resolved_request_matches_wez_solve_target_plane_baseline ... ok
[INFO] [stdout] test wez::wez_tests::variance_shares_are_all_zero_with_no_dispersion_sources ... ok
[INFO] [stdout] test wez::wez_tests::ra4_attribution_is_available ... ok
[INFO] [stdout] test wez::wez_tests::wind_call_and_ballistic_wind_shares_are_exactly_proportional_to_sigma_squared ... ok
[INFO] [stdout] test wez::wez_tests::wind_call_bucket_dominates_when_it_is_the_only_active_source ... ok
[INFO] [stdout] test wez::wez_tests::variance_shares_sum_to_one_when_multiple_sources_are_active ... ok
[INFO] [stdout] test wind::tests::calc_vec_passes_through_segment_vertical_unscaled ... ok
[INFO] [stdout] test wind::tests::calc_vec_zero_vertical_segment_keeps_zero_y ... ok
[INFO] [stdout] test wind::tests::clock_positions_map_to_wind_from_degrees ... ok
[INFO] [stdout] test wind::tests::clock_positions_reject_bad_hours_and_minutes_with_helpful_messages ... ok
[INFO] [stdout] test wind::tests::infallible_new_still_defers_the_same_error ... ok
[INFO] [stdout] test wind::tests::muzzle_crosswind_distinguishes_an_explicit_zero_segment ... ok
[INFO] [stdout] test wind::tests::muzzle_crosswind_uses_the_sorted_muzzle_segment_and_wind_from_sign ... ok
[INFO] [stdout] test wind::tests::segment_angle_accepts_colon_free_clock_forms_only ... ok
[INFO] [stdout] test wind::tests::segment_sort_is_stable_and_places_nan_endpoints_last ... ok
[INFO] [stdout] test wind::tests::test_parse_wind_segment_str_units ... ok
[INFO] [stdout] test wind::tests::test_parse_wind_segment_str_vertical_field ... ok
[INFO] [stdout] test wind::tests::test_wind_conversion ... ok
[INFO] [stdout] test wind::tests::test_wind_sock_boundary_is_upper_exclusive ... ok
[INFO] [stdout] test wind::tests::test_wind_sock_empty ... ok
[INFO] [stdout] test wind::tests::test_wind_sock_multiple_segments ... ok
[INFO] [stdout] test wind::tests::test_wind_sock_single_segment ... ok
[INFO] [stdout] test wind::tests::try_new_accepts_valid_and_empty_segments ... ok
[INFO] [stdout] test wind::tests::try_new_error_index_is_the_callers_presort_index ... ok
[INFO] [stdout] test wind::tests::try_new_rejects_each_field_with_typed_index_field_rule ... ok
[INFO] [stdout] test wind::tests::wind_segment_error_display_matches_legacy_strings ... ok
[INFO] [stdout] test wind_scenarios::tests::a_single_scenario_gives_a_zero_width_corridor ... ok
[INFO] [stdout] test wind_scenarios::tests::caps_and_malformed_input_are_structured_errors_before_any_solve ... ok
[INFO] [stdout] test truing_wind::tests::windage_cf_does_not_alter_the_wind_solve ... ok
[INFO] [stdout] test wind_scenarios::tests::formatter_renders_both_shapes_and_json_is_the_wire_schema ... ok
[INFO] [stdout] test wind_scenarios::tests::corridor_contains_every_scenario_at_every_range ... ok
[INFO] [stdout] test wind_scenarios::tests::minimum_enclosing_circle_is_exact_and_order_independent ... ok
[INFO] [stdout] test wind_scenarios::tests::parsing_enforces_the_version_and_the_scenario_cap_before_segments ... ok
[INFO] [stdout] test truing_wind::tests::round_trip_recovers_a_known_crosswind_at_three_ranges ... ok
[INFO] [stdout] test wind_scenarios::tests::reordering_scenarios_changes_nothing ... ok
[INFO] [stdout] test wind_scenarios::tests::target_spec_parsing ... ok
[INFO] [stdout] test wind_shear::fix_validation_tests::test_get_wind_at_position_flat_fire_full_crosswind ... ok
[INFO] [stdout] test wind_shear::tests::apply_boundary_layer_shear_scales_horizontal_preserves_vertical ... ok
[INFO] [stdout] test truing_wind::tests::twist_hand_changes_the_solved_wind ... ok
[INFO] [stdout] test wind_shear::tests::default_ekman_profile_veers_with_height ... ok
[INFO] [stdout] test wind_shear::tests::test_boundary_layer_speed_ratio_flat_fire_full_wind ... ok
[INFO] [stdout] test wind_shear::tests::test_boundary_layer_speed_ratio_increases_aloft ... ok
[INFO] [stdout] test wind_shear::tests::test_logarithmic_profile ... ok
[INFO] [stdout] test wind_shear::tests::test_power_law_profile ... ok
[INFO] [stdout] test wind_shear::tests::test_wind_layer ... ok
[INFO] [stdout] test wind_shear::tests::test_windsock_flat_fire_preserves_operative_wind ... ok
[INFO] [stdout] test wind_shear::tests::apply_boundary_layer_shear_zero_vertical_stays_zero ... ok
[INFO] [stdout] test wind_shear::tests::test_windsock_shear_is_independent_of_site_elevation ... ok
[INFO] [stdout] test wind_scenarios::tests::minimax_worst_case_never_exceeds_the_nominal_holds ... ok
[INFO] [stdout] test truing_wind::tests::wind_call_factor_is_solved_over_called_and_keeps_its_sign ... ok
[INFO] [stdout] test wind_scenarios::tests::target_fit_is_correct_for_both_shapes_including_boundary_contact ... ok
[INFO] [stdout] test wez::wez_tests::zero_uncertainty_is_a_step_function_in_range ... ok
[INFO] [stdout] test tolerance::tests::a_larger_target_never_shrinks_a_bound_across_a_size_sweep ... ok
[INFO] [stdout] test ffi::tests::ffi_monte_carlo_uses_the_reduced_pressure_not_the_raw_qnh ... ok
[INFO] [stdout] test cli_api::monte_carlo_seeded_tests::adaptive_stops_between_the_floor_and_the_ceiling ... ok
[INFO] [stdout] test cli_api::monte_carlo_seeded_tests::adaptive_caps_at_max_samples_on_an_impossible_target has been running for over 60 seconds
[INFO] [stdout] test cli_api::monte_carlo_seeded_tests::adaptive_runs_a_truncated_final_batch_up_to_max_samples ... ok
[INFO] [stdout] test cli_api::monte_carlo_seeded_tests::adaptive_is_deterministic_for_a_seed has been running for over 60 seconds
[INFO] [stdout] test cli_api::monte_carlo_seeded_tests::adaptive_stops_at_target_half_width_on_an_easy_case has been running for over 60 seconds
[INFO] [stdout] test tolerance::tests::target_distance_axis_shows_no_measurable_effect_not_a_generic_unbounded_claim ... ok
[INFO] [stdout] test tolerance::tests::multiple_axes_are_each_independently_computed_and_correctly_tagged ... ok
[INFO] [stdout] test wez::wez_tests::p_hit_is_monotone_non_increasing_with_range ... ok
[INFO] [stdout] test cli_api::monte_carlo_seeded_tests::adaptive_stops_at_target_half_width_on_an_easy_case ... ok
[INFO] [stdout] test cli_api::monte_carlo_seeded_tests::adaptive_is_deterministic_for_a_seed ... ok
[INFO] [stdout] test cli_api::monte_carlo_seeded_tests::adaptive_caps_at_max_samples_on_an_impossible_target ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 1273 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 122.76s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/build/ballistics-engine/227c9711b822d5b8/out/ballistics-227c9711b822d5b8)
[INFO] [stdout] 
[INFO] [stdout] running 154 tests
[INFO] [stdout] test a7p_import_mapping_tests::missing_bc_rows_is_an_error ... ok
[INFO] [stdout] test adjustment_unit_noop_tests::warns_for_a_non_default_unit_with_no_ring_and_no_pdf ... ok
[INFO] [stdout] test adaptive_card_row_tests::format_adaptive_card_range_matches_the_pdf_dope_cards_pinned_examples ... ok
[INFO] [stdout] test a7p_import_mapping_tests::zero_click_converts_click_counts_with_correct_signs ... ok
[INFO] [stdout] test a7p_import_mapping_tests::custom_bc_type_rejects_a_degenerate_curve ... ok
[INFO] [stdout] test a7p_import_mapping_tests::name_override_is_applied ... ok
[INFO] [stdout] test a7p_import_mapping_tests::w_pitch_is_reported_unmapped_with_the_reason_it_is_out_of_scope ... ok
[INFO] [stdout] test adjustment_unit_tests::explicit_windage_flag_overrides_elevation_fallback ... ok
[INFO] [stdout] test adjustment_unit_tests::moa_is_3438_thousandths_per_radian_ratio ... ok
[INFO] [stdout] test adjustment_unit_tests::short_range_returns_zero ... ok
[INFO] [stdout] test adaptive_card_row_tests::adaptive_card_row_line_places_each_sentinel_in_its_own_column ... ok
[INFO] [stdout] test a7p_import_mapping_tests::g7_maps_and_report_renders ... ok
[INFO] [stdout] test adjustment_unit_noop_tests::silent_for_the_default_unit ... ok
[INFO] [stdout] test bc_segment_parse_tests::converts_metric_velocity_to_fps ... ok
[INFO] [stdout] test adjustment_unit_tests::default_trajectory_header_is_stable ... ok
[INFO] [stdout] test adjustment_unit_tests::mil_conversion_matches_geometry ... ok
[INFO] [stdout] test adjustment_unit_tests::single_axis_click_value_falls_back_windage_then_elevation ... ok
[INFO] [stdout] test bc_segment_parse_tests::parses_valid_imperial_pair_as_fps ... ok
[INFO] [stdout] test adjustment_unit_tests::smoa_iphy_conversion_is_inches_per_hundred_yards ... ok
[INFO] [stdout] test a7p_import_mapping_tests::custom_bc_type_imports_a_drag_curve ... ok
[INFO] [stdout] test adjustment_unit_noop_tests::silent_when_the_ring_column_or_the_dope_card_consumes_the_unit ... ok
[INFO] [stdout] test adjustment_unit_tests::windage_unit_defaults_to_elevation_and_can_diverge ... ok
[INFO] [stdout] test bc_segment_parse_tests::rejects_vmin_not_less_than_vmax ... ok
[INFO] [stdout] test bc_segment_parse_tests::rejects_nonpositive_bc_and_nonnumeric ... ok
[INFO] [stdout] test bc_segment_parse_tests::rejects_wrong_field_count ... ok
[INFO] [stdout] test bc_segment_parse_tests::resolved_bc_schedule_preserves_explicit_precedence_and_estimator_fallback ... ok
[INFO] [stdout] test card_row_sentinel_tests::range_table_row_line_places_each_sentinel_in_its_own_column ... ok
[INFO] [stdout] test card_row_sentinel_tests::come_up_row_line_places_each_sentinel_in_its_own_column ... ok
[INFO] [stdout] test cd_scale_tests::range_warning_fires_outside_the_typical_truing_band ... ok
[INFO] [stdout] test cd_scale_tests::range_warning_is_none_inside_the_typical_truing_band ... ok
[INFO] [stdout] test a7p_import_mapping_tests::maps_g1_profile_to_metric_profiledata ... ok
[INFO] [stdout] test card_row_sentinel_tests::come_up_row_line_places_each_sentinel_in_its_own_column_when_clicks ... ok
[INFO] [stdout] test cd_scale_tests::resolve_errors_naming_the_pairing_requirement_without_a_table ... ok
[INFO] [stdout] test decision_support_axis_tests::axis_kebab_names_round_trip_every_member_of_all ... ok
[INFO] [stdout] test cd_scale_tests::resolve_omits_the_bc_adjustment_suggestion_on_a_surface_without_it ... ok
[INFO] [stdout] test decision_support_axis_tests::domain_arg_rejects_malformed_tokens ... ok
[INFO] [stdout] test decision_support_axis_tests::every_axis_kebab_name_is_unique ... ok
[INFO] [stdout] test decision_support_axis_tests::sigma_arg_parses_axis_and_value ... ok
[INFO] [stdout] test cd_scale_tests::resolve_defaults_to_the_neutral_scale_when_omitted ... ok
[INFO] [stdout] test decision_support_render_tests::error_budget_table_renders_ranked_sources_gain_and_unavailable_sources ... ok
[INFO] [stdout] test cd_scale_tests::resolve_passes_through_the_scale_when_a_table_is_present ... ok
[INFO] [stdout] test decision_support_axis_tests::domain_arg_parses_axis_and_bounds ... ok
[INFO] [stdout] test decision_support_render_tests::error_budget_table_omits_p_hit_and_gain_without_a_target ... ok
[INFO] [stdout] test decision_support_axis_tests::unknown_axis_lists_every_accepted_name ... ok
[INFO] [stdout] test density_altitude_round_trip_tests::density_altitude_round_trips_through_the_dope_card_formula_default_temperature ... ok
[INFO] [stdout] test density_altitude_round_trip_tests::density_altitude_round_trips_through_the_dope_card_formula_explicit_temperature ... ok
[INFO] [stdout] test decision_support_render_tests::table_distinguishes_all_five_axis_situations ... ok
[INFO] [stdout] test dope_card_row_tests::trajectory_built_rows_carry_integer_valued_ranges ... ok
[INFO] [stdout] test decision_support_axis_tests::sigma_arg_rejects_malformed_unknown_or_invalid_tokens ... ok
[INFO] [stdout] test drag_model_arg_warning_tests::aux_g1_coercion_warning_only_flags_families_other_than_g1_g7 ... ok
[INFO] [stdout] test dsf_cli_tests::beyond_90pct_warning_text_is_exact ... ok
[INFO] [stdout] test drg_extension_dispatch_tests::drg_file_with_csv_ish_garbage_errors_naming_the_line_number ... ok
[INFO] [stdout] test drg_extension_dispatch_tests::no_extension_still_uses_the_csv_path ... ok
[INFO] [stdout] test dsf_cli_tests::beyond_90pct_warning_text_uses_metric_unit_label ... ok
[INFO] [stdout] test drg_extension_dispatch_tests::drg_extension_is_case_insensitive ... ok
[INFO] [stdout] test drag_model_arg_warning_tests::parse_drag_model_arg_for_truing_still_constrains_to_g1_or_g7 ... ok
[INFO] [stdout] test drag_model_arg_warning_tests::drag_model_arg_warning_only_flags_truly_unknown_strings ... ok
[INFO] [stdout] test drag_model_arg_warning_tests::parse_drag_model_arg_resolves_the_full_family ... ok
[INFO] [stdout] test drag_model_arg_warning_tests::warn_aux_g1_coercion_returns_the_bc_type_string_the_estimator_accepts ... ok
[INFO] [stdout] test drg_extension_dispatch_tests::csv_extension_behavior_is_unchanged ... ok
[INFO] [stdout] test drg_extension_dispatch_tests::drg_extension_dispatches_to_the_drg_parser ... ok
[INFO] [stdout] test dsf_cli_tests::interpolates_linearly_between_bracketing_points ... ok
[INFO] [stdout] test dsf_cli_tests::interpolation_returns_none_past_the_last_point ... ok
[INFO] [stdout] test dsf_cli_tests::mach_1_crossing_range_m_interpolates_the_downward_crossing ... ok
[INFO] [stdout] test dsf_cli_tests::mach_1_crossing_range_m_none_when_trajectory_never_goes_subsonic ... ok
[INFO] [stdout] test dsf_cli_tests::parse_observed_drop_accepts_all_three_suffixes ... ok
[INFO] [stdout] test dsf_cli_tests::parse_observed_drop_rejects_garbage_number ... ok
[INFO] [stdout] test dsf_cli_tests::table_summary_formats_count_and_mach_span ... ok
[INFO] [stdout] test dsf_cli_tests::transonic_coverage_gate_checks_highest_point_only ... ok
[INFO] [stdout] test adjustment_unit_noop_tests::both_axes_inert_names_both_flags ... ok
[INFO] [stdout] test dsf_cli_tests::mach_1_crossing_range_m_none_for_degenerate_station_speed_of_sound ... ok
[INFO] [stdout] test dsf_cli_tests::observation_beyond_90pct_boundary ... ok
[INFO] [stdout] test dsf_cli_tests::parse_observed_drop_rejects_non_finite ... ok
[INFO] [stdout] test dsf_cli_tests::interpolation_at_or_before_the_first_point_returns_its_own_values ... ok
[INFO] [stdout] test mcp_command::tests::engine_info_rejects_unexpected_arguments ... ok
[INFO] [stdout] test mcp_command::tests::fractional_numeric_id_is_invalid_request ... ok
[INFO] [stdout] test mcp_command::tests::initialize_echoes_the_requested_protocol_version ... ok
[INFO] [stdout] test mcp_command::tests::initialize_without_a_protocol_version_falls_back ... ok
[INFO] [stdout] test adjustment_unit_tests::windage_unit_clicks_requires_elevation_clicks ... ok
[INFO] [stdout] test dsf_cli_tests::parse_observed_drop_rejects_missing_suffix ... ok
[INFO] [stdout] test dsf_cli_tests::parse_observed_drop_is_case_insensitive_and_trims_whitespace ... ok
[INFO] [stdout] test dsf_cli_tests::supersonic_error_text_is_exact ... ok
[INFO] [stdout] test dsf_cli_tests::transonic_gap_warning_text_is_exact ... ok
[INFO] [stdout] test mcp_command::tests::non_object_message_is_an_invalid_request ... ok
[INFO] [stdout] test dsf_cli_tests::warrants_90pct_warning_requires_both_gates ... ok
[INFO] [stdout] test mcp_command::effect_schema_parity::mcp_effect_schema_matches_the_wire ... ok
[INFO] [stdout] test mcp_command::tests::engine_info_rejects_non_object_arguments ... ok
[INFO] [stdout] test adjustment_unit_tests::windage_click_defaults_to_elevation ... ok
[INFO] [stdout] test adjustment_unit_noop_tests::explicit_windage_unit_alone_warns_without_pdf_and_is_silent_with_it ... ok
[INFO] [stdout] test adaptive_card_row_tests::format_adaptive_card_range_does_not_silently_round_a_real_anchor ... ok
[INFO] [stdout] test mcp_command::tests::unknown_method_is_method_not_found ... ok
[INFO] [stdout] test mcp_command::tests::tools_call_engine_info_reports_version_and_drag_models ... ok
[INFO] [stdout] test adjustment_unit_tests::clicks_unit_requires_elevation_graduation ... ok
[INFO] [stdout] test mcp_command::tests::tools_call_solve_with_malformed_arguments_is_invalid_params ... ok
[INFO] [stdout] test profile_bc_segments_and_drag_curve_consumption_tests::bands_are_gapless_and_non_overlapping_for_two_rows ... ok
[INFO] [stdout] test mcp_command::tests::well_formed_notification_gets_no_response ... ok
[INFO] [stdout] test mcp_command::tests::integral_valued_float_id_stays_accepted ... ok
[INFO] [stdout] test mcp_command::tests::ping_returns_an_empty_result ... ok
[INFO] [stdout] test mcp_command::tests::read_bounded_line_accepts_a_final_unterminated_line ... ok
[INFO] [stdout] test mcp_command::tests::wrong_jsonrpc_version_is_an_invalid_request ... ok
[INFO] [stdout] test mcp_command::tests::malformed_json_is_a_parse_error ... ok
[INFO] [stdout] test profile_bc_segments_and_drag_curve_consumption_tests::drag_table_from_profile_builds_a_valid_table ... ok
[INFO] [stdout] test profile_bc_segments_and_drag_curve_consumption_tests::drag_table_from_profile_rejects_degenerate_input ... ok
[INFO] [stdout] test mcp_command::tests::tools_call_unknown_tool_is_invalid_params ... ok
[INFO] [stdout] test mcp_command::tests::read_bounded_line_reads_a_single_terminated_line ... ok
[INFO] [stdout] test profile_bc_segments_and_drag_curve_consumption_tests::single_row_covers_the_entire_velocity_axis ... ok
[INFO] [stdout] test profile_unit_tests::old_reader_drops_zero_sets_on_resave_and_keeps_master_zero ... ok
[INFO] [stdout] test profile_unit_tests::optic_profile_errors_naming_missing_flags_when_hold_bounds_are_incomplete ... ok
[INFO] [stdout] test mcp_command::tests::tools_list_reports_solve_and_engine_info ... ok
[INFO] [stdout] test profile_unit_tests::optic_fields_round_trip_and_assemble_into_a_valid_optic_profile ... ok
[INFO] [stdout] test profile_unit_tests::converted_to_rescales_zero_set_distances_only ... ok
[INFO] [stdout] test profile_unit_tests::optic_profile_errors_naming_the_flag_when_a_travel_pair_is_incomplete ... ok
[INFO] [stdout] test mcp_command::tests::requests_before_initialize_are_rejected_except_ping ... ok
[INFO] [stdout] test profile_unit_tests::optic_profile_errors_on_out_of_range_state_even_without_an_elevation_click ... ok
[INFO] [stdout] test profile_unit_tests::clicks_arm_order_of_operations_is_load_bearing ... ok
[INFO] [stdout] test profile_bc_segments_and_drag_curve_consumption_tests::unsorted_input_rows_are_sorted_by_velocity ... ok
[INFO] [stdout] test profile_unit_tests::optic_profile_errors_when_other_fields_are_set_without_an_elevation_click ... ok
[INFO] [stdout] test profile_unit_tests::converted_profile_keeps_explicit_cli_precedence ... ok
[INFO] [stdout] test profile_unit_tests::optic_profile_is_none_for_a_completely_untouched_profile ... ok
[INFO] [stdout] test profile_unit_tests::adjustment_display_clicks_arm_delegates_to_clicks_for ... ok
[INFO] [stdout] test profile_unit_tests::parse_angular_mil_converts_suffixed_values_exactly ... ok
[INFO] [stdout] test profile_unit_tests::bc_segments_and_drag_curve_survive_unit_conversion_untouched ... ok
[INFO] [stdout] test profile_unit_tests::legacy_profiles_default_to_imperial_and_unknown_units_are_rejected ... ok
[INFO] [stdout] test profile_unit_tests::optic_profile_validation_fails_for_zero_clicks_per_revolution ... ok
[INFO] [stdout] test profile_unit_tests::optic_profile_validation_fails_naming_the_axis_when_dialed_state_exceeds_travel ... ok
[INFO] [stdout] test profile_unit_tests::optic_profile_with_only_elevation_click_set_has_none_for_the_rest ... ok
[INFO] [stdout] test mcp_command::tests::read_bounded_line_reports_invalid_utf8 ... ok
[INFO] [stdout] test mcp_command::tests::read_bounded_line_rejects_an_oversized_line_without_unbounded_buffering ... ok
[INFO] [stdout] test mcp_command::tests::read_bounded_line_accepts_exactly_the_limit ... ok
[INFO] [stdout] test profile_unit_tests::parse_bc_reference_profile_field_rejects_garbage ... ok
[INFO] [stdout] test profile_unit_tests::profile_without_bc_reference_key_round_trips_as_icao ... ok
[INFO] [stdout] test profile_unit_tests::same_unit_profile_conversion_is_bit_preserving ... ok
[INFO] [stdout] test profile_unit_tests::parse_pressure_reference_profile_field_rejects_garbage ... ok
[INFO] [stdout] test profile_unit_tests::profile_conversion_preserves_physics_and_unitless_fields ... ok
[INFO] [stdout] test profile_unit_tests::profile_without_density_altitude_key_round_trips_as_none ... ok
[INFO] [stdout] test profile_unit_tests::profile_with_army_standard_metro_bc_reference_round_trips ... ok
[INFO] [stdout] test profile_unit_tests::zero_sets_roundtrip_and_absent_key_stays_absent ... ok
[INFO] [stdout] test profile_unit_tests::profile_without_pressure_reference_key_round_trips_as_absolute ... ok
[INFO] [stdout] test profile_unit_tests::zero_poi_fields_round_trip_and_survive_unit_conversion_untouched ... ok
[INFO] [stdout] test profile_unit_tests::phase1_profile_json_without_v2_fields_deserializes_with_none ... ok
[INFO] [stdout] test profile_unit_tests::profile_click_fields_roundtrip_and_flags_override ... ok
[INFO] [stdout] test profile_unit_tests::parse_angular_mil_requires_a_suffix ... ok
[INFO] [stdout] test profile_unit_tests::profile_with_density_altitude_round_trips_and_converts_like_altitude ... ok
[INFO] [stdout] test wez_tests::zero_muzzle_velocity_is_a_clean_error_not_a_panic ... ok
[INFO] [stdout] test solve_json_command::tests::stdin_failure_is_an_io_envelope ... ok
[INFO] [stdout] test profile_unit_tests::profile_with_qnh_pressure_reference_round_trips ... ok
[INFO] [stdout] test solve_json_command::tests::every_protocol_error_code_has_a_documented_exit_class ... ok
[INFO] [stdout] test profile_unit_tests::zero_selection_resolver_precedence_and_errors ... ok
[INFO] [stdout] test profile_unit_tests::zero_set_bias_applies_before_the_cf_division ... ok
[INFO] [stdout] test windage_click_value_noop_tests::warns_when_supplied ... ok
[INFO] [stdout] test wind_angle_unit_tests::trajectory_components_store_wind_direction_in_radians ... ok
[INFO] [stdout] test windage_click_value_noop_tests::silent_when_omitted ... ok
[INFO] [stdout] test mcp_command::tests::panics_in_request_handling_become_internal_errors_not_process_death ... ok
[INFO] [stdout] test solve_json_command::tests::processor_panic_is_a_generic_internal_error ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 154 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.16s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests ballistics_engine
[INFO] [stdout] 
[INFO] [stdout] running 1 test
[INFO] [stdout] test src/bc_table_download.rs - bc_table_download (line 8) - compile ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.10s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "362b7f1424a19e309023c9e4283bf9dda78a62ef9b2b712b9253f3e6901a0b91", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "362b7f1424a19e309023c9e4283bf9dda78a62ef9b2b712b9253f3e6901a0b91", kill_on_drop: false }`
[INFO] [stdout] 362b7f1424a19e309023c9e4283bf9dda78a62ef9b2b712b9253f3e6901a0b91
