[INFO] cloning repository https://github.com/Xgood1118/solocoder-5439-rust-bom
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Xgood1118/solocoder-5439-rust-bom" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FXgood1118%2Fsolocoder-5439-rust-bom", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FXgood1118%2Fsolocoder-5439-rust-bom'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 34d98a22934a7fe480c7ad3d697266a4f5e1a6d6
[INFO] testing Xgood1118/solocoder-5439-rust-bom 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%2FXgood1118%2Fsolocoder-5439-rust-bom" "/workspace/builds/worker-7-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/Xgood1118/solocoder-5439-rust-bom
[INFO] finished tweaking git repo https://github.com/Xgood1118/solocoder-5439-rust-bom
[INFO] tweaked toml for git repo https://github.com/Xgood1118/solocoder-5439-rust-bom written to /workspace/builds/worker-7-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/Xgood1118/solocoder-5439-rust-bom 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/Xgood1118/solocoder-5439-rust-bom 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 codepage v0.1.2
[INFO] [stderr]   Downloaded calamine v0.25.0
[INFO] [stderr]   Downloaded actix-multipart-derive v0.6.1
[INFO] [stderr]   Downloaded actix-multipart v0.6.2
[INFO] [stderr]   Downloaded parse-size v1.1.0
[INFO] [stderr]   Downloaded quick-xml v0.31.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3d5ced03c013a94a2f102a4510f48a6e9184255caf5fd8244f58017bde7f5210" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 9036ff060b2d7b560f9acd4d19f401423c6e2c683351602fcf658b651a2d08cf
[INFO] running `Command { std: "docker" "start" "9036ff060b2d7b560f9acd4d19f401423c6e2c683351602fcf658b651a2d08cf", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "9036ff060b2d7b560f9acd4d19f401423c6e2c683351602fcf658b651a2d08cf", 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" "9036ff060b2d7b560f9acd4d19f401423c6e2c683351602fcf658b651a2d08cf" "/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" "9036ff060b2d7b560f9acd4d19f401423c6e2c683351602fcf658b651a2d08cf", 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" "9036ff060b2d7b560f9acd4d19f401423c6e2c683351602fcf658b651a2d08cf" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling futures-channel v0.3.32
[INFO] [stderr]    Compiling typenum v1.20.1
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling mio v1.2.1
[INFO] [stderr]    Compiling rand_core v0.10.1
[INFO] [stderr]    Compiling cc v1.2.63
[INFO] [stderr]    Compiling regex-syntax v0.8.11
[INFO] [stderr]    Compiling simd-adler32 v0.3.9
[INFO] [stderr]    Compiling zstd-safe v7.2.4
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling zerocopy v0.8.50
[INFO] [stderr]    Compiling cpufeatures v0.3.0
[INFO] [stderr]    Compiling convert_case v0.10.0
[INFO] [stderr]    Compiling miniz_oxide v0.8.9
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling http v0.2.12
[INFO] [stderr]    Compiling bytes v1.11.1
[INFO] [stderr]    Compiling regex-lite v0.1.9
[INFO] [stderr]    Compiling strsim v0.11.1
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling unicode-xid v0.2.6
[INFO] [stderr]    Compiling const-oid v0.10.2
[INFO] [stderr]    Compiling flate2 v1.1.9
[INFO] [stderr]    Compiling log v0.4.32
[INFO] [stderr]    Compiling bytestring v1.5.1
[INFO] [stderr]    Compiling time-macros v0.2.27
[INFO] [stderr]    Compiling cookie v0.16.2
[INFO] [stderr]    Compiling chacha20 v0.10.0
[INFO] [stderr]    Compiling brotli-decompressor v5.0.1
[INFO] [stderr]    Compiling actix-utils v3.0.1
[INFO] [stderr]    Compiling actix-service v2.0.3
[INFO] [stderr]    Compiling rand v0.10.1
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling local-channel v0.1.5
[INFO] [stderr]    Compiling socket2 v0.5.10
[INFO] [stderr]    Compiling foldhash v0.1.5
[INFO] [stderr]    Compiling language-tags v0.3.2
[INFO] [stderr]    Compiling hybrid-array v0.4.12
[INFO] [stderr]    Compiling zip v1.1.4
[INFO] [stderr]    Compiling convert_case v0.4.0
[INFO] [stderr]    Compiling parse-size v1.1.0
[INFO] [stderr]    Compiling impl-more v0.1.9
[INFO] [stderr]    Compiling anstream v1.0.0
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling codepage v0.1.2
[INFO] [stderr]    Compiling quick-xml v0.31.0
[INFO] [stderr]    Compiling csv-core v0.1.13
[INFO] [stderr]    Compiling jiff v0.2.28
[INFO] [stderr]    Compiling time v0.3.47
[INFO] [stderr]    Compiling block-buffer v0.12.0
[INFO] [stderr]    Compiling crypto-common v0.2.2
[INFO] [stderr]    Compiling brotli v8.0.3
[INFO] [stderr]    Compiling zstd-sys v2.0.16+zstd.1.5.7
[INFO] [stderr]    Compiling digest v0.11.3
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling sha1 v0.11.0
[INFO] [stderr]    Compiling serde_json v1.0.150
[INFO] [stderr]    Compiling uuid v1.23.3
[INFO] [stderr]    Compiling csv v1.4.0
[INFO] [stderr]    Compiling actix-router v0.5.4
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling darling_core v0.20.11
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling regex v1.12.4
[INFO] [stderr]    Compiling rand v0.8.6
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling displaydoc v0.2.6
[INFO] [stderr]    Compiling zerovec-derive v0.11.3
[INFO] [stderr]    Compiling tokio-macros v2.7.0
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling derive_more-impl v2.1.1
[INFO] [stderr]    Compiling num_enum_derive v0.7.6
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling tokio v1.52.3
[INFO] [stderr]    Compiling actix-web-codegen v4.3.0
[INFO] [stderr]    Compiling actix-macros v0.2.4
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling env_filter v1.0.1
[INFO] [stderr]    Compiling num_enum v0.7.6
[INFO] [stderr]    Compiling derive_more v0.99.20
[INFO] [stderr]    Compiling env_logger v0.11.10
[INFO] [stderr]    Compiling zerofrom v0.1.8
[INFO] [stderr]    Compiling yoke v0.8.3
[INFO] [stderr]    Compiling zstd v0.13.3
[INFO] [stderr]    Compiling darling_macro v0.20.11
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling zerovec v0.11.6
[INFO] [stderr]    Compiling zerotrie v0.2.4
[INFO] [stderr]    Compiling darling v0.20.11
[INFO] [stderr]    Compiling actix-multipart-derive v0.6.1
[INFO] [stderr]    Compiling derive_more v2.1.1
[INFO] [stderr]    Compiling tinystr v0.8.3
[INFO] [stderr]    Compiling potential_utf v0.1.5
[INFO] [stderr]    Compiling icu_collections v2.2.0
[INFO] [stderr]    Compiling icu_locale_core v2.2.0
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling serde_plain v1.0.2
[INFO] [stderr]    Compiling chrono v0.4.45
[INFO] [stderr]    Compiling calamine v0.25.0
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling icu_provider v2.2.0
[INFO] [stderr]    Compiling icu_normalizer v2.2.0
[INFO] [stderr]    Compiling icu_properties v2.2.0
[INFO] [stderr]    Compiling idna_adapter v1.2.2
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling actix-rt v2.11.0
[INFO] [stderr]    Compiling actix-server v2.6.0
[INFO] [stderr]    Compiling h2 v0.3.27
[INFO] [stderr]    Compiling actix-codec v0.5.2
[INFO] [stderr]    Compiling actix-http v3.12.1
[INFO] [stderr]    Compiling actix-web v4.13.0
[INFO] [stderr]    Compiling actix-multipart v0.6.2
[INFO] [stderr]    Compiling bom-parser v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::io::Read`
[INFO] [stdout]    --> src/bom.rs:114:9
[INFO] [stdout]     |
[INFO] [stdout] 114 |     use std::io::Read;
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/alt.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]  --> src/calc.rs:2:19
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::tree::{self, BomTreeNode};
[INFO] [stdout]   |                   ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Serialize`
[INFO] [stdout]   --> src/api.rs:11:26
[INFO] [stdout]    |
[INFO] [stdout] 11 | use serde::{Deserialize, Serialize};
[INFO] [stdout]    |                          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/tree.rs:156:73
[INFO] [stdout]     |
[INFO] [stdout] 156 | pub fn traverse_pre_order<F: FnMut(&BomTreeNode)>(tree: &[BomTreeNode], mut f: F) {
[INFO] [stdout]     |                                                                         ----^
[INFO] [stdout]     |                                                                         |
[INFO] [stdout]     |                                                                         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/tree.rs:169:74
[INFO] [stdout]     |
[INFO] [stdout] 169 | pub fn traverse_post_order<F: FnMut(&BomTreeNode)>(tree: &[BomTreeNode], mut f: F) {
[INFO] [stdout]     |                                                                          ----^
[INFO] [stdout]     |                                                                          |
[INFO] [stdout]     |                                                                          help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_virtual` and `is_raw_material` are never used
[INFO] [stdout]    --> src/bom.rs:100:12
[INFO] [stdout]     |
[INFO] [stdout]  99 | impl BomItem {
[INFO] [stdout]     | ------------ methods in this implementation
[INFO] [stdout] 100 |     pub fn is_virtual(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn is_raw_material(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_leaf` is never used
[INFO] [stdout]   --> src/tree.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | impl BomTreeNode {
[INFO] [stdout]    | ---------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub fn is_leaf(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `flatten` is never used
[INFO] [stdout]    --> src/tree.rs:119:8
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub fn flatten(tree: &[BomTreeNode]) -> BomData {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `flatten_node` is never used
[INFO] [stdout]    --> src/tree.rs:127:4
[INFO] [stdout]     |
[INFO] [stdout] 127 | fn flatten_node(node: &BomTreeNode, parent: Option<&str>, result: &mut BomData) {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `traverse_post_order` is never used
[INFO] [stdout]    --> src/tree.rs:169:8
[INFO] [stdout]     |
[INFO] [stdout] 169 | pub fn traverse_post_order<F: FnMut(&BomTreeNode)>(tree: &[BomTreeNode], mut f: F) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `collect_raw_materials` is never used
[INFO] [stdout]    --> src/tree.rs:200:8
[INFO] [stdout]     |
[INFO] [stdout] 200 | pub fn collect_raw_materials(tree: &[BomTreeNode]) -> Vec<BomTreeNode> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_node` is never used
[INFO] [stdout]    --> src/tree.rs:220:8
[INFO] [stdout]     |
[INFO] [stdout] 220 | pub fn find_node(tree: &[BomTreeNode], material_no: &str) -> Option<BomTreeNode> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `score` is never used
[INFO] [stdout]   --> src/alt.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl AltMaterial {
[INFO] [stdout]    | ---------------- method in this implementation
[INFO] [stdout] 23 |     pub fn score(&self) -> f64 {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `sorted_by_score` and `find_by_supplier` are never used
[INFO] [stdout]   --> src/alt.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | impl AltMaterialGroup {
[INFO] [stdout]    | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn sorted_by_score(&self) -> Vec<&AltMaterial> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn find_by_supplier(&self, supplier: &str) -> Option<&AltMaterial> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `consume_stock` and `switch_count` are never used
[INFO] [stdout]    --> src/alt.rs:176:12
[INFO] [stdout]     |
[INFO] [stdout]  78 | impl AltMaterialManager {
[INFO] [stdout]     | ----------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 176 |     pub fn consume_stock(
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 205 |     pub fn switch_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_virtual_material` is never used
[INFO] [stdout]    --> src/alt.rs:221:8
[INFO] [stdout]     |
[INFO] [stdout] 221 | pub fn is_virtual_material(bom_type: &BomType) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `should_skip_in_cost` is never used
[INFO] [stdout]    --> src/alt.rs:225:8
[INFO] [stdout]     |
[INFO] [stdout] 225 | pub fn should_skip_in_cost(bom_type: &BomType) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `collect_non_virtual_alts` is never used
[INFO] [stdout]    --> src/alt.rs:229:8
[INFO] [stdout]     |
[INFO] [stdout] 229 | pub fn collect_non_virtual_alts(group: &AltMaterialGroup) -> Vec<&AltMaterial> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `total_rate` is never used
[INFO] [stdout]   --> src/calc.rs:99:12
[INFO] [stdout]    |
[INFO] [stdout] 98 | impl SurchargeConfig {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] 99 |     pub fn total_rate(&self) -> f64 {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `set_custom_price_tiers` is never used
[INFO] [stdout]    --> src/calc.rs:183:12
[INFO] [stdout]     |
[INFO] [stdout] 156 | impl CostCalculator {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 183 |     pub fn set_custom_price_tiers(&mut self, material_no: &str, tiers: Vec<PriceTier>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_cost` is never used
[INFO] [stdout]    --> src/calc.rs:324:8
[INFO] [stdout]     |
[INFO] [stdout] 324 | pub fn format_cost(value: f64) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `version_count` is never used
[INFO] [stdout]    --> src/version.rs:117:12
[INFO] [stdout]     |
[INFO] [stdout]  35 | impl VersionHistory {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 117 |     pub fn version_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `has_bom` is never used
[INFO] [stdout]    --> src/version.rs:352:12
[INFO] [stdout]     |
[INFO] [stdout] 297 | impl VersionManager {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 352 |     pub fn has_bom(&self, bom_id: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `with_max_loss_rate` and `add_master_material` are never used
[INFO] [stdout]   --> src/validation.rs:80:12
[INFO] [stdout]    |
[INFO] [stdout] 72 | impl BomValidator {
[INFO] [stdout]    | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn with_max_loss_rate(mut self, max_loss_rate: f64) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 89 |     pub fn add_master_material(&mut self, material_no: &str) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `fail_batch_job` is never used
[INFO] [stdout]    --> src/app_state.rs:182:12
[INFO] [stdout]     |
[INFO] [stdout]  22 | impl AppState {
[INFO] [stdout]     | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 182 |     pub fn fail_batch_job(&self, job_id: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 25s
[INFO] running `Command { std: "docker" "inspect" "9036ff060b2d7b560f9acd4d19f401423c6e2c683351602fcf658b651a2d08cf", 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" "9036ff060b2d7b560f9acd4d19f401423c6e2c683351602fcf658b651a2d08cf" "/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 bom-parser v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::io::Read`
[INFO] [stdout]    --> src/bom.rs:114:9
[INFO] [stdout]     |
[INFO] [stdout] 114 |     use std::io::Read;
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/alt.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]  --> src/calc.rs:2:19
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::tree::{self, BomTreeNode};
[INFO] [stdout]   |                   ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Serialize`
[INFO] [stdout]   --> src/api.rs:11:26
[INFO] [stdout]    |
[INFO] [stdout] 11 | use serde::{Deserialize, Serialize};
[INFO] [stdout]    |                          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/tree.rs:156:73
[INFO] [stdout]     |
[INFO] [stdout] 156 | pub fn traverse_pre_order<F: FnMut(&BomTreeNode)>(tree: &[BomTreeNode], mut f: F) {
[INFO] [stdout]     |                                                                         ----^
[INFO] [stdout]     |                                                                         |
[INFO] [stdout]     |                                                                         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/tree.rs:169:74
[INFO] [stdout]     |
[INFO] [stdout] 169 | pub fn traverse_post_order<F: FnMut(&BomTreeNode)>(tree: &[BomTreeNode], mut f: F) {
[INFO] [stdout]     |                                                                          ----^
[INFO] [stdout]     |                                                                          |
[INFO] [stdout]     |                                                                          help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_virtual` and `is_raw_material` are never used
[INFO] [stdout]    --> src/bom.rs:100:12
[INFO] [stdout]     |
[INFO] [stdout]  99 | impl BomItem {
[INFO] [stdout]     | ------------ methods in this implementation
[INFO] [stdout] 100 |     pub fn is_virtual(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn is_raw_material(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_leaf` is never used
[INFO] [stdout]   --> src/tree.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | impl BomTreeNode {
[INFO] [stdout]    | ---------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub fn is_leaf(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `traverse_post_order` is never used
[INFO] [stdout]    --> src/tree.rs:169:8
[INFO] [stdout]     |
[INFO] [stdout] 169 | pub fn traverse_post_order<F: FnMut(&BomTreeNode)>(tree: &[BomTreeNode], mut f: F) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `collect_raw_materials` is never used
[INFO] [stdout]    --> src/tree.rs:200:8
[INFO] [stdout]     |
[INFO] [stdout] 200 | pub fn collect_raw_materials(tree: &[BomTreeNode]) -> Vec<BomTreeNode> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `score` is never used
[INFO] [stdout]   --> src/alt.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 22 | impl AltMaterial {
[INFO] [stdout]    | ---------------- method in this implementation
[INFO] [stdout] 23 |     pub fn score(&self) -> f64 {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `sorted_by_score` and `find_by_supplier` are never used
[INFO] [stdout]   --> src/alt.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | impl AltMaterialGroup {
[INFO] [stdout]    | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn sorted_by_score(&self) -> Vec<&AltMaterial> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn find_by_supplier(&self, supplier: &str) -> Option<&AltMaterial> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `switch_count` is never used
[INFO] [stdout]    --> src/alt.rs:205:12
[INFO] [stdout]     |
[INFO] [stdout]  78 | impl AltMaterialManager {
[INFO] [stdout]     | ----------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 205 |     pub fn switch_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `collect_non_virtual_alts` is never used
[INFO] [stdout]    --> src/alt.rs:229:8
[INFO] [stdout]     |
[INFO] [stdout] 229 | pub fn collect_non_virtual_alts(group: &AltMaterialGroup) -> Vec<&AltMaterial> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `total_rate` is never used
[INFO] [stdout]   --> src/calc.rs:99:12
[INFO] [stdout]    |
[INFO] [stdout] 98 | impl SurchargeConfig {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] 99 |     pub fn total_rate(&self) -> f64 {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_cost` is never used
[INFO] [stdout]    --> src/calc.rs:324:8
[INFO] [stdout]     |
[INFO] [stdout] 324 | pub fn format_cost(value: f64) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `with_max_loss_rate` is never used
[INFO] [stdout]   --> src/validation.rs:80:12
[INFO] [stdout]    |
[INFO] [stdout] 72 | impl BomValidator {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn with_max_loss_rate(mut self, max_loss_rate: f64) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `fail_batch_job` is never used
[INFO] [stdout]    --> src/app_state.rs:182:12
[INFO] [stdout]     |
[INFO] [stdout]  22 | impl AppState {
[INFO] [stdout]     | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 182 |     pub fn fail_batch_job(&self, job_id: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 3.60s
[INFO] running `Command { std: "docker" "inspect" "9036ff060b2d7b560f9acd4d19f401423c6e2c683351602fcf658b651a2d08cf", 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" "9036ff060b2d7b560f9acd4d19f401423c6e2c683351602fcf658b651a2d08cf" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `std::io::Read`
[INFO] [stderr]    --> src/bom.rs:114:9
[INFO] [stderr]     |
[INFO] [stderr] 114 |     use std::io::Read;
[INFO] [stderr]     |         ^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::sync::Arc`
[INFO] [stderr]  --> src/alt.rs:6:5
[INFO] [stderr]   |
[INFO] [stderr] 6 | use std::sync::Arc;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `self`
[INFO] [stderr]  --> src/calc.rs:2:19
[INFO] [stderr]   |
[INFO] [stderr] 2 | use crate::tree::{self, BomTreeNode};
[INFO] [stderr]   |                   ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Serialize`
[INFO] [stderr]   --> src/api.rs:11:26
[INFO] [stderr]    |
[INFO] [stderr] 11 | use serde::{Deserialize, Serialize};
[INFO] [stderr]    |                          ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/tree.rs:156:73
[INFO] [stderr]     |
[INFO] [stderr] 156 | pub fn traverse_pre_order<F: FnMut(&BomTreeNode)>(tree: &[BomTreeNode], mut f: F) {
[INFO] [stderr]     |                                                                         ----^
[INFO] [stderr]     |                                                                         |
[INFO] [stderr]     |                                                                         help: remove this `mut`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/tree.rs:169:74
[INFO] [stderr]     |
[INFO] [stderr] 169 | pub fn traverse_post_order<F: FnMut(&BomTreeNode)>(tree: &[BomTreeNode], mut f: F) {
[INFO] [stderr]     |                                                                          ----^
[INFO] [stderr]     |                                                                          |
[INFO] [stderr]     |                                                                          help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: methods `is_virtual` and `is_raw_material` are never used
[INFO] [stderr]    --> src/bom.rs:100:12
[INFO] [stderr]     |
[INFO] [stderr]  99 | impl BomItem {
[INFO] [stderr]     | ------------ methods in this implementation
[INFO] [stderr] 100 |     pub fn is_virtual(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 104 |     pub fn is_raw_material(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: method `is_leaf` is never used
[INFO] [stderr]   --> src/tree.rs:51:12
[INFO] [stderr]    |
[INFO] [stderr] 25 | impl BomTreeNode {
[INFO] [stderr]    | ---------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 51 |     pub fn is_leaf(&self) -> bool {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `traverse_post_order` is never used
[INFO] [stderr]    --> src/tree.rs:169:8
[INFO] [stderr]     |
[INFO] [stderr] 169 | pub fn traverse_post_order<F: FnMut(&BomTreeNode)>(tree: &[BomTreeNode], mut f: F) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `collect_raw_materials` is never used
[INFO] [stderr]    --> src/tree.rs:200:8
[INFO] [stderr]     |
[INFO] [stderr] 200 | pub fn collect_raw_materials(tree: &[BomTreeNode]) -> Vec<BomTreeNode> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `score` is never used
[INFO] [stderr]   --> src/alt.rs:23:12
[INFO] [stderr]    |
[INFO] [stderr] 22 | impl AltMaterial {
[INFO] [stderr]    | ---------------- method in this implementation
[INFO] [stderr] 23 |     pub fn score(&self) -> f64 {
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `sorted_by_score` and `find_by_supplier` are never used
[INFO] [stderr]   --> src/alt.rs:47:12
[INFO] [stderr]    |
[INFO] [stderr] 36 | impl AltMaterialGroup {
[INFO] [stderr]    | --------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 47 |     pub fn sorted_by_score(&self) -> Vec<&AltMaterial> {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 61 |     pub fn find_by_supplier(&self, supplier: &str) -> Option<&AltMaterial> {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `switch_count` is never used
[INFO] [stderr]    --> src/alt.rs:205:12
[INFO] [stderr]     |
[INFO] [stderr]  78 | impl AltMaterialManager {
[INFO] [stderr]     | ----------------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 205 |     pub fn switch_count(&self) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `collect_non_virtual_alts` is never used
[INFO] [stderr]    --> src/alt.rs:229:8
[INFO] [stderr]     |
[INFO] [stderr] 229 | pub fn collect_non_virtual_alts(group: &AltMaterialGroup) -> Vec<&AltMaterial> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `total_rate` is never used
[INFO] [stderr]   --> src/calc.rs:99:12
[INFO] [stderr]    |
[INFO] [stderr] 98 | impl SurchargeConfig {
[INFO] [stderr]    | -------------------- method in this implementation
[INFO] [stderr] 99 |     pub fn total_rate(&self) -> f64 {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `format_cost` is never used
[INFO] [stderr]    --> src/calc.rs:324:8
[INFO] [stderr]     |
[INFO] [stderr] 324 | pub fn format_cost(value: f64) -> String {
[INFO] [stderr]     |        ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `with_max_loss_rate` is never used
[INFO] [stderr]   --> src/validation.rs:80:12
[INFO] [stderr]    |
[INFO] [stderr] 72 | impl BomValidator {
[INFO] [stderr]    | ----------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 80 |     pub fn with_max_loss_rate(mut self, max_loss_rate: f64) -> Self {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `fail_batch_job` is never used
[INFO] [stderr]    --> src/app_state.rs:182:12
[INFO] [stderr]     |
[INFO] [stderr]  22 | impl AppState {
[INFO] [stderr]     | ------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 182 |     pub fn fail_batch_job(&self, job_id: &str) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `bom-parser` (bin "bom-parser" test) generated 18 warnings (run `cargo fix --bin "bom-parser" -p bom-parser --tests` to apply 6 suggestions)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.28s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/bom_parser-7c144890a38df296)
[INFO] [stdout] 
[INFO] [stdout] running 39 tests
[INFO] [stdout] test alt::tests::test_alt_sorting ... ok
[INFO] [stdout] test alt::tests::test_consume_stock ... ok
[INFO] [stdout] test alt::tests::test_virtual_check ... ok
[INFO] [stdout] test alt::tests::test_try_switch_alt ... ok
[INFO] [stdout] test app_state::tests::test_batch_job_progress ... ok
[INFO] [stdout] test app_state::tests::test_calculate_cost ... ok
[INFO] [stdout] test app_state::tests::test_create_and_get_bom ... ok
[INFO] [stdout] test app_state::tests::test_validation_circular_reference_detected ... ok
[INFO] [stdout] test app_state::tests::test_version_rollback ... ok
[INFO] [stdout] test bom::parser::tests::test_bom_type_from_str ... ok
[INFO] [stdout] test app_state::tests::test_validate_bom ... ok
[INFO] [stdout] test app_state::tests::test_upload_validation_blocks_invalid_data ... ok
[INFO] [stdout] test calc::tests::test_cost_calculation_basic ... ok
[INFO] [stdout] test bom::parser::tests::test_parse_csv_basic ... ok
[INFO] [stdout] test calc::tests::test_empty_tiers_fallback ... ok
[INFO] [stdout] test calc::tests::test_price_tiers_default ... ok
[INFO] [stdout] test calc::tests::test_custom_price_tiers ... ok
[INFO] [stdout] test alt::tests::test_concurrent_switch ... ok
[INFO] [stdout] test calc::tests::test_tier_name_consistent_with_multiplier ... ok
[INFO] [stdout] test calc::tests::test_surcharge_calc ... ok
[INFO] [stdout] test tree::tests::test_flatten_roundtrip ... ok
[INFO] [stdout] test tree::tests::test_build_tree_out_of_order ... ok
[INFO] [stdout] test validation::tests::test_circular_reference ... ok
[INFO] [stdout] test tree::tests::test_find_node ... ok
[INFO] [stdout] test validation::tests::test_valid_bom ... ok
[INFO] [stdout] test validation::tests::test_invalid_quantity ... ok
[INFO] [stdout] test validation::tests::test_duplicate_material ... ok
[INFO] [stdout] test tree::tests::test_virtual_node ... ok
[INFO] [stdout] test validation::tests::test_loss_rate_too_high ... ok
[INFO] [stdout] test version::tests::test_diff_bom_source_type ... ok
[INFO] [stdout] test validation::tests::test_master_data_validation ... ok
[INFO] [stdout] test version::tests::test_version_history_creation ... ok
[INFO] [stdout] test version::tests::test_add_version_and_diff ... ok
[INFO] [stdout] test version::tests::test_diff_bom ... ok
[INFO] [stdout] test version::tests::test_diff_bom_all_fields ... ok
[INFO] [stdout] test tree::tests::test_max_depth ... ok
[INFO] [stdout] test version::tests::test_rollback ... ok
[INFO] [stdout] test calc::tests::test_virtual_node ... ok
[INFO] [stdout] test version::tests::test_version_manager ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 39 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "9036ff060b2d7b560f9acd4d19f401423c6e2c683351602fcf658b651a2d08cf", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "9036ff060b2d7b560f9acd4d19f401423c6e2c683351602fcf658b651a2d08cf", kill_on_drop: false }`
[INFO] [stdout] 9036ff060b2d7b560f9acd4d19f401423c6e2c683351602fcf658b651a2d08cf
