[INFO] cloning repository https://github.com/withoz/axia-3d
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/withoz/axia-3d" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fwithoz%2Faxia-3d", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fwithoz%2Faxia-3d'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 585d7a5aad9bbdf0f7456fa1b5cb19bf420366b0
[INFO] testing withoz/axia-3d against 1.97.0-beta.6 for beta-1.98-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fwithoz%2Faxia-3d" "/workspace/builds/worker-4-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc1/source'...
[INFO] [stderr] done.
[INFO] removed /workspace/builds/worker-4-tc1/source/.cargo/config.toml
[INFO] started tweaking git repo https://github.com/withoz/axia-3d
[INFO] finished tweaking git repo https://github.com/withoz/axia-3d
[INFO] tweaked toml for git repo https://github.com/withoz/axia-3d written to /workspace/builds/worker-4-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/withoz/axia-3d on toolchain 1.97.0-beta.6
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.97.0-beta.6" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/withoz/axia-3d already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.97.0-beta.6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded xmltree v0.9.0
[INFO] [stderr]   Downloaded dxf v0.6.1
[INFO] [stderr]   Downloaded earcutr v0.5.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3d5ced03c013a94a2f102a4510f48a6e9184255caf5fd8244f58017bde7f5210" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] e4923464889a08efc489b733c17b4d63a7f2a654af44fda877fcfa242321034e
[INFO] running `Command { std: "docker" "start" "e4923464889a08efc489b733c17b4d63a7f2a654af44fda877fcfa242321034e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "e4923464889a08efc489b733c17b4d63a7f2a654af44fda877fcfa242321034e", 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" "e4923464889a08efc489b733c17b4d63a7f2a654af44fda877fcfa242321034e" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "e4923464889a08efc489b733c17b4d63a7f2a654af44fda877fcfa242321034e", 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" "e4923464889a08efc489b733c17b4d63a7f2a654af44fda877fcfa242321034e" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling wasm-bindgen-shared v0.2.118
[INFO] [stderr]    Compiling libc v0.2.184
[INFO] [stderr]    Compiling xml-rs v0.8.28
[INFO] [stderr]    Compiling bumpalo v3.20.2
[INFO] [stderr]    Compiling itertools v0.14.0
[INFO] [stderr]    Compiling rustc-hash v2.1.2
[INFO] [stderr]    Compiling pxfm v0.1.28
[INFO] [stderr]    Compiling once_cell v1.21.4
[INFO] [stderr]    Compiling robust v1.2.0
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling wasm-bindgen v0.2.118
[INFO] [stderr]    Compiling bitflags v2.11.0
[INFO] [stderr]    Compiling num-integer v0.1.46
[INFO] [stderr]    Compiling num-traits v0.1.43
[INFO] [stderr]    Compiling num-complex v0.4.6
[INFO] [stderr]    Compiling enum_primitive v0.1.1
[INFO] [stderr]    Compiling num-bigint v0.4.6
[INFO] [stderr]    Compiling num-iter v0.1.45
[INFO] [stderr]    Compiling xmltree v0.9.0
[INFO] [stderr]    Compiling dxf v0.6.1
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling uuid v1.23.0
[INFO] [stderr]    Compiling num-rational v0.4.2
[INFO] [stderr]    Compiling num v0.4.3
[INFO] [stderr]    Compiling earcutr v0.5.0
[INFO] [stderr]    Compiling moxcms v0.8.1
[INFO] [stderr]    Compiling wasm-bindgen-macro-support v0.2.118
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling bytemuck_derive v1.10.2
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling bytemuck v1.25.0
[INFO] [stderr]    Compiling glam v0.30.10
[INFO] [stderr]    Compiling wasm-bindgen-macro v0.2.118
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling axia-transaction v0.1.0 (/opt/rustwide/workdir/crates/axia-transaction)
[INFO] [stderr]    Compiling bincode v1.3.3
[INFO] [stderr]    Compiling chrono v0.4.44
[INFO] [stderr]    Compiling image v0.25.10
[INFO] [stderr]    Compiling js-sys v0.3.95
[INFO] [stderr]    Compiling axia-geo v0.1.0 (/opt/rustwide/workdir/crates/axia-geo)
[INFO] [stderr]    Compiling web-sys v0.3.95
[INFO] [stderr]    Compiling axia-core v0.1.0 (/opt/rustwide/workdir/crates/axia-core)
[INFO] [stderr]    Compiling axia-foreign v0.1.0 (/opt/rustwide/workdir/crates/axia-foreign)
[INFO] [stdout] warning: unused variable: `n_profile`
[INFO] [stdout]   --> crates/axia-foreign/src/sweep_converter.rs:57:9
[INFO] [stdout]    |
[INFO] [stdout] 57 |     let n_profile = profile_pts.len();
[INFO] [stdout]    |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_n_profile`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `s`
[INFO] [stdout]    --> crates/axia-foreign/src/promote_surface.rs:453:17
[INFO] [stdout]     |
[INFO] [stdout] 453 |             let s = std::f64::consts::FRAC_1_SQRT_2;
[INFO] [stdout]     |                 ^ help: if this is intentional, prefix it with an underscore: `_s`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling axia-wasm v0.1.0 (/opt/rustwide/workdir/crates/axia-wasm)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 17s
[INFO] running `Command { std: "docker" "inspect" "e4923464889a08efc489b733c17b4d63a7f2a654af44fda877fcfa242321034e", 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" "e4923464889a08efc489b733c17b4d63a7f2a654af44fda877fcfa242321034e" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling axia-transaction v0.1.0 (/opt/rustwide/workdir/crates/axia-transaction)
[INFO] [stderr]    Compiling axia-geo v0.1.0 (/opt/rustwide/workdir/crates/axia-geo)
[INFO] [stdout] warning: unused variable: `n_profile`
[INFO] [stdout]   --> crates/axia-foreign/src/sweep_converter.rs:57:9
[INFO] [stdout]    |
[INFO] [stdout] 57 |     let n_profile = profile_pts.len();
[INFO] [stdout]    |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_n_profile`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `s`
[INFO] [stdout]    --> crates/axia-foreign/src/promote_surface.rs:453:17
[INFO] [stdout]     |
[INFO] [stdout] 453 |             let s = std::f64::consts::FRAC_1_SQRT_2;
[INFO] [stdout]     |                 ^ help: if this is intentional, prefix it with an underscore: `_s`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling axia-foreign v0.1.0 (/opt/rustwide/workdir/crates/axia-foreign)
[INFO] [stderr]    Compiling axia-core v0.1.0 (/opt/rustwide/workdir/crates/axia-core)
[INFO] [stderr]    Compiling axia-wasm v0.1.0 (/opt/rustwide/workdir/crates/axia-wasm)
[INFO] [stdout] warning: unused import: `axia_geo::Mesh`
[INFO] [stdout]     --> crates/axia-core/src/scene.rs:9652:13
[INFO] [stdout]      |
[INFO] [stdout] 9652 |         use axia_geo::Mesh;
[INFO] [stdout]      |             ^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axia_geo::AnalyticSurface`
[INFO] [stdout]      --> crates/axia-core/src/scene.rs:13376:13
[INFO] [stdout]       |
[INFO] [stdout] 13376 |         use axia_geo::AnalyticSurface;
[INFO] [stdout]       |             ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `n_profile`
[INFO] [stdout]   --> crates/axia-foreign/src/sweep_converter.rs:57:9
[INFO] [stdout]    |
[INFO] [stdout] 57 |     let n_profile = profile_pts.len();
[INFO] [stdout]    |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_n_profile`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `VertId`
[INFO] [stdout]    --> crates/axia-geo/src/entities/face.rs:347:37
[INFO] [stdout]     |
[INFO] [stdout] 347 |     use crate::entities::id::{HeId, VertId};
[INFO] [stdout]     |                                     ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CurveOps`
[INFO] [stdout]     --> crates/axia-geo/src/mesh.rs:7632:40
[INFO] [stdout]      |
[INFO] [stdout] 7632 |     use crate::curves::{AnalyticCurve, CurveOps};
[INFO] [stdout]      |                                        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> crates/axia-geo/src/operations/erase_resynth.rs:259:9
[INFO] [stdout]     |
[INFO] [stdout] 259 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CurveOps`
[INFO] [stdout]    --> crates/axia-geo/src/curves/knot.rs:448:40
[INFO] [stdout]     |
[INFO] [stdout] 448 |     use crate::curves::{bspline as bs, CurveOps};
[INFO] [stdout]     |                                        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SurfaceOps`
[INFO] [stdout]    --> crates/axia-geo/src/surfaces/knot.rs:302:50
[INFO] [stdout]     |
[INFO] [stdout] 302 |     use crate::surfaces::{bspline_surface as bs, SurfaceOps};
[INFO] [stdout]     |                                                  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `s`
[INFO] [stdout]    --> crates/axia-foreign/src/promote_surface.rs:453:17
[INFO] [stdout]     |
[INFO] [stdout] 453 |             let s = std::f64::consts::FRAC_1_SQRT_2;
[INFO] [stdout]     |                 ^ help: if this is intentional, prefix it with an underscore: `_s`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `knots_u`
[INFO] [stdout]    --> crates/axia-foreign/src/promote_surface.rs:814:28
[INFO] [stdout]     |
[INFO] [stdout] 814 |                 ctrl_grid, knots_u, knots_v, deg_u, deg_v, ..
[INFO] [stdout]     |                            ^^^^^^^ help: try ignoring the field: `knots_u: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `surfaces::ssi::boolean::nurbs_boolean`: Use nurbs_boolean_v2 for production. MVP preserved for back-compat; lacks containment tree + robustness.
[INFO] [stdout]    --> crates/axia-geo/src/surfaces/ssi/boolean.rs:294:22
[INFO] [stdout]     |
[INFO] [stdout] 294 |         let result = nurbs_boolean(
[INFO] [stdout]     |                      ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `surfaces::ssi::boolean::nurbs_boolean`: Use nurbs_boolean_v2 for production. MVP preserved for back-compat; lacks containment tree + robustness.
[INFO] [stdout]    --> crates/axia-geo/src/surfaces/ssi/boolean.rs:316:22
[INFO] [stdout]     |
[INFO] [stdout] 316 |         let result = nurbs_boolean(
[INFO] [stdout]     |                      ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> crates/axia-core/src/scene.rs:9725:13
[INFO] [stdout]      |
[INFO] [stdout] 9725 |         let mut boundary_count = 0;
[INFO] [stdout]      |             ----^^^^^^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]      --> crates/axia-core/src/scene.rs:13792:13
[INFO] [stdout]       |
[INFO] [stdout] 13792 |         let mut scene = Scene::new();
[INFO] [stdout]       |             ----^^^^^
[INFO] [stdout]       |             |
[INFO] [stdout]       |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `test_phaseA_promote_keeps_outer_radial_manifold` should have a snake case name
[INFO] [stdout]     --> crates/axia-core/src/scene.rs:9105:8
[INFO] [stdout]      |
[INFO] [stdout] 9105 |     fn test_phaseA_promote_keeps_outer_radial_manifold() {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `test_phase_a_promote_keeps_outer_radial_manifold`
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `test_adr021_phaseB_3level_nested_smallest_first` should have a snake case name
[INFO] [stdout]     --> crates/axia-core/src/scene.rs:9164:8
[INFO] [stdout]      |
[INFO] [stdout] 9164 |     fn test_adr021_phaseB_3level_nested_smallest_first() {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `test_adr021_phase_b_3level_nested_smallest_first`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `test_phaseA_isolated_4line_rect_no_promote` should have a snake case name
[INFO] [stdout]     --> crates/axia-core/src/scene.rs:9201:8
[INFO] [stdout]      |
[INFO] [stdout] 9201 |     fn test_phaseA_isolated_4line_rect_no_promote() {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `test_phase_a_isolated_4line_rect_no_promote`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `test_phaseA_postprocess_promote_path_radial` should have a snake case name
[INFO] [stdout]     --> crates/axia-core/src/scene.rs:9275:8
[INFO] [stdout]      |
[INFO] [stdout] 9275 |     fn test_phaseA_postprocess_promote_path_radial() {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `test_phase_a_postprocess_promote_path_radial`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `test_phaseA_3level_nested_radial_check_after_each_step` should have a snake case name
[INFO] [stdout]     --> crates/axia-core/src/scene.rs:9352:8
[INFO] [stdout]      |
[INFO] [stdout] 9352 |     fn test_phaseA_3level_nested_radial_check_after_each_step() {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `test_phase_a_3level_nested_radial_check_after_each_step`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `adr089_a_zeta_4_drawCircle_legacy_unchanged` should have a snake case name
[INFO] [stdout]      --> crates/axia-core/src/scene.rs:12837:8
[INFO] [stdout]       |
[INFO] [stdout] 12837 |     fn adr089_a_zeta_4_drawCircle_legacy_unchanged() {
[INFO] [stdout]       |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `adr089_a_zeta_4_draw_circle_legacy_unchanged`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SurfaceOps`
[INFO] [stdout]     --> crates/axia-geo/src/mesh.rs:8005:44
[INFO] [stdout]      |
[INFO] [stdout] 8005 |     use crate::surfaces::{AnalyticSurface, SurfaceOps};
[INFO] [stdout]      |                                            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `initial_face_count`
[INFO] [stdout]     --> crates/axia-geo/src/operations/boolean.rs:1436:13
[INFO] [stdout]      |
[INFO] [stdout] 1436 |         let initial_face_count = mesh.face_count();
[INFO] [stdout]      |             ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_initial_face_count`
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `mat2`
[INFO] [stdout]    --> crates/axia-geo/src/operations/boolean_dispatch.rs:975:33
[INFO] [stdout]     |
[INFO] [stdout] 975 |         let (mut mesh2, a2, b2, mat2) = two_overlapping_boxes();
[INFO] [stdout]     |                                 ^^^^ help: if this is intentional, prefix it with an underscore: `_mat2`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]     --> crates/axia-geo/src/operations/primitives.rs:1417:20
[INFO] [stdout]      |
[INFO] [stdout] 1417 |         for (n, f, e, v) in &measurements {
[INFO] [stdout]      |                    ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fid`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2104:14
[INFO] [stdout]      |
[INFO] [stdout] 2104 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |              ^^^ help: if this is intentional, prefix it with an underscore: `_fid`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v2`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2104:28
[INFO] [stdout]      |
[INFO] [stdout] 2104 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                            ^^ help: if this is intentional, prefix it with an underscore: `_v2`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v3`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2104:32
[INFO] [stdout]      |
[INFO] [stdout] 2104 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                                ^^ help: if this is intentional, prefix it with an underscore: `_v3`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v2`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2123:28
[INFO] [stdout]      |
[INFO] [stdout] 2123 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                            ^^ help: if this is intentional, prefix it with an underscore: `_v2`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v3`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2123:32
[INFO] [stdout]      |
[INFO] [stdout] 2123 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                                ^^ help: if this is intentional, prefix it with an underscore: `_v3`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pp`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2175:13
[INFO] [stdout]      |
[INFO] [stdout] 2175 |         let pp = m.push_pull(base, 3.0, mat).unwrap();
[INFO] [stdout]      |             ^^ help: if this is intentional, prefix it with an underscore: `_pp`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vp`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2181:14
[INFO] [stdout]      |
[INFO] [stdout] 2181 |         let (vp, _, _) = m.split_edge(eid, DVec3::new(2.0, 0.0, 0.0)).unwrap();
[INFO] [stdout]      |              ^^ help: if this is intentional, prefix it with an underscore: `_vp`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v1`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2278:24
[INFO] [stdout]      |
[INFO] [stdout] 2278 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                        ^^ help: if this is intentional, prefix it with an underscore: `_v1`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v3`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2278:32
[INFO] [stdout]      |
[INFO] [stdout] 2278 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                                ^^ help: if this is intentional, prefix it with an underscore: `_v3`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v0`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2293:20
[INFO] [stdout]      |
[INFO] [stdout] 2293 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                    ^^ help: if this is intentional, prefix it with an underscore: `_v0`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v2`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2293:28
[INFO] [stdout]      |
[INFO] [stdout] 2293 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                            ^^ help: if this is intentional, prefix it with an underscore: `_v2`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v0`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2563:20
[INFO] [stdout]      |
[INFO] [stdout] 2563 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                    ^^ help: if this is intentional, prefix it with an underscore: `_v0`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v1`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2563:24
[INFO] [stdout]      |
[INFO] [stdout] 2563 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                        ^^ help: if this is intentional, prefix it with an underscore: `_v1`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v2`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2563:28
[INFO] [stdout]      |
[INFO] [stdout] 2563 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                            ^^ help: if this is intentional, prefix it with an underscore: `_v2`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v3`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2563:32
[INFO] [stdout]      |
[INFO] [stdout] 2563 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                                ^^ help: if this is intentional, prefix it with an underscore: `_v3`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v1`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2668:24
[INFO] [stdout]      |
[INFO] [stdout] 2668 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                        ^^ help: if this is intentional, prefix it with an underscore: `_v1`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v3`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2668:32
[INFO] [stdout]      |
[INFO] [stdout] 2668 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                                ^^ help: if this is intentional, prefix it with an underscore: `_v3`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v1`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2684:24
[INFO] [stdout]      |
[INFO] [stdout] 2684 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                        ^^ help: if this is intentional, prefix it with an underscore: `_v1`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v2`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2684:28
[INFO] [stdout]      |
[INFO] [stdout] 2684 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                            ^^ help: if this is intentional, prefix it with an underscore: `_v2`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v3`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2684:32
[INFO] [stdout]      |
[INFO] [stdout] 2684 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                                ^^ help: if this is intentional, prefix it with an underscore: `_v3`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `i`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:2908:14
[INFO] [stdout]      |
[INFO] [stdout] 2908 |         for (i, &vid) in loop_verts.iter().enumerate() {
[INFO] [stdout]      |              ^ help: if this is intentional, prefix it with an underscore: `_i`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v0`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:3042:20
[INFO] [stdout]      |
[INFO] [stdout] 3042 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                    ^^ help: if this is intentional, prefix it with an underscore: `_v0`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v1`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:3042:24
[INFO] [stdout]      |
[INFO] [stdout] 3042 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                        ^^ help: if this is intentional, prefix it with an underscore: `_v1`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v2`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:3042:28
[INFO] [stdout]      |
[INFO] [stdout] 3042 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                            ^^ help: if this is intentional, prefix it with an underscore: `_v2`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `v3`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:3042:32
[INFO] [stdout]      |
[INFO] [stdout] 3042 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stdout]      |                                ^^ help: if this is intentional, prefix it with an underscore: `_v3`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `mat`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:3501:13
[INFO] [stdout]      |
[INFO] [stdout] 3501 |         let mat = MaterialId::new(0);
[INFO] [stdout]      |             ^^^ help: if this is intentional, prefix it with an underscore: `_mat`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `mat`
[INFO] [stdout]     --> crates/axia-geo/src/operations/face_split.rs:3528:13
[INFO] [stdout]      |
[INFO] [stdout] 3528 |         let mat = MaterialId::new(0);
[INFO] [stdout]      |             ^^^ help: if this is intentional, prefix it with an underscore: `_mat`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> crates/axia-geo/src/curves/intersect.rs:289:13
[INFO] [stdout]     |
[INFO] [stdout] 289 |         let mut mesh = Mesh::new();
[INFO] [stdout]     |             ----^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `R` should have a snake case name
[INFO] [stdout]     --> crates/axia-geo/src/operations/offset.rs:3764:43
[INFO] [stdout]      |
[INFO] [stdout] 3764 |     fn build_torus_panel(mesh: &mut Mesh, R: f64, r: f64) -> (FaceId, [VertId; 3]) {
[INFO] [stdout]      |                                           ^ help: convert the identifier to snake case: `r`
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `R` should have a snake case name
[INFO] [stdout]     --> crates/axia-geo/src/operations/offset.rs:3788:13
[INFO] [stdout]      |
[INFO] [stdout] 3788 |         let R = 3.0;
[INFO] [stdout]      |             ^ help: convert the identifier to snake case: `r`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `R` should have a snake case name
[INFO] [stdout]     --> crates/axia-geo/src/operations/offset.rs:3839:13
[INFO] [stdout]      |
[INFO] [stdout] 3839 |         let R = 4.0;
[INFO] [stdout]      |             ^ help: convert the identifier to snake case: `r`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `R` should have a snake case name
[INFO] [stdout]     --> crates/axia-geo/src/operations/offset.rs:3881:13
[INFO] [stdout]      |
[INFO] [stdout] 3881 |         let R = 3.0;
[INFO] [stdout]      |             ^ help: convert the identifier to snake case: `r`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `R` should have a snake case name
[INFO] [stdout]     --> crates/axia-geo/src/operations/offset.rs:4014:13
[INFO] [stdout]      |
[INFO] [stdout] 4014 |         let R = 5.0;
[INFO] [stdout]      |             ^ help: convert the identifier to snake case: `r`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `R` should have a snake case name
[INFO] [stdout]     --> crates/axia-geo/src/operations/offset.rs:4041:13
[INFO] [stdout]      |
[INFO] [stdout] 4041 |         let R = 4.0;
[INFO] [stdout]      |             ^ help: convert the identifier to snake case: `r`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `validate_rejects_degenerate_1xN_grid` should have a snake case name
[INFO] [stdout]    --> crates/axia-geo/src/surfaces/bezier_patch.rs:431:8
[INFO] [stdout]     |
[INFO] [stdout] 431 |     fn validate_rejects_degenerate_1xN_grid() {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `validate_rejects_degenerate_1x_n_grid`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `validate_rejects_degenerate_Nx1_grid` should have a snake case name
[INFO] [stdout]    --> crates/axia-geo/src/surfaces/bezier_patch.rs:441:8
[INFO] [stdout]     |
[INFO] [stdout] 441 |     fn validate_rejects_degenerate_Nx1_grid() {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `validate_rejects_degenerate_nx1_grid`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]     --> crates/axia-geo/src/p7_manifold.rs:1102:9
[INFO] [stdout]      |
[INFO] [stdout] 1102 |         mesh_after.remove_face(inner);
[INFO] [stdout]      |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]      = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]      |
[INFO] [stdout] 1102 |         let _ = mesh_after.remove_face(inner);
[INFO] [stdout]      |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 39.55s
[INFO] running `Command { std: "docker" "inspect" "e4923464889a08efc489b733c17b4d63a7f2a654af44fda877fcfa242321034e", 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" "e4923464889a08efc489b733c17b4d63a7f2a654af44fda877fcfa242321034e" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `VertId`
[INFO] [stderr]    --> crates/axia-geo/src/entities/face.rs:347:37
[INFO] [stderr]     |
[INFO] [stderr] 347 |     use crate::entities::id::{HeId, VertId};
[INFO] [stderr]     |                                     ^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `CurveOps`
[INFO] [stderr]     --> crates/axia-geo/src/mesh.rs:7632:40
[INFO] [stderr]      |
[INFO] [stderr] 7632 |     use crate::curves::{AnalyticCurve, CurveOps};
[INFO] [stderr]      |                                        ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `super::*`
[INFO] [stderr]    --> crates/axia-geo/src/operations/erase_resynth.rs:259:9
[INFO] [stderr]     |
[INFO] [stderr] 259 |     use super::*;
[INFO] [stderr]     |         ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `CurveOps`
[INFO] [stderr]    --> crates/axia-geo/src/curves/knot.rs:448:40
[INFO] [stderr]     |
[INFO] [stderr] 448 |     use crate::curves::{bspline as bs, CurveOps};
[INFO] [stderr]     |                                        ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `SurfaceOps`
[INFO] [stderr]    --> crates/axia-geo/src/surfaces/knot.rs:302:50
[INFO] [stderr]     |
[INFO] [stderr] 302 |     use crate::surfaces::{bspline_surface as bs, SurfaceOps};
[INFO] [stderr]     |                                                  ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated function `surfaces::ssi::boolean::nurbs_boolean`: Use nurbs_boolean_v2 for production. MVP preserved for back-compat; lacks containment tree + robustness.
[INFO] [stderr]    --> crates/axia-geo/src/surfaces/ssi/boolean.rs:294:22
[INFO] [stderr]     |
[INFO] [stderr] 294 |         let result = nurbs_boolean(
[INFO] [stderr]     |                      ^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(deprecated)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated function `surfaces::ssi::boolean::nurbs_boolean`: Use nurbs_boolean_v2 for production. MVP preserved for back-compat; lacks containment tree + robustness.
[INFO] [stderr]    --> crates/axia-geo/src/surfaces/ssi/boolean.rs:316:22
[INFO] [stderr]     |
[INFO] [stderr] 316 |         let result = nurbs_boolean(
[INFO] [stderr]     |                      ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `SurfaceOps`
[INFO] [stderr]     --> crates/axia-geo/src/mesh.rs:8005:44
[INFO] [stderr]      |
[INFO] [stderr] 8005 |     use crate::surfaces::{AnalyticSurface, SurfaceOps};
[INFO] [stderr]      |                                            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `initial_face_count`
[INFO] [stderr]     --> crates/axia-geo/src/operations/boolean.rs:1436:13
[INFO] [stderr]      |
[INFO] [stderr] 1436 |         let initial_face_count = mesh.face_count();
[INFO] [stderr]      |             ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_initial_face_count`
[INFO] [stderr]      |
[INFO] [stderr]      = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `mat2`
[INFO] [stderr]    --> crates/axia-geo/src/operations/boolean_dispatch.rs:975:33
[INFO] [stderr]     |
[INFO] [stderr] 975 |         let (mut mesh2, a2, b2, mat2) = two_overlapping_boxes();
[INFO] [stderr]     |                                 ^^^^ help: if this is intentional, prefix it with an underscore: `_mat2`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `e`
[INFO] [stderr]     --> crates/axia-geo/src/operations/primitives.rs:1417:20
[INFO] [stderr]      |
[INFO] [stderr] 1417 |         for (n, f, e, v) in &measurements {
[INFO] [stderr]      |                    ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `fid`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2104:14
[INFO] [stderr]      |
[INFO] [stderr] 2104 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |              ^^^ help: if this is intentional, prefix it with an underscore: `_fid`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v2`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2104:28
[INFO] [stderr]      |
[INFO] [stderr] 2104 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                            ^^ help: if this is intentional, prefix it with an underscore: `_v2`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v3`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2104:32
[INFO] [stderr]      |
[INFO] [stderr] 2104 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                                ^^ help: if this is intentional, prefix it with an underscore: `_v3`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v2`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2123:28
[INFO] [stderr]      |
[INFO] [stderr] 2123 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                            ^^ help: if this is intentional, prefix it with an underscore: `_v2`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v3`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2123:32
[INFO] [stderr]      |
[INFO] [stderr] 2123 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                                ^^ help: if this is intentional, prefix it with an underscore: `_v3`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `pp`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2175:13
[INFO] [stderr]      |
[INFO] [stderr] 2175 |         let pp = m.push_pull(base, 3.0, mat).unwrap();
[INFO] [stderr]      |             ^^ help: if this is intentional, prefix it with an underscore: `_pp`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `vp`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2181:14
[INFO] [stderr]      |
[INFO] [stderr] 2181 |         let (vp, _, _) = m.split_edge(eid, DVec3::new(2.0, 0.0, 0.0)).unwrap();
[INFO] [stderr]      |              ^^ help: if this is intentional, prefix it with an underscore: `_vp`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v1`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2278:24
[INFO] [stderr]      |
[INFO] [stderr] 2278 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                        ^^ help: if this is intentional, prefix it with an underscore: `_v1`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v3`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2278:32
[INFO] [stderr]      |
[INFO] [stderr] 2278 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                                ^^ help: if this is intentional, prefix it with an underscore: `_v3`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v0`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2293:20
[INFO] [stderr]      |
[INFO] [stderr] 2293 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                    ^^ help: if this is intentional, prefix it with an underscore: `_v0`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v2`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2293:28
[INFO] [stderr]      |
[INFO] [stderr] 2293 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                            ^^ help: if this is intentional, prefix it with an underscore: `_v2`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v0`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2563:20
[INFO] [stderr]      |
[INFO] [stderr] 2563 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                    ^^ help: if this is intentional, prefix it with an underscore: `_v0`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v1`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2563:24
[INFO] [stderr]      |
[INFO] [stderr] 2563 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                        ^^ help: if this is intentional, prefix it with an underscore: `_v1`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v2`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2563:28
[INFO] [stderr]      |
[INFO] [stderr] 2563 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                            ^^ help: if this is intentional, prefix it with an underscore: `_v2`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v3`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2563:32
[INFO] [stderr]      |
[INFO] [stderr] 2563 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                                ^^ help: if this is intentional, prefix it with an underscore: `_v3`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v1`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2668:24
[INFO] [stderr]      |
[INFO] [stderr] 2668 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                        ^^ help: if this is intentional, prefix it with an underscore: `_v1`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v3`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2668:32
[INFO] [stderr]      |
[INFO] [stderr] 2668 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                                ^^ help: if this is intentional, prefix it with an underscore: `_v3`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v1`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2684:24
[INFO] [stderr]      |
[INFO] [stderr] 2684 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                        ^^ help: if this is intentional, prefix it with an underscore: `_v1`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v2`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2684:28
[INFO] [stderr]      |
[INFO] [stderr] 2684 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                            ^^ help: if this is intentional, prefix it with an underscore: `_v2`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v3`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2684:32
[INFO] [stderr]      |
[INFO] [stderr] 2684 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                                ^^ help: if this is intentional, prefix it with an underscore: `_v3`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `i`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:2908:14
[INFO] [stderr]      |
[INFO] [stderr] 2908 |         for (i, &vid) in loop_verts.iter().enumerate() {
[INFO] [stderr]      |              ^ help: if this is intentional, prefix it with an underscore: `_i`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v0`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:3042:20
[INFO] [stderr]      |
[INFO] [stderr] 3042 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                    ^^ help: if this is intentional, prefix it with an underscore: `_v0`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v1`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:3042:24
[INFO] [stderr]      |
[INFO] [stderr] 3042 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                        ^^ help: if this is intentional, prefix it with an underscore: `_v1`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v2`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:3042:28
[INFO] [stderr]      |
[INFO] [stderr] 3042 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                            ^^ help: if this is intentional, prefix it with an underscore: `_v2`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `v3`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:3042:32
[INFO] [stderr]      |
[INFO] [stderr] 3042 |         let (fid, [v0, v1, v2, v3]) = make_square(&mut m);
[INFO] [stderr]      |                                ^^ help: if this is intentional, prefix it with an underscore: `_v3`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `mat`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:3501:13
[INFO] [stderr]      |
[INFO] [stderr] 3501 |         let mat = MaterialId::new(0);
[INFO] [stderr]      |             ^^^ help: if this is intentional, prefix it with an underscore: `_mat`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `mat`
[INFO] [stderr]     --> crates/axia-geo/src/operations/face_split.rs:3528:13
[INFO] [stderr]      |
[INFO] [stderr] 3528 |         let mat = MaterialId::new(0);
[INFO] [stderr]      |             ^^^ help: if this is intentional, prefix it with an underscore: `_mat`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> crates/axia-geo/src/curves/intersect.rs:289:13
[INFO] [stderr]     |
[INFO] [stderr] 289 |         let mut mesh = Mesh::new();
[INFO] [stderr]     |             ----^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable `R` should have a snake case name
[INFO] [stderr]     --> crates/axia-geo/src/operations/offset.rs:3764:43
[INFO] [stderr]      |
[INFO] [stderr] 3764 |     fn build_torus_panel(mesh: &mut Mesh, R: f64, r: f64) -> (FaceId, [VertId; 3]) {
[INFO] [stderr]      |                                           ^ help: convert the identifier to snake case: `r`
[INFO] [stderr]      |
[INFO] [stderr]      = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable `R` should have a snake case name
[INFO] [stderr]     --> crates/axia-geo/src/operations/offset.rs:3788:13
[INFO] [stderr]      |
[INFO] [stderr] 3788 |         let R = 3.0;
[INFO] [stderr]      |             ^ help: convert the identifier to snake case: `r`
[INFO] [stderr] 
[INFO] [stderr] warning: variable `R` should have a snake case name
[INFO] [stderr]     --> crates/axia-geo/src/operations/offset.rs:3839:13
[INFO] [stderr]      |
[INFO] [stderr] 3839 |         let R = 4.0;
[INFO] [stderr]      |             ^ help: convert the identifier to snake case: `r`
[INFO] [stderr] 
[INFO] [stderr] warning: variable `R` should have a snake case name
[INFO] [stderr]     --> crates/axia-geo/src/operations/offset.rs:3881:13
[INFO] [stderr]      |
[INFO] [stderr] 3881 |         let R = 3.0;
[INFO] [stderr]      |             ^ help: convert the identifier to snake case: `r`
[INFO] [stderr] 
[INFO] [stderr] warning: variable `R` should have a snake case name
[INFO] [stderr]     --> crates/axia-geo/src/operations/offset.rs:4014:13
[INFO] [stderr]      |
[INFO] [stderr] 4014 |         let R = 5.0;
[INFO] [stderr]      |             ^ help: convert the identifier to snake case: `r`
[INFO] [stderr] 
[INFO] [stderr] warning: variable `R` should have a snake case name
[INFO] [stderr]     --> crates/axia-geo/src/operations/offset.rs:4041:13
[INFO] [stderr]      |
[INFO] [stderr] 4041 |         let R = 4.0;
[INFO] [stderr]      |             ^ help: convert the identifier to snake case: `r`
[INFO] [stderr] 
[INFO] [stderr] warning: function `validate_rejects_degenerate_1xN_grid` should have a snake case name
[INFO] [stderr]    --> crates/axia-geo/src/surfaces/bezier_patch.rs:431:8
[INFO] [stderr]     |
[INFO] [stderr] 431 |     fn validate_rejects_degenerate_1xN_grid() {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `validate_rejects_degenerate_1x_n_grid`
[INFO] [stderr] 
[INFO] [stderr] warning: function `validate_rejects_degenerate_Nx1_grid` should have a snake case name
[INFO] [stderr]    --> crates/axia-geo/src/surfaces/bezier_patch.rs:441:8
[INFO] [stderr]     |
[INFO] [stderr] 441 |     fn validate_rejects_degenerate_Nx1_grid() {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `validate_rejects_degenerate_nx1_grid`
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` that must be used
[INFO] [stderr]     --> crates/axia-geo/src/p7_manifold.rs:1102:9
[INFO] [stderr]      |
[INFO] [stderr] 1102 |         mesh_after.remove_face(inner);
[INFO] [stderr]      |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]      |
[INFO] [stderr]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr]      = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] help: use `let _ = ...` to ignore the resulting value
[INFO] [stderr]      |
[INFO] [stderr] 1102 |         let _ = mesh_after.remove_face(inner);
[INFO] [stderr]      |         +++++++
[INFO] [stderr] 
[INFO] [stderr] warning: `axia-geo` (lib test) generated 48 warnings (run `cargo fix --lib -p axia-geo --tests` to apply 36 suggestions)
[INFO] [stderr] warning: unused variable: `n_profile`
[INFO] [stderr]   --> crates/axia-foreign/src/sweep_converter.rs:57:9
[INFO] [stderr]    |
[INFO] [stderr] 57 |     let n_profile = profile_pts.len();
[INFO] [stderr]    |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_n_profile`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `s`
[INFO] [stderr]    --> crates/axia-foreign/src/promote_surface.rs:453:17
[INFO] [stderr]     |
[INFO] [stderr] 453 |             let s = std::f64::consts::FRAC_1_SQRT_2;
[INFO] [stderr]     |                 ^ help: if this is intentional, prefix it with an underscore: `_s`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `knots_u`
[INFO] [stderr]    --> crates/axia-foreign/src/promote_surface.rs:814:28
[INFO] [stderr]     |
[INFO] [stderr] 814 |                 ctrl_grid, knots_u, knots_v, deg_u, deg_v, ..
[INFO] [stderr]     |                            ^^^^^^^ help: try ignoring the field: `knots_u: _`
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `axia_geo::Mesh`
[INFO] [stderr]     --> crates/axia-core/src/scene.rs:9652:13
[INFO] [stderr]      |
[INFO] [stderr] 9652 |         use axia_geo::Mesh;
[INFO] [stderr]      |             ^^^^^^^^^^^^^^
[INFO] [stderr]      |
[INFO] [stderr]      = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `axia_geo::AnalyticSurface`
[INFO] [stderr]      --> crates/axia-core/src/scene.rs:13376:13
[INFO] [stderr]       |
[INFO] [stderr] 13376 |         use axia_geo::AnalyticSurface;
[INFO] [stderr]       |             ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]     --> crates/axia-core/src/scene.rs:9725:13
[INFO] [stderr]      |
[INFO] [stderr] 9725 |         let mut boundary_count = 0;
[INFO] [stderr]      |             ----^^^^^^^^^^^^^^
[INFO] [stderr]      |             |
[INFO] [stderr]      |             help: remove this `mut`
[INFO] [stderr]      |
[INFO] [stderr]      = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]      --> crates/axia-core/src/scene.rs:13792:13
[INFO] [stderr]       |
[INFO] [stderr] 13792 |         let mut scene = Scene::new();
[INFO] [stderr]       |             ----^^^^^
[INFO] [stderr]       |             |
[INFO] [stderr]       |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: function `test_phaseA_promote_keeps_outer_radial_manifold` should have a snake case name
[INFO] [stderr]     --> crates/axia-core/src/scene.rs:9105:8
[INFO] [stderr]      |
[INFO] [stderr] 9105 |     fn test_phaseA_promote_keeps_outer_radial_manifold() {
[INFO] [stderr]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `test_phase_a_promote_keeps_outer_radial_manifold`
[INFO] [stderr]      |
[INFO] [stderr]      = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: function `test_adr021_phaseB_3level_nested_smallest_first` should have a snake case name
[INFO] [stderr]     --> crates/axia-core/src/scene.rs:9164:8
[INFO] [stderr]      |
[INFO] [stderr] 9164 |     fn test_adr021_phaseB_3level_nested_smallest_first() {
[INFO] [stderr]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `test_adr021_phase_b_3level_nested_smallest_first`
[INFO] [stderr] 
[INFO] [stderr] warning: function `test_phaseA_isolated_4line_rect_no_promote` should have a snake case name
[INFO] [stderr]     --> crates/axia-core/src/scene.rs:9201:8
[INFO] [stderr]      |
[INFO] [stderr] 9201 |     fn test_phaseA_isolated_4line_rect_no_promote() {
[INFO] [stderr]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `test_phase_a_isolated_4line_rect_no_promote`
[INFO] [stderr] 
[INFO] [stderr] warning: function `test_phaseA_postprocess_promote_path_radial` should have a snake case name
[INFO] [stderr]     --> crates/axia-core/src/scene.rs:9275:8
[INFO] [stderr]      |
[INFO] [stderr] 9275 |     fn test_phaseA_postprocess_promote_path_radial() {
[INFO] [stderr]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `test_phase_a_postprocess_promote_path_radial`
[INFO] [stderr] 
[INFO] [stderr] warning: function `test_phaseA_3level_nested_radial_check_after_each_step` should have a snake case name
[INFO] [stderr]     --> crates/axia-core/src/scene.rs:9352:8
[INFO] [stderr]      |
[INFO] [stderr] 9352 |     fn test_phaseA_3level_nested_radial_check_after_each_step() {
[INFO] [stderr]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `test_phase_a_3level_nested_radial_check_after_each_step`
[INFO] [stderr] 
[INFO] [stderr] warning: function `adr089_a_zeta_4_drawCircle_legacy_unchanged` should have a snake case name
[INFO] [stderr]      --> crates/axia-core/src/scene.rs:12837:8
[INFO] [stderr]       |
[INFO] [stderr] 12837 |     fn adr089_a_zeta_4_drawCircle_legacy_unchanged() {
[INFO] [stderr]       |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `adr089_a_zeta_4_draw_circle_legacy_unchanged`
[INFO] [stderr] 
[INFO] [stderr] warning: `axia-foreign` (lib) generated 2 warnings (run `cargo fix --lib -p axia-foreign` to apply 2 suggestions)
[INFO] [stderr] warning: `axia-foreign` (lib test) generated 3 warnings (2 duplicates) (run `cargo fix --lib -p axia-foreign --tests` to apply 1 suggestion)
[INFO] [stderr] warning: `axia-core` (lib test) generated 10 warnings (run `cargo fix --lib -p axia-core --tests` to apply 4 suggestions)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.25s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/axia_core-2d9d51187f71eb79)
[INFO] [stdout] 
[INFO] [stdout] running 326 tests
[INFO] [stdout] test boolean_group::tests::boolean_group_tag_serde_roundtrip ... ok
[INFO] [stdout] test group::tests::test_create_instance ... ok
[INFO] [stdout] test group::tests::test_create_group ... ok
[INFO] [stdout] test group::tests::test_cycle_prevention ... ok
[INFO] [stdout] test boolean_group::tests::boolean_group_tag_a_and_b_are_distinct ... ok
[INFO] [stdout] test group::tests::test_face_move_between_groups ... ok
[INFO] [stdout] test group::tests::test_json_export ... ok
[INFO] [stdout] test group::tests::test_make_component ... ok
[INFO] [stdout] test group::tests::test_delete_group ... ok
[INFO] [stdout] test group::tests::test_nested_groups ... ok
[INFO] [stdout] test material::tests::builtins_are_classified_as_system_tier ... ok
[INFO] [stdout] test material::tests::form_layer_unaffected_by_tier_changes_locked_26_invariant ... ok
[INFO] [stdout] test material::tests::material_library_migrate_strips_empty_layered_payloads ... ok
[INFO] [stdout] test material::tests::create_material_in_tier_explicit_user ... ok
[INFO] [stdout] test material::tests::legacy_load_with_empty_tier_index_is_recoverable ... ok
[INFO] [stdout] test material::tests::create_material_defaults_to_project_tier ... ok
[INFO] [stdout] test material::tests::layered_channels_validate_emits_first_channel_error ... ok
[INFO] [stdout] test material::tests::locked_26_form_layer_unaffected_by_layered_extension ... ok
[INFO] [stdout] test material::tests::material_library_validate_layered_emits_material_id_with_error ... ok
[INFO] [stdout] test material::tests::material_library_validate_layered_returns_ok_for_clean_library ... ok
[INFO] [stdout] test material::tests::material_tier_u32_roundtrip ... ok
[INFO] [stdout] test material::tests::materials_by_tier_filters_correctly ... ok
[INFO] [stdout] test material::tests::migrate_is_idempotent ... ok
[INFO] [stdout] test material::tests::material_library_migrate_legacy_textures_is_idempotent ... ok
[INFO] [stdout] test material::tests::remove_material_rejects_system_tier ... ok
[INFO] [stdout] test material::tests::migrate_legacy_materials_classifies_by_id_range ... ok
[INFO] [stdout] test material::tests::set_tier_moves_material_between_tiers ... ok
[INFO] [stdout] test material::tests::remove_material_succeeds_for_project_or_user_tier ... ok
[INFO] [stdout] test material::tests::set_tier_returns_false_for_missing_material ... ok
[INFO] [stdout] test material::tests::material_partial_layered_bincode_roundtrip ... ok
[INFO] [stdout] test material::tests::scoped_material_id_carries_tier_and_local_id ... ok
[INFO] [stdout] test material::tests::test_create_custom_material ... ok
[INFO] [stdout] test material::tests::test_material_rgb_extraction ... ok
[INFO] [stdout] test material::tests::test_material_library_creation ... ok
[INFO] [stdout] test material::tests::texture_channel_info_validate_accepts_minimal ... ok
[INFO] [stdout] test material::tests::visual_properties_layered_default_is_none ... ok
[INFO] [stdout] test material::tests::texture_channel_info_validate_rejects_nonpositive_scale ... ok
[INFO] [stdout] test material::tests::visual_properties_bincode_roundtrip_with_legacy_payload ... ok
[INFO] [stdout] test reference::tests::reference_id_roundtrip ... ok
[INFO] [stdout] test orphan_recovery::tests::classify_empty_scene_returns_empty_report ... ok
[INFO] [stdout] test reference::tests::category_label_3_categories ... ok
[INFO] [stdout] test orphan_recovery::tests::apply_c1_recovery_restores_face_ownership ... ok
[INFO] [stdout] test orphan_recovery::tests::classify_detects_c1_orphan_component ... ok
[INFO] [stdout] test material::tests::texture_channel_info_validate_rejects_empty_dataurl ... ok
[INFO] [stdout] test orphan_recovery::tests::preview_leaves_scene_unchanged ... ok
[INFO] [stdout] test reference::tests::reference_serde_roundtrip ... ok
[INFO] [stdout] test material::tests::texture_projection_default_is_planar ... ok
[INFO] [stdout] test reference::tests::reference_new_starts_visible_unlocked ... ok
[INFO] [stdout] test scene::tests::adr089_a_mu_analyze_full_v2_snapshot ... ok
[INFO] [stdout] test scene::tests::adr089_a_mu_analyze_short_data ... ok
[INFO] [stdout] test scene::tests::adr089_a_mu_corrupt_magic_falls_back_to_legacy ... ok
[INFO] [stdout] test scene::tests::adr089_a_mu_analyze_legacy_headerless_snapshot ... ok
[INFO] [stdout] test material::tests::layered_channels_default_is_all_none ... ok
[INFO] [stdout] test scene::tests::adr089_a_mu_v2_roundtrip_preserves_closed_curve_face ... ok
[INFO] [stdout] test scene::tests::adr089_a_mu_v2_roundtrip_preserves_shapes_and_groups ... ok
[INFO] [stdout] test scene::tests::adr088_s_gamma_draw_circle_segments_share_owner_id ... ok
[INFO] [stdout] test scene::tests::adr089_a_mu_v_too_new_rejected_with_clear_message ... ok
[INFO] [stdout] test scene::tests::adr089_a_mu_legacy_v1_synthesized_loads ... ok
[INFO] [stdout] test scene::tests::adr088_s_gamma_two_circles_get_distinct_owner_ids ... ok
[INFO] [stdout] test scene::tests::adr089_a_zeta_4_creates_kernel_native_circle_topology ... ok
[INFO] [stdout] test scene::tests::adr089_a_zeta_4_drawCircle_legacy_unchanged ... ok
[INFO] [stdout] test scene::tests::adr089_a_zeta_4_rejects_invalid_inputs ... ok
[INFO] [stdout] test scene::tests::adr095_phase3_create_reference_point_cloud ... ok
[INFO] [stdout] test scene::tests::adr095_phase3_create_reference_imported_mesh ... ok
[INFO] [stdout] test scene::tests::adr095_phase3_delete_reference_cleans_reverse_indices ... ok
[INFO] [stdout] test scene::tests::adr089_a_mu_v2_roundtrip_preserves_closed_bezier_face ... ok
[INFO] [stdout] test scene::tests::adr097_t_gamma_scene_clean_passes_through_mesh_report ... ok
[INFO] [stdout] test scene::tests::adr095_phase3_epsilon_next_reference_id_roundtrip ... ok
[INFO] [stdout] test scene::tests::adr095_phase3_create_reference_construction_line ... ok
[INFO] [stdout] test scene::tests::adr095_phase3_epsilon_reverse_index_rebuilt_after_restore ... ok
[INFO] [stdout] test scene::tests::adr097_t_gamma_scene_face_owned_by_reference_not_orphan ... ok
[INFO] [stdout] test scene::tests::adr095_phase3_mutually_exclusive_face_owned_by_xia ... ok
[INFO] [stdout] test scene::tests::adr095_phase3_epsilon_references_roundtrip_v2 ... ok
[INFO] [stdout] test scene::tests::adr098_section_9_analyze_snapshot_marks_section_present ... ok
[INFO] [stdout] test scene::tests::adr095_phase3_mutually_exclusive_face_owned_by_shape ... ok
[INFO] [stdout] test scene::tests::adr089_a_zeta_4_kernel_native_and_legacy_coexist ... ok
[INFO] [stdout] test scene::tests::adr098_section_9_material_library_round_trips ... ok
[INFO] [stdout] test scene::tests::adr098_section_9_migration_runs_after_legacy_load ... ok
[INFO] [stdout] test scene::tests::adr097_t_gamma_scene_face_owned_by_xia_not_orphan ... ok
[INFO] [stdout] test scene::tests::adr095_phase3_visibility_locked_toggles ... ok
[INFO] [stdout] test scene::tests::adr097_t_gamma_scene_orphan_face_detected ... ok
[INFO] [stdout] test scene::tests::adr099_section_9_legacy_material_without_layered_roundtrips ... ok
[INFO] [stdout] test scene::tests::adr099_section_9_layered_channels_round_trip ... ok
[INFO] [stdout] test scene::tests::adr099_section_9_partial_layered_round_trip ... ok
[INFO] [stdout] test scene::tests::adr100_detect_reports_xia_with_missing_material ... ok
[INFO] [stdout] test scene::tests::adr100_attempt_recovery_noop_on_clean_scene ... ok
[INFO] [stdout] test scene::tests::adr100_attempt_recovery_ordering_deterministic ... ok
[INFO] [stdout] test scene::tests::adr100_detect_returns_clean_for_fresh_scene ... ok
[INFO] [stdout] test scene::tests::adr100_remove_system_tier_rejected ... ok
[INFO] [stdout] test scene::tests::adr100_detect_skips_form_material_xias ... ok
[INFO] [stdout] test scene::tests::adr100_remove_project_material_with_recovery_combines_entries ... ok
[INFO] [stdout] test scene::tests::adr100_recovery_idempotent_when_called_twice ... ok
[INFO] [stdout] test scene::tests::adr098_section_9_form_layer_invariant_unchanged_locked_26 ... ok
[INFO] [stdout] test scene::tests::adr100_form_layer_invariant_unchanged_locked_26 ... ok
[INFO] [stdout] test scene::tests::adr101_b4_disjoint_rects_no_split ... ok
[INFO] [stdout] test scene::tests::adr100_attempt_recovery_demotes_orphan_xia_to_shape ... ok
[INFO] [stdout] test scene::tests::adr088_s_gamma_draw_circle_as_shape_segments_share_owner_id ... ok
[INFO] [stdout] test scene::tests::adr095_phase3_double_register_same_edge_rejected ... ok
[INFO] [stdout] test scene::tests::adr101_b4_disabled_flag_skips_split ... ok
[INFO] [stdout] test scene::tests::adr091_d_epsilon_xia_to_original_shape_roundtrip_v2 ... ok
[INFO] [stdout] test scene::tests::adr091_d_epsilon_legacy_v2_without_section_7d_loads_empty_map ... ok
[INFO] [stdout] test scene::tests::adr098_section_9_legacy_snapshot_keeps_default_library ... ok
[INFO] [stdout] test scene::tests::adr095_phase3_epsilon_legacy_v2_without_section_8_loads_empty ... ok
[INFO] [stdout] test scene::tests::adr095_phase3_list_reference_ids_sorted ... ok
[INFO] [stdout] test scene::tests::adr103_epsilon_migration_helper_idempotency_guard ... ok
[INFO] [stdout] test scene::tests::adr103_epsilon_v3_load_identity_no_migration ... ok
[INFO] [stdout] test scene::tests::adr103_epsilon_v2_load_applies_y_up_to_z_up_rotation ... ok
[INFO] [stdout] test scene::tests::adr107_zeta_beta_draw_circle_as_shape_path_b_canonical ... ok
[INFO] [stdout] test scene::tests::adr109_pi_beta_helper_skips_non_arc_faces ... ok
[INFO] [stdout] test scene::tests::adr101_b4_non_coplanar_rects_no_split ... ok
[INFO] [stdout] test scene::tests::adr107_zeta_beta_threshold_boundary_segments_eleven_legacy ... ok
[INFO] [stdout] test scene::tests::adr174_beta2_line_outside_circle_disk_no_split ... ok
[INFO] [stdout] test scene::tests::adr172_beta1_two_crossing_drawlines_auto_split ... ok
[INFO] [stdout] test scene::tests::adr101_b4_two_circles_as_shape_partial_overlap_auto_splits ... ok
[INFO] [stdout] test scene::tests::adr174_beta3_tangent_line_no_split ... ok
[INFO] [stdout] test scene::tests::adr109_pi_beta_full_cylinder_unchanged ... ok
[INFO] [stdout] test scene::tests::adr101_b4b_disjoint_path_b_circles_preserve_kernel_native ... ok
[INFO] [stdout] test scene::tests::adr101_b4_two_circles_partial_overlap_auto_splits ... ok
[INFO] [stdout] test scene::tests::adr172_gamma_line_across_face_splits_into_two ... ok
[INFO] [stdout] test scene::tests::adr107_zeta_beta_threshold_boundary_segments_twelve_path_b ... ok
[INFO] [stdout] test scene::tests::adr174_beta3_diagonal_secant_splits ... ok
[INFO] [stdout] test scene::tests::adr174_beta2_line_across_circle_disk_splits_into_two ... ok
[INFO] [stdout] test scene::tests::adr174_beta3_one_line_splits_two_circles ... ok
[INFO] [stdout] test scene::tests::adr174_beta3_off_center_secant_splits ... ok
[INFO] [stdout] test scene::tests::boolean_group_clear_resets_state ... ok
[INFO] [stdout] test scene::tests::boolean_group_has_selection_requires_both ... ok
[INFO] [stdout] test scene::tests::boolean_group_set_basic_a_and_b ... ok
[INFO] [stdout] test scene::tests::boolean_group_set_overwrites_on_conflict ... ok
[INFO] [stdout] test scene::tests::boolean_group_legacy_snapshot_loads_empty ... ok
[INFO] [stdout] test scene::tests::adr176_rect_as_shape_origin_corner_auto_intersect_on ... ok
[INFO] [stdout] test scene::tests::adr185_concentric_circles_auto_ring_plus_disk ... ok
[INFO] [stdout] test scene::tests::centerline_does_not_split_crossing_geometry_line ... ok
[INFO] [stdout] test scene::tests::delete_shape_removes_face_to_shape_entries ... ok
[INFO] [stdout] test scene::tests::demote_restores_original_shape_id ... ok
[INFO] [stdout] test scene::tests::create_shape_registers_face_to_shape_index ... ok
[INFO] [stdout] test scene::tests::boolean_group_snapshot_round_trip_preserves_tags ... ok
[INFO] [stdout] test scene::tests::cross_tool_sanity_rect_line_circle_as_shape_coexist ... ok
[INFO] [stdout] test scene::tests::demote_preserves_face_order ... ok
[INFO] [stdout] test scene::tests::centerline_excluded_from_face_synthesis ... ok
[INFO] [stdout] test scene::tests::adr174_beta3_translated_circle_secant_splits ... ok
[INFO] [stdout] test scene::tests::demote_xia_not_found ... ok
[INFO] [stdout] test scene::tests::demote_with_form_material_succeeds ... ok
[INFO] [stdout] test scene::tests::draw_circle_as_shape_plane_basis_perpendicular_to_normal ... ok
[INFO] [stdout] test scene::tests::draw_line_as_shape_creates_line_shape_with_standalone_edge ... ok
[INFO] [stdout] test scene::tests::draw_circle_as_shape_then_promote_succeeds_when_volumetric_base_exists ... ok
[INFO] [stdout] test scene::tests::draw_circle_as_shape_attaches_plane_surface_to_face ... ok
[INFO] [stdout] test scene::tests::draw_circle_as_shape_creates_shape_not_xia ... ok
[INFO] [stdout] test scene::tests::draw_line_circle_unchanged_after_p5b_addition ... ok
[INFO] [stdout] test scene::tests::draw_line_as_shape_persists_through_snapshot ... ok
[INFO] [stdout] test scene::tests::adr176_two_rects_as_shape_partial_overlap_auto_split ... ok
[INFO] [stdout] test scene::tests::demote_with_real_material_rejected ... ok
[INFO] [stdout] test scene::tests::draw_circle_as_shape_plane_normal_aligned_with_world_x ... ok
[INFO] [stdout] test scene::tests::draw_rect_as_shape_attaches_plane_surface_to_face ... ok
[INFO] [stdout] test scene::tests::adr101_b4b_two_path_b_circles_partial_overlap_auto_splits ... ok
[INFO] [stdout] test scene::tests::draw_rect_as_shape_creates_shape_not_xia ... ok
[INFO] [stdout] test scene::tests::draw_rect_as_shape_persists_through_snapshot ... ok
[INFO] [stdout] test scene::tests::draw_rect_as_shape_does_not_populate_face_to_xia ... ok
[INFO] [stdout] test scene::tests::draw_rect_unchanged_after_p5a_addition ... ok
[INFO] [stdout] test scene::tests::draw_rect_as_shape_then_promote_round_trip ... ok
[INFO] [stdout] test scene::tests::draw_rect_as_shape_then_create_solid_extrude_succeeds_no_fallback ... ok
[INFO] [stdout] test scene::tests::draw_polygon_via_circle_as_shape_attaches_plane_surface ... ok
[INFO] [stdout] test scene::tests::draw_line_as_shape_face_path_when_loop_closes ... ok
[INFO] [stdout] test scene::tests::draw_rect_as_shape_does_not_regress_locked_p7_canonical ... ok
[INFO] [stdout] test scene::tests::draw_circle_as_shape_then_create_solid_extrude_succeeds ... ok
[INFO] [stdout] test scene::tests::draw_rect_is_direction_and_order_invariant ... ok
[INFO] [stdout] test scene::tests::exec_create_solid_falls_back_to_push_pull_when_not_yet_supported ... ok
[INFO] [stdout] test scene::tests::drawing_rect_preserves_pre_existing_faces ... ok
[INFO] [stdout] test scene::tests::exec_create_solid_xia_path_legacy_unchanged ... ok
[INFO] [stdout] test scene::tests::exec_create_solid_extrude_plane_rect_box_via_shape_path ... ok
[INFO] [stdout] test scene::tests::exec_create_solid_cylinder_face_to_shape_updated_for_all_new_faces ... ok
[INFO] [stdout] test scene::tests::drawing_rect_preserves_pre_existing_standalone_lines ... ok
[INFO] [stdout] test scene::tests::exec_create_solid_face_to_shape_updated_for_new_faces ... ok
[INFO] [stdout] test scene::tests::p2_step_4_65_empty_mesh_no_panic ... ok
[INFO] [stdout] test scene::tests::p2_step_4_65_coincident_outer_inner_no_silent_total_dissolve ... ok
[INFO] [stdout] test material::tests::layered_channels_count_and_has_any_track_population ... ok
[INFO] [stdout] test scene::tests::p2_step_4_65_edge_touching_corner_preserves_both ... ok
[INFO] [stdout] test scene::tests::centerline_draw_creates_edge_tagged_centerline ... ok
[INFO] [stdout] test scene::tests::p2_step_4_65_disjoint_inner_preserves_outer ... ok
[INFO] [stdout] test scene::tests::k_gamma_draw_line_as_shape_then_create_solid_extrude_succeeds ... ok
[INFO] [stdout] test scene::tests::geometry_line_does_not_split_at_crossing_centerline ... ok
[INFO] [stdout] test scene::tests::p2_step_4_65_multi_level_nested_preserves_middle ... ok
[INFO] [stdout] test scene::tests::k_gamma_draw_line_as_shape_no_face_no_plane ... ok
[INFO] [stdout] test scene::tests::adr101_b4_two_rects_partial_overlap_auto_splits ... ok
[INFO] [stdout] test scene::tests::p2_step_4_65_concentric_chain_no_propagation_dissolve ... ok
[INFO] [stdout] test scene::tests::exec_create_solid_revolve_full_360_via_shape_path ... ok
[INFO] [stdout] test scene::tests::p5e_beta_form_material_constant_value ... ok
[INFO] [stdout] test scene::tests::promote_shape_fails_no_geometry ... ok
[INFO] [stdout] test scene::tests::p2_step_4_65_partial_overlap_preserves_outer ... ok
[INFO] [stdout] test scene::tests::p5e_beta_scene_no_default_material_field_compile_check ... ok
[INFO] [stdout] test scene::tests::promote_shape_fails_not_watertight ... ok
[INFO] [stdout] test scene::tests::promote_shape_fails_shape_not_found ... ok
[INFO] [stdout] test scene::tests::promote_shape_success_linear ... ok
[INFO] [stdout] test scene::tests::exec_create_solid_extrude_plane_circle_cylinder_via_shape_path ... ok
[INFO] [stdout] test scene::tests::promote_shape_fails_invalid_material ... ok
[INFO] [stdout] test scene::tests::promote_demote_promote_roundtrip_preserves_id ... ok
[INFO] [stdout] test scene::tests::rebuild_face_to_shape_after_snapshot_restore ... ok
[INFO] [stdout] test scene::tests::p5e_gamma_draw_rect_as_shape_single_undo_restores_pre_rect ... ok
[INFO] [stdout] test scene::tests::p5e_gamma_draw_circle_as_shape_single_undo_restores_pre_circle ... ok
[INFO] [stdout] test scene::tests::p5e_gamma_draw_line_as_shape_single_undo_restores_pre_line ... ok
[INFO] [stdout] test scene::tests::promote_shape_success_volumetric ... ok
[INFO] [stdout] test scene::tests::set_edge_class_flip_works_for_free_edge ... ok
[INFO] [stdout] test scene::tests::promote_shape_preserves_shape_and_face_to_xia_no_locked_regression ... ok
[INFO] [stdout] test scene::tests::p2_step_4_65_single_inner_baseline ... ok
[INFO] [stdout] test scene::tests::shape_clear_removes_all_but_preserves_xia_and_boolean_group_tags ... ok
[INFO] [stdout] test scene::tests::shape_create_returns_unique_increasing_ids ... ok
[INFO] [stdout] test scene::tests::shape_create_with_face_ids_stores_them ... ok
[INFO] [stdout] test scene::tests::shape_delete_returns_true_on_existing_false_on_missing ... ok
[INFO] [stdout] test scene::tests::shape_list_ids_returns_sorted_ascending ... ok
[INFO] [stdout] test scene::tests::shape_id_is_distinct_type_from_xia_id ... ok
[INFO] [stdout] test scene::tests::p2_step_4_65_l_shape_inner_preserves_outer ... ok
[INFO] [stdout] test scene::tests::shape_snapshot_legacy_pre_p3_loads_empty_shape_state ... ok
[INFO] [stdout] test scene::tests::shape_get_returns_none_for_unknown_id ... ok
[INFO] [stdout] test scene::tests::set_edge_class_rejects_demoting_face_bounding_edge ... ok
[INFO] [stdout] test scene::tests::k_gamma_draw_line_as_shape_face_path_attaches_plane_when_loop_closes ... ok
[INFO] [stdout] test scene::tests::shape_snapshot_round_trip_preserves_next_shape_id ... ok
[INFO] [stdout] test scene::tests::shape_snapshot_round_trip_no_regression_to_locked_layers ... ok
[INFO] [stdout] test scene::tests::p2_step_4_65_t_shape_inner_preserves_outer ... ok
[INFO] [stdout] test scene::tests::shape_snapshot_round_trip_preserves_shapes ... ok
[INFO] [stdout] test scene::tests::test_adr016_path_b_inner_first_then_outer_resynthesize ... ok
[INFO] [stdout] test scene::tests::test_adr016_path_b_hole_edge_resynthesize ... ok
[INFO] [stdout] test scene::tests::test_adjacent_rect_face_synthesizes ... ok
[INFO] [stdout] test scene::tests::test_adr050_promote_linear_happy_path ... ok
[INFO] [stdout] test scene::tests::test_adr050_promote_rejects_default_material ... ok
[INFO] [stdout] test scene::tests::shape_snapshot_round_trip_preserves_shape_to_xia_linkage ... ok
[INFO] [stdout] test scene::tests::test_adr021_disjoint_second_inner_promotes ... ok
[INFO] [stdout] test scene::tests::test_adr050_promote_rejects_non_watertight ... ok
[INFO] [stdout] test scene::tests::test_2x2_grid_all_faces_synthesize ... ok
[INFO] [stdout] test scene::tests::adr109_pi_beta_arc_extrude_promotes_cylinder ... ok
[INFO] [stdout] test scene::tests::test_adr019_p6_adjacent_face_erase_creates_merged ... ok
[INFO] [stdout] test scene::tests::p2_step_4_65_3x3_grid_stress_baseline ... ok
[INFO] [stdout] test scene::tests::test_adr016_single_inner_promotes_to_hole ... ok
[INFO] [stdout] test scene::tests::test_deselect_all ... ok
[INFO] [stdout] test scene::tests::test_draw_circle_creates_face ... ok
[INFO] [stdout] test scene::tests::test_collinear_adjacent_rect_synthesizes ... ok
[INFO] [stdout] test scene::tests::test_draw_line_creates_edge ... ok
[INFO] [stdout] test scene::tests::test_adr019_a6_closed_wire_loop_in_face_interior_synthesizes ... ok
[INFO] [stdout] test scene::tests::p2_step_4_65_surrounded_dissolve_no_silent_total_dissolve ... ok
[INFO] [stdout] test scene::tests::test_adr050_promote_volumetric_happy_path ... ok
[INFO] [stdout] test scene::tests::test_draw_lines_no_auto_face_open ... ok
[INFO] [stdout] test scene::tests::test_draw_lines_triangle_auto_face ... ok
[INFO] [stdout] test scene::tests::test_adr021_p7_case_a_inner_first_then_outer ... ok
[INFO] [stdout] test scene::tests::test_adr021_p7_case_b_outer_first_then_inner ... ok
[INFO] [stdout] test scene::tests::test_drawcircle_edges_carry_arc_curve ... ok
[INFO] [stdout] test scene::tests::test_drawcircle_topology_unchanged_after_curve_attach ... ok
[INFO] [stdout] test scene::tests::test_drawcircle_lod_refinement_via_tessellate_edge ... ok
[INFO] [stdout] test scene::tests::test_adr050_promote_rejects_unknown_xia ... ok
[INFO] [stdout] test scene::tests::test_draw_rectangle_creates_xia ... ok
[INFO] [stdout] test scene::tests::test_all_rects_have_consistent_winding ... ok
[INFO] [stdout] test scene::tests::test_erase_inner_face_edge_topology_consistent ... ok
[INFO] [stdout] test scene::tests::test_adr021_phaseB_3level_nested_smallest_first ... ok
[INFO] [stdout] test scene::tests::test_erase_shared_edge_merges_faces ... ok
[INFO] [stdout] test scene::tests::test_enclosing_outer_after_overlapping_inners ... ok
[INFO] [stdout] test scene::tests::test_face_merge_preserves_winding ... ok
[INFO] [stdout] test scene::tests::test_lshape_merge_no_residual_edges ... ok
[INFO] [stdout] test scene::tests::test_multiple_rects_inside_face_all_synthesize ... ok
[INFO] [stdout] test scene::tests::test_free_edge_cycle_auto_synthesizes_face ... ok
[INFO] [stdout] test scene::tests::test_lshape_with_inner_rects_all_faced ... ok
[INFO] [stdout] test scene::tests::test_multi_shared_edge_merge ... ok
[INFO] [stdout] test scene::tests::test_outer_rect_drawn_after_inners_keeps_face ... ok
[INFO] [stdout] test scene::tests::test_face_with_split_boundary_can_merge ... ok
[INFO] [stdout] test scene::tests::test_nested_plus_side_rect_no_flipped_normal ... ok
[INFO] [stdout] test scene::tests::test_grid_of_rects_progressive_merge ... ok
[INFO] [stdout] test scene::tests::test_outer_with_two_partial_overlap_inners ... ok
[INFO] [stdout] test scene::tests::test_overlapping_rects_corner_overlap ... ok
[INFO] [stdout] test scene::tests::test_overlapping_rects_preserve_overlap_region ... ok
[INFO] [stdout] test scene::tests::test_p7_canonical_disjoint_inner_multi_hole ... ok
[INFO] [stdout] test scene::tests::test_p7_canonical_burge_centered_scenario_no_violations ... ok
[INFO] [stdout] test scene::tests::test_p7_canonical_stacked_inner_manifold ... ok
[INFO] [stdout] test scene::tests::test_draw_order_independence ... ok
[INFO] [stdout] test scene::tests::test_p7_canonical_sweep_locked_scenarios ... ok
[INFO] [stdout] test scene::tests::test_outer_edge_collinear_overlap_with_inner ... ok
[INFO] [stdout] test scene::tests::test_merge_chain_count_shared_edges ... ok
[INFO] [stdout] test scene::tests::test_column_of_inner_rects_all_faced ... ok
[INFO] [stdout] test scene::tests::test_outer_rect_preserved_after_many_inners ... ok
[INFO] [stdout] test scene::tests::test_phaseA_isolated_4line_rect_no_promote ... ok
[INFO] [stdout] test scene::tests::test_p9_corner_pinch_two_inners_become_two_holes ... ok
[INFO] [stdout] test scene::tests::test_phaseA_3level_nested_radial_check_after_each_step ... ok
[INFO] [stdout] test scene::tests::test_p9_manifold_invariant_preserved ... ok
[INFO] [stdout] test scene::tests::test_phaseA_promote_keeps_outer_radial_manifold ... ok
[INFO] [stdout] test scene::tests::test_phaseA_postprocess_promote_path_radial ... ok
[INFO] [stdout] test scene::tests::test_outer_with_overlapping_extending_rects ... ok
[INFO] [stdout] test scene::tests::test_push_pull_and_undo ... ok
[INFO] [stdout] test scene::tests::test_rect_on_existing_edge_preserves_topology ... ok
[INFO] [stdout] test scene::tests::test_preview_returns_face_ids_for_mergeable ... ok
[INFO] [stdout] test scene::tests::test_scene_default ... ok
[INFO] [stdout] test scene::tests::test_rect_sharing_two_existing_edges_synthesizes ... ok
[INFO] [stdout] test scene::tests::test_scene_stats_empty ... ok
[INFO] [stdout] test scene::tests::test_outer_edge_coincides_with_inner_edge ... ok
[INFO] [stdout] test scene::tests::test_selection_single ... ok
[INFO] [stdout] test scene::tests::test_selection_additive ... ok
[INFO] [stdout] test scene::tests::test_simple_adjacent_rects_preview_is_mergeable ... ok
[INFO] [stdout] test scene::tests::test_push_pull_creates_faces ... ok
[INFO] [stdout] test scene::tests::test_scene_creation ... ok
[INFO] [stdout] test scene::tests::test_preview_edge_merge_simple_adjacent ... ok
[INFO] [stdout] test scene::tests::test_undo_rectangle ... ok
[INFO] [stdout] test scene::tests::test_two_stacked_inner_rects_both_faced ... ok
[INFO] [stdout] test scene::tests::test_three_overlapping_rects_no_missing_cell ... ok
[INFO] [stdout] test scene::tests::test_three_rects_in_row_merge_sequentially ... ok
[INFO] [stdout] test scene::tests::test_undo_redo_sequence ... ok
[INFO] [stdout] test scene::tests::test_rect_with_all_existing_edges_creates_face ... ok
[INFO] [stdout] test scene::tests::test_multi_shared_preview_recognizes_mergeable ... ok
[INFO] [stdout] test scene::tests::test_deeply_nested_rects_all_have_faces ... ok
[INFO] [stdout] test scene::tests::test_two_adjacent_rects_merge_via_shared_edge ... ok
[INFO] [stdout] test scene::tests::test_p9_pinch_drawing_order_independence ... ok
[INFO] [stdout] test scene::tests::test_user_stress_bisect_2crossing_only ... ok
[INFO] [stdout] test scene::tests::test_multiple_operations_consistency ... ok
[INFO] [stdout] test scene::tests::test_complex_overlap_no_missing_faces ... ok
[INFO] [stdout] test scene::tests::test_multi_rect_stress_no_missing_cells ... ok
[INFO] [stdout] test scene::tests::test_partial_overlap_no_degenerate_faces ... ok
[INFO] [stdout] test scene::tests::test_partial_overlap_all_adjacent_faces_mergeable ... ok
[INFO] [stdout] test shape::tests::shape_serde_roundtrip ... ok
[INFO] [stdout] test shape::tests::shape_new_starts_empty ... ok
[INFO] [stdout] test shape::tests::shape_id_newtype_roundtrip ... ok
[INFO] [stdout] test scene::tests::v1_load_drops_xias_but_preserves_mesh ... ok
[INFO] [stdout] test scene::tests::v2_roundtrip_preserves_xias_and_face_ownership ... ok
[INFO] [stdout] test scene::tests::test_very_large_outer_after_small_inners ... ok
[INFO] [stdout] test scene::tests::test_user_pattern_no_missing_faces ... ok
[INFO] [stdout] test scene::tests::test_user_stress_bisect_no_inners ... ok
[INFO] [stdout] test scene::tests::test_user_stress_bisect_inners_only ... ok
[INFO] [stdout] test scene::tests::test_user_stress_bisect_20inners_plus_1large ... ok
[INFO] [stdout] test scene::tests::test_user_stress_bisect_20_plus_2large_diag ... ok
[INFO] [stdout] test scene::tests::test_user_stress_bisect_20_plus_1cross_diag ... ok
[INFO] [stdout] test scene::tests::test_user_stress_bisect_20_2large_1cross_diag ... ok
[INFO] [stdout] test scene::tests::test_user_stress_bisect_20_2large_2cross_diag ... ok
[INFO] [stdout] test scene::tests::test_p11_27rect_orphan_count_regression_guard ... ok
[INFO] [stderr]      Running tests/burge_face_loss_repro.rs (/opt/rustwide/target/debug/deps/burge_face_loss_repro-787cee360379e5b6)
[INFO] [stdout] test scene::tests::test_user_stress_27_overlapping_rects_all_close ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 326 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.80s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 6 tests
[INFO] [stdout] test load_burge_inspect_state ... ok
[INFO] [stdout] test resynthesize_orphan_faces_does_not_panic_on_burge ... ok
[INFO] [stdout] test load_burge_then_draw_crossing_rect ... ok
[INFO] [stdout] test load_burge_stress_multiple_crossing_rects ... ok
[INFO] [stdout] test stress_20_overlapping_rects_auto_intersect_off ... ok
[INFO] [stdout] test stress_20_overlapping_rects_detailed_log ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.21s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/intersect_with_model.rs (/opt/rustwide/target/debug/deps/intersect_with_model-3aec0eda55733922)
[INFO] [stdout] 
[INFO] [stdout] running 6 tests
[INFO] [stdout] test coplanar_rects_no_extra_split_from_intersect ... ok
[INFO] [stdout] test no_intersection_no_change ... ok
[INFO] [stdout] test two_rects_cross_in_3d_split_both ... ok
[INFO] [stdout] test auto_intersect_on_draw_single_undo ... ok
[INFO] [stdout] test intersect_undo_restores_scene ... ok
[INFO] [stdout] test auto_intersect_toggle_affects_result ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/primitive_auto_intersect.rs (/opt/rustwide/target/debug/deps/primitive_auto_intersect-c2a9235076d21bbd)
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] test primitive_box_is_closed_volume ... ok
[INFO] [stdout] test primitive_no_intersection_when_disjoint ... ok
[INFO] [stdout] test primitive_cylinder_intersects_existing_rect ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/repair_non_manifold.rs (/opt/rustwide/target/debug/deps/repair_non_manifold-970712bd488ff8a8)
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] test repair_is_noop_on_clean_scene ... ok
[INFO] [stdout] test repair_clears_non_manifold_edges_on_two_touching_cubes ... ok
[INFO] [stdout] test strict_export_auto_repairs_then_succeeds ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/six_rect_chain.rs (/opt/rustwide/target/debug/deps/six_rect_chain-bec5a7812b3b7fc1)
[INFO] [stdout] 
[INFO] [stdout] running 4 tests
[INFO] [stdout] test three_rect_chain_diagonal ... ok
[INFO] [stdout] test four_rect_chain ... ok
[INFO] [stdout] test five_rects_with_small_inner ... ok
[INFO] [stdout] test six_rect_full_chain_no_holes ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.09s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/slice_volume_scene.rs (/opt/rustwide/target/debug/deps/slice_volume_scene-6bed0c665bf7cd03)
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] test scene_slice_rejects_multi_xia_input ... ok
[INFO] [stdout] test scene_slice_creates_two_xias ... ok
[INFO] [stdout] test scene_slice_supports_undo ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/two_rects_merge_user_flow.rs (/opt/rustwide/target/debug/deps/two_rects_merge_user_flow-be6bde994d0bb8a2)
[INFO] [stdout] 
[INFO] [stdout] running 11 tests
[INFO] [stdout] test inner_rect_inside_bigger_face_creates_subface_with_hole ... ok
[INFO] [stdout] test two_rects_with_snap_drift_fail_standard_merge ... ok
[INFO] [stdout] test single_rect_produces_one_face ... ok
[INFO] [stdout] test m1_one_corner_in_xy_plane_three_faces ... ok
[INFO] [stdout] test two_adjacent_rects_share_edge_through_scene_api ... ok
[INFO] [stdout] test outer_rect_enclosing_inner_rects_creates_overlapping_faces ... ok
[INFO] [stdout] test m1_one_corner_in_xz_plane_three_faces ... ok
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/axia_foreign-57858521962178da)
[INFO] [stdout] test rect_equivalent_to_4_lines ... ok
[INFO] [stdout] test overlapping_rect_splits_into_subfaces ... ok
[INFO] [stdout] test rect_edges_cross_face_boundary_twice ... ok
[INFO] [stdout] test partial_overlap_rect_splits_big_face ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 138 tests
[INFO] [stdout] test conic_converter::tests::full_ellipse_weights_alternate_one_and_sqrt2_half ... ok
[INFO] [stdout] test conic_converter::tests::full_ellipse_knots_match_piegl_a71 ... ok
[INFO] [stdout] test conic_converter::tests::full_ellipse_with_axes_2_and_3 ... ok
[INFO] [stdout] test conic_converter::tests::full_ellipse_with_3d_orientation ... ok
[INFO] [stdout] test conic_converter::tests::full_ellipse_with_offset_center ... ok
[INFO] [stdout] test conic_converter::tests::full_ellipse_unit_circle_control_points ... ok
[INFO] [stdout] test conic_converter::tests::hyperbola_symmetric_trim_zero_axis ... ok
[INFO] [stdout] test conic_converter::tests::hyperbola_3d_orientation ... ok
[INFO] [stdout] test conic_converter::tests::hyperbola_with_a_2_b_3 ... ok
[INFO] [stdout] test conic_converter::tests::nurbs_evaluation_at_knot_breakpoints ... ok
[INFO] [stdout] test conic_converter::tests::parabola_asymmetric_trim ... ok
[INFO] [stdout] test conic_converter::tests::parabola_symmetric_trim_y2_eq_4fx ... ok
[INFO] [stdout] test conic_converter::tests::parabola_offset_center_3d ... ok
[INFO] [stdout] test iges::tests::classify_curve_iges_types_known ... ok
[INFO] [stdout] test iges::tests::classify_surface_iges_types_known ... ok
[INFO] [stdout] test promote_curve::tests::expand_knots_basic ... ok
[INFO] [stdout] test promote_curve::tests::promote_returns_tessellate_with_warnings_for_stub ... ok
[INFO] [stdout] test iges::tests::classify_curve_iges_unknown_returns_unsupported ... ok
[INFO] [stdout] test iges::tests::parse_empty_returns_warning_iges ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_circle_full_loop ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_curve_unsupported_kind ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_bspline_count_mismatch_errors ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_ellipse_negative_axis_errors ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_ellipse_trimmed_quarter_arc ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_circle_negative_radius_errors ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_bspline_with_interior_knots ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_ellipse_with_3d_placement ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_bspline_curve_minimal ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_hyperbola_negative_axis_errors ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_line_basic ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_line_zero_magnitude_uses_unit_fallback ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_parabola_without_trim_returns_tessellate ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_trimmed_circle_to_arc_quarter ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_trimmed_curve_basis_unsupported_propagates ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_trimmed_hyperbola_to_nurbs ... ok
[INFO] [stdout] test promote_surface::tests::promote_returns_tessellate_with_warnings_for_stub ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_trimmed_line_with_subrange ... ok
[INFO] [stdout] test promote_curve::tests::supported_kinds_does_not_contain_unsupported ... ok
[INFO] [stdout] test promote_curve::tests::supported_kinds_matches_adr_036_p21_1_count ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_trimmed_parabola_to_bezier ... ok
[INFO] [stdout] test promote_surface::tests::promote_step_cone_invalid_semi_angle_errors ... ok
[INFO] [stdout] test promote_surface::tests::promote_step_cone_apex_calculated ... ok
[INFO] [stdout] test promote_surface::tests::promote_step_cylinder_zero_radius_errors ... ok
[INFO] [stdout] test promote_surface::tests::promote_step_plane_xy ... ok
[INFO] [stdout] test promote_surface::tests::promote_step_revolution_default_axis_dir ... ok
[INFO] [stdout] test iges::tests::classify_surface_iges_unknown_returns_unsupported ... ok
[INFO] [stdout] test promote_surface::tests::promote_step_plane_default_directions ... ok
[INFO] [stdout] test promote_curve::tests::supported_kinds_matches_stage_4a_order ... ok
[INFO] [stdout] test promote_surface::tests::promote_step_cylinder_basic ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_ellipse_axes_3_5_at_offset ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_ellipse_full_unit ... ok
[INFO] [stdout] test promote_surface::tests::promote_step_torus_basic ... ok
[INFO] [stdout] test promote_surface::tests::promote_unsupported_includes_warning ... ok
[INFO] [stdout] test promote_surface::tests::supported_kinds_does_not_contain_unsupported ... ok
[INFO] [stdout] test promote_surface::tests::promote_step_torus_degenerate_self_intersection_errors ... ok
[INFO] [stdout] test promote_surface::tests::supported_kinds_matches_adr_036_p21_2_count ... ok
[INFO] [stdout] test promote_surface::tests::supported_kinds_matches_stage_4a_order ... ok
[INFO] [stdout] test step::tests::classify_curve_entities_match_adr_036_p21_1 ... ok
[INFO] [stdout] test step::tests::classify_unknown_curve_returns_unsupported ... ok
[INFO] [stdout] test step::tests::end_to_end_mixed_curve_surface_pipeline ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_trimmed_curve_no_parameter_value_keeps_original_range ... ok
[INFO] [stdout] test promote_surface::tests::promote_step_surface_unsupported_kind ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_trimmed_curve_sense_false_swaps ... ok
[INFO] [stdout] test promote_curve::tests::promote_unsupported_includes_warning ... ok
[INFO] [stdout] test promote_surface::tests::promote_step_linear_extrusion_of_line_creates_quad ... ok
[INFO] [stdout] test promote_surface::tests::promote_step_revolution_of_offset_point_creates_torus_like_ring ... ok
[INFO] [stdout] test promote_surface::tests::promote_step_sphere_basic ... ok
[INFO] [stdout] test promote_surface::tests::promote_step_sphere_negative_radius_errors ... ok
[INFO] [stdout] test promote_curve::tests::promote_step_curve_missing_entity ... ok
[INFO] [stdout] test promote_surface::tests::promote_step_surface_missing_entity ... ok
[INFO] [stdout] test step::tests::classify_surface_entities_match_adr_036_p21_2 ... ok
[INFO] [stdout] test step::tests::classify_unknown_surface_returns_unsupported ... ok
[INFO] [stdout] test step::tests::parse_ap242_file_detected ... ok
[INFO] [stdout] test step::tests::parse_empty_returns_warning ... ok
[INFO] [stdout] test step::tests::parse_malformed_returns_warning_not_panic ... ok
[INFO] [stdout] test step::tests::step_header_detects_ap203_default ... ok
[INFO] [stdout] test step::tests::parse_minimal_file_succeeds_via_importer ... ok
[INFO] [stdout] test step::tests::step_header_detects_ap242 ... ok
[INFO] [stdout] test step_lexer::tests::block_comment_skipped ... ok
[INFO] [stdout] test step_lexer::tests::empty_input_yields_eof ... ok
[INFO] [stdout] test step_lexer::tests::entity_ref ... ok
[INFO] [stdout] test step::tests::step_header_detects_ap214 ... ok
[INFO] [stdout] test step_lexer::tests::enum_literal ... ok
[INFO] [stdout] test step_lexer::tests::entity_ref_without_digits_errors ... ok
[INFO] [stdout] test step_lexer::tests::full_entity_assignment ... ok
[INFO] [stdout] test step_lexer::tests::enum_missing_closing_dot_errors ... ok
[INFO] [stdout] test step_lexer::tests::header_section_realistic ... ok
[INFO] [stdout] test step_lexer::tests::integer_and_float ... ok
[INFO] [stdout] test step_lexer::tests::position_tracking_line_column ... ok
[INFO] [stdout] test step_lexer::tests::string_literal_and_escape ... ok
[INFO] [stdout] test step_lexer::tests::punctuation_tokens ... ok
[INFO] [stdout] test step_lexer::tests::tag_keywords ... ok
[INFO] [stdout] test step_lexer::tests::unterminated_comment_errors ... ok
[INFO] [stdout] test step_lexer::tests::whitespace_only_yields_eof ... ok
[INFO] [stdout] test step_lexer::tests::unterminated_string_errors ... ok
[INFO] [stdout] test step_parser::tests::iso_prefix_optional ... ok
[INFO] [stdout] test step_parser::tests::empty_arg_list ... ok
[INFO] [stdout] test step_parser::tests::nested_list_args ... ok
[INFO] [stdout] test step_parser::tests::parse_duplicate_entity_id_errors ... ok
[INFO] [stdout] test step_parser::tests::parse_line_with_refs ... ok
[INFO] [stdout] test step_parser::tests::parse_minimal_file_succeeds ... ok
[INFO] [stdout] test step_parser::tests::parse_null_and_derived_args ... ok
[INFO] [stdout] test step_parser::tests::parse_typed_value ... ok
[INFO] [stdout] test step_parser::tests::parse_missing_data_errors ... ok
[INFO] [stdout] test step_parser::tests::value_helpers_work ... ok
[INFO] [stdout] test step_parser::tests::parse_single_cartesian_point ... ok
[INFO] [stdout] test step_resolver::tests::cache_returns_same_value_on_repeat ... ok
[INFO] [stdout] test step_parser::tests::realistic_step_fragment ... ok
[INFO] [stdout] test step_parser::tests::parse_multiple_header_entities ... ok
[INFO] [stdout] test step_resolver::tests::resolve_axis2_placement_chain_errors ... ok
[INFO] [stdout] test step_resolver::tests::resolve_cartesian_point_2d_errors ... ok
[INFO] [stdout] test step_resolver::tests::resolve_axis2_placement_default_directions ... ok
[INFO] [stdout] test step_parser::tests::parse_missing_header_errors ... ok
[INFO] [stdout] test step_resolver::tests::resolve_axis2_placement_basic ... ok
[INFO] [stdout] test step_resolver::tests::resolve_cartesian_point_grid_2x3 ... ok
[INFO] [stdout] test step_resolver::tests::resolve_cartesian_point_wrong_tag_errors ... ok
[INFO] [stdout] test step_resolver::tests::resolve_cartesian_point_missing_id_errors ... ok
[INFO] [stdout] test step_resolver::tests::resolve_direction_already_unit ... ok
[INFO] [stdout] test step_resolver::tests::resolve_cartesian_point_basic ... ok
[INFO] [stdout] test step_resolver::tests::resolve_cartesian_points_batch ... ok
[INFO] [stdout] test step_resolver::tests::resolve_cartesian_point_int_coerced ... ok
[INFO] [stdout] test step_resolver::tests::resolve_error_into_warning_includes_ref ... ok
[INFO] [stdout] test step_resolver::tests::resolve_direction_zero_vector_errors ... ok
[INFO] [stdout] test step_resolver::tests::resolve_direction_normalizes ... ok
[INFO] [stdout] test step_resolver::tests::resolve_ref_list_works ... ok
[INFO] [stdout] test step_resolver::tests::resolve_vector_negative_magnitude_errors ... ok
[INFO] [stdout] test sweep_converter::tests::linear_extrusion_zero_magnitude_collapses_rows ... ok
[INFO] [stdout] test sweep_converter::tests::revolution_axis_aligned_profile_creates_circle ... ok
[INFO] [stdout] test sweep_converter::tests::revolution_profile_on_axis_degenerates_to_point ... ok
[INFO] [stdout] test sweep_converter::tests::revolution_two_point_profile_creates_two_rings ... ok
[INFO] [stdout] test step_resolver::tests::resolve_vector_basic ... ok
[INFO] [stdout] test sweep_converter::tests::revolution_v_weights_pattern_per_profile_cp ... ok
[INFO] [stdout] test sweep_converter::tests::linear_extrusion_preserves_profile_weights ... ok
[INFO] [stdout] test step_resolver::tests::resolve_uint_list_rejects_negative ... ok
[INFO] [stdout] test step_resolver::tests::resolve_error_without_ref ... ok
[INFO] [stdout] test step_resolver::tests::resolve_uint_list_works ... ok
[INFO] [stdout] test sweep_converter::tests::linear_extrusion_line_profile_to_quad ... ok
[INFO] [stderr]      Running tests/cube_roundtrip.rs (/opt/rustwide/target/debug/deps/cube_roundtrip-29588da9c13a55c4)
[INFO] [stdout] test step_resolver::tests::resolve_real_list_works ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 138 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 6 tests
[INFO] [stdout] test b4_cube_stp_parses_successfully ... ok
[INFO] [stdout] test b4_cube_planes_origins_at_cube_vertices ... ok
[INFO] [stdout] test b4_cube_round_trip_geometric_invariants ... ok
[INFO] [stdout] test b4_cube_planes_have_correct_normals ... ok
[INFO] [stdout] test b4_cube_no_warnings_for_valid_input ... ok
[INFO] [stdout] test b4_cube_lines_have_correct_geometry ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/axia_geo-99f03448296f26ed)
[INFO] [stdout] 
[INFO] [stdout] running 1552 tests
[INFO] [stdout] test curves::arc::tests::arc_tessellate_half_circle_count_roughly_half_of_full ... ok
[INFO] [stdout] test curves::arc::tests::arc_tessellate_endpoints_match_evaluate ... ok
[INFO] [stdout] test curves::arc::tests::arc_tessellate_offset_center ... ok
[INFO] [stdout] test curves::arc::tests::arc_tessellate_reverse_direction_supported ... ok
[INFO] [stdout] test curves::arc::tests::arc_tessellate_quarter_segment_count_at_least_2 ... ok
[INFO] [stdout] test curves::arc::tests::arc_tessellate_xz_plane ... ok
[INFO] [stdout] test curves::arc::tests::arc_tessellate_chord_error_within_tol ... ok
[INFO] [stdout] test curves::bezier::tests::arc_length_linear_matches_distance ... ok
[INFO] [stdout] test curves::bezier::tests::cubic_evaluate_endpoints ... ok
[INFO] [stdout] test curves::bezier::tests::de_casteljau_t_one_returns_last_pt ... ok
[INFO] [stdout] test curves::bezier::tests::derivative_endpoint_matches_n_times_first_diff ... ok
[INFO] [stdout] test curves::bezier::tests::derivative_zero_for_single_pt ... ok
[INFO] [stdout] test curves::bezier::tests::de_casteljau_t_zero_returns_first_pt ... ok
[INFO] [stdout] test curves::bezier::tests::arc_length_quadratic_between_chord_and_polygon ... ok
[INFO] [stdout] test curves::bezier::tests::evaluate_empty_control_pts_errors ... ok
[INFO] [stdout] test curves::bezier::tests::evaluate_returns_zero_pt_for_single_control ... ok
[INFO] [stdout] test curves::bezier::tests::linear_bezier_matches_line ... ok
[INFO] [stdout] test curves::bezier::tests::quadratic_evaluate_endpoints ... ok
[INFO] [stdout] test curves::bezier::tests::quadratic_evaluate_midpoint_formula ... ok
[INFO] [stdout] test curves::bezier::tests::subdivide_t_half_concatenation_evaluation_consistency ... ok
[INFO] [stdout] test curves::bezier::tests::subdivide_t_half_left_endpoint_matches_evaluate ... ok
[INFO] [stdout] test curves::bspline::tests::clamped_uniform_knots_cubic_4_ctrl ... ok
[INFO] [stdout] test curves::bspline::tests::derivative_endpoint_tangent_direction ... ok
[INFO] [stdout] test curves::bspline::tests::evaluate_uniform_cubic_continuous_across_knot ... ok
[INFO] [stdout] test curves::bspline::tests::extract_bezier_single_segment_when_no_interior_knots ... ok
[INFO] [stdout] test curves::bspline::tests::extract_bezier_evaluations_match_original_curve ... ok
[INFO] [stdout] test curves::bspline::tests::linear_bspline_matches_polyline_segment ... ok
[INFO] [stdout] test curves::bezier::tests::tessellate_lod_scales_with_tolerance ... ok
[INFO] [stdout] test curves::bspline::tests::derivative_zero_at_degree_zero ... ok
[INFO] [stdout] test curves::bspline::tests::evaluate_clamped_endpoints_match_first_last_ctrl ... ok
[INFO] [stdout] test curves::bspline::tests::clamped_uniform_knots_cubic_6_ctrl ... ok
[INFO] [stdout] test curves::bezier::tests::tessellate_chord_error_within_tol_quadratic_quarter_arc ... ok
[INFO] [stdout] test curves::circle::tests::circle_evaluate_full_2pi_returns_to_start ... ok
[INFO] [stdout] test curves::bezier::tests::tessellate_endpoints_preserved ... ok
[INFO] [stdout] test curves::bspline::tests::validate_rejects_decreasing_knots ... ok
[INFO] [stdout] test curves::bspline::tests::find_knot_span_correctness ... ok
[INFO] [stdout] test curves::bspline::tests::extract_bezier_uniform_cubic_yields_multiple_strips ... ok
[INFO] [stdout] test curves::circle::tests::circle_evaluate_quarter_angle_is_basis_v_endpoint ... ok
[INFO] [stdout] test curves::circle::tests::circle_derivative_perpendicular_to_radius ... ok
[INFO] [stdout] test curves::circle::tests::circle_derivative_magnitude_is_radius ... ok
[INFO] [stdout] test curves::circle::tests::circle_evaluate_offset_center ... ok
[INFO] [stdout] test curves::circle::tests::circle_evaluate_zero_angle_is_basis_u_endpoint ... ok
[INFO] [stdout] test curves::bspline::tests::validate_rejects_wrong_knot_count ... ok
[INFO] [stdout] test curves::bspline::tests::validate_rejects_degree_zero ... ok
[INFO] [stdout] test curves::circle::tests::circle_evaluate_pi_is_negative_basis_u ... ok
[INFO] [stdout] test curves::bspline::tests::parameter_range_clamped ... ok
[INFO] [stdout] test curves::circle::tests::circle_derivative_at_zero_is_basis_v_times_r ... ok
[INFO] [stdout] test curves::circle::tests::circle_evaluate_xz_plane ... ok
[INFO] [stdout] test curves::bspline::tests::validate_rejects_too_few_control_points ... ok
[INFO] [stdout] test curves::circle::tests::circle_tessellate_chord_error_within_tol ... ok
[INFO] [stdout] test curves::circle::tests::circle_tessellate_first_and_last_point_coincide ... ok
[INFO] [stdout] test curves::circle::tests::circle_tessellate_minimum_segments ... ok
[INFO] [stdout] test curves::circle::tests::segment_count_zero_angle_returns_one ... ok
[INFO] [stdout] test curves::conic::tests::pi_constant_imported ... ok
[INFO] [stdout] test curves::curvature::tests::curvature_circle_is_one_over_radius ... ok
[INFO] [stdout] test curves::curvature::tests::g1_between_two_collinear_arcs ... ok
[INFO] [stdout] test curves::curvature::tests::curvature_line_is_zero ... ok
[INFO] [stdout] test curves::conic::tests::arc_as_nurbs_xz_plane ... ok
[INFO] [stdout] test curves::distance::tests::analytic_arc_hover_outside_arc_range_misses ... ok
[INFO] [stdout] test curves::circle::tests::segment_count_zero_radius_returns_one ... ok
[INFO] [stdout] test curves::conic::tests::arc_as_nurbs_135_degree_arc_radius_invariant ... ok
[INFO] [stdout] test curves::conic::tests::arc_as_nurbs_endpoint_match ... ok
[INFO] [stdout] test curves::conic::tests::arc_as_nurbs_offset_center ... ok
[INFO] [stdout] test curves::conic::tests::arc_as_nurbs_quarter_circle_radius_invariant ... ok
[INFO] [stdout] test curves::curvature::tests::g2_violated_when_curvatures_differ ... ok
[INFO] [stdout] test curves::circle::tests::circle_tessellate_count_scales_with_tolerance ... ok
[INFO] [stdout] test curves::distance::tests::circle_ray_above_plane_distance_equals_height ... ok
[INFO] [stdout] test curves::distance::tests::line_endpoint_clamp ... ok
[INFO] [stdout] test curves::distance::tests::circle_ray_through_center_distance_equals_zero_at_two_points ... ok
[INFO] [stdout] test curves::distance::tests::ray_perp_distance_basic ... ok
[INFO] [stdout] test curves::distance::tests::polyline_fallback_when_analytic_diverges ... ok
[INFO] [stdout] test curves::distance::tests::analytic_circle_hover_perfect_radius_distance ... ok
[INFO] [stdout] test curves::curvature::tests::tangent_unit_length_circle ... ok
[INFO] [stdout] test curves::distance::tests::ray_with_non_unit_dir_is_handled_in_release_mode ... ok
[INFO] [stdout] test curves::conic::tests::arc_as_nurbs_short_arc_higher_accuracy ... ok
[INFO] [stdout] test curves::fitting::tests::fit_curve_lsq_reduces_error ... ok
[INFO] [stdout] test curves::fitting::tests::interpolate_curve_passes_through_points ... ok
[INFO] [stdout] test curves::fitting::tests::parameterization_centripetal_smoother_for_sharp_turn ... ok
[INFO] [stdout] test curves::fitting::tests::fit_curve_to_tolerance_terminates ... ok
[INFO] [stdout] test curves::fitting::tests::parameterization_chord_length ... ok
[INFO] [stdout] test curves::intersect::tests::aabb_overlap_padded_no_overlap ... ok
[INFO] [stdout] test curves::intersect::tests::aabb_overlap_padded_basic ... ok
[INFO] [stdout] test curves::intersect::tests::aabb_overlap_padded_with_padding ... ok
[INFO] [stdout] test curves::intersect::tests::intersect_arc_line_at_specific_radius ... ok
[INFO] [stdout] test curves::intersect::tests::intersect_parallel_lines_returns_empty ... ok
[INFO] [stdout] test curves::intersect::tests::intersect_no_overlap_returns_empty ... ok
[INFO] [stdout] test curves::intersect::tests::intersect_two_lines_at_known_point ... ok
[INFO] [stdout] test curves::intersect::tests::nearest_segment_pair_parallel_clamps ... ok
[INFO] [stdout] test curves::intersect::tests::nearest_segment_pair_perpendicular ... ok
[INFO] [stdout] test curves::intersect::tests::newton_refine_converges_for_perpendicular_lines ... ok
[INFO] [stdout] test curves::intersect::tests::intersect_line_circle_two_points ... ok
[INFO] [stdout] test curves::intersect::tests::intersect_returns_angle_at_each_intersection ... ok
[INFO] [stdout] test curves::intersect::tests::intersect_distant_curves_empty ... ok
[INFO] [stdout] test curves::knot::tests::bspline_insert_knot_preserves_evaluate ... ok
[INFO] [stdout] test curves::knot::tests::analytic_curve_insert_knot_bspline ... ok
[INFO] [stdout] test curves::knot::tests::decompose_curve_to_bezier_count_equals_distinct_spans ... ok
[INFO] [stdout] test curves::knot::tests::bspline_refine_with_multiple_knots_equivalent_to_sequence ... ok
[INFO] [stdout] test curves::knot::tests::decompose_then_evaluate_matches_original ... ok
[INFO] [stdout] test curves::knot::tests::degree_elevation_zero_is_no_op ... ok
[INFO] [stdout] test curves::knot::tests::bspline_insert_knot_grows_ctrl_count_by_r ... ok
[INFO] [stdout] test curves::knot::tests::elevate_degree_curve_preserves_shape ... ok
[INFO] [stdout] test curves::knot::tests::analytic_curve_insert_knot_rejects_line ... ok
[INFO] [stdout] test curves::knot::tests::insert_knot_outside_range_returns_err ... ok
[INFO] [stdout] test curves::knot::tests::insert_knot_exceeding_multiplicity_returns_err ... ok
[INFO] [stdout] test curves::knot::tests::nurbs_insert_knot_preserves_weights_count ... ok
[INFO] [stdout] test curves::knot::tests::insert_knot_zero_times_is_no_op ... ok
[INFO] [stdout] test curves::knot::tests::nurbs_insert_knot_preserves_evaluate ... ok
[INFO] [stdout] test curves::line::tests::line_arc_length_diagonal ... ok
[INFO] [stdout] test curves::line::tests::line_arc_length_euclidean ... ok
[INFO] [stdout] test curves::line::tests::line_derivative_constant ... ok
[INFO] [stdout] test curves::line::tests::line_evaluate_extrapolation ... ok
[INFO] [stdout] test curves::line::tests::line_evaluate_endpoints ... ok
[INFO] [stdout] test curves::line::tests::line_evaluate_midpoint ... ok
[INFO] [stdout] test curves::nurbs::tests::evaluate_clamped_endpoints_match_first_last_ctrl ... ok
[INFO] [stdout] test curves::nurbs::tests::derivative_endpoint_tangent_direction ... ok
[INFO] [stdout] test curves::line::tests::line_tessellate_two_points ... ok
[INFO] [stdout] test curves::nurbs::tests::evaluate_homogeneous_returns_correct_w ... ok
[INFO] [stdout] test curves::nurbs::tests::knot_insert_increases_count_by_one ... ok
[INFO] [stdout] test curves::nurbs::tests::evaluate_unit_weights_matches_bspline ... ok
[INFO] [stdout] test curves::nurbs::tests::knot_insert_preserves_geometry ... ok
[INFO] [stdout] test curves::nurbs::tests::parameter_range_clamped ... ok
[INFO] [stdout] test curves::nurbs::tests::validate_rejects_negative_weight ... ok
[INFO] [stdout] test curves::nurbs::tests::weight_increases_pull_curve_toward_ctrl_point ... ok
[INFO] [stdout] test curves::nurbs::tests::validate_rejects_zero_weight ... ok
[INFO] [stdout] test curves::nurbs::tests::weighted_circle_quarter_arc_radius_invariant ... ok
[INFO] [stdout] test curves::synthesize::tests::face_surface_mandatory_synthesizes_plane_by_default ... ok
[INFO] [stdout] test curves::synthesize::tests::parameter_at_3d_point_bezier_deferred ... ok
[INFO] [stdout] test curves::synthesize::tests::parameter_at_3d_point_on_arc_respects_range ... ok
[INFO] [stdout] test curves::synthesize::tests::parameter_at_3d_point_line_rejects_off_curve ... ok
[INFO] [stdout] test curves::synthesize::tests::parameter_at_3d_point_on_circle ... ok
[INFO] [stdout] test curves::synthesize::tests::analytic_surface_size_within_budget ... ok
[INFO] [stdout] test curves::synthesize::tests::edge_curve_mandatory_synthesizes_line_by_default ... ok
[INFO] [stdout] test curves::nurbs::tests::validate_rejects_weight_count_mismatch ... ok
[INFO] [stdout] test curves::synthesize::tests::parameter_at_3d_point_on_line ... ok
[INFO] [stdout] test curves::synthesize::tests::parameter_at_3d_point_roundtrip_line_arc ... ok
[INFO] [stdout] test curves::synthesize::tests::split_at_circle_returns_err ... ok
[INFO] [stdout] test curves::synthesize::tests::split_at_line_produces_two_lines ... ok
[INFO] [stdout] test curves::synthesize::tests::split_at_arc_produces_two_arcs ... ok
[INFO] [stdout] test curves::synthesize::tests::synthesize_plane_uses_newell_normal_and_centroid ... ok
[INFO] [stdout] test curves::synthesize::tests::synthesize_plane_degenerate_loop_falls_back ... ok
[INFO] [stdout] test curves::synthesize::tests::split_at_bezier_returns_err_pending_phase_i ... ok
[INFO] [stdout] test curves::tests::adr103_epsilon2_bezier_migrates_all_control_points ... ok
[INFO] [stdout] test curves::tests::adr103_epsilon2_line_migration_is_no_op ... ok
[INFO] [stdout] test curves::tests::analytic_curve_parameter_range_circle ... ok
[INFO] [stdout] test curves::tests::analytic_curve_parameter_range_line ... ok
[INFO] [stdout] test curves::tests::arc_length_arc_radius_times_angle ... ok
[INFO] [stdout] test curves::tests::arc_length_circle_2pi_r ... ok
[INFO] [stdout] test curves::tests::basis_v_right_handed ... ok
[INFO] [stdout] test curves::tests::analytic_curve_parameter_range_arc ... ok
[INFO] [stdout] test curves::tests::adr103_epsilon2_circle_migrates_center_normal_basis_u ... ok
[INFO] [stdout] test curves::tests::basis_v_orthogonal_to_inputs ... ok
[INFO] [stdout] test curves::transform::tests::arc_rigid_transform_preserves_angles ... ok
[INFO] [stdout] test curves::nurbs::tests::tessellate_endpoints_preserved ... ok
[INFO] [stdout] test curves::transform::tests::circle_uniform_scale_preserves_kind_scales_radius ... ok
[INFO] [stdout] test curves::transform::tests::classify_identity ... ok
[INFO] [stdout] test curves::transform::tests::classify_rotation ... ok
[INFO] [stdout] test curves::transform::tests::classify_rotation_plus_translation ... ok
[INFO] [stdout] test curves::transform::tests::classify_translation ... ok
[INFO] [stdout] test curves::transform::tests::classify_uniform_scale ... ok
[INFO] [stdout] test curves::transform::tests::bspline_affine_preserves_knots ... ok
[INFO] [stdout] test curves::transform::tests::circle_non_uniform_returns_error_until_step2 ... ok
[INFO] [stdout] test curves::transform::tests::circle_translate_preserves_kind ... ok
[INFO] [stdout] test curves::transform::tests::classify_non_uniform ... ok
[INFO] [stdout] test entities::edge::tests::adr089_a_beta_self_loop_edge_constructible ... ok
[INFO] [stdout] test curves::transform::tests::transform_round_trip_identity ... ok
[INFO] [stdout] test entities::edge::tests::adr089_a_beta_open_edge_is_not_self_loop ... ok
[INFO] [stdout] test entities::edge::tests::adr089_a_beta_self_loop_serde_roundtrip_preserves ... ok
[INFO] [stdout] test entities::edge::tests::adr089_a_beta_self_loop_with_circle_curve_attached ... ok
[INFO] [stdout] test entities::edge::tests::adr089_a_beta_vert_pair_key_self_loop_canonical ... ok
[INFO] [stdout] test curves::transform::tests::circle_rotation_preserves_radius ... ok
[INFO] [stdout] test entities::edge::tests::adr_059_edge_curve_mandatory_returns_attached_curve ... ok
[INFO] [stdout] test entities::edge::tests::adr_059_edge_curve_mandatory_synthesizes_line_when_none ... ok
[INFO] [stdout] test entities::edge::tests::edge_default_curve_is_none ... ok
[INFO] [stdout] test entities::edge::tests::edge_is_curved_false_for_line_variant ... ok
[INFO] [stdout] test entities::edge::tests::edge_cache_invalidates_after_load ... ok
[INFO] [stdout] test curves::transform::tests::line_transform_is_no_op ... ok
[INFO] [stdout] test curves::transform::tests::nurbs_rigid_preserves_weights ... ok
[INFO] [stdout] test entities::edge::tests::edge_is_curved_true_for_nurbs ... ok
[INFO] [stdout] test entities::edge::tests::edge_set_curve_bumps_version ... ok
[INFO] [stdout] test entities::edge::tests::edge_serde_skips_cache ... ok
[INFO] [stdout] test entities::edge::tests::edge_serialize_legacy_no_curve_field_loads_as_none ... ok
[INFO] [stdout] test entities::edge::tests::edge_default_cache_state ... ok
[INFO] [stdout] test entities::edge::tests::edge_serialize_with_curve_roundtrip ... ok
[INFO] [stdout] test entities::edge::tests::edge_set_curve_clear ... ok
[INFO] [stdout] test entities::edge::tests::edge_set_curve_to_arc ... ok
[INFO] [stdout] test entities::face::tests::adr_059_face_surface_mandatory_synthesizes_plane_when_none ... ok
[INFO] [stdout] test entities::face::tests::adr_059_face_surface_mandatory_returns_attached_surface ... ok
[INFO] [stdout] test entities::face::tests::face_cache_invalidates_after_load ... ok
[INFO] [stdout] test entities::face::tests::face_default_cache_state ... ok
[INFO] [stdout] test entities::face::tests::face_serde_skips_cache ... ok
[INFO] [stdout] test mesh::tests::add_edge_with_bezier_curve_then_tessellate ... ok
[INFO] [stdout] test entities::face::tests::face_set_surface_bumps_version ... ok
[INFO] [stdout] test curves::transform::tests::classify_reflection_is_non_uniform ... ok
[INFO] [stdout] test mesh::tests::add_edge_with_curve_overwrites_existing_edge_curve ... ok
[INFO] [stdout] test mesh::tests::add_inner_and_clear_bump_face_boundary_version ... ok
[INFO] [stdout] test curves::intersect::tests::intersect_arc_arc_two_points ... ok
[INFO] [stdout] test mesh::tests::add_face_with_holes_rollback_preserves_existing_faces ... ok
[INFO] [stdout] test mesh::tests::add_face_with_holes_rollback_on_invalid_inner ... ok
[INFO] [stdout] test mesh::tests::add_edge_with_bspline_curve_clamped_endpoints ... ok
[INFO] [stdout] test curves::transform::tests::bezier_affine_preserves_kind ... ok
[INFO] [stdout] test mesh::tests::adr088_edges_by_curve_owner_groups_correctly ... ok
[INFO] [stdout] test mesh::tests::add_edge_with_curve_creates_new_edge_with_curve ... ok
[INFO] [stdout] test mesh::tests::adr088_mesh_counter_monotonic_unique ... ok
[INFO] [stdout] test mesh::tests::adr089_a_alpha_closed_bspline_creates_self_loop_face ... ok
[INFO] [stdout] test mesh::tests::adr088_edge_default_curve_owner_id_is_none ... ok
[INFO] [stdout] test mesh::tests::adr089_a_alpha_invalid_knots_rejected ... ok
[INFO] [stdout] test mesh::tests::adr089_a_beta_arcs_still_rejected ... ok
[INFO] [stdout] test mesh::tests::adr089_a_beta_closed_nurbs_creates_self_loop_face ... ok
[INFO] [stdout] test mesh::tests::adr089_a_chi_split_face_no_surface_unchanged ... ok
[INFO] [stdout] test mesh::tests::adr089_a_delta_face_normal_inherited_from_curve ... ok
[INFO] [stdout] test mesh::tests::adr089_a_alpha_open_bspline_rejected ... ok
[INFO] [stdout] test mesh::tests::adr089_a_chi_split_face_propagates_surface_to_face_b ... ok
[INFO] [stdout] test mesh::tests::adr089_a_chi_split_propagates_cylinder_with_full_uv_range ... ok
[INFO] [stdout] test curves::intersect::tests::intersect_self_returns_empty_or_full_overlap ... ok
[INFO] [stdout] test mesh::tests::adr089_a_delta_he_self_cycle_correct ... ok
[INFO] [stdout] test mesh::tests::adr089_a_delta_is_periodic_knots_clamped_rejected ... ok
[INFO] [stdout] test mesh::tests::adr089_a_delta_is_periodic_knots_uniform_not_clamped ... ok
[INFO] [stdout] test mesh::tests::adr089_a_delta_is_periodic_knots_non_uniform_rejected ... ok
[INFO] [stdout] test mesh::tests::adr089_a_delta_periodic_bspline_open_polygon_accepted ... ok
[INFO] [stdout] test mesh::tests::adr089_a_delta_two_circles_independent ... ok
[INFO] [stdout] test mesh::tests::adr089_a_delta_rejects_non_circle_curve ... ok
[INFO] [stdout] test mesh::tests::adr089_a_delta_rejects_invalid_anchor ... ok
[INFO] [stdout] test mesh::tests::adr089_a_epsilon_anchor_position_dedup_via_spatial_hash ... ok
[INFO] [stdout] test mesh::tests::adr089_a_beta_open_nurbs_rejected ... ok
[INFO] [stdout] test mesh::tests::adr089_a_delta_periodic_nurbs_open_polygon_accepted ... ok
[INFO] [stdout] test mesh::tests::adr089_a_epsilon_anchor_within_dedup_tol_deduplicates ... ok
[INFO] [stdout] test mesh::tests::adr089_a_beta_zero_weight_nurbs_rejected ... ok
[INFO] [stdout] test mesh::tests::adr089_a_gamma_add_edge_self_loop_creates_2_he ... ok
[INFO] [stdout] test mesh::tests::adr089_a_epsilon_known_limitation_same_anchor_collapse ... ok
[INFO] [stdout] test mesh::tests::adr089_a_epsilon_distinct_anchors_create_distinct_self_loops ... ok
[INFO] [stdout] test mesh::tests::adr089_a_gamma_self_loop_he_dst_matches_anchor ... ok
[INFO] [stdout] test mesh::tests::adr089_a_gamma_normal_polygon_edges_unaffected ... ok
[INFO] [stdout] test mesh::tests::adr089_a_gamma_self_loop_with_circle_curve_persists ... ok
[INFO] [stdout] test mesh::tests::adr089_a_eta_1_polygon_face_unaffected_by_eta_attach ... ok
[INFO] [stdout] test mesh::tests::adr089_a_eta_1_closed_curve_face_has_plane_surface_attached ... ok
[INFO] [stdout] test mesh::tests::adr089_a_gamma_self_loop_he_twin_chain_terminates ... ok
[INFO] [stdout] test mesh::tests::adr089_a_delta_clamped_open_polygon_still_rejected ... ok
[INFO] [stdout] test mesh::tests::adr089_a_delta_closed_circle_face_creates_1_vert_1_edge_1_face ... ok
[INFO] [stdout] test mesh::tests::adr089_a_kappa_polygonal_edge_render_unaffected ... ok
[INFO] [stdout] test mesh::tests::adr089_a_kappa_closed_curve_face_normals_align_with_circle_normal ... ok
[INFO] [stdout] test mesh::tests::adr089_a_eta_1_closed_curve_face_passes_boolean_eligibility ... ok
[INFO] [stdout] test mesh::tests::adr089_a_kappa_closed_curve_edge_emits_polyline_segments ... ok
[INFO] [stdout] test mesh::tests::adr089_a_kappa_closed_curve_face_emits_triangles ... ok
[INFO] [stdout] test mesh::tests::adr089_a_kappa_mixed_polygon_and_closed_curve_both_render ... ok
[INFO] [stdout] test mesh::tests::adr089_a_kappa_polygonal_face_render_unaffected ... ok
[INFO] [stdout] test mesh::tests::adr089_a_omega_circle_path_unaffected ... ok
[INFO] [stdout] test mesh::tests::adr089_a_omega_collinear_bezier_rejected ... ok
[INFO] [stdout] test mesh::tests::adr089_a_omega_closed_bezier_creates_self_loop_face ... ok
[INFO] [stdout] test mesh::tests::adr089_a_phi_cone_quad_emits_sliced_tessellation ... ok
[INFO] [stdout] test mesh::tests::adr089_a_phi_uv_slice_helper_returns_none_for_plane ... ok
[INFO] [stdout] test mesh::tests::adr089_a_phi_sphere_quad_emits_sliced_tessellation ... ok
[INFO] [stdout] test mesh::tests::adr089_a_rho_cylinder_quad_emits_sliced_tessellation ... ok
[INFO] [stdout] test mesh::tests::adr089_a_rho_cylinder_quad_normals_radial ... ok
[INFO] [stdout] test mesh::tests::adr089_a_phi_torus_quad_emits_sliced_tessellation ... ok
[INFO] [stdout] test mesh::tests::adr089_a_rho_cylinder_quad_tessellation_within_quad_bounds ... ok
[INFO] [stdout] test mesh::tests::adr089_a_phi_sphere_quad_normals_radial ... ok
[INFO] [stdout] test mesh::tests::adr089_a_phi_uv_slice_returns_none_for_non_quad_face ... ok
[INFO] [stdout] test mesh::tests::adr089_a_tau_polygonal_no_surface_unchanged ... ok
[INFO] [stdout] test mesh::tests::adr089_a_tau_boundary_edge_still_drawn ... ok
[INFO] [stdout] test mesh::tests::adr089_a_tau_smooth_group_cylinder_edge_hidden ... ok
[INFO] [stdout] test mesh::tests::adr089_a_tau_smooth_group_helper_distinguishes_kinds ... ok
[INFO] [stdout] test mesh::tests::adr089_a_zeta_1_closed_curve_face_passes_invariants ... ok
[INFO] [stdout] test mesh::tests::adr089_a_zeta_1_mixed_polygon_and_closed_curve_pass ... ok
[INFO] [stdout] test mesh::tests::adr089_a_zeta_1_polygon_face_unaffected ... ok
[INFO] [stdout] test mesh::tests::adr089_a_zeta_2_bfs_skips_self_loop_edges ... ok
[INFO] [stdout] test mesh::tests::adr089_a_zeta_2_chain_walk_skips_self_loop_edges ... ok
[INFO] [stdout] test mesh::tests::adr089_a_rho_polygonal_face_unaffected ... ok
[INFO] [stdout] test mesh::tests::adr089_a_zeta_2_self_loop_alone_no_polygon_cycle_returned ... ok
[INFO] [stdout] test mesh::tests::adr089_a_zeta_3_polygon_chain_unaffected_by_fast_path ... ok
[INFO] [stdout] test mesh::tests::adr089_a_zeta_3_mixed_components_handled_independently ... ok
[INFO] [stdout] test mesh::tests::adr094_b_gamma_prep_clear_returns_to_legacy ... ok
[INFO] [stdout] test mesh::tests::adr094_b_gamma_prep_default_no_multi_loop_schema ... ok
[INFO] [stdout] test mesh::tests::adr094_b_gamma_prep_empty_loops_clears_entry ... ok
[INFO] [stdout] test mesh::tests::adr089_a_zeta_3_standalone_self_loop_resolves_to_face ... ok
[INFO] [stdout] test mesh::tests::adr094_b_gamma_prep_set_face_boundary_loops_overrides_legacy ... ok
[INFO] [stdout] test mesh::tests::adr094_b_gamma_prep_legacy_face_outer_inners_unaffected ... ok
[INFO] [stdout] test mesh::tests::adr094_b_gamma_prep_set_on_inactive_face_returns_false ... ok
[INFO] [stdout] test mesh::tests::adr094_b_gamma_prep_snapshot_roundtrip_preserves_multi_loop ... ok
[INFO] [stdout] test mesh::tests::adr094_b_gamma_prep_face_with_inners_legacy_fallback_includes_holes ... ok
[INFO] [stdout] test mesh::tests::adr097_t_beta_clean_mesh_summary_format ... ok
[INFO] [stdout] test mesh::tests::adr097_t_beta_damage_kinds_have_stable_labels ... ok
[INFO] [stdout] test mesh::tests::adr097_t_beta_detect_clean_mesh_returns_empty ... ok
[INFO] [stdout] test mesh::tests::adr097_t_beta_detect_two_face_shared_edge_no_damage ... ok
[INFO] [stdout] test mesh::tests::adr097_t_beta_detect_single_face_has_boundary_edges ... ok
[INFO] [stdout] test mesh::tests::adr097_t_beta_summary_format ... ok
[INFO] [stdout] test mesh::tests::adr097_t_gamma_boundary_edge_only_partial_failure ... ok
[INFO] [stdout] test mesh::tests::adr097_t_beta_inactive_face_skipped ... ok
[INFO] [stdout] test mesh::tests::adr097_t_gamma_clean_mesh_returns_noop ... ok
[INFO] [stdout] test mesh::tests::adr097_t_gamma_recovery_outcome_labels_stable ... ok
[INFO] [stdout] test mesh::tests::adr097_t_gamma_recovery_progress_tracks_fixes_applied ... ok
[INFO] [stdout] test mesh::tests::adr101_phase_a_polygonize_anchor_deactivated_if_isolated ... ok
[INFO] [stdout] test mesh::tests::adr101_phase_a_polygonize_circle_face_happy_path ... ok
[INFO] [stdout] test mesh::tests::adr101_phase_a_polygonize_invariants_preserved ... ok
[INFO] [stdout] test mesh::tests::adr101_phase_a_polygonize_noop_for_non_circle_self_loop ... ok
[INFO] [stdout] test mesh::tests::adr101_phase_a_polygonize_noop_for_polygonal_face ... ok
[INFO] [stdout] test mesh::tests::adr101_phase_a_polygonize_surface_inheritance ... ok
[INFO] [stdout] test mesh::tests::adr104_cone_kernel_native_face_count_2 ... ok
[INFO] [stdout] test mesh::tests::adr104_cone_kernel_native_base_anchor_vertex_count_1 ... ok
[INFO] [stdout] test mesh::tests::adr104_cone_kernel_native_base_self_loop_edge ... ok
[INFO] [stdout] test mesh::tests::adr104_cone_kernel_native_cone_surface_params_canonical ... ok
[INFO] [stdout] test mesh::tests::adr104_cone_kernel_native_invariants_pass ... ok
[INFO] [stdout] test curves::bspline::tests::tessellate_lod_scales_with_tolerance ... ok
[INFO] [stdout] test mesh::tests::adr104_cone_kernel_native_memory_reduction_vs_path_a ... ok
[INFO] [stdout] test mesh::tests::adr104_cone_kernel_native_surface_attached_both_faces ... ok
[INFO] [stdout] test mesh::tests::adr104_cone_kernel_native_zup_canonical_anchor_position ... ok
[INFO] [stdout] test mesh::tests::adr104_sphere_kernel_native_adr094_pattern_mirror ... ok
[INFO] [stdout] test mesh::tests::adr089_a_zeta_1_degenerate_1vert_no_curve_still_violates ... ok
[INFO] [stdout] test mesh::tests::adr104_sphere_kernel_native_equator_anchor_vertex_count_1 ... ok
[INFO] [stdout] test mesh::tests::adr104_sphere_kernel_native_face_count_2 ... ok
[INFO] [stdout] test mesh::tests::adr104_sphere_kernel_native_memory_reduction_vs_path_a ... ok
[INFO] [stdout] test mesh::tests::adr104_sphere_kernel_native_invariants_pass ... ok
[INFO] [stdout] test mesh::tests::adr104_sphere_kernel_native_surface_attached_both_hemispheres ... ok
[INFO] [stdout] test mesh::tests::adr104_sphere_kernel_native_uv_range_v_subset_canonical ... ok
[INFO] [stdout] test mesh::tests::adr104_sphere_kernel_native_zup_canonical_anchor_position ... ok
[INFO] [stdout] test mesh::tests::adr104_torus_kernel_native_anchor_vertex_count_1 ... ok
[INFO] [stdout] test mesh::tests::adr104_torus_kernel_native_face_count_1 ... ok
[INFO] [stdout] test mesh::tests::adr104_torus_kernel_native_flag_default_off ... ok
[INFO] [stdout] test mesh::tests::adr104_torus_kernel_native_flag_toggle ... ok
[INFO] [stdout] test mesh::tests::adr104_torus_kernel_native_memory_reduction_vs_path_a_baseline ... ok
[INFO] [stdout] test mesh::tests::adr104_torus_kernel_native_outer_equator_self_loop_edge ... ok
[INFO] [stdout] test curves::intersect::tests::intersect_circle_circle_returns_two ... ok
[INFO] [stdout] test mesh::tests::adr104_sphere_kernel_native_equator_self_loop_edge ... ok
[INFO] [stdout] test mesh::tests::adr104_torus_kernel_native_surface_attached ... ok
[INFO] [stdout] test mesh::tests::adr104_torus_kernel_native_torus_surface_params_canonical ... ok
[INFO] [stdout] test mesh::tests::adr104_torus_kernel_native_zup_canonical_anchor_position ... ok
[INFO] [stdout] test curves::bspline::tests::arc_length_increases_with_control_polygon_length ... ok
[INFO] [stdout] test mesh::tests::adr121_path_b_cone_side_face_area_non_zero ... ok
[INFO] [stdout] test mesh::tests::adr121_path_b_cylinder_side_area_matches_analytic ... ok
[INFO] [stdout] test mesh::tests::adr121_path_b_sphere_total_area_matches_analytic ... ok
[INFO] [stdout] test mesh::tests::adr121_path_b_torus_face_area_non_zero ... ok
[INFO] [stdout] test mesh::tests::adr121_polygon_face_area_unchanged ... ok
[INFO] [stdout] test mesh::tests::adr174_beta1_non_coplanar_not_detected ... ok
[INFO] [stdout] test mesh::tests::adr174_beta1_polygon_face_not_detected ... ok
[INFO] [stdout] test mesh::tests::adr104_cone_kernel_native_rejects_negative_radius ... ok
[INFO] [stdout] test mesh::tests::adr101_phase_a_polygonize_inactive_face_errors ... ok
[INFO] [stdout] test mesh::tests::adr104_cone_kernel_native_rejects_zero_radius ... ok
[INFO] [stdout] test mesh::tests::adr104_cone_kernel_native_rejects_negative_height ... ok
[INFO] [stdout] test mesh::tests::adr104_cone_kernel_native_rejects_zero_height ... ok
[INFO] [stdout] test mesh::tests::adr174_beta1_secant_detects_independent_of_anchor ... ok
[INFO] [stdout] test mesh::tests::adr174_beta1_tangent_not_detected ... ok
[INFO] [stdout] test mesh::tests::adr174_beta1_segment_outside_disk_not_detected ... ok
[INFO] [stdout] test mesh::tests::adr089_a_omega_open_bezier_rejected ... ok
[INFO] [stdout] test mesh::tests::analytic_face_emits_uniform_face_id_in_face_map ... ok
[INFO] [stdout] test mesh::tests::analytic_cylinder_face_emits_radial_normals ... ok
[INFO] [stdout] test mesh::tests::adr104_sphere_kernel_native_rejects_negative_radius ... ok
[INFO] [stdout] test mesh::tests::adr104_sphere_kernel_native_rejects_zero_radius ... ok
[INFO] [stdout] test mesh::tests::adr104_torus_kernel_native_rejects_minor_geq_major ... ok
[INFO] [stdout] test mesh::tests::adr104_torus_kernel_native_rejects_zero_major_radius ... ok
[INFO] [stdout] test mesh::tests::adr104_torus_kernel_native_rejects_zero_minor_radius ... ok
[INFO] [stdout] test mesh::tests::adr180_precision_policy_units_mm_f64_eps ... ok
[INFO] [stdout] test mesh::tests::adr121_path_b_sphere_face_area_non_zero ... ok
[INFO] [stdout] test mesh::tests::adr174_polygonize_reused_anchor_stays_active ... ok
[INFO] [stdout] test mesh::tests::attach_validated_rejects_drift ... ok
[INFO] [stdout] test mesh::tests::bezier_curve_is_curved_returns_true ... ok
[INFO] [stdout] test mesh::tests::attach_validated_replace_existing_records_previous_kind ... ok
[INFO] [stdout] test mesh::tests::attach_validated_succeeds_when_boundary_fits ... ok
[INFO] [stdout] test mesh::tests::analytic_sphere_face_emits_evaluated_normals ... ok
[INFO] [stdout] test mesh::tests::bspline_serialize_roundtrip ... ok
[INFO] [stdout] test mesh::tests::adr174_beta1_secant_detects_circle_face ... ok
[INFO] [stdout] test mesh::tests::attach_validated_rejects_degenerate_input ... ok
[INFO] [stdout] test mesh::tests::bezier_lod_more_segments_with_finer_tol ... ok
[INFO] [stdout] test mesh::tests::cache_normal_matches_analytic_evaluate ... ok
[INFO] [stdout] test mesh::tests::cache_skips_plane_surface ... ok
[INFO] [stdout] test mesh::tests::cache_hit_returns_identical_data ... ok
[INFO] [stdout] test mesh::tests::cache_stats_reflects_populated_state ... ok
[INFO] [stdout] test mesh::tests::cleanup_degenerate_faces_removes_zero_area ... ok
[INFO] [stdout] test mesh::tests::clear_face_surface_reverts_to_polygon ... ok
[INFO] [stdout] test mesh::tests::d_resolver_deduplicate_overlapping_same_boundary ... ok
[INFO] [stdout] test mesh::tests::d_resolver_cw_cycle_rejected ... ok
[INFO] [stdout] test mesh::tests::d_resolver_required_edges_small_cycle_bypasses_filter ... ok
[INFO] [stdout] test mesh::tests::d_resolver_seed_verts_filter_excludes_untouched_component ... ok
[INFO] [stdout] test mesh::tests::edge_chain_closed_loop ... ok
[INFO] [stdout] test mesh::tests::d_resolver_strip_rejected_by_compactness ... ok
[INFO] [stdout] test mesh::tests::d_resolver_simple_square_creates_one_face ... ok
[INFO] [stdout] test mesh::tests::d_resolver_nested_rect_without_connector_keeps_both ... ok
[INFO] [stdout] test mesh::tests::d_resolver_does_not_regenerate_large_deleted_boundary ... ok
[INFO] [stdout] test mesh::tests::d_resolver_multi_plane_sketch_independent_resolution ... ok
[INFO] [stdout] test mesh::tests::d_resolver_smaller_cycle_not_rejected_by_larger_face_centroid ... ok
[INFO] [stdout] test mesh::tests::d_resolver_large_cycle_with_required_edge_creates_face ... ok
[INFO] [stdout] test mesh::tests::edge_curve_returns_none_for_plain_edge ... ok
[INFO] [stdout] test mesh::tests::face_area_is_correct_for_unit_square ... ok
[INFO] [stdout] test mesh::tests::edge_chain_stops_at_junction ... ok
[INFO] [stdout] test mesh::tests::edge_chain_selects_polyline_through_degree2_verts ... ok
[INFO] [stdout] test mesh::tests::face_surface_default_none ... ok
[INFO] [stdout] test mesh::tests::face_surface_lod_more_triangles_with_finer_tol ... ok
[INFO] [stdout] test mesh::tests::face_surface_serialize_roundtrip ... ok
[INFO] [stdout] test mesh::tests::invariants_empty_mesh_passes ... ok
[INFO] [stdout] test mesh::tests::inners_mut_explicit_bump_helper ... ok
[INFO] [stdout] test mesh::tests::invariants_detect_flipped_normal ... ok
[INFO] [stdout] test mesh::tests::invariants_single_triangle_passes ... ok
[INFO] [stdout] test mesh::tests::invariants_face_with_hole_passes ... ok
[INFO] [stdout] test mesh::tests::invariants_tetrahedron_passes ... ok
[INFO] [stdout] test mesh::tests::manifold_info_minimum_face_count_required ... ok
[INFO] [stdout] test mesh::tests::manifold_info_single_face_is_open ... ok
[INFO] [stdout] test mesh::tests::legacy_face_loads_with_surface_none ... ok
[INFO] [stdout] test mesh::tests::manifold_info_tetra_missing_face_is_open ... ok
[INFO] [stdout] test mesh::tests::is_face_planar_accepts_flat_and_rejects_skewed ... ok
[INFO] [stdout] test mesh::tests::move_vertex_propagates_bumps_to_incident_edges_and_faces ... ok
[INFO] [stdout] test mesh::tests::normalize_winding_fixes_inverted_tetrahedron ... ok
[INFO] [stdout] test mesh::tests::normalize_removes_degenerate_faces ... ok
[INFO] [stdout] test mesh::tests::outward_detect_flipped_face ... ok
[INFO] [stdout] test mesh::tests::outward_open_surface_skips ... ok
[INFO] [stdout] test mesh::tests::normalize_recomputes_normals ... ok
[INFO] [stdout] test mesh::tests::polyline_cache_hit_returns_identical_data ... ok
[INFO] [stdout] test mesh::tests::outward_tetrahedron_all_outward ... ok
[INFO] [stdout] test mesh::tests::polyline_cache_invalidates_on_endpoint_move ... ok
[INFO] [stdout] test mesh::tests::normalize_noop_on_clean_mesh ... ok
[INFO] [stdout] test mesh::tests::polyline_cache_skips_line_curve ... ok
[INFO] [stdout] test mesh::tests::planar_face_uses_dcel_averaging_unchanged ... ok
[INFO] [stdout] test mesh::tests::tessellate_edge_circle_returns_first_eq_last ... ok
[INFO] [stdout] test mesh::tests::set_face_surface_cylinder_persists ... ok
[INFO] [stdout] test mesh::tests::set_face_surface_invalid_face_returns_false ... ok
[INFO] [stdout] test mesh::tests::tessellate_edge_arc_chord_tol ... ok
[INFO] [stdout] test mesh::tests::manifold_info_tetrahedron_is_closed_solid ... ok
[INFO] [stdout] test mesh::tests::mesh_trim_loops_to_dcel_polyline_dedups_at_locked_5 ... ok
[INFO] [stdout] test mesh::tests::set_outer_bumps_face_boundary_version ... ok
[INFO] [stdout] test mesh::tests::regression_polygon_rect_edges_have_no_curve ... ok
[INFO] [stdout] test mesh::tests::tessellate_edge_straight_line_returns_two_points ... ok
[INFO] [stdout] test mesh::tests::test_add_and_remove_face ... ok
[INFO] [stdout] test mesh::tests::tessellate_face_surface_cylinder_returns_triangles ... ok
[INFO] [stdout] test mesh::tests::test_collect_loop_verts ... ok
[INFO] [stdout] test mesh::tests::test_edge_dedup ... ok
[INFO] [stdout] test mesh::tests::test_export_triangle_buffers ... ok
[INFO] [stdout] test mesh::tests::test_create_quad ... ok
[INFO] [stdout] test mesh::tests::tessellate_face_surface_no_surface_returns_none ... ok
[INFO] [stdout] test mesh::tests::test_cleanup_dangling_default_still_removes_orphans ... ok
[INFO] [stdout] test mesh::tests::test_face_material_preservation ... ok
[INFO] [stdout] test mesh::tests::test_face_centroid_triangle ... ok
[INFO] [stdout] test mesh::tests::test_face_normal_computation ... ok
[INFO] [stdout] test mesh::tests::test_cleanup_dangling_excluding_keeps_protected_orphan_edges ... ok
[INFO] [stdout] test mesh::tests::test_face_normal_reversed_winding ... ok
[INFO] [stdout] test mesh::tests::tessellate_edge_lod_chord_tol_changes_segment_count ... ok
[INFO] [stdout] test mesh::tests::test_merge_tolerance_rejects_strict_but_accepts_loose ... ok
[INFO] [stdout] test mesh::tests::test_merge_coplanar_containing_rejects_non_coplanar ... ok
[INFO] [stdout] test mesh::tests::test_merge_coplanar_containing_creates_hole ... ok
[INFO] [stdout] test mesh::tests::test_merge_coplanar_containing_rejects_sharing_edge ... ok
[INFO] [stdout] test mesh::tests::test_multiple_faces_on_same_vertices ... ok
[INFO] [stdout] test mesh::tests::test_merge_coplanar_faces ... ok
[INFO] [stdout] test mesh::tests::trim_loops_to_face_invariants_pass ... ok
[INFO] [stdout] test mesh::tests::trim_loops_to_face_multi_inner_holes ... ok
[INFO] [stdout] test mesh::tests::test_orient_faces_consistent ... ok
[INFO] [stdout] test mesh::tests::test_vertex_dedup ... ok
[INFO] [stdout] test mesh::tests::v_ring_cycle_is_consistent_after_face_creation ... ok
[INFO] [stdout] test mesh::tests::trim_loops_to_face_creates_simple_outer_only ... ok
[INFO] [stdout] test mesh::tests::trim_loops_to_face_rejects_degenerate_outer ... ok
[INFO] [stdout] test mesh_export::adr135_lod_tests::adr135_export_buffers_default_equivalence ... ok
[INFO] [stdout] test mesh_export::adr135_lod_tests::adr135_lod_chord_tol_clamp_lower_bound ... ok
[INFO] [stdout] test mesh_export::adr135_lod_tests::adr135_lod_far_camera_capped_at_1mm ... ok
[INFO] [stdout] test mesh_export::adr135_lod_tests::adr135_lod_mid_camera_proportional ... ok
[INFO] [stdout] test mesh::tests::trim_loops_to_face_with_inner_hole ... ok
[INFO] [stdout] test mesh_export::adr135_lod_tests::adr135_lod_monotonic_non_decreasing ... ok
[INFO] [stdout] test mesh::tests::bspline_lod_more_segments_with_finer_tol ... ok
[INFO] [stdout] test mesh::tests::trim_loops_to_face_dropin_alongside_no_regression ... ok
[INFO] [stdout] test mesh_export::adr135_lod_tests::adr135_lod_negative_distance_treated_as_zero ... ok
[INFO] [stdout] test mesh_migration::tests::migration_bezier_curve_conservatively_preserved ... ok
[INFO] [stdout] test mesh::tests::v_ring_cleans_up_on_edge_removal ... ok
[INFO] [stdout] test mesh_export::adr135_lod_tests::adr135_lod_near_camera_unchanged ... ok
[INFO] [stdout] test mesh_migration::tests::migration_clean_line_curve_preserved ... ok
[INFO] [stdout] test mesh_migration::tests::migration_edges_without_curves_synthesize_line ... ok
[INFO] [stdout] test mesh_migration::tests::migration_drift_detect_demotes_to_line ... ok
[INFO] [stdout] test operations::annulus::tests::adr145_beta1_rejects_inner_not_contained_off_center ... ok
[INFO] [stdout] test mesh_migration::tests::migration_empty_mesh_returns_zero_counts ... ok
[INFO] [stdout] test operations::annulus::tests::adr145_beta1_rejects_not_coplanar ... ok
[INFO] [stdout] test operations::annulus::tests::adr145_beta1_rejects_inner_larger_than_outer ... ok
[INFO] [stdout] test operations::annulus::tests::adr145_beta1plus_promote_concentric_circles_succeeds ... ok
[INFO] [stdout] test mesh_migration::tests::migration_report_counts_match_actual ... ok
[INFO] [stdout] test operations::annulus::tests::adr185_split_rejects_not_contained ... ok
[INFO] [stdout] test operations::array_op::tests::array_linear_preserves_winding ... ok
[INFO] [stdout] test operations::annulus::tests::adr145_beta1_rejects_inactive_outer ... ok
[INFO] [stdout] test operations::array_op::tests::array_linear_rejects_bad_input ... ok
[INFO] [stdout] test operations::array_op::tests::array_linear_creates_n_copies ... ok
[INFO] [stdout] test operations::annulus::tests::adr145_beta1plus_annulus_preserves_manifold_invariants ... ok
[INFO] [stdout] test operations::annulus::tests::adr185_split_keeps_inner_disk_ring_plus_disk ... ok
[INFO] [stdout] test operations::array_op::tests::array_radial_rejects_bad_input ... ok
[INFO] [stdout] test operations::array_op::tests::array_linear_shares_edges_within_copy ... ok
[INFO] [stdout] test operations::array_op::tests::array_radial_creates_n_copies_around_axis ... ok
[INFO] [stdout] test operations::boolean::adr110_tests::adr110_pi_beta_helper_substitution ... ok
[INFO] [stdout] test operations::boolean::adr110_tests::adr110_pi_beta_polygonal_unchanged ... ok
[INFO] [stdout] test operations::boolean::adr142_gamma_tests::gamma_path_b_circle_chain_split_via_beta1_cover ... ok
[INFO] [stdout] test operations::boolean::adr142_gamma_tests::gamma_path_b_circle_intersect_via_adr110_cover ... ok
[INFO] [stdout] test operations::boolean::tests::boolean_empty_input ... ok
[INFO] [stdout] test curves::nurbs::tests::arc_length_unit_weights_matches_bspline ... ok
[INFO] [stdout] test operations::boolean::adr142_gamma_tests::gamma_polygonal_regression_guard ... ok
[INFO] [stdout] test operations::boolean::tests::boolean_disjoint_union ... ok
[INFO] [stdout] test operations::boolean::tests::boolean_debug_info_present ... ok
[INFO] [stdout] test operations::boolean::tests::boolean_intersect_disjoint ... ok
[INFO] [stdout] test operations::boolean::tests::boolean_intersect_basic ... ok
[INFO] [stdout] test operations::boolean::adr110_tests::adr110_pi_beta_path_b_boolean_does_not_silent_fail ... ok
[INFO] [stdout] test operations::boolean::adr142_gamma_tests::gamma_path_b_circle_subtract_via_adr110_cover ... ok
[INFO] [stdout] test curves::bspline::tests::tessellate_chord_error_within_tolerance ... ok
[INFO] [stdout] test operations::boolean::tests::boolean_preserves_face_count_rough ... ok
[INFO] [stdout] test operations::boolean::tests::boolean_rejects_hole_in_either_operand ... ok
[INFO] [stdout] test operations::boolean::tests::boolean_subtract_disjoint ... ok
[INFO] [stdout] test operations::boolean::tests::boolean_rejects_face_with_hole ... ok
[INFO] [stdout] test operations::boolean::tests::boolean_subtract_creates_cavity ... ok
[INFO] [stdout] test operations::boolean::tests::boolean_multiple_operations_undo_safe ... ok
[INFO] [stdout] test mesh::tests::test_create_triangle ... ok
[INFO] [stdout] test mesh::tests::adr180_precision_policy_dedup_tolerance_is_015um ... ok
[INFO] [stdout] test operations::boolean::adr142_gamma_tests::gamma_path_b_circle_union_via_adr110_cover ... ok
[INFO] [stdout] test operations::boolean::tests::boolean_overlapping_union_result_is_closed ... ok
[INFO] [stdout] test operations::boolean::tests::boolean_union_with_face_split ... ok
[INFO] [stdout] test operations::boolean::tests::boolean_no_overlap ... ok
[INFO] [stdout] test operations::boolean::tests::boolean_intersect_produces_overlap ... ok
[INFO] [stdout] test operations::boolean::tests::boolean_subtract_basic ... ok
[INFO] [stdout] test operations::boolean::tests::split_polygon_2d_no_intersection ... ok
[INFO] [stdout] test operations::boolean::tests::split_polygon_2d_horizontal_cut ... ok
[INFO] [stdout] test operations::boolean::tests::split_polygon_2d_diagonal_cut ... ok
[INFO] [stdout] test mesh_export::adr135_lod_tests::adr135_export_buffers_coarser_chord_reduces_triangles_for_analytic_surface ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::dispatch_multiface_unsupported_routes_to_mesh_fallback ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::dispatch_audit_label_documented_for_skip ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::dispatch_mesh_result_matches_existing_boolean ... ok
[INFO] [stdout] test curves::nurbs::tests::tessellate_lod_scales_with_tolerance ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::dispatch_classify_eligibility_matches_actual_path ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::dispatch_no_surfaces_uses_mesh_path ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::dispatch_partial_surfaces_uses_mesh_path ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::dispatch_all_three_ops_succeed ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::dispatch_nurbs_trim_loops_rejected ... ok
[INFO] [stdout] test operations::boolean::tests::boolean_union_basic ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::fail_reason_short_labels_are_distinct ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::dispatch_unsupported_surface_kind_falls_back ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::multi_face_dispatch_drop_in_alongside_path_z_unchanged ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::multi_face_dispatch_one_missing_surface_routes_mesh_path ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::multi_face_dispatch_per_pair_safe_only_preserves_when_all_disjoint ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::multi_face_dispatch_eligible_2x2_subtract_succeeds ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::multi_face_dispatch_single_face_fallback_to_path_z ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::dispatch_silent_fallback_prohibited ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::step5_boolean_dispatch_dcel_all_three_ops_accepted ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::step5_boolean_dispatch_dcel_eligible_disjoint_subtract ... ok
[INFO] [stdout] test operations::boolean_geo::tests::plane_classify ... ok
[INFO] [stdout] test operations::boolean_geo::tests::plane_segment_hit ... ok
[INFO] [stdout] test operations::boolean_geo::tests::point_in_solid_cube ... ok
[INFO] [stdout] test operations::boolean_geo::tests::tri_tri_no_intersection ... ok
[INFO] [stdout] test operations::boolean_geo::tests::tri_tri_intersection_basic ... ok
[INFO] [stdout] test operations::boolean_nurbs_dcel::tests::nurbs_boolean_to_dcel_intersect_accepted ... ok
[INFO] [stdout] test operations::boolean_nurbs_dcel::tests::nurbs_boolean_to_dcel_dropin_alongside_no_regression ... ok
[INFO] [stdout] test operations::boolean_nurbs_dcel::tests::nurbs_boolean_to_dcel_disjoint_returns_no_new_faces ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::dispatch_face_count_matches_direct_boolean ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::step5_boolean_dispatch_dcel_dropin_alongside_no_regression ... ok
[INFO] [stdout] test operations::boolean_nurbs_dcel::tests::nurbs_boolean_to_dcel_intersect_disjoint_returns_no_new_faces ... ok
[INFO] [stdout] test operations::boolean_geo::tests::ray_triangle_miss ... ok
[INFO] [stdout] test operations::boolean_geo::tests::ray_triangle_hit ... ok
[INFO] [stdout] test operations::boolean_nurbs_dcel::tests::nurbs_boolean_to_dcel_robustness_clean_for_disjoint ... ok
[INFO] [stdout] test operations::boolean_nurbs_dcel::tests::nurbs_boolean_to_dcel_rejects_invalid_input ... ok
[INFO] [stdout] test operations::boundary::tests::adr148_beta1_point_within_tolerance_passes_validation_1 ... ok
[INFO] [stdout] test operations::boundary::tests::adr148_beta1_negative_radius_uses_default ... ok
[INFO] [stdout] test operations::boolean_nurbs_dcel::tests::step4_subtract_disjoint_no_removal ... ok
[INFO] [stdout] test operations::boolean_nurbs_dcel::tests::step4_intersect_disjoint_no_removal ... ok
[INFO] [stdout] test operations::boolean_nurbs_dcel::tests::step4_union_disjoint_no_removal ... ok
[INFO] [stdout] test operations::boolean_nurbs_dcel::tests::step4_removed_plus_preserved_covers_inputs ... ok
[INFO] [stdout] test operations::boundary::tests::adr148_beta1_rejects_point_not_on_plane ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::step5_boolean_dispatch_dcel_ineligible_no_surface ... ok
[INFO] [stdout] test operations::boolean_nurbs_dcel::tests::nurbs_boolean_to_dcel_preserves_originals ... ok
[INFO] [stdout] test operations::boolean_nurbs_dcel::tests::step4_no_removal_when_no_closed_loops ... ok
[INFO] [stdout] test operations::boundary::tests::adr148_beta2_square_cycle_synthesizes_face ... ok
[INFO] [stdout] test operations::boolean_nurbs_dcel::tests::nurbs_boolean_to_dcel_union_accepted ... ok
[INFO] [stdout] test operations::boundary::tests::adr171_beta2_drift_gap_point_projected_passes_validation_1 ... ok
[INFO] [stdout] test operations::boundary::tests::adr148_beta2_isolated_open_chain_returns_no_enclosing_cycle ... ok
[INFO] [stdout] test operations::boundary_input::tests::adr171_check_coplanar_anti_parallel_ok ... ok
[INFO] [stdout] test operations::boundary::tests::adr171_beta2_far_off_plane_still_rejected ... ok
[INFO] [stdout] test operations::boolean_nurbs_dcel::tests::nurbs_boolean_to_dcel_union_disjoint_returns_no_new_faces ... ok
[INFO] [stdout] test operations::boundary::tests::adr148_beta2_point_outside_cycle_returns_no_enclosing ... ok
[INFO] [stdout] test operations::boundary_input::tests::adr171_coplanar_pair_variant_passes_through ... ok
[INFO] [stdout] test operations::boundary_input::tests::adr171_min_boundary_length_is_10mm ... ok
[INFO] [stdout] test operations::boundary_input::tests::adr171_point_variant_projects_to_plane ... ok
[INFO] [stdout] test operations::boundary_input::tests::adr171_step1_rejects_drift_beyond_tolerance ... ok
[INFO] [stdout] test operations::boundary_input::tests::adr171_step2_matches_existing_vertex ... ok
[INFO] [stdout] test operations::boundary_input::tests::adr171_step3_chain_total_extent_short_circuit ... ok
[INFO] [stdout] test operations::boundary_input::tests::adr171_step2_no_collapse_when_endpoints_distinct ... ok
[INFO] [stdout] test operations::boundary_input::tests::adr171_step2_vertex_collapse_both_endpoints_same ... ok
[INFO] [stdout] test operations::boundary_input::tests::adr171_step1_projects_line_endpoints_to_plane ... ok
[INFO] [stdout] test operations::boundary_input::tests::adr171_step3_passes_line_at_or_above_10mm ... ok
[INFO] [stdout] test operations::boundary_input::tests::adr171_step3_short_circuits_line_below_10mm ... ok
[INFO] [stdout] test operations::chamfer_brep::tests::chamfer_3way_corner_cascades_from_fillet ... ok
[INFO] [stdout] test operations::chamfer_brep::tests::chamfer_dispatch_chooses_brep_when_curves_present ... ok
[INFO] [stdout] test operations::chamfer_brep::tests::chamfer_rejects_self_intersecting_profile ... ok
[INFO] [stdout] test operations::chamfer_brep::tests::chamfer_45deg_profile_creates_planar_surface ... ok
[INFO] [stdout] test operations::boundary_input::tests::adr171_check_coplanar_offset_difference_rejected ... ok
[INFO] [stdout] test operations::boundary_input::tests::adr171_check_coplanar_same_plane_ok ... ok
[INFO] [stdout] test operations::cleave::tests::cleave_b4_lens_sub_face_separates_from_two_siblings ... ok
[INFO] [stdout] test operations::cleave::tests::adr101_b4_lens_push_pull_manifold_safe_after_cleave ... ok
[INFO] [stdout] test operations::cleave::tests::cleave_isolated_face_is_noop ... ok
[INFO] [stdout] test operations::cleave::tests::collect_siblings_finds_coplanar_adjacent_face ... ok
[INFO] [stdout] test operations::cleave::tests::cleave_preserves_curve_metadata ... ok
[INFO] [stdout] test operations::cleave::tests::cleave_is_fixed_point_no_residual_siblings ... ok
[INFO] [stdout] test operations::cleave::tests::collect_siblings_rejects_non_coplanar_neighbor ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::step5_boolean_dispatch_dcel_perpendicular_no_closed_loops ... ok
[INFO] [stdout] test mesh::tests::outward_sphere_all_outward ... ok
[INFO] [stdout] test operations::cleave::tests::cleave_preserves_sibling_boundary_edges ... ok
[INFO] [stdout] test operations::chamfer_brep::tests::chamfer_user_profile_orients_along_edge ... ok
[INFO] [stdout] test operations::boundary_input::tests::adr171_check_coplanar_different_plane_rejected ... ok
[INFO] [stdout] test operations::cleave::tests::cleave_invariants_preserved ... ok
[INFO] [stdout] test operations::boundary_input::tests::adr171_step1_no_plane_passes_through ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_amendment9_export_emits_lens_shared_edges ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_amendment9_invariants_preserved ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_amendment9_external_boundary_unaffected ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b2_crossings_carry_edge_ownership_info ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b3a_ccw_orientation_preserved ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b2_containment_no_crossings ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b2_non_coplanar_errors ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b2_partial_overlap_returns_lens_and_2_crossings ... ok
[INFO] [stdout] test operations::cleave::tests::cleave_face_with_single_sibling_separates_verts ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b2_inactive_face_errors ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_amendment9_lens_outer_boundary_hes_hard ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b2_disjoint_returns_empty ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b3a_four_crossings_errors ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b3a_u_shape_two_crossings_on_same_edge ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b2_anti_parallel_normals_treated_as_coplanar ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b2_within_epsilon_passes ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b2_non_convex_face_errors ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b3a_degenerate_base_errors ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b3b_disjoint_no_op ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b3b_containment_no_op ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b3a_idempotent_same_input_same_output ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b3a_partial_overlap_two_rects_returns_l_shape ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b3b_inactive_input_errors ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b4b_disjoint_path_b_circles_no_mutation ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b4b_face_world_aabb_path_b_circle_non_destructive ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b4b_face_world_aabb_polygonal ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b4b_non_coplanar_path_b_circles_no_mutation ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b4b_face_world_normal_path_b_circle ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b3a_zero_crossings_errors ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b3b_two_rects_partial_overlap_creates_3_faces ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_amendment9_rect_x_circle_mixed_non_degenerate_splits ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b3b_verify_face_invariants_post_split ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b3c_cleanup_is_idempotent ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b3c_cleanup_orphan_boundary_edges_unit ... ok
[INFO] [stdout] test operations::coplanar::tests::adr128_point_on_segment_2d_basic ... ok
[INFO] [stdout] test operations::coplanar::tests::adr128_diamond_vertices_on_rect_edges_splits ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b4b_path_b_circles_partial_overlap_auto_splits ... ok
[INFO] [stdout] test operations::coplanar::tests::adr128_existing_two_crossings_path_unaffected ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b3c_cleanup_preserves_shared_edges ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b3b_surface_inheritance ... ok
[INFO] [stdout] test operations::coplanar::tests::adr128_circle_fully_inside_rect_returns_none ... ok
[INFO] [stdout] test operations::coplanar::tests::adr128_circle_cardinal_corner_coincidence_splits ... ok
[INFO] [stdout] test operations::create_solid::tests::adr089_a_theta_zero_distance_rejected_before_tessellation ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b3b_second_call_rejects_non_convex_results ... ok
[INFO] [stdout] test operations::coplanar::tests::adr128_detect_vertex_incidence_basic ... ok
[INFO] [stdout] test operations::coplanar::tests::adr128_rect_partial_overlap_with_shared_vertex_on_edge ... ok
[INFO] [stdout] test operations::create_solid::tests::adr089_a_theta_polygonal_circle_unaffected_by_fast_path ... ok
[INFO] [stdout] test operations::create_solid::tests::adr092_c_beta_top_arc_center_is_translated_from_bottom ... ok
[INFO] [stdout] test operations::create_solid::tests::adr089_a_theta_closed_curve_attaches_cylinder_surface_to_sides ... ok
[INFO] [stdout] test operations::create_solid::tests::adr089_a_upsilon_self_loop_edge_cleanup_after_extrude ... ok
[INFO] [stdout] test operations::create_solid::tests::adr092_c_beta_dcel_topology_unchanged_manifold_safe ... ok
[INFO] [stdout] test operations::create_solid::tests::adr089_a_upsilon_anchor_vertex_deactivated_if_isolated ... ok
[INFO] [stdout] test operations::create_solid::tests::adr089_a_theta_closed_curve_face_extrudes_to_cylinder ... ok
[INFO] [stdout] test operations::create_solid::tests::adr089_a_theta_closed_curve_negative_distance_recess ... ok
[INFO] [stdout] test operations::create_solid::tests::adr093_d_beta_next_surface_owner_id_starts_at_1_and_increments ... ok
[INFO] [stdout] test operations::coplanar::tests::adr101_phase_b3c_path_b_circles_polygonize_and_split ... ok
[INFO] [stdout] test operations::create_solid::tests::adr093_d_beta_walk_returns_self_for_none_id ... ok
[INFO] [stdout] test operations::create_solid::tests::adr093_d_beta_set_owner_on_inactive_face_returns_false ... ok
[INFO] [stdout] test operations::create_solid::tests::adr093_d_beta_face_surface_owner_id_default_none ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_delta_prep_annulus_has_cylinder_surface ... ok
[INFO] [stdout] test operations::create_solid::tests::adr093_d_beta_walk_collects_all_with_same_id ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_delta_prep_annulus_face_has_multi_loop_schema ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_delta_prep_cylinder_native_face_count_3_2_2 ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_delta_prep_rejects_non_closed_curve_profile ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_delta_prep_negative_distance_recess ... ok
[INFO] [stdout] test operations::create_solid::tests::adr092_c_beta_top_face_edges_have_arc_curves ... ok
[INFO] [stdout] test operations::create_solid::tests::adr093_d_beta_polygonal_circle_path_also_gets_owner_id ... ok
[INFO] [stdout] test operations::create_solid::tests::adr092_c_beta_top_arc_radius_matches_bottom ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_epsilon_prep_annulus_surface_extraction_unchanged ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_eta_engine_default_is_path_a_legacy ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_epsilon_prep_top_bot_passes_boolean_eligibility ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_delta_prep_top_face_is_closed_curve_with_plane ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_eta_path_b_active_after_flag_flip ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_eta_path_b_face_count_3_2_2_via_create_solid ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_epsilon_prep_annulus_eligibility_surface_kind_only ... ok
[INFO] [stdout] test operations::create_solid::tests::adr089_a_upsilon_extrude_polygon_unaffected ... ok
[INFO] [stdout] test operations::create_solid::tests::adr093_d_beta_extrude_planar_cylinder_owner_unique_per_cylinder ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_epsilon_prep_legacy_path_a_eligibility_same_failure_mode ... ok
[INFO] [stdout] test operations::create_solid::tests::adr092_c_beta_polygonal_path_unaffected ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_eta_path_a_explicit_off_after_toggle ... ok
[INFO] [stdout] test operations::create_solid::tests::adr093_d_beta_extrude_planar_cylinder_assigns_same_owner_to_n_sides ... ok
[INFO] [stdout] test operations::create_solid::tests::adr092_c_beta_negative_distance_translation_correct ... ok
[INFO] [stdout] test operations::create_solid::tests::adr092_c_beta_top_arc_normal_matches_profile ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_zeta_prep_annulus_emits_triangles ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_eta_path_b_invariants_pass ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_eta_path_a_default_off_preserved ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_eta_polygonal_profile_unaffected_by_flag ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_zeta_prep_annulus_normals_radial ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_zeta_prep_edge_wireframe_emits_two_smooth_rings ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_delta_prep_legacy_path_a_unaffected ... ok
[INFO] [stdout] test operations::create_solid::tests::adr094_b_zeta_prep_top_bottom_faces_render_planar ... ok
[INFO] [stdout] test operations::create_solid::tests::classify_boundary_all_linear_for_unit_square ... ok
[INFO] [stdout] test operations::create_solid::tests::classify_boundary_all_circular_for_circle_face ... ok
[INFO] [stdout] test operations::create_solid::tests::cone_smooth_group_offset_inward_decreases_radius_at_each_v ... ok
[INFO] [stdout] test operations::create_solid::tests::adr183_create_solid_extrude_down_all_normals_outward ... ok
[INFO] [stdout] test operations::create_solid::tests::adr183_create_solid_extrude_up_all_normals_outward ... ok
[INFO] [stdout] test operations::create_solid::tests::adr102_gamma_create_solid_extrude_with_sibling_cleaves_first ... ok
[INFO] [stdout] test operations::create_solid::tests::cone_smooth_group_offset_apex_translates_along_minus_axis ... ok
[INFO] [stdout] test operations::create_solid::tests::cone_smooth_group_offset_returns_smooth_group_offset_kind ... ok
[INFO] [stdout] test operations::create_solid::tests::cone_smooth_group_offset_preserves_half_angle_and_axis ... ok
[INFO] [stdout] test operations::create_solid::tests::adr183_create_solid_extrude_box_stays_closed_manifold ... ok
[INFO] [stdout] test operations::create_solid::tests::cone_smooth_group_offset_singular_half_angle_rejected ... ok
[INFO] [stdout] test operations::create_solid::tests::cone_smooth_group_offset_collapse_falls_back ... ok
[INFO] [stdout] test operations::create_solid::tests::cone_smooth_group_offset_vertex_moves_along_normal_by_dist ... ok
[INFO] [stdout] test operations::create_solid::tests::create_solid_cylinder_negative_distance_winding_correct ... ok
[INFO] [stdout] test operations::create_solid::tests::create_solid_cylinder_attaches_cylinder_surface_to_sides ... ok
[INFO] [stdout] test operations::create_solid::tests::adr102_gamma_create_solid_extrude_isolated_face_no_cleave ... ok
[INFO] [stdout] test operations::create_solid::tests::create_solid_attaches_planes_to_new_faces ... ok
[INFO] [stdout] test operations::create_solid::tests::create_solid_cylinder_top_translated_by_profile_normal ... ok
[INFO] [stdout] test operations::create_solid::tests::create_solid_cylinder_arc_param_mismatch_falls_back ... ok
[INFO] [stdout] test operations::create_solid::tests::create_solid_cylinder_arcs_share_circle_params_check ... ok
[INFO] [stdout] test operations::create_solid::tests::extrude_on_bezier_patch_returns_general_sweep ... ok
[INFO] [stdout] test operations::create_solid::tests::create_solid_extrude_plane_rect_returns_box ... ok
[INFO] [stdout] test operations::create_solid::tests::cylinder_smooth_group_offset_inward_decreases_radius ... ok
[INFO] [stdout] test operations::create_solid::tests::cylinder_smooth_group_offset_preserves_axial_height ... ok
[INFO] [stdout] test operations::create_solid::tests::cylinder_smooth_group_offset_returns_smooth_group_offset_kind ... ok
[INFO] [stdout] test operations::create_solid::tests::k3_split_face_no_owner_propagates_none ... ok
[INFO] [stdout] test operations::create_solid::tests::create_solid_extrude_plane_circle_returns_cylinder ... ok
[INFO] [stdout] test operations::create_solid::tests::extrude_on_nurbs_surface_returns_general_sweep ... ok
[INFO] [stdout] test operations::create_solid::tests::cylinder_smooth_group_offset_scales_vertices_radially ... ok
[INFO] [stdout] test operations::create_solid::tests::extrude_on_nurbs_class_top_face_synthesized_as_plane ... ok
[INFO] [stdout] test operations::create_solid::tests::cylinder_smooth_group_offset_updates_cap_arc_radius ... ok
[INFO] [stdout] test operations::create_solid::tests::cylinder_smooth_group_offset_outward_increases_radius ... ok
[INFO] [stdout] test operations::create_solid::tests::extrude_on_bspline_surface_returns_general_sweep ... ok
[INFO] [stdout] test operations::create_solid::tests::loft_mode_two_squares_returns_loft_solid ... ok
[INFO] [stdout] test operations::create_solid::tests::k3_split_face_propagates_surface_owner_id ... ok
[INFO] [stdout] test operations::create_solid::tests::path_b_cylinder_annulus_has_owner_id ... ok
[INFO] [stdout] test operations::create_solid::tests::path_b_cylinder_walk_returns_annulus_self ... ok
[INFO] [stdout] test operations::create_solid::tests::path_b_cylinder_owner_unique_across_cylinders ... ok
[INFO] [stdout] test operations::create_solid::tests::loft_mode_first_profile_multi_loop_rejected ... ok
[INFO] [stdout] test operations::create_solid::tests::loft_mode_vertex_count_mismatch_rejected ... ok
[INFO] [stdout] test operations::create_solid::tests::loft_mode_same_profile_id_rejected ... ok
[INFO] [stdout] test operations::create_solid::tests::create_solid_zero_distance_returns_degenerate ... ok
[INFO] [stdout] test operations::create_solid::tests::sphere_smooth_group_offset_inward_decreases_radius ... ok
[INFO] [stdout] test operations::create_solid::tests::loft_mode_invalid_face_id_rejected ... ok
[INFO] [stdout] test operations::create_solid::tests::revolve_mode_invalid_face_id_rejected ... ok
[INFO] [stdout] test operations::create_solid::tests::revolve_mode_multi_loop_face_rejected ... ok
[INFO] [stdout] test operations::create_solid::tests::revolve_partial_angle_returns_not_yet_supported ... ok
[INFO] [stdout] test operations::create_solid::tests::revolve_mode_profile_face_not_in_plane_with_axis_rejected ... ok
[INFO] [stdout] test operations::create_solid::tests::sphere_smooth_group_offset_outward_increases_radius ... ok
[INFO] [stdout] test operations::create_solid::tests::sphere_smooth_group_offset_preserves_center ... ok
[INFO] [stdout] test operations::create_solid::tests::sphere_smooth_group_offset_returns_smooth_group_offset_kind ... ok
[INFO] [stdout] test operations::create_solid::tests::sphere_smooth_group_offset_scales_vertices_radially_about_center ... ok
[INFO] [stdout] test operations::create_solid::tests::sphere_smooth_group_offset_collapse_falls_back ... ok
[INFO] [stdout] test operations::create_solid::tests::cylinder_smooth_group_offset_collapse_falls_back ... ok
[INFO] [stdout] test operations::create_solid::tests::revolve_mode_axis_zero_rejected ... ok
[INFO] [stdout] test operations::create_solid::tests::sweep_mode_along_straight_z_path_returns_swept_solid ... ok
[INFO] [stdout] test operations::create_solid::tests::sweep_mode_invalid_face_id_rejected ... ok
[INFO] [stdout] test operations::create_solid::tests::torus_smooth_group_offset_increases_minor_radius ... ok
[INFO] [stdout] test operations::create_solid::tests::sweep_mode_multi_loop_face_rejected ... ok
[INFO] [stdout] test operations::create_solid::tests::torus_smooth_group_offset_preserves_major_radius_and_axis ... ok
[INFO] [stdout] test operations::create_solid::tests::torus_smooth_group_offset_updates_top_latitude_circle ... ok
[INFO] [stdout] test operations::create_solid::tests::create_solid_extrude_no_surface_returns_no_profile_surface ... ok
[INFO] [stdout] test operations::create_solid::tests::torus_smooth_group_offset_collapse_falls_back ... ok
[INFO] [stdout] test operations::create_solid::tests::torus_smooth_group_offset_vertex_distance_to_major_circle_changes ... ok
[INFO] [stdout] test operations::deform::tests::bend_rejects_bad_input ... ok
[INFO] [stdout] test operations::deform::tests::taper_rejects_bad_input ... ok
[INFO] [stdout] test operations::deform::tests::twist_rejects_bad_input ... ok
[INFO] [stdout] test operations::draft::tests::draft_compound_faces_each_tilted_independently ... ok
[INFO] [stdout] test operations::draft::tests::draft_excessive_angle_returns_skip ... ok
[INFO] [stdout] test operations::draft::tests::draft_face_tilts_by_angle_about_neutral_plane ... ok
[INFO] [stdout] test operations::draft::tests::draft_zero_angle_is_no_op ... ok
[INFO] [stdout] test operations::create_solid::tests::torus_smooth_group_offset_returns_smooth_group_offset_kind ... ok
[INFO] [stdout] test operations::draw::tests::draw_line_rejects_nan_endpoint ... ok
[INFO] [stdout] test operations::create_solid::tests::torus_smooth_group_offset_updates_outer_latitude_circle ... ok
[INFO] [stdout] test operations::deform::tests::bend_rotates_far_verts_more_than_near ... ok
[INFO] [stdout] test operations::deform::tests::taper_scales_perpendicular_component_linearly ... ok
[INFO] [stdout] test operations::draw::tests::draw_circle_rejects_too_few_segments ... ok
[INFO] [stdout] test operations::draw::tests::draw_circle_rejects_zero_radius ... ok
[INFO] [stdout] test operations::draw::tests::draw_line_rejects_subepsilon_length ... ok
[INFO] [stdout] test operations::create_solid::tests::revolve_mode_full_360_returns_revolution_solid ... ok
[INFO] [stdout] test operations::create_solid::tests::sphere_smooth_group_offset_scales_boundary_arcs_about_center ... ok
[INFO] [stdout] test operations::create_solid::tests::sweep_mode_path_tangent_misaligned_with_profile_normal_rejected ... ok
[INFO] [stdout] test operations::deform::tests::twist_angle_scales_with_axial_position ... ok
[INFO] [stdout] test operations::draw::tests::draw_line_rejects_zero_length ... ok
[INFO] [stdout] test operations::draw::tests::draw_rectangle_rejects_subepsilon ... ok
[INFO] [stdout] test operations::draw::tests::draw_rectangle_rejects_zero_width ... ok
[INFO] [stdout] test operations::draw::tests::test_draw_line ... ok
[INFO] [stdout] test operations::draw::tests::test_draw_circle ... ok
[INFO] [stdout] test operations::draw::tests::test_draw_rectangle ... ok
[INFO] [stdout] test operations::draw::tests::test_l_shape_no_loop ... ok
[INFO] [stdout] test operations::draw::tests::test_hexagon_loop_detected ... ok
[INFO] [stdout] test operations::draw::tests::test_pentagon_loop_detected ... ok
[INFO] [stdout] test operations::erase_resynth::tests::erase_isolated_edge_is_safe ... ok
[INFO] [stdout] test operations::draw::tests::test_no_loop_non_coplanar ... ok
[INFO] [stdout] test operations::draw::tests::test_quad_loop_detected ... ok
[INFO] [stdout] test operations::face_split::tests::adr101_amendment10_helper_mark_chain_edges_hard ... ok
[INFO] [stdout] test operations::draw::tests::test_octagon_loop_detected ... ok
[INFO] [stdout] test operations::face_split::tests::adr101_amendment10_helper_mark_edges_hard ... ok
[INFO] [stdout] test operations::draw::tests::test_triangle_loop_detected ... ok
[INFO] [stdout] test operations::draw::tests::test_no_loop_with_two_edges ... ok
[INFO] [stdout] test operations::face_split::tests::adr142_beta1_split_face_by_chain_polygon_face_regression ... ok
[INFO] [stdout] test operations::face_split::tests::adr101_amendment10_split_face_by_chain_marks_hard ... ok
[INFO] [stdout] test operations::face_split::tests::adr_059_split_edge_bezier_defers_silently ... ok
[INFO] [stdout] test operations::face_split::tests::adr142_beta1_split_face_by_chain_polygonizes_closed_curve_face ... ok
[INFO] [stdout] test operations::face_split::tests::adr_059_split_edge_inherits_line_curve ... ok
[INFO] [stdout] test operations::face_split::tests::adr_059_split_edge_no_curve_stays_no_curve ... ok
[INFO] [stdout] test operations::face_split::tests::adr142_beta1_polygonize_if_closed_curve_transforms_closed_curve ... ok
[INFO] [stdout] test operations::face_split::tests::box_face_split_top_edge_to_edge_midpoints ... ok
[INFO] [stdout] test operations::face_split::tests::line_edge_intersection_parallel ... ok
[INFO] [stdout] test operations::face_split::tests::adr142_beta1_polygonize_if_closed_curve_polygon_noop ... ok
[INFO] [stdout] test operations::face_split::tests::adr171_beta2_split_by_line_already_absorbs_drift ... ok
[INFO] [stdout] test operations::face_split::tests::phase_g2_cut_one_hole_preserves_other ... ok
[INFO] [stdout] test operations::face_split::tests::phase_g2_hole_split_consumes_hole ... ok
[INFO] [stdout] test operations::face_split::tests::phase_g3_bridge_start_endpoint_inside ... ok
[INFO] [stdout] test operations::face_split::tests::box_face_split_interior_points ... ok
[INFO] [stdout] test operations::face_split::tests::phase_g3_rejects_both_endpoints_inside_hole ... ok
[INFO] [stdout] test operations::face_split::tests::phase_g2_hole_split_both_pieces_closed ... ok
[INFO] [stdout] test operations::face_split::tests::phase_g4_bridge_endpoint_on_hole_edge ... ok
[INFO] [stdout] test operations::face_split::tests::phase_g4_bridge_endpoint_on_hole_vertex ... ok
[INFO] [stdout] test operations::face_split::tests::phase_g4_bridge_preserves_other_holes ... ok
[INFO] [stdout] test operations::face_split::tests::phase_g_preserves_hole_vertex_count ... ok
[INFO] [stdout] test operations::face_split::tests::line_edge_intersection_crossing ... ok
[INFO] [stdout] test operations::face_split::tests::phase_g3_bridge_endpoint_inside_hole ... ok
[INFO] [stdout] test operations::face_split::tests::box_face_split_tolerance_analysis ... ok
[INFO] [stdout] test operations::face_split::tests::point_in_face_outside ... ok
[INFO] [stdout] test operations::face_split::tests::split_edge_old_edge_deactivated ... ok
[INFO] [stdout] test operations::face_split::tests::split_edge_new_edges_findable ... ok
[INFO] [stdout] test operations::face_split::tests::split_edge_preserves_face_loop ... ok
[INFO] [stdout] test operations::face_split::tests::phase_g_split_below_hole_keeps_hole_above ... ok
[INFO] [stdout] test operations::face_split::tests::point_in_face_center ... ok
[INFO] [stdout] test operations::face_split::tests::split_face_by_line_rejects_infinity ... ok
[INFO] [stdout] test operations::face_split::tests::split_edge_on_box_preserves_all_faces ... ok
[INFO] [stdout] test operations::face_split::tests::split_face_by_line_rejects_nan ... ok
[INFO] [stdout] test operations::face_split::tests::split_face_by_line_midpoints ... ok
[INFO] [stdout] test operations::face_split::tests::split_face_by_line_preserves_normal_direction ... ok
[INFO] [stdout] test operations::face_split::tests::phase_g_split_above_hole_keeps_hole_below ... ok
[INFO] [stdout] test operations::face_split::tests::point_in_face_off_plane ... ok
[INFO] [stdout] test operations::face_split::tests::split_face_by_line_rejects_subepsilon_length ... ok
[INFO] [stdout] test operations::face_split::tests::split_face_by_line_rejects_zero_length ... ok
[INFO] [stdout] test operations::face_split::tests::split_face_by_line_vertex_to_vertex ... ok
[INFO] [stdout] test operations::face_split::tests::split_face_creates_two_faces ... ok
[INFO] [stdout] test operations::face_split::tests::split_face_by_line_vertex_to_edge ... ok
[INFO] [stdout] test operations::face_split::tests::split_face_preserves_material ... ok
[INFO] [stdout] test operations::face_split::tests::split_face_preserves_adjacent_face_loops ... ok
[INFO] [stdout] test operations::face_split::tests::box_split_face_then_pushpull ... ok
[INFO] [stdout] test operations::face_split::tests::split_face_by_line_preserves_adjacent_normals ... ok
[INFO] [stdout] test operations::face_split::tests::split_face_preserves_normal_direction ... ok
[INFO] [stdout] test operations::face_split::tests::split_face_rejects_same_vertex ... ok
[INFO] [stdout] test operations::fillet::tests::chamfer_3way_rejects_bad_radius ... ok
[INFO] [stdout] test operations::face_split::tests::split_face_vertex_counts ... ok
[INFO] [stdout] test operations::fillet::tests::chamfer_3way_cube_corner_creates_triangle ... ok
[INFO] [stdout] test operations::face_split::tests::split_face_then_pushpull_creates_protrusion ... ok
[INFO] [stdout] test operations::fillet::tests::fillet_rejects_boundary_edge ... ok
[INFO] [stdout] test operations::fillet::tests::fillet_rejects_bad_params ... ok
[INFO] [stdout] test operations::fillet_brep::tests::fillet_3_way_corner_returns_deferred_skip ... ok
[INFO] [stdout] test operations::fillet::tests::fillet_cube_top_front_edge ... ok
[INFO] [stdout] test operations::face_split::tests::line_edge_intersection_miss ... ok
[INFO] [stdout] test operations::face_split::tests::phase_g2_cuts_through_two_holes ... ok
[INFO] [stdout] test operations::face_split::tests::split_edge_creates_new_vertex ... ok
[INFO] [stdout] test operations::fillet_brep::tests::fillet_concave_edge_returns_skip_reason ... ok
[INFO] [stdout] test operations::face_split::tests::split_face_rejects_adjacent_vertices ... ok
[INFO] [stdout] test operations::fillet::tests::chamfer_3way_rejects_non_3way ... ok
[INFO] [stdout] test operations::fillet_brep::tests::fillet_curved_preserves_endpoint_continuity ... ok
[INFO] [stdout] test operations::fillet_brep::tests::fillet_curved_radius_too_small ... ok
[INFO] [stdout] test operations::fillet_brep::tests::fillet_dispatch_chooses_brep_when_curve_present ... ok
[INFO] [stdout] test operations::fillet_brep::tests::fillet_radius_below_min_returns_skip ... ok
[INFO] [stdout] test operations::fillet_brep::tests::fillet_tangent_neighbors_returns_skip ... ok
[INFO] [stdout] test operations::fillet_brep::tests::fillet_linear_edge_creates_cylinder_surface ... ok
[INFO] [stdout] test operations::fillet_dispatch::tests::dispatch_concave_edge_records_skip_reason ... ok
[INFO] [stdout] test operations::fillet_dispatch::tests::dispatch_brep_attaches_cylinder_to_fillet_strip ... ok
[INFO] [stdout] test operations::fillet_dispatch::tests::dispatch_radius_too_small_is_reachable_at_brep_stage ... ok
[INFO] [stdout] test operations::fillet_dispatch::tests::dispatch_curved_face_falls_back_to_mesh ... ok
[INFO] [stdout] test operations::geometric_merge::tests::adr150_batch_merge_cascade_three_rects ... ok
[INFO] [stdout] test operations::fillet_dispatch::tests::dispatch_planar_faces_with_line_curve_uses_brep_path ... ok
[INFO] [stdout] test operations::fillet_dispatch::tests::dispatch_no_face_surfaces_uses_mesh_path ... ok
[INFO] [stdout] test operations::geometric_merge::tests::adr150_batch_merge_single_pair_success ... ok
[INFO] [stdout] test operations::geometric_merge::tests::adr150_batch_merge_skip_self_merge ... ok
[INFO] [stdout] test operations::geometric_merge::tests::adr150_batch_merge_manifold_safe_post_batch ... ok
[INFO] [stdout] test operations::geometric_merge::tests::adr150_sweep_no_pairs_on_empty_mesh ... ok
[INFO] [stdout] test operations::geometric_merge::tests::adr150_sweep_excludes_non_coplanar ... ok
[INFO] [stdout] test operations::geometric_merge::tests::adr150_sweep_respects_tolerance ... ok
[INFO] [stdout] test operations::geometric_merge::tests::adr150_sweep_finds_multiple_pairs ... ok
[INFO] [stdout] test operations::geometric_merge::tests::debug_draw_rectangle_output ... ok
[INFO] [stdout] test operations::geometric_merge::tests::debug_find_overlap_direct ... ok
[INFO] [stdout] test operations::geometric_merge::tests::dryrun_accepts_adjacent_coplanar_rects ... ok
[INFO] [stdout] test operations::geometric_merge::tests::adr150_sweep_finds_adjacent_coplanar_pair ... ok
[INFO] [stdout] test operations::geometric_merge::tests::dryrun_does_not_mutate_mesh ... ok
[INFO] [stdout] test operations::geometric_merge::tests::dryrun_rejects_non_coplanar ... ok
[INFO] [stdout] test operations::fillet_dispatch::tests::dispatch_no_curve_uses_mesh_path ... ok
[INFO] [stdout] test operations::fillet_dispatch::tests::dispatch_silent_fallback_prohibited ... ok
[INFO] [stdout] test operations::geometric_merge::tests::reject_no_overlap ... ok
[INFO] [stdout] test operations::geometric_merge::tests::reject_non_coplanar ... ok
[INFO] [stdout] test operations::geometric_merge::tests::two_rects_via_draw_rectangle_merge ... ok
[INFO] [stdout] test operations::geometric_merge::tests::dryrun_rejects_disjoint_coplanar_no_overlap ... ok
[INFO] [stdout] test operations::fillet_dispatch::tests::dispatch_mesh_result_matches_existing_fillet ... ok
[INFO] [stdout] test operations::geometric_merge::tests::two_coplanar_rects_full_shared_edge_uses_fast_path ... ok
[INFO] [stdout] test operations::import_mesh::tests::inject_inner_loops_not_supported_errors ... ok
[INFO] [stdout] test operations::import_mesh::tests::inject_insufficient_vertices_errors ... ok
[INFO] [stdout] test operations::import_mesh::tests::inject_triangular_face_creates_face_with_3_vertices ... ok
[INFO] [stdout] test operations::import_mesh::tests::inject_simple_planar_quad_creates_face ... ok
[INFO] [stdout] test operations::import_mesh::tests::inject_shared_vertex_dedup_via_spatial_hash ... ok
[INFO] [stdout] test operations::import_mesh::tests::inject_with_analytic_surface_attaches ... ok
[INFO] [stdout] test operations::import_mesh::tests::inject_multiple_faces_separately_creates_distinct_ids ... ok
[INFO] [stdout] test operations::geometric_merge::tests::dryrun_rejects_inactive_face ... ok
[INFO] [stdout] test operations::import_mesh::tests::invariant_quad_inject_passes_adr007_verifier ... ok
[INFO] [stdout] test operations::import_mesh::tests::invariant_inject_with_plane_surface_passes_adr007 ... ok
[INFO] [stdout] test operations::loft::tests::loft_rejects_single_section ... ok
[INFO] [stdout] test operations::geometric_merge::tests::merge_two_adjacent_rects_same_size ... ok
[INFO] [stdout] test operations::loft::tests::loft_rejects_mismatched_section_sizes ... ok
[INFO] [stdout] test operations::loft::tests::loft_preserves_outward_normals_for_ccw_circles ... ok
[INFO] [stdout] test operations::mirror::tests::mirror_preserves_outward_orientation ... ok
[INFO] [stdout] test operations::mirror::tests::mirror_face_with_hole_preserves_hole ... ok
[INFO] [stdout] test operations::import_mesh::tests::invariant_two_inject_faces_both_pass_adr007 ... ok
[INFO] [stdout] test operations::mirror::tests::mirror_preserves_shared_edges ... ok
[INFO] [stdout] test operations::mirror::tests::mirror_rejects_zero_normal ... ok
[INFO] [stdout] test operations::mirror::tests::mirror_triangle_across_yz ... ok
[INFO] [stdout] test operations::offset::tests::adr089_a_iota_closed_curve_offset_collapse_rejected ... ok
[INFO] [stdout] test operations::offset::tests::adr089_a_iota_closed_curve_offset_inward_radius_decreases ... ok
[INFO] [stdout] test operations::offset::tests::adr089_a_iota_polygonal_circle_unaffected_by_self_loop_path ... ok
[INFO] [stdout] test operations::loft::tests::loft_open_sections_omit_wrap_face ... ok
[INFO] [stdout] test operations::offset::tests::adr089_a_iota_closed_curve_offset_produces_self_loop ... ok
[INFO] [stdout] test operations::offset::tests::arc_offset_collapse_radius_rejected ... ok
[INFO] [stdout] test operations::offset::tests::arc_offset_inward_decreases_radius ... ok
[INFO] [stdout] test operations::offset::tests::arc_on_plane_host_offset_changes_radius_and_attaches_new_curve ... ok
[INFO] [stdout] test operations::offset::tests::bezier_curve_on_plane_host_chord_offset_succeeds ... ok
[INFO] [stdout] test operations::offset::tests::arc_endpoints_on_new_radius ... ok
[INFO] [stdout] test operations::offset::tests::circle_on_plane_host_offset_changes_radius ... ok
[INFO] [stdout] test operations::offset::tests::cone_axial_line_rejected ... ok
[INFO] [stdout] test operations::offset::tests::cone_latitude_off_axis_arc_rejected ... ok
[INFO] [stdout] test operations::offset::tests::cone_latitude_arc_offset_shifts_axial_with_cos_factor ... ok
[INFO] [stdout] test operations::fillet_brep::tests::fillet_curved_concave_edge_skip ... ok
[INFO] [stdout] test operations::fillet_brep::tests::fillet_curved_edge_uses_phase_k_sweep ... ok
[INFO] [stdout] test operations::fillet_dispatch::tests::dispatch_skip_label_distinct ... ok
[INFO] [stdout] test operations::geometric_merge::tests::merge_two_adjacent_rects_different_sizes ... ok
[INFO] [stdout] test operations::offset::tests::arc_in_orthogonal_plane_rejected ... ok
[INFO] [stdout] test operations::offset::tests::bspline_curve_on_plane_host_chord_offset_succeeds ... ok
[INFO] [stdout] test operations::geometric_merge::tests::adr150_sweep_aabb_prefilter_performance ... ok
[INFO] [stdout] test operations::offset::tests::cone_latitude_arc_collapse_at_apex_rejected ... ok
[INFO] [stdout] test operations::loft::tests::loft_three_circles_tapers ... ok
[INFO] [stdout] test operations::offset::tests::cylinder_axial_out_of_range_rejected ... ok
[INFO] [stdout] test operations::offset::tests::cylinder_latitude_arc_offset_shifts_axial_position ... ok
[INFO] [stdout] test operations::loft::tests::loft_two_circles_makes_cylinder_band ... ok
[INFO] [stdout] test operations::offset::tests::cylinder_axial_line_offset_changes_angular_position ... ok
[INFO] [stdout] test operations::offset::tests::cone_slant_line_offset_changes_angular_position ... ok
[INFO] [stdout] test operations::offset::tests::cylinder_offset_preserves_cylinder_radius ... ok
[INFO] [stdout] test operations::offset::tests::free_wire_arc_curve_on_synthetic_plane_offset_succeeds ... ok
[INFO] [stdout] test operations::offset::tests::legacy_offset_edge_signature_unchanged ... ok
[INFO] [stdout] test operations::offset::tests::free_wire_planar_xy_polyline_offset_succeeds ... ok
[INFO] [stdout] test operations::offset::tests::free_wire_collinear_polyline_returns_no_reference_plane ... ok
[INFO] [stdout] test operations::offset::tests::line_offset_ambiguous_host_face_rejected ... ok
[INFO] [stdout] test operations::offset::tests::free_wire_planar_xz_polyline_offset_succeeds ... ok
[INFO] [stdout] test operations::offset::tests::line_offset_on_hole_face_rejected ... ok
[INFO] [stdout] test operations::offset::tests::line_offset_single_edge_free_wire_returns_no_reference_plane ... ok
[INFO] [stdout] test operations::offset::tests::line_on_plane_host_offset_creates_parallel_edge ... ok
[INFO] [stdout] test operations::offset::tests::line_on_plane_host_uses_face_normal_not_caller_arg ... ok
[INFO] [stdout] test operations::offset::tests::line_offset_on_nurbs_class_host_now_succeeds_via_w3_delta ... ok
[INFO] [stdout] test operations::offset::tests::offset_edge_on_bezier_patch_with_nurbs_curve_succeeds ... ok
[INFO] [stdout] test operations::offset::tests::offset_edge_on_bspline_surface_host_succeeds ... ok
[INFO] [stdout] test operations::offset::tests::cone_off_cone_line_rejected ... ok
[INFO] [stdout] test operations::offset::tests::nurbs_curve_on_cylinder_host_still_rejected ... ok
[INFO] [stdout] test operations::offset::tests::cone_offset_preserves_half_angle_identity ... ok
[INFO] [stdout] test operations::offset::tests::offset_edge_on_nurbs_surface_host_succeeds ... ok
[INFO] [stdout] test operations::offset::tests::cone_slant_line_preserves_apex_to_base_geometry ... ok
[INFO] [stdout] test operations::offset::tests::offset_edge_with_reference_plane_arc_curve_succeeds ... ok
[INFO] [stdout] test operations::offset::tests::cylinder_helical_line_rejected ... ok
[INFO] [stdout] test operations::offset::tests::nurbs_curve_on_plane_host_chord_offset_succeeds ... ok
[INFO] [stdout] test operations::offset::tests::cylinder_off_axis_arc_rejected ... ok
[INFO] [stdout] test operations::offset::tests::offset_edge_with_reference_plane_single_edge_wire_succeeds ... ok
[INFO] [stdout] test operations::offset::tests::line_offset_degenerate_distance_rejected ... ok
[INFO] [stdout] test operations::offset::tests::offset_edge_with_reference_plane_bezier_curve_chord_offset_succeeds ... ok
[INFO] [stdout] test operations::offset::tests::free_wire_non_planar_returns_wire_not_planar ... ok
[INFO] [stdout] test operations::offset::tests::offset_edge_with_reference_plane_zero_normal_rejected ... ok
[INFO] [stdout] test operations::create_solid::tests::sweep_mode_circular_path_arc_succeeds ... ok
[INFO] [stdout] test operations::offset::tests::offset_edge_with_reference_plane_zero_distance_rejected ... ok
[INFO] [stdout] test operations::offset::tests::sphere_off_sphere_arc_rejected ... ok
[INFO] [stdout] test operations::offset::tests::test_offset_edge_zero_distance ... ok
[INFO] [stdout] test operations::offset::tests::test_offset_edge_basic ... ok
[INFO] [stdout] test operations::offset::tests::test_offset_edge_negative ... ok
[INFO] [stdout] test operations::offset::tests::test_offset_polygon_geometry ... ok
[INFO] [stdout] test operations::offset::tests::test_offset_outset ... ok
[INFO] [stdout] test operations::offset::tests::test_offset_inset ... ok
[INFO] [stdout] test operations::offset::tests::nurbs_curve_chord_endpoints_use_edge_p0_p1 ... ok
[INFO] [stdout] test operations::offset::tests::offset_edge_on_bezier_patch_host_succeeds ... ok
[INFO] [stdout] test operations::offset::tests::torus_meridian_arc_offset_rotates_around_major_axis ... ok
[INFO] [stdout] test operations::offset::tests::test_offset_on_box_top ... ok
[INFO] [stdout] test operations::offset::tests::test_offset_zero_distance ... ok
[INFO] [stdout] test operations::offset::tests::test_offset_triangle ... ok
[INFO] [stdout] test operations::offset::tests::torus_line_curve_rejected ... ok
[INFO] [stdout] test operations::offset::tests::sphere_arc_collapse_at_pole_rejected ... ok
[INFO] [stdout] test operations::offset::tests::sphere_circle_curve_offset_changes_radius ... ok
[INFO] [stdout] test operations::offset::tests::sphere_great_circle_arc_offset_changes_latitude ... ok
[INFO] [stdout] test operations::offset::tests::sphere_line_curve_rejected ... ok
[INFO] [stdout] test operations::offset::tests::sphere_small_circle_arc_offset_shifts_to_new_latitude ... ok
[INFO] [stdout] test operations::offset::tests::torus_off_torus_arc_rejected ... ok
[INFO] [stdout] test operations::offset::tests::torus_offset_preserves_major_radius_for_latitude ... ok
[INFO] [stdout] test operations::offset::tests::torus_offset_preserves_minor_radius_for_meridian ... ok
[INFO] [stdout] test operations::offset_surface_robust::tests::cross_phase_fillet_then_phase_h_transform ... ok
[INFO] [stdout] test operations::offset::tests::torus_outer_latitude_arc_offset_shifts_theta_m ... ok
[INFO] [stdout] test operations::offset::tests::torus_self_intersecting_geometry_rejected ... ok
[INFO] [stdout] test operations::offset::tests::torus_top_latitude_arc_at_theta_m_pi_2_offset ... ok
[INFO] [stdout] test operations::offset_surface_robust::tests::offset_cylinder_surface_changes_radius ... ok
[INFO] [stdout] test operations::offset_surface_robust::tests::offset_inverts_surface_returns_skip ... ok
[INFO] [stdout] test operations::offset_surface_robust::tests::offset_negative_distance_on_plane_preserves_normal ... ok
[INFO] [stdout] test operations::offset_surface_robust::tests::offset_planar_surface_translates_distance ... ok
[INFO] [stdout] test operations::offset_surface_robust::tests::cross_phase_chamfer_then_phase_k_loft_compat ... ok
[INFO] [stdout] test operations::offset_surface_robust::tests::offset_zero_distance_is_identity ... ok
[INFO] [stdout] test operations::offset_surface_robust::tests::cross_phase_shell_then_phase_h_transform ... ok
[INFO] [stdout] test operations::orient::flip_tests::flip_face_safe_inverts_normal ... ok
[INFO] [stdout] test operations::orient::flip_tests::flip_face_on_box_top_reverses_only_that_face ... ok
[INFO] [stdout] test operations::orient::flip_tests::flip_face_safe_rejects_nonexistent_face ... ok
[INFO] [stdout] test operations::orient::flip_tests::flip_face_safe_reverses_loop_winding ... ok
[INFO] [stdout] test operations::orient::flip_tests::flip_faces_batch_counts_successes ... ok
[INFO] [stdout] test operations::orient::flip_tests::flip_twice_restores_original ... ok
[INFO] [stdout] test operations::p7_canonical_resolver::tests::adr151_beta2_outer_boundary_preserved_on_success ... ok
[INFO] [stdout] test operations::p7_canonical_resolver::tests::adr151_enforce_canonical_two_connected_inners ... ok
[INFO] [stdout] test operations::p7_canonical_resolver::tests::adr151_beta2_rebuild_failed_includes_reason ... ok
[INFO] [stdout] test operations::p7_canonical_resolver::tests::adr151_enforce_empty_inners ... ok
[INFO] [stdout] test operations::p7_canonical_resolver::tests::adr151_beta2_rebuild_canonical_path_exercised ... ok
[INFO] [stdout] test operations::p7_canonical_resolver::tests::adr151_enforce_beta2_may_mutate ... ok
[INFO] [stdout] test operations::p7_canonical_resolver::tests::adr151_enforce_error_display ... ok
[INFO] [stdout] test operations::p7_canonical_resolver::tests::adr151_enforce_invalid_container ... ok
[INFO] [stdout] test operations::planar_walk::tests::finds_simple_chord ... ok
[INFO] [stdout] test operations::planar_walk::tests::first_path_returns_some_for_chord ... ok
[INFO] [stdout] test operations::p7_canonical_resolver::tests::adr151_enforce_multi_component_disjoint_inners ... ok
[INFO] [stdout] test operations::planar_walk::tests::multi_chain_face_enumerates_all ... ok
[INFO] [stdout] test operations::plane_snap::tests::adr168_b2_chord_round_trip_post_snap_drift_zero ... ok
[INFO] [stdout] test operations::plane_snap::tests::adr168_b2_snap_preserves_in_plane_coordinates ... ok
[INFO] [stdout] test operations::plane_snap::tests::adr168_b2_snap_strictly_less_than_detection_invariant ... ok
[INFO] [stdout] test operations::plane_snap::tests::adr168_b3_metrics_aggregate_accumulates_correctly ... ok
[INFO] [stdout] test operations::plane_snap::tests::adr168_b3_metrics_aggregate_default_empty_no_overhead ... ok
[INFO] [stdout] test operations::planar_walk::tests::no_paths_when_no_free_edges ... ok
[INFO] [stdout] test operations::plane_snap::tests::adr168_b2_snap_face_missing_face_no_op ... ok
[INFO] [stdout] test operations::p7_canonical_resolver::tests::adr151_beta2_p7_manifold_report_populated_on_success ... ok
[INFO] [stdout] test operations::plane_snap::tests::adr168_gamma_canonical_surface_publicly_invocable_from_module ... ok
[INFO] [stdout] test operations::plane_snap::tests::adr168_plane_snap_normal_default_value ... ok
[INFO] [stdout] test operations::plane_snap::tests::adr168_gamma_ssot_lives_in_axia_geo_operations ... ok
[INFO] [stdout] test operations::plane_snap::tests::adr168_plane_snap_offset_default_value ... ok
[INFO] [stdout] test operations::plane_snap::tests::adr168_snap_face_chord_to_plane_drift_correction ... ok
[INFO] [stdout] test operations::plane_snap::tests::adr168_snap_edge_cases ... ok
[INFO] [stdout] test operations::plane_snap::tests::adr168_snap_no_mutation_when_drift_below_tol ... ok
[INFO] [stdout] test operations::polygon_geom::tests::l_shape_does_not_contain_overlap_quad ... ok
[INFO] [stdout] test operations::polygon_geom::tests::plane_basis_roundtrip ... ok
[INFO] [stdout] test operations::plane_snap::tests::adr168_detect_face_drift_read_only ... ok
[INFO] [stdout] test operations::plane_snap::tests::adr168_b3_metrics_aggregate_monotonic_and_order_independent ... ok
[INFO] [stdout] test operations::polygon_geom::tests::square_does_not_contain_offset_square ... ok
[INFO] [stdout] test operations::polygon_geom::tests::sutherland_hodgman_disjoint ... ok
[INFO] [stdout] test operations::polygon_geom::tests::sutherland_hodgman_simple_overlap ... ok
[INFO] [stdout] test operations::primitives::tests::adr089_a_gamma_cylinder_perimeter_deviation_corpus ... ok
[INFO] [stdout] test operations::polygon_geom::tests::square_contains_smaller_square_inside ... ok
[INFO] [stdout] test operations::primitives::tests::adr089_a_gamma_path_b_savings_table ... ok
[INFO] [stdout] test operations::polygon_geom::tests::strict_interior_works_for_concave ... ok
[INFO] [stdout] test operations::primitives::tests::adr089_a_gamma_cylinder_chord_error_corpus ... ok
[INFO] [stdout] test operations::primitives::tests::adr089_a_gamma_cylinder_per_segment_face_count ... ok
[INFO] [stdout] test operations::primitives::tests::adr103_beta1_cone_apex_on_positive_z ... ok
[INFO] [stdout] test operations::primitives::tests::adr104_b1_zeta_engine_default_is_path_a_legacy ... ok
[INFO] [stdout] test operations::primitives::tests::adr104_b1_zeta_path_b_active_after_flag_flip ... ok
[INFO] [stdout] test operations::primitives::tests::adr103_beta1_box_top_face_normal_is_plus_z ... ok
[INFO] [stdout] test operations::primitives::tests::adr104_b2_zeta_dispatch_invariants_pass ... ok
[INFO] [stdout] test operations::primitives::tests::adr103_beta1_cylinder_surface_axis_dir_is_plus_z ... ok
[INFO] [stdout] test operations::primitives::tests::adr104_b2_zeta_engine_default_is_path_a_legacy ... ok
[INFO] [stdout] test operations::primitives::tests::adr103_beta1_box_height_param_extends_along_z ... ok
[INFO] [stdout] test operations::primitives::tests::adr104_b1_zeta_dispatch_invariants_pass ... ok
[INFO] [stdout] test operations::plane_snap::tests::adr168_snap_anti_parallel_normal_handled ... ok
[INFO] [stdout] test operations::polygon_geom::tests::sutherland_hodgman_full_contains ... ok
[INFO] [stdout] test operations::primitives::tests::adr103_beta1_cylinder_axis_is_z_up ... ok
[INFO] [stdout] test operations::primitives::tests::adr117_cylinder_direct_dispatch_engine_default_path_a ... ok
[INFO] [stdout] test operations::primitives::tests::adr117_cylinder_direct_dispatch_invariants_pass ... ok
[INFO] [stdout] test operations::primitives::tests::adr104_b2_zeta_path_a_default_off_preserved ... ok
[INFO] [stdout] test operations::primitives::tests::adr104_b2_zeta_path_a_explicit_off_after_toggle ... ok
[INFO] [stdout] test operations::primitives::tests::adr117_cylinder_direct_dispatch_path_b_active_after_flag_flip ... ok
[INFO] [stdout] test operations::primitives::tests::adr117_cylinder_direct_dispatch_path_a_default_off_preserved ... ok
[INFO] [stdout] test operations::primitives::tests::adr173_gate_s2_drawline_on_solid_box_face_splits ... ok
[INFO] [stdout] test operations::primitives::tests::adr117_cylinder_direct_dispatch_bidirectional_toggle ... ok
[INFO] [stdout] test operations::primitives::tests::adr104_b2_zeta_path_b_dispatch_memory_reduction ... ok
[INFO] [stdout] test operations::primitives::tests::cylinder_caps_have_plane_surface ... ok
[INFO] [stdout] test operations::primitives::tests::cone_side_faces_have_cone_surface ... ok
[INFO] [stdout] test operations::primitives::tests::cylinder_side_faces_have_cylinder_surface ... ok
[INFO] [stdout] test operations::primitives::tests::k_delta_box_face_create_solid_extrude_succeeds ... ok
[INFO] [stdout] test operations::primitives::tests::k_delta_box_face_planes_outward_normals_correct ... ok
[INFO] [stdout] test operations::primitives::tests::k_delta_box_faces_have_plane_surface ... ok
[INFO] [stdout] test operations::primitives::tests::k_epsilon_box_plane_uses_polygon_path_not_surface_tess ... ok
[INFO] [stdout] test operations::primitives::tests::adr104_b2_zeta_path_b_active_after_flag_flip ... ok
[INFO] [stdout] test operations::primitives::tests::k_eta_cone_apex_is_single_vertex ... ok
[INFO] [stdout] test operations::primitives::tests::adr117_cylinder_direct_dispatch_returns_canonical_face_order ... ok
[INFO] [stdout] test operations::primitives::tests::k_eta_cone_has_only_base_cap_with_plane_surface ... ok
[INFO] [stdout] test operations::primitives::tests::cylinder_invariants_pass ... ok
[INFO] [stdout] test operations::primitives::tests::k_delta_cone_cap_create_solid_extrude_succeeds ... ok
[INFO] [stdout] test operations::primitives::tests::primitive_cylinder_sides_share_owner_id ... ok
[INFO] [stdout] test operations::primitives::tests::cone_invariants_pass ... ok
[INFO] [stdout] test operations::primitives::tests::k_eta_cone_surface_evaluates_to_correct_radii ... ok
[INFO] [stdout] test operations::primitives::tests::cylinder_surface_radius_matches_input ... ok
[INFO] [stdout] test operations::primitives::tests::primitive_cone_sides_share_owner_id ... ok
[INFO] [stdout] test operations::push_pull::tests::adr_060_step3_existing_box_face_count_unchanged ... ok
[INFO] [stdout] test operations::push_pull::tests::adr_060_step3_negative_push_translates_top_correctly ... ok
[INFO] [stdout] test operations::push_pull::tests::adr_060_step3_side_edges_curve_mandatory_is_line ... ok
[INFO] [stdout] test operations::primitives::tests::primitive_two_cylinders_get_distinct_owner_ids ... ok
[INFO] [stdout] test operations::primitives::tests::adr103_beta1_sphere_north_pole_on_positive_z ... ok
[INFO] [stdout] test operations::primitives::tests::adr089_a_gamma_cylinder_path_a_memory_footprint ... ok
[INFO] [stdout] test operations::push_pull::tests::adr_060_step3_side_walls_get_plane_surface ... ok
[INFO] [stdout] test operations::push_pull::tests::adr_060_step3_zero_distance_no_op ... ok
[INFO] [stdout] test operations::push_pull::tests::adr_060_step3_top_face_synthesizes_plane_when_base_curveless ... ok
[INFO] [stdout] test operations::push_pull::tests::adr_060_step3_top_face_translates_base_surface ... ok
[INFO] [stdout] test operations::push_pull::tests::adr_060_step3_side_wall_normals_perpendicular_to_push ... ok
[INFO] [stdout] test operations::push_pull::tests::auto_merge_returns_updated_face_ids_in_result ... ok
[INFO] [stdout] test operations::push_pull::tests::auto_merge_preserves_non_coplanar_geometry ... ok
[INFO] [stdout] test operations::push_pull::tests::auto_merge_drop_in_alongside_no_regression_existing_box ... ok
[INFO] [stdout] test operations::push_pull::tests::auto_merge_disabled_for_move_only_mode ... ok
[INFO] [stdout] test operations::primitives::tests::sphere_poles_face_outward ... ok
[INFO] [stdout] test operations::push_pull::tests::flat_face_uses_create_face_mode ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_accepts_exactly_epsilon ... ok
[INFO] [stdout] test operations::push_pull::tests::box_top_move_only_changes_height ... ok
[INFO] [stdout] test operations::push_pull::tests::box_top_uses_move_only_mode ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_accepts_exactly_zero_as_noop ... ok
[INFO] [stdout] test operations::primitives::tests::sphere_side_faces_have_sphere_surface ... ok
[INFO] [stdout] test operations::push_pull::tests::push_flat_creates_box ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_base_and_top_face_outward ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_edge_case_degenerate_rectangle ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_large_distance ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_invariants_after_push ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_face_count_is_six ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_invariants_after_negative_push ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_creates_valid_topology ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_face_with_hole_create_inner_walls ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_rejects_nan_distance ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_rejects_infinity_distance ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_preserves_base_face_vertices ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_move_only_preserves_face_count ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_top_face_returned ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_rejects_negative_subepsilon ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_negative_distance ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_move_only_preserves_hole ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_result_is_closed_solid ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_rejects_subepsilon_distance ... ok
[INFO] [stdout] test operations::push_pull::tests::zero_is_noop ... ok
[INFO] [stdout] test operations::repair::tests::detach_face_groups_basic ... ok
[INFO] [stdout] test operations::repair::tests::detect_non_manifold_edges_in_touching_cubes ... ok
[INFO] [stdout] test operations::push_pull::tests::pushpull_very_small_distance ... ok
[INFO] [stdout] test operations::revolve::tests::revolve_rejects_bad_input ... ok
[INFO] [stdout] test operations::revolve::tests::revolve_pole_vertices_are_shared ... ok
[INFO] [stdout] test operations::repair::tests::repair_non_manifold_edges_clears_violations ... ok
[INFO] [stdout] test operations::revolve::tests::revolve_vertical_line_produces_cylinder_shell ... ok
[INFO] [stdout] test operations::shell::tests::shell_box_creates_thin_walled_solid ... ok
[INFO] [stdout] test operations::revolve::tests::revolve_with_both_poles_forms_closed_lens ... ok
[INFO] [stdout] test operations::revolve::tests::revolve_with_top_pole_produces_triangles ... ok
[INFO] [stdout] test operations::shell::tests::shell_self_intersection_pre_pass_detect ... ok
[INFO] [stdout] test operations::revolve::tests::revolve_produces_outward_normals ... ok
[INFO] [stdout] test operations::shell::tests::shell_face_removal_creates_open_boundary ... ok
[INFO] [stdout] test operations::subdivide::tests::subdivide_tetrahedron_produces_12_quads ... ok
[INFO] [stdout] test operations::shell::tests::shell_thickness_exceeds_curvature_returns_skip ... ok
[INFO] [stdout] test operations::shell::tests::shell_uses_offset_for_inner_void ... ok
[INFO] [stdout] test operations::subdivide::tests::subdivide_rejects_empty_mesh ... ok
[INFO] [stdout] test operations::sweep::tests::sweep_handles_vertical_path ... ok
[INFO] [stdout] test operations::sweep::tests::sweep_along_bent_path_produces_bent_surface ... ok
[INFO] [stdout] test operations::sweep::tests::sweep_rejects_bad_input ... ok
[INFO] [stdout] test operations::sweep::tests::sweep_square_along_straight_path ... ok
[INFO] [stdout] test operations::sweep::tests::sweep_open_profile_yields_strip ... ok
[INFO] [stdout] test operations::subdivide::tests::subdivide_cube_produces_24_quads ... ok
[INFO] [stdout] test operations::t_junction::tests::adr149_detect_excludes_endpoint_vertex ... ok
[INFO] [stdout] test operations::t_junction::tests::adr149_detect_no_tjunction_on_clean_mesh ... ok
[INFO] [stdout] test operations::t_junction::tests::adr149_detect_multiple_tjunctions_on_single_edge ... ok
[INFO] [stdout] test operations::primitives::tests::primitive_sphere_all_faces_share_owner_id ... ok
[INFO] [stdout] test operations::t_junction::tests::adr149_detect_single_vertex_on_edge_interior ... ok
[INFO] [stdout] test operations::t_junction::tests::adr149_heal_assigns_hard_flag ... ok
[INFO] [stdout] test operations::sweep::tests::sweep_bent_and_vertical_paths_preserve_invariants ... ok
[INFO] [stdout] test operations::t_junction::tests::adr149_heal_canonical_single_tjunction ... ok
[INFO] [stdout] test operations::t_junction::tests::adr149_detect_respects_tolerance ... ok
[INFO] [stdout] test operations::t_junction::tests::adr149_heal_manifold_safe_post_healing ... ok
[INFO] [stdout] test operations::transform::tests::adr_060_step1_both_endpoints_moved_translates_circle ... ok
[INFO] [stdout] test operations::transform::tests::adr_060_step1_empty_vert_list_noop ... ok
[INFO] [stdout] test operations::t_junction::tests::adr149_heal_multi_tjunction_in_sequence ... ok
[INFO] [stdout] test operations::transform::tests::adr_060_step1_partial_move_drops_curve_to_none ... ok
[INFO] [stdout] test operations::t_junction::tests::adr149_heal_rejects_drifted_vertex ... ok
[INFO] [stdout] test operations::transform::tests::adr_060_step2_rotate_both_endpoints_rotates_circle ... ok
[INFO] [stdout] test operations::transform::tests::adr_060_step2_rotate_line_variant_preserves_vertids ... ok
[INFO] [stdout] test operations::t_junction::tests::adr149_heal_rejects_invalid_report ... ok
[INFO] [stdout] test operations::transform::tests::adr_060_step2_rotate_no_curve_no_spurious_change ... ok
[INFO] [stdout] test operations::transform::tests::adr_060_step2_rotate_partial_drops_curve ... ok
[INFO] [stdout] test operations::transform::tests::adr_060_step2_scale_no_curve_no_spurious_change ... ok
[INFO] [stdout] test operations::transform::tests::adr_060_step2_scale_non_uniform_drops_circle ... ok
[INFO] [stdout] test operations::transform::tests::adr_060_step2_scale_partial_drops_curve ... ok
[INFO] [stdout] test operations::transform::tests::adr_060_step2_scale_uniform_sphere_radius_changes ... ok
[INFO] [stdout] test operations::transform::tests::adr_060_step1_unrelated_edge_unchanged ... ok
[INFO] [stdout] test operations::transform::tests::adr_060_step1_line_variant_mesh_relative ... ok
[INFO] [stdout] test operations::transform::tests::adr_060_step1_no_curve_no_spurious_change ... ok
[INFO] [stdout] test operations::transform::tests::centroid_calculation ... ok
[INFO] [stdout] test operations::primitives::tests::sphere_invariants_pass ... ok
[INFO] [stdout] test operations::transform::tests::rotate_rejects_nan_angle ... ok
[INFO] [stdout] test operations::transform::tests::scale_doubles_size ... ok
[INFO] [stdout] test operations::transform::tests::scale_rejects_nan_factor ... ok
[INFO] [stdout] test operations::transform::tests::scale_accepts_reasonable_downscale ... ok
[INFO] [stdout] test operations::transform::tests::rotate_rejects_zero_axis ... ok
[INFO] [stdout] test operations::transform::tests::scale_rejects_subepsilon_collapse ... ok
[INFO] [stdout] test operations::primitives::tests::adr104_b1_zeta_path_a_default_off_preserved ... ok
[INFO] [stdout] test operations::transform::tests::rotate_90_degrees ... ok
[INFO] [stdout] test operations::transform::tests::scale_rejects_zero_factor ... ok
[INFO] [stdout] test operations::transform::tests::translate_moves_vertices ... ok
[INFO] [stdout] test operations::transform::tests::translate_rejects_nan_delta ... ok
[INFO] [stdout] test p7_manifold::tests::adr152_compute_topology_active_filter_excludes_inactive ... ok
[INFO] [stdout] test p7_manifold::tests::adr152_compute_topology_empty_mesh_baseline ... ok
[INFO] [stdout] test p7_manifold::tests::adr152_compute_topology_euler_v_minus_e_plus_f ... ok
[INFO] [stdout] test operations::transform::tests::translate_rejects_infinity ... ok
[INFO] [stdout] test p7_manifold::tests::adr152_compute_topology_summary_format_locked ... ok
[INFO] [stdout] test p7_manifold::tests::adr152_compute_topology_genus_only_for_closed_manifold ... ok
[INFO] [stdout] test p7_manifold::tests::adr152_compute_topology_open_disk_boundary_loop_count ... ok
[INFO] [stdout] test p7_manifold::tests::adr152_m1_m2_m3_unchanged_baseline ... ok
[INFO] [stdout] test p7_manifold::tests::adr152_m4_over_connected_threshold_locked ... ok
[INFO] [stdout] test p7_manifold::tests::adr152_m4_isolated_vertex_detected ... ok
[INFO] [stdout] test p7_manifold::tests::verify_p7_manifold_inactive_container_yields_empty_report ... ok
[INFO] [stdout] test p7_manifold::tests::adr152_m5_face_flip_threshold_locked ... ok
[INFO] [stdout] test p7_manifold::tests::verify_p7_manifold_handles_empty_inners ... ok
[INFO] [stdout] test p7_manifold::tests::verify_p7_manifold_passes_on_disjoint_inner_multi_hole ... ok
[INFO] [stdout] test p7_manifold::tests::verify_p7_manifold_passes_on_simple_ring_with_hole ... ok
[INFO] [stdout] test p7_manifold::tests::adr152_m4_normal_valence_passes ... ok
[INFO] [stdout] test p7_manifold::tests::adr152_m5_aligned_neighbors_pass ... ok
[INFO] [stdout] test operations::primitives::tests::adr104_b1_zeta_path_a_explicit_off_after_toggle ... ok
[INFO] [stdout] test p7_manifold::tests::verify_p7_manifold_report_summary_formats_violations ... ok
[INFO] [stdout] test path_b_family_verification::tests::adr104_gamma_cone_path_b_side_face_has_cone_surface ... ok
[INFO] [stdout] test path_b_family_verification::tests::adr104_gamma_path_b_family_face_surface_kinds_distinct ... ok
[INFO] [stdout] test path_b_family_verification::tests::adr104_gamma_path_b_family_tessellation_activated ... ok
[INFO] [stdout] test path_b_family_verification::tests::adr104_gamma_sphere_path_b_both_hemispheres_have_sphere_surface ... ok
[INFO] [stdout] test path_b_family_verification::tests::adr104_gamma_cylinder_create_direct_path_a_when_flag_off ... ok
[INFO] [stdout] test path_b_family_verification::tests::adr104_gamma_path_b_family_constant_dcel_invariant ... ok
[INFO] [stdout] test plane::tests::adr167_b2_annulus_uses_canonical_eps_plane_offset ... ok
[INFO] [stdout] test path_b_family_verification::tests::adr104_gamma_cylinder_create_direct_dispatches_to_path_b_when_flag_on ... ok
[INFO] [stdout] test plane::tests::adr167_b2_mesh_spatial_hash_semantic_distinction ... ok
[INFO] [stdout] test path_b_family_verification::tests::adr104_gamma_torus_path_b_face_has_torus_surface ... ok
[INFO] [stdout] test plane::tests::adr167_b3_canonical_ssot_values_unchanged ... ok
[INFO] [stdout] test plane::tests::adr167_b3_mesh_are_coplanar_uses_canonical_threshold ... ok
[INFO] [stdout] test path_b_family_verification::tests::adr104_gamma_path_b_family_invariants_pass ... ok
[INFO] [stdout] test plane::tests::adr167_b3_preserve_strict_coplanar_offset_tol ... ok
[INFO] [stdout] test plane::tests::adr167_eps_plane_normal_default_value ... ok
[INFO] [stdout] test plane::tests::adr167_eps_plane_offset_default_value ... ok
[INFO] [stdout] test plane::tests::adr167_gamma_canonical_surface_publicly_invocable_from_crate_root ... ok
[INFO] [stdout] test plane::tests::adr167_gamma_ssot_lives_in_axia_geo_per_beta_2_amendment ... ok
[INFO] [stdout] test path_b_family_verification::tests::adr104_gamma_cylinder_path_b_side_face_has_cylinder_surface ... ok
[INFO] [stdout] test plane::tests::adr167_same_plane_identical_parallel_no_offset_diff ... ok
[INFO] [stdout] test plane::tests::adr167_same_plane_offset_diff_within_eps_passes ... ok
[INFO] [stdout] test predicates::adapter::tests::fma_environment_sanity_check ... ok
[INFO] [stdout] test predicates::adapter::tests::in_circle_robust_distinguishes_cocircular ... ok
[INFO] [stdout] test predicates::adapter::tests::in_sphere_robust_distinguishes_cospherical ... ok
[INFO] [stdout] test predicates::adapter::tests::orient2d_robust_classifies_collinear_correctly ... ok
[INFO] [stdout] test predicates::adapter::tests::orient3d_robust_classifies_coplanar_correctly ... ok
[INFO] [stdout] test predicates::filter::tests::fast_filter_falls_back_to_robust_at_threshold ... ok
[INFO] [stdout] test predicates::filter::tests::fast_filter_returns_same_as_robust_for_non_degenerate ... ok
[INFO] [stdout] test predicates::hotspots::tests::adr_007_winding_uses_orient2d_robust ... ok
[INFO] [stdout] test predicates::hotspots::tests::m1_mixed_cycle_uses_orient2d_robust ... ok
[INFO] [stdout] test predicates::hotspots::tests::no_existing_regression_breaks ... ok
[INFO] [stdout] test predicates::hotspots::tests::phase_j_containment_uses_point_in_polygon_robust ... ok
[INFO] [stdout] test predicates::hotspots::tests::phase_j_entry_exit_eps_offset_unchanged ... ok
[INFO] [stdout] test predicates::hotspots::tests::phase_l_convexity_uses_orient3d_robust ... ok
[INFO] [stdout] test predicates::hotspots::tests::phase_l_tangent_touch_now_correctly_classified_via_robust ... ok
[INFO] [stdout] test storage::tests::test_insert_and_get ... ok
[INFO] [stdout] test plane::tests::adr167_same_plane_edge_cases ... ok
[INFO] [stdout] test plane::tests::adr167_same_plane_anti_parallel_flipped_normal_same_plane ... ok
[INFO] [stdout] test storage::tests::test_remove ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::bbox_uv_canonical_unit_square ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::bbox_xyz_contains_all_control_pts ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::bbox_xyz_planar_patch_zero_z_extent ... ok
[INFO] [stdout] test plane::tests::adr167_plane_struct_from_point_normal_round_trip ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::curvature_max_bumped_grid_positive ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::deg_helpers_handle_empty_grid ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::derivative_u_bilinear_corner_aligned_with_first_diff ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::derivative_v_bilinear_corner_aligned_with_first_diff ... ok
[INFO] [stdout] test plane::tests::adr167_b2_coplanar_remains_strict_per_call_override ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::curvature_max_planar_grid_zero ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::derivative_u_consistent_with_finite_diff ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::evaluate_bicubic_midpoint_has_z_bump ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::evaluate_corner_00_is_first_point ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::evaluate_bilinear_midpoint_is_centroid ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::evaluate_corner_11_is_last_point ... ok
[INFO] [stdout] test plane::tests::adr167_b3_deprecated_aliases_still_resolve_to_canonical ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::evaluate_corner_01_and_10 ... ok
[INFO] [stdout] test plane::tests::adr167_b2_tolerances_re_exports_canonical_constants ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::deg_helpers_match_grid_size_minus_one ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::evaluate_offset_grid ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::evaluate_strict_accepts_corners ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::derivative_v_consistent_with_finite_diff ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::evaluate_raw_allows_extrapolation ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::evaluate_bicubic_corner_endpoints ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::evaluate_strict_rejects_u_below_zero ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::evaluate_strict_rejects_v_outside_range ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::evaluate_strict_rejects_u_above_one ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::evaluate_strict_accepts_in_range ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::is_planar_bumped_grid_returns_false ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::is_planar_loose_tolerance_accepts_curved ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::is_degenerate_normal_grid_returns_false ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::evaluate_strict_tolerates_epsilon_boundary ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::is_degenerate_zero_grid_returns_true ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::normal_bilinear_xy_plane_is_z ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::is_planar_xy_grid_returns_true ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::normal_unit_length ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::split_u_left_endpoint_matches_evaluate_at_t ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::split_u_right_endpoint_matches_original ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::split_v_grid_dimensions_preserved ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::validate_rejects_degenerate_1xN_grid ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::normal_contract_right_handed ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::validate_rejects_degenerate_Nx1_grid ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::validate_rejects_empty_grid ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::split_at_zero_left_collapses_to_first_pt ... ok
[INFO] [stdout] test surfaces::bspline_surface::tests::derivative_u_finite_diff_consistency ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::validate_rejects_jagged_rows ... ok
[INFO] [stdout] test surfaces::bspline_surface::tests::evaluate_continuous_across_knots ... ok
[INFO] [stdout] test surfaces::bspline_surface::tests::evaluate_midpoint_pulls_z_up_due_to_bump ... ok
[INFO] [stdout] test surfaces::bspline_surface::tests::evaluate_strict_accepts_in_range ... ok
[INFO] [stdout] test surfaces::bspline_surface::tests::evaluate_strict_rejects_u_outside_range ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::split_v_left_endpoint_matches_original ... ok
[INFO] [stdout] test surfaces::bspline_surface::tests::evaluate_clamped_corner_00_is_first_ctrl ... ok
[INFO] [stdout] test surfaces::bspline_surface::tests::validate_rejects_empty_grid ... ok
[INFO] [stdout] test surfaces::bspline_surface::tests::validate_rejects_jagged_rows ... ok
[INFO] [stdout] test surfaces::bspline_surface::tests::validate_rejects_wrong_knot_count ... ok
[INFO] [stdout] test surfaces::bspline_surface::tests::evaluate_clamped_other_corners ... ok
[INFO] [stdout] test surfaces::bspline_surface::tests::evaluate_strict_rejects_v_outside_range ... ok
[INFO] [stdout] test surfaces::bspline_surface::tests::validate_rejects_zero_degree ... ok
[INFO] [stdout] test surfaces::bspline_surface::tests::evaluate_clamped_corner_11_is_last_ctrl ... ok
[INFO] [stdout] test surfaces::cone::tests::cone_at_exactly_90deg_half_angle_degenerate ... ok
[INFO] [stdout] test surfaces::cone::tests::cone_with_small_half_angle_nearly_cylindrical ... ok
[INFO] [stdout] test surfaces::cone::tests::evaluate_apex_at_v_zero ... ok
[INFO] [stdout] test surfaces::cone::tests::derivative_v_perpendicular_to_normal ... ok
[INFO] [stdout] test surfaces::cone::tests::derivative_u_grows_with_v ... ok
[INFO] [stdout] test surfaces::cone::tests::derivative_u_zero_at_apex ... ok
[INFO] [stdout] test surfaces::bezier_patch::tests::split_u_grid_dimensions_preserved ... ok
[INFO] [stdout] test surfaces::bspline_surface::tests::derivative_v_finite_diff_consistency ... ok
[INFO] [stdout] test surfaces::cone::tests::evaluate_axial_dist_radius_proportional ... ok
[INFO] [stdout] test surfaces::cone::tests::evaluate_offset_apex ... ok
[INFO] [stdout] test surfaces::cone::tests::normal_unit_length ... ok
[INFO] [stdout] test surfaces::curvature::tests::plane_has_zero_curvature ... ok
[INFO] [stdout] test surfaces::curvature::tests::cylinder_curvatures ... ok
[INFO] [stdout] test surfaces::curvature::tests::sphere_gaussian_and_mean_curvature ... ok
[INFO] [stdout] test surfaces::cone::tests::normal_radial_component_aligns_with_radial ... ok
[INFO] [stdout] test surfaces::cylinder::tests::derivative_u_magnitude_equals_radius ... ok
[INFO] [stdout] test surfaces::cylinder::tests::derivative_u_perpendicular_to_radius ... ok
[INFO] [stdout] test surfaces::cylinder::tests::evaluate_at_u_zero_v_zero_is_axis_origin_plus_radius_ref ... ok
[INFO] [stdout] test surfaces::cylinder::tests::evaluate_offset_axis_origin ... ok
[INFO] [stdout] test surfaces::cylinder::tests::evaluate_quarter_angle_is_perp_direction ... ok
[INFO] [stdout] test surfaces::cylinder::tests::full_circle_period_returns_to_start ... ok
[INFO] [stdout] test surfaces::cylinder::tests::nonparallel_ref_dir_orthogonalized ... ok
[INFO] [stdout] test surfaces::cylinder::tests::normal_is_radial_outward ... ok
[INFO] [stdout] test surfaces::cylinder::tests::normal_unit_length ... ok
[INFO] [stdout] test surfaces::cylinder::tests::evaluate_v_translates_along_axis ... ok
[INFO] [stdout] test surfaces::cone::tests::evaluate_axis_at_u_arbitrary_radius_zero ... ok
[INFO] [stdout] test surfaces::fitting::tests::extrusion_then_uniform_scale_preserves_height_ratio ... ok
[INFO] [stdout] test surfaces::cylinder::tests::evaluate_radius_invariant_at_any_height ... ok
[INFO] [stdout] test surfaces::fitting::tests::fit_cloud_planar_recovery ... ok
[INFO] [stdout] test surfaces::fitting::tests::fit_grid_passes_through_corners ... ok
[INFO] [stdout] test surfaces::fitting::tests::fit_planar_grid_recovers_plane ... ok
[INFO] [stdout] test surfaces::fitting::tests::loft_then_transform_preserves_structure ... ok
[INFO] [stdout] test surfaces::knot::tests::analytic_surface_insert_knot_u_facade ... ok
[INFO] [stdout] test surfaces::fitting::tests::fit_curved_grid_within_tolerance ... ok
[INFO] [stdout] test surfaces::fitting::tests::fit_cloud_fallback_size_validation ... ok
[INFO] [stdout] test surfaces::knot::tests::bspline_surface_insert_knot_v_preserves_evaluate ... ok
[INFO] [stdout] test surfaces::knot::tests::bspline_surface_insert_knot_u_preserves_evaluate ... ok
[INFO] [stdout] test surfaces::knot::tests::nurbs_surface_insert_knot_u_preserves_evaluate ... ok
[INFO] [stdout] test surfaces::knot::tests::surface_refine_u_grid_grows_correctly ... ok
[INFO] [stdout] test surfaces::cone::tests::normal_at_45deg_cone_has_axis_component_negative ... ok
[INFO] [stdout] test surfaces::loft::tests::loft_four_sections_cubic_v_direction ... ok
[INFO] [stdout] test surfaces::loft::tests::loft_handles_zero_chord_between_sections ... ok
[INFO] [stdout] test surfaces::loft::tests::loft_rejects_mismatched_degrees ... ok
[INFO] [stdout] test surfaces::loft::tests::loft_passes_through_input_curves ... ok
[INFO] [stdout] test surfaces::cone::tests::evaluate_at_unit_axial_distance ... ok
[INFO] [stdout] test surfaces::loft::tests::loft_two_lines_returns_planar_surface ... ok
[INFO] [stdout] test surfaces::loft::tests::loft_three_profiles_pass_through_at_v_params ... ok
[INFO] [stdout] test surfaces::loft::tests::loft_two_profiles_v1_is_ruled_surface ... ok
[INFO] [stdout] test surfaces::merge::tests::merge_kind_mismatch_returns_rejection ... ok
[INFO] [stdout] test surfaces::merge::tests::merge_normal_mismatch_returns_rejection ... ok
[INFO] [stdout] test surfaces::merge::tests::merge_plane_origin_drift_rejection ... ok
[INFO] [stdout] test surfaces::merge::tests::merge_compatible_planes_succeeds ... ok
[INFO] [stdout] test surfaces::nurbs_surface::tests::derivative_u_finite_diff_consistency ... ok
[INFO] [stdout] test surfaces::curvature::tests::principal_curvatures_consistent_with_h_k ... ok
[INFO] [stdout] test surfaces::nurbs_surface::tests::derivative_v_finite_diff_consistency ... ok
[INFO] [stdout] test surfaces::nurbs_surface::tests::evaluate_clamped_endpoints_match_corner_ctrl_pts ... ok
[INFO] [stdout] test surfaces::nurbs_surface::tests::evaluate_strict_accepts_in_range ... ok
[INFO] [stdout] test surfaces::nurbs_surface::tests::validate_rejects_negative_weight ... ok
[INFO] [stdout] test surfaces::nurbs_surface::tests::evaluate_strict_rejects_outside_range ... ok
[INFO] [stdout] test surfaces::knot::tests::surface_refine_v_does_not_affect_u_count ... ok
[INFO] [stdout] test surfaces::nurbs_surface::tests::validate_rejects_zero_weight ... ok
[INFO] [stdout] test surfaces::nurbs_surface::tests::evaluate_unit_weights_matches_bspline ... ok
[INFO] [stdout] test surfaces::nurbs_surface::tests::validate_rejects_weight_dimension_mismatch ... ok
[INFO] [stdout] test surfaces::plane::tests::evaluate_u_axis_direction ... ok
[INFO] [stdout] test surfaces::plane::tests::evaluate_xz_plane ... ok
[INFO] [stdout] test surfaces::plane::tests::evaluate_v_axis_direction ... ok
[INFO] [stdout] test surfaces::plane::tests::evaluate_offset_origin ... ok
[INFO] [stdout] test surfaces::plane::tests::evaluate_origin_at_zero ... ok
[INFO] [stdout] test surfaces::sphere::tests::derivative_u_perpendicular_to_normal ... ok
[INFO] [stdout] test surfaces::sphere::tests::evaluate_equator_quarter_u_is_y_axis ... ok
[INFO] [stdout] test surfaces::sphere::tests::evaluate_equator_u_zero_is_x_axis ... ok
[INFO] [stdout] test surfaces::sphere::tests::evaluate_north_pole ... ok
[INFO] [stdout] test surfaces::nurbs_surface::tests::evaluate_higher_weight_pulls_surface_toward_ctrl ... ok
[INFO] [stdout] test surfaces::nurbs_surface::tests::evaluate_homogeneous_returns_correct_w ... ok
[INFO] [stdout] test surfaces::sphere::tests::evaluate_south_pole ... ok
[INFO] [stdout] test surfaces::sphere::tests::evaluate_offset_center ... ok
[INFO] [stdout] test surfaces::sphere::tests::normal_radial_outward_from_center ... ok
[INFO] [stdout] test surfaces::sphere::tests::normal_unit_length_everywhere ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::cyl_cyl_non_parallel_defers_to_subdivision ... ok
[INFO] [stdout] test surfaces::sphere::tests::evaluate_radius_invariant_everywhere ... ok
[INFO] [stdout] test surfaces::sphere::tests::evaluate_full_longitude_period ... ok
[INFO] [stdout] test surfaces::sphere::tests::derivative_v_perpendicular_to_normal ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::cyl_cyl_parallel_offset_yields_two_lines ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_cone_invalid_half_angle_returns_empty ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_cone_oblique_below_slant_yields_ellipse ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::intersection_default_is_empty ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_cone_steep_plane_yields_open_curve ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::cyl_cyl_parallel_external_tangent ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_cone_through_apex_yields_apex_point ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_cylinder_45deg_yields_ellipse ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_cylinder_degenerate_axis_returns_empty ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::cyl_cyl_parallel_too_far_empty ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_cone_perpendicular_yields_circle ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_cylinder_distant_no_intersection ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_cylinder_parallel_to_axis_yields_two_lines ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_cylinder_zero_radius_returns_empty ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_plane_45deg_yields_diagonal_line ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_cylinder_perpendicular_yields_circle ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_plane_coincident_warns ... ok
[INFO] [stdout] test operations::t_junction::tests::adr149_detect_spatial_hash_optimization ... ok
[INFO] [stdout] test operations::subdivide::tests::subdivide_cube_twice_scales ... ok
[INFO] [stdout] test operations::primitives::tests::adr104_b1_zeta_path_b_dispatch_memory_reduction ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::cyl_cyl_parallel_nested_empty ... ok
[INFO] [stdout] test surfaces::merge::tests::merge_bspline_knots_incompatible_rejection ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_cylinder_perpendicular_offset_center ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_sphere_distant_no_intersection ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_sphere_offset_yields_smaller_circle ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_sphere_tangent_yields_single_point ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::cyl_cyl_parallel_coincident_warns ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_sphere_through_center_yields_great_circle ... ok
[INFO] [stdout] test surfaces::ssi::boolean::tests::boolean_op_sets_is_outer_correctly ... ok
[INFO] [stdout] test surfaces::ssi::boolean::tests::boolean_disjoint_surfaces_returns_empty ... ok
[INFO] [stdout] test surfaces::ssi::newton::tests::refine_already_converged_returns_immediately ... ok
[INFO] [stdout] test surfaces::ssi::newton::tests::invert_3x3_singular_returns_none ... ok
[INFO] [stdout] test surfaces::ssi::boolean::tests::v2_disjoint_returns_empty_clean ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_plane_parallel_disjoint_empty ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_sphere_oblique_plane_circle_in_plane ... ok
[INFO] [stdout] test surfaces::ssi::newton::tests::refine_intersects_perpendicular_squares ... ok
[INFO] [stdout] test surfaces::ssi::nurbs_wrapper::tests::nurbs_disjoint_yields_no_chains ... ok
[INFO] [stdout] test surfaces::ssi::boolean::tests::v2_rejects_invalid_tolerance ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_plane_perpendicular_yields_xy_axis_line ... ok
[INFO] [stdout] test surfaces::ssi::robustness::tests::detect_branch_point ... ok
[INFO] [stdout] test surfaces::ssi::robustness::tests::detect_coincident_region ... ok
[INFO] [stdout] test surfaces::ssi::robustness::tests::detect_pcurve_missing ... ok
[INFO] [stdout] test surfaces::ssi::robustness::tests::detect_self_intersection ... ok
[INFO] [stdout] test surfaces::ssi::robustness::tests::detect_tangent_contact ... ok
[INFO] [stdout] test surfaces::ssi::robustness::tests::detect_boundary_grazing_open_chain ... ok
[INFO] [stdout] test surfaces::ssi::robustness::tests::reconstruct_pcurve_rejects_far_point ... ok
[INFO] [stdout] test surfaces::ssi::robustness::tests::reconstruct_pcurve_uv_clamp_policy ... ok
[INFO] [stdout] test surfaces::ssi::newton::tests::refine_disjoint_does_not_converge ... ok
[INFO] [stdout] test surfaces::ssi::subdivide::tests::aabb_padded_disjoint_returns_false ... ok
[INFO] [stdout] test surfaces::ssi::pipeline_tests::pipeline_disjoint_patches_yields_empty ... ok
[INFO] [stdout] test surfaces::ssi::subdivide::tests::aabb_padded_close_overlaps ... ok
[INFO] [stdout] test surfaces::ssi::subdivide::tests::region_split_alternates_axes ... ok
[INFO] [stdout] test surfaces::ssi::subdivide::tests::disjoint_patches_yield_no_candidates ... ok
[INFO] [stdout] test surfaces::ssi::tolerance::tests::default_geometric_one_micron ... ok
[INFO] [stdout] test surfaces::ssi::tolerance::tests::default_topological_matches_locked_5_spatial_hash ... ok
[INFO] [stdout] test surfaces::ssi::tolerance::tests::strict_keeps_topological_at_locked_5 ... ok
[INFO] [stdout] test surfaces::ssi::subdivide::tests::perpendicular_planar_patches_yield_intersection_line ... ok
[INFO] [stdout] test surfaces::ssi::tolerance::tests::validate_rejects_invalid ... ok
[INFO] [stdout] test surfaces::ssi::subdivide::tests::coincident_planar_patches_emit_many_candidates ... ok
[INFO] [stdout] test surfaces::ssi::tolerance::tests::relaxed_geometric_ten_micron ... ok
[INFO] [stdout] test surfaces::ssi::analytic::tests::plane_sphere_zero_radius_returns_empty ... ok
[INFO] [stdout] test operations::primitives::tests::adr103_beta1_all_primitives_invariants_pass ... ok
[INFO] [stdout] test surfaces::ssi::topology::tests::assemble_collinear_points_chain_in_order ... ok
[INFO] [stdout] test surfaces::ssi::topology::tests::assemble_dedups_close_duplicates ... ok
[INFO] [stdout] test surfaces::ssi::topology::tests::assemble_empty_returns_empty ... ok
[INFO] [stdout] test surfaces::ssi::topology::tests::assemble_closed_loop_detected ... ok
[INFO] [stdout] test surfaces::ssi::trim_boolean::tests::coincident_overlapping_collinear_lines ... ok
[INFO] [stdout] test surfaces::ssi::trim_boolean::tests::coincident_opposite_direction_flag ... ok
[INFO] [stdout] test surfaces::ssi::trim_boolean::tests::crossing_two_lines_x_pattern ... ok
[INFO] [stdout] test surfaces::ssi::trim_boolean::tests::intersect_overlapping_squares ... ok
[INFO] [stdout] test surfaces::ssi::trim_boolean::tests::intersect_nested_returns_inner ... ok
[INFO] [stdout] test surfaces::ssi::topology::tests::assemble_two_disconnected_chains ... ok
[INFO] [stdout] test surfaces::ssi::trim_boolean::tests::intersect_disjoint_returns_empty ... ok
[INFO] [stdout] test surfaces::ssi::trim_boolean::tests::parallel_disjoint_no_intersection ... ok
[INFO] [stdout] test surfaces::ssi::trim_boolean::tests::line_arc_secant_two_crossings ... ok
[INFO] [stdout] test surfaces::ssi::trim_boolean::tests::subtract_b_inside_a_creates_hole ... ok
[INFO] [stdout] test surfaces::ssi::trim_boolean::tests::subtract_disjoint_returns_a ... ok
[INFO] [stdout] test surfaces::ssi::trim_boolean::tests::tangent_line_touching_arc ... ok
[INFO] [stdout] test surfaces::ssi::trim_boolean::tests::union_disjoint_returns_both ... ok
[INFO] [stdout] test surfaces::ssi::trim_classify::tests::disjoint_two_outers ... ok
[INFO] [stdout] test surfaces::ssi::trim_boolean::tests::subtract_a_inside_b_returns_empty ... ok
[INFO] [stdout] test surfaces::ssi::trim_boolean::tests::arc_arc_two_crossing_points ... ok
[INFO] [stdout] test surfaces::ssi::trim_classify::tests::containment_with_curved_loops ... ok
[INFO] [stdout] test surfaces::ssi::trim_classify::tests::multiple_holes_in_one_outer ... ok
[INFO] [stdout] test surfaces::ssi::trim_classify::tests::outer_with_one_hole ... ok
[INFO] [stdout] test surfaces::ssi::trim_classify::tests::single_outer_loop_tree ... ok
[INFO] [stdout] test surfaces::ssi::trim_gen::tests::batch_separates_closed_and_open ... ok
[INFO] [stdout] test surfaces::ssi::trim_gen::tests::polyline_empty_for_short_chain ... ok
[INFO] [stdout] test surfaces::ssi::trim_gen::tests::trim_loops_only_for_closed_chains ... ok
[INFO] [stdout] test surfaces::ssi::trim_gen::tests::polyline_three_points_yields_two_segments ... ok
[INFO] [stdout] test surfaces::ssi::pipeline_tests::pipeline_perpendicular_planar_patches_produces_chain ... ok
[INFO] [stdout] test mesh::tests::cache_byte_cap_evicts_oldest ... ok
[INFO] [stdout] test surfaces::ssi::trim_geom::tests::bbox_arc_loop ... ok
[INFO] [stdout] test surfaces::ssi::trim_boolean::tests::union_overlapping_squares ... ok
[INFO] [stdout] test surfaces::ssi::trim_boolean::tests::union_nested_returns_outer ... ok
[INFO] [stdout] test surfaces::ssi::trim_geom::tests::orientation_degenerate_zero_area ... ok
[INFO] [stdout] test surfaces::ssi::trim_classify::tests::outer_with_nested_outer_inside_hole ... ok
[INFO] [stdout] test surfaces::ssi::trim_geom::tests::point_in_loop_with_hole ... ok
[INFO] [stdout] test surfaces::ssi::trim_geom::tests::reverse_loop_flips_orientation ... ok
[INFO] [stdout] test surfaces::ssi::trim_geom::tests::point_in_simple_square_loop ... ok
[INFO] [stdout] test surfaces::ssi::trim_geom::tests::point_on_boundary_within_tol ... ok
[INFO] [stdout] test surfaces::ssi::trim_to_polyline::tests::trim_polyline_returns_disjoint_when_no_intersection ... ok
[INFO] [stdout] test surfaces::ssi::trim_to_polyline::tests::trim_loop_to_world_evaluates_via_surface ... ok
[INFO] [stdout] test surfaces::ssi::trim_geom::tests::signed_area_cw_negative ... ok
[INFO] [stdout] test surfaces::ssi::trim_geom::tests::signed_area_ccw_positive ... ok
[INFO] [stdout] test surfaces::ssi::trim_to_polyline::tests::multi_inner_hole_loops_preserved_in_dcel ... ok
[INFO] [stdout] test surfaces::ssi::trim_to_polyline::tests::trim_to_polyline_arc_chord_tolerance_satisfied ... ok
[INFO] [stdout] test surfaces::sweep::tests::extrusion_preserves_profile_shape ... ok
[INFO] [stdout] test surfaces::sweep::tests::extrusion_height_matches_distance ... ok
[INFO] [stdout] test surfaces::sweep::tests::sweep_along_arc_orients_profile ... ok
[INFO] [stdout] test surfaces::sweep::tests::sweep_rejects_degenerate_rail ... ok
[INFO] [stdout] test surfaces::tests::adr103_epsilon2_cylinder_migrates_axis_dir ... ok
[INFO] [stdout] test surfaces::tests::adr103_epsilon2_sphere_migrates_center_only ... ok
[INFO] [stdout] test surfaces::tests::adr140_cylinder_normal_at_world_pos_is_radial ... ok
[INFO] [stdout] test surfaces::tests::adr140_zeta_cone_chord_error_varies_along_axis ... ok
[INFO] [stdout] test surfaces::tests::adr140_zeta_plane_chord_error_is_zero ... ok
[INFO] [stdout] test surfaces::tests::adr103_epsilon2_bezier_patch_migrates_all_control_points ... ok
[INFO] [stdout] test surfaces::tests::adr103_epsilon2_plane_migrates_origin_normal_basis_u ... ok
[INFO] [stdout] test surfaces::tests::adr140_sphere_normal_at_world_pos_is_radial ... ok
[INFO] [stdout] test surfaces::tests::adr140_zeta_torus_chord_error_dual_curvature ... ok
[INFO] [stdout] test surfaces::tests::orthonormal_ref_handles_parallel ... ok
[INFO] [stdout] test surfaces::tests::orthonormal_ref_orthogonalizes ... ok
[INFO] [stdout] test surfaces::tests::adr140_zeta_sphere_chord_error_along_meridian ... ok
[INFO] [stdout] test surfaces::ssi::trim_to_polyline::tests::trim_to_polyline_line_curve_2_points ... ok
[INFO] [stdout] test surfaces::tests::parameter_range_plane ... ok
[INFO] [stdout] test operations::primitives::tests::multiple_primitives_invariants_pass ... ok
[INFO] [stdout] test surfaces::tests::sagitta_segments_zero_radius_returns_one ... ok
[INFO] [stdout] test surfaces::tests::tessellate_plane_returns_quad ... ok
[INFO] [stdout] test surfaces::tests::unsigned_distance_to_known_points_correctness ... ok
[INFO] [stdout] test surfaces::tests::sagitta_segments_zero_angle_returns_one ... ok
[INFO] [stdout] test surfaces::tests::adr140_plane_normal_at_world_pos_is_normal ... ok
[INFO] [stdout] test surfaces::ssi::trim_to_polyline::tests::trim_to_polyline_bezier_sample_count ... ok
[INFO] [stdout] test surfaces::tests::adr140_zeta_cylinder_chord_error_proportional_to_arc ... ok
[INFO] [stdout] test surfaces::torus::tests::evaluate_full_v_period_returns_to_start ... ok
[INFO] [stdout] test surfaces::torus::tests::evaluate_innermost_equator_u_zero_v_pi ... ok
[INFO] [stdout] test surfaces::torus::tests::evaluate_offset_center ... ok
[INFO] [stdout] test surfaces::torus::tests::evaluate_outermost_equator_u_zero_v_zero ... ok
[INFO] [stdout] test surfaces::tests::sagitta_segments_quarter_circle_at_least_8 ... ok
[INFO] [stdout] test surfaces::torus::tests::evaluate_top_of_tube_u_zero_v_pi_half ... ok
[INFO] [stdout] test surfaces::torus::tests::normal_inner_equator_inward_radial ... ok
[INFO] [stdout] test surfaces::torus::tests::normal_top_points_up_axis ... ok
[INFO] [stdout] test surfaces::torus::tests::normal_unit_length ... ok
[INFO] [stdout] test surfaces::transform::tests::cone_apex_translates_with_origin ... ok
[INFO] [stdout] test surfaces::torus::tests::normal_outer_equator_outward_radial ... ok
[INFO] [stdout] test surfaces::torus::tests::evaluate_radial_distance_outer_equator ... ok
[INFO] [stdout] test surfaces::torus::tests::derivative_v_perpendicular_to_normal ... ok
[INFO] [stdout] test surfaces::torus::tests::evaluate_full_u_period_returns_to_start ... ok
[INFO] [stdout] test surfaces::torus::tests::derivative_u_perpendicular_to_normal ... ok
[INFO] [stdout] test surfaces::transform::tests::nurbs_surface_control_pts_transformed ... ok
[INFO] [stdout] test surfaces::transform::tests::plane_translate_preserves_normal_direction ... ok
[INFO] [stdout] test surfaces::transform::tests::surface_normal_invariant_under_rigid ... ok
[INFO] [stdout] test surfaces::trim::tests::trim_arc_evaluate_offset_center ... ok
[INFO] [stdout] test surfaces::trim::tests::trim_arc_evaluate_quarter ... ok
[INFO] [stdout] test surfaces::trim::tests::trim_bezier_evaluate_corner_endpoints ... ok
[INFO] [stdout] test surfaces::trim::tests::trim_bezier_quadratic_midpoint ... ok
[INFO] [stdout] test surfaces::trim::tests::trim_bspline_clamped_endpoints ... ok
[INFO] [stdout] test surfaces::trim::tests::trim_curve_serialize_roundtrip ... ok
[INFO] [stdout] test surfaces::trim::tests::trim_line_evaluate_endpoints ... ok
[INFO] [stdout] test surfaces::trim::tests::trim_loop_is_outer_flag ... ok
[INFO] [stdout] test surfaces::trim::tests::trim_tessellate_returns_n_plus_one_points ... ok
[INFO] [stdout] test surfaces::transform::tests::cylinder_rigid_preserves_radius ... ok
[INFO] [stdout] test surfaces::transform::tests::sphere_uniform_scale_changes_radius_proportionally ... ok
[INFO] [stdout] test surfaces::transform::tests::sphere_non_uniform_returns_error ... ok
[INFO] [stdout] test surfaces::transform::tests::torus_rigid_preserves_minor_major_radii ... ok
[INFO] [stdout] test surfaces::tests::unsigned_distance_to_tensor_returns_none ... ok
[INFO] [stdout] test surfaces::transform::tests::bezier_patch_control_grid_transformed ... ok
[INFO] [stdout] test surfaces::ssi::boolean::tests::boolean_subtract_keeps_only_a_trim ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::dispatch_single_face_with_plane_attempts_nurbs ... ok
[INFO] [stdout] test surfaces::ssi::nurbs_wrapper::tests::nurbs_perpendicular_planar_yields_chain ... ok
[INFO] [stdout] test operations::boolean_dispatch::tests::dispatch_diagnostic_records_surface_kinds ... ok
[INFO] [stdout] test surfaces::ssi::boolean::tests::v2_result_exposes_containment_and_robustness ... ok
[INFO] [stdout] test path_b_family_verification::tests::adr104_gamma_family_cumulative_memory_unlock ... ok
[INFO] [stdout] test surfaces::ssi::nurbs_wrapper::tests::nurbs_multi_patch_intersection_assembled ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 1552 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.59s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/face_classification.rs (/opt/rustwide/target/debug/deps/face_classification-875ad34b50ce3710)
[INFO] [stdout] 
[INFO] [stdout] running 7 tests
[INFO] [stdout] test deactivated_rect_classifies_as_not_in_volume ... ok
[INFO] [stdout] test standalone_rect_is_sheet ... ok
[INFO] [stdout] test reconcile_face_normals_noop_when_clean ... ok
[INFO] [stdout] test closed_tetrahedron_faces_are_walls ... ok
[INFO] [stdout] test reconcile_face_normals_fixes_stale_cache ... ok
[INFO] [stdout] test open_lid_box_is_classified_as_sheet_for_lid_neighbors ... ok
[INFO] [stdout] test rev2_invariant_filters_sheet_winding_violations ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/line_vs_rect_edge_parity.rs (/opt/rustwide/target/debug/deps/line_vs_rect_edge_parity-1a73874cd8a8b9b1)
[INFO] [stdout] 
[INFO] [stdout] running 4 tests
[INFO] [stdout] test line_and_rect_edge_same_behavior_under_soft_mark ... ok
[INFO] [stdout] test two_adjacent_rects_share_dcel_edge ... ok
[INFO] [stderr]      Running tests/practicality_edge_cases.rs (/opt/rustwide/target/debug/deps/practicality_edge_cases-4839aeb87987ee1b)
[INFO] [stdout] test line_and_rect_render_decisions_match_when_isolated ... ok
[INFO] [stdout] test line_edge_and_rect_edge_have_equivalent_flags ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 7 tests
[INFO] [stdout] test duplicate_vertex_in_face_is_handled ... ok
[INFO] [stdout] test nan_vertex_is_rejected_or_contained ... ok
[INFO] [stdout] test very_small_coordinate_degenerates_gracefully ... ok
[INFO] [stdout] test zero_area_triangle_is_handled ... ok
[INFO] [stdout] test very_large_coordinate_does_not_overflow ... ok
[INFO] [stdout] test deep_undo_does_not_leak ... ok
[INFO] [stdout] test build_1000_quad_scene_completes ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.06s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/sheet_boolean.rs (/opt/rustwide/target/debug/deps/sheet_boolean-253b5bf42199b4c0)
[INFO] [stdout] 
[INFO] [stdout] running 6 tests
[INFO] [stdout] test sheet_subtract_overlapping_rects ... ok
[INFO] [stdout] test sheet_intersect_disjoint_rects_fails ... ok
[INFO] [stdout] test sheet_boolean_unknown_op_errors ... ok
[INFO] [stdout] test sheet_boolean_rejects_non_coplanar ... ok
[INFO] [stdout] test sheet_union_overlapping_rects ... ok
[INFO] [stdout] test sheet_intersect_overlapping_rects ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/slice_volume.rs (/opt/rustwide/target/debug/deps/slice_volume-9479ac1c8e6e9fad)
[INFO] [stdout] 
[INFO] [stdout] running 8 tests
[INFO] [stdout] test slice_with_face_on_plane_errors ... ok
[INFO] [stdout] test slice_global_invariants_must_pass ... ok
[INFO] [stdout] test slice_with_non_intersecting_plane_errors ... ok
[INFO] [stdout] test slice_cube_with_plane_off_center ... ok
[INFO] [stdout] test slice_rejects_inactive_face ... ok
[INFO] [stdout] test slice_invariants_preserved ... ok
[INFO] [stdout] test slice_cube_horizontally_through_middle ... ok
[INFO] [stdout] test slice_cube_diagonally ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/axia_transaction-a0fe7b7df951f7c1)
[INFO] [stdout] 
[INFO] [stdout] running 4 tests
[INFO] [stdout] test tests::test_basic_undo_redo ... ok
[INFO] [stdout] test tests::test_new_commit_clears_redo ... ok
[INFO] [stdout] test tests::test_replace_last_after_snapshot_replaces_top ... ok
[INFO] [stdout] test tests::test_replace_last_after_snapshot_noop_when_empty ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/axia_wasm-72b533074885ed9b)
[INFO] [stdout] 
[INFO] [stdout] running 8 tests
[INFO] [stdout] test adr149_tests::adr149_beta3_parse_tjunction_report_canonical ... ok
[INFO] [stdout] test adr149_tests::adr149_beta3_parse_tjunction_report_with_whitespace ... ok
[INFO] [stdout] test adr149_tests::adr149_beta3_parse_tjunction_report_missing_field ... ok
[INFO] [stdout] test adr149_tests::adr150_beta3_parse_coplanar_pair_array_empty ... ok
[INFO] [stdout] test adr149_tests::adr150_beta3_parse_coplanar_pair_array_invalid ... ok
[INFO] [stdout] test adr149_tests::adr150_beta3_parse_coplanar_pair_array_single ... ok
[INFO] [stdout] test adr149_tests::adr150_beta3_parse_coplanar_pair_array_multiple ... ok
[INFO] [stdout] test adr149_tests::adr149_beta3_parse_tjunction_report_field_order_flexible ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/step6_additive_only.rs (/opt/rustwide/target/debug/deps/step6_additive_only-5d2154d2df3599b8)
[INFO] [stdout] 
[INFO] [stdout] running 64 tests
[INFO] [stdout] test adr097_t_delta_signatures_return_string_json ... ok
[INFO] [stdout] test adr098_s_gamma_get_tier_uses_minus_one_sentinel ... ok
[INFO] [stdout] test adr093_d_gamma_get_face_surface_owner_id_endpoint_wired ... ok
[INFO] [stdout] test adr098_s_gamma_list_returns_json_array ... ok
[INFO] [stdout] test adr098_s_gamma_remove_user_only_blocks_other_tiers ... ok
[INFO] [stdout] test adr091_d_gamma_demote_uses_transaction_with_cancel_on_error ... ok
[INFO] [stdout] test adr099_l_gamma_get_emits_has_layered_field ... ok
[INFO] [stdout] test adr093_d_gamma_walk_face_owner_siblings_endpoint_wired ... ok
[INFO] [stdout] test adr099_l_gamma_clear_normalizes_empty_layered ... ok
[INFO] [stdout] test adr099_l_gamma_has_layered_quick_check_returns_bool ... ok
[INFO] [stdout] test adr100_r_gamma_recovery_json_uses_kind_discriminator ... ok
[INFO] [stdout] test adr099_l_gamma_set_channel_uses_flat_signature ... ok
[INFO] [stdout] test adr100_r_gamma_remove_project_returns_ok_envelope ... ok
[INFO] [stdout] test adr097_t_delta_endpoints_wired ... ok
[INFO] [stdout] test adr145_beta2_promote_uses_transaction_with_cancel_on_error ... ok
[INFO] [stdout] test adr100_r_gamma_endpoints_wired ... ok
[INFO] [stdout] test adr151_beta3_enforce_p7_uses_transaction ... ok
[INFO] [stdout] test adr098_s_gamma_endpoints_wired ... ok
[INFO] [stdout] test adr095_phase3_gamma_create_strict_throw_signatures ... ok
[INFO] [stdout] test boolean_dispatch_dcel_multi_json_handles_mesh_path_branch ... ok
[INFO] [stdout] test adr151_beta3_enforce_p7_json_schema_locked ... ok
[INFO] [stdout] test adr148_beta3_boundary_uses_transaction_with_cancel_on_error ... ok
[INFO] [stdout] test adr145_beta2_promote_circles_to_annulus_endpoint_wired ... ok
[INFO] [stdout] test adr152_beta3_json_schema_locked ... ok
[INFO] [stdout] test adr152_beta3_verify_p7_manifold_extended_endpoint_wired ... ok
[INFO] [stdout] test adr091_d_gamma_demote_endpoint_wired ... ok
[INFO] [stdout] test adr148_beta3_boundary_from_point_endpoint_wired ... ok
[INFO] [stdout] test adr152_beta3_compute_topology_endpoint_wired ... ok
[INFO] [stdout] test boolean_dispatch_json_includes_path_and_reason ... ok
[INFO] [stdout] test adr099_l_gamma_endpoints_wired ... ok
[INFO] [stdout] test create_solid_extrude_handler_is_solidkind_agnostic ... ok
[INFO] [stdout] test create_solid_extrude_handles_solid_created_and_fallback ... ok
[INFO] [stdout] test attach_validated_json_includes_schema_version ... ok
[INFO] [stdout] test boolean_group_p2_set_strict_invalid_tag_returns_err ... ok
[INFO] [stdout] test draw_as_shape_p5c_bridge_is_thin_pass_through ... ok
[INFO] [stdout] test draw_as_shape_p5c_matches_shape_created_variant ... ok
[INFO] [stdout] test draw_as_shape_p5c_signature_matches_legacy_family ... ok
[INFO] [stdout] test create_solid_extrude_dispatches_via_command ... ok
[INFO] [stdout] test create_solid_extrude_signature_matches_push_pull_family ... ok
[INFO] [stdout] test create_solid_extrude_endpoint_wired ... ok
[INFO] [stdout] test get_edge_curve_json_emits_world_coords ... ok
[INFO] [stdout] test boolean_dispatch_dcel_multi_json_includes_per_pair_and_aggregates ... ok
[INFO] [stdout] test get_face_surface_json_includes_schema_version ... ok
[INFO] [stdout] test migrate_curve_surface_mandatory_idempotent ... ok
[INFO] [stdout] test draw_as_shape_p5c_endpoints_wired ... ok
[INFO] [stdout] test boolean_dispatch_dcel_multi_json_uses_transactions ... ok
[INFO] [stdout] test offset_edge_on_host_dispatches_via_offset_edge_on_host_face ... ok
[INFO] [stdout] test adr151_beta3_enforce_p7_canonical_endpoint_wired ... ok
[INFO] [stdout] test offset_edge_with_reference_plane_endpoint_wired ... ok
[INFO] [stdout] test offset_edge_on_host_emits_typed_reason_vocabulary ... ok
[INFO] [stdout] test boolean_group_p2_output_signature_vec_u32 ... ok
[INFO] [stdout] test offset_edge_with_reference_plane_dispatches_via_rust_core ... ok
[INFO] [stdout] test boolean_group_p2_endpoints_wired ... ok
[INFO] [stdout] test adr095_phase3_gamma_endpoints_wired ... ok
[INFO] [stdout] test shape_p4_promote_returns_strict_result ... ok
[INFO] [stdout] test boolean_dispatch_dcel_multi_json_endpoint_wired ... ok
[INFO] [stdout] test fillet_edge_dispatch_json_includes_path_and_skip_reason ... ok
[INFO] [stdout] test boolean_group_p2_set_and_clear_use_transactions ... ok
[INFO] [stdout] test shape_p4_input_signatures_match_lockin ... ok
[INFO] [stdout] test offset_edge_on_host_endpoint_wired ... ok
[INFO] [stdout] test shape_p4_mutators_use_transactions_readonly_skip ... ok
[INFO] [stdout] test cache_stats_json_includes_schema_version ... ok
[INFO] [stdout] test shape_p4_endpoints_wired ... ok
[INFO] [stdout] test wasm_export_baseline_unchanged ... ok
[INFO] [stderr]    Doc-tests axia_core
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 64 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.14s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests axia_foreign
[INFO] [stderr]    Doc-tests axia_geo
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] test crates/axia-geo/src/operations/plane_snap.rs - operations::plane_snap::snap_face_to_plane (line 272) ... ignored
[INFO] [stdout] test crates/axia-geo/src/surfaces/ssi/trim_boolean.rs - surfaces::ssi::trim_boolean (line 13) ... FAILED
[INFO] [stdout] test crates/axia-geo/src/predicates/mod.rs - predicates (line 16) ... ok
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- crates/axia-geo/src/surfaces/ssi/trim_boolean.rs - surfaces::ssi::trim_boolean (line 13) stdout ----
[INFO] [stdout] error[E0422]: cannot find struct, variant or union type `Intersection2D` in this scope
[INFO] [stdout]   --> crates/axia-geo/src/surfaces/ssi/trim_boolean.rs:14:1
[INFO] [stdout]    |
[INFO] [stdout] 14 | Intersection2D {
[INFO] [stdout]    | ^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `point` in this scope
[INFO] [stdout]   --> crates/axia-geo/src/surfaces/ssi/trim_boolean.rs:15:3
[INFO] [stdout]    |
[INFO] [stdout] 15 |   point,    // crossing/tangent: the single point
[INFO] [stdout]    |   ^^^^^ not found in this scope
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `t_a` in this scope
[INFO] [stdout]   --> crates/axia-geo/src/surfaces/ssi/trim_boolean.rs:17:3
[INFO] [stdout]    |
[INFO] [stdout] 17 |   t_a,      // crossing/tangent: parameter on a
[INFO] [stdout]    |   ^^^ not found in this scope
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `t_b` in this scope
[INFO] [stdout]   --> crates/axia-geo/src/surfaces/ssi/trim_boolean.rs:19:3
[INFO] [stdout]    |
[INFO] [stdout] 19 |   t_b,      // ditto on b
[INFO] [stdout]    |   ^^^ not found in this scope
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `kind` in this scope
[INFO] [stdout]   --> crates/axia-geo/src/surfaces/ssi/trim_boolean.rs:20:3
[INFO] [stdout]    |
[INFO] [stdout] 20 |   kind,     // Crossing / Tangent / Coincident{t1_a,t1_b,same_dir}
[INFO] [stdout]    |   ^^^^ not found in this scope
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 5 previous errors
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0422, E0425.
[INFO] [stdout] For more information about an error, try `rustc --explain E0422`.
[INFO] [stdout] Couldn't compile the test.
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     crates/axia-geo/src/surfaces/ssi/trim_boolean.rs - surfaces::ssi::trim_boolean (line 13)
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 1 passed; 1 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.40s
[INFO] [stdout] 
[INFO] [stderr] error: doctest failed, to rerun pass `-p axia-geo --doc`
[INFO] running `Command { std: "docker" "inspect" "e4923464889a08efc489b733c17b4d63a7f2a654af44fda877fcfa242321034e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "e4923464889a08efc489b733c17b4d63a7f2a654af44fda877fcfa242321034e", kill_on_drop: false }`
[INFO] [stdout] e4923464889a08efc489b733c17b4d63a7f2a654af44fda877fcfa242321034e
