[INFO] fetching crate ironclad-llm 0.9.7... [INFO] testing ironclad-llm-0.9.7 against master#562dee4820c458d823175268e41601d4c060588a for pr-154210-1 [INFO] extracting crate ironclad-llm 0.9.7 into /workspace/builds/worker-2-tc1/source [INFO] started tweaking crates.io crate ironclad-llm 0.9.7 [INFO] finished tweaking crates.io crate ironclad-llm 0.9.7 [INFO] tweaked toml for crates.io crate ironclad-llm 0.9.7 written to /workspace/builds/worker-2-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate ironclad-llm 0.9.7 on toolchain 562dee4820c458d823175268e41601d4c060588a [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate ironclad-llm 0.9.7 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" "+562dee4820c458d823175268e41601d4c060588a" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Updating crates.io index [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded wasm-bindgen v0.2.113 [INFO] [stderr] Downloaded wasm-bindgen-futures v0.4.63 [INFO] [stderr] Downloaded wasm-bindgen-macro v0.2.113 [INFO] [stderr] Downloaded wasm-bindgen-shared v0.2.113 [INFO] [stderr] Downloaded wasm-bindgen-macro-support v0.2.113 [INFO] [stderr] Downloaded ironclad-core v0.9.7 [INFO] [stderr] Downloaded js-sys v0.3.90 [INFO] [stderr] Downloaded web-sys v0.3.90 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 4136c54fcc0e88097b6a475b24dbaa00439fd4ae0b3078dad4e0e29638d84e92 [INFO] running `Command { std: "docker" "start" "-a" "4136c54fcc0e88097b6a475b24dbaa00439fd4ae0b3078dad4e0e29638d84e92", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "4136c54fcc0e88097b6a475b24dbaa00439fd4ae0b3078dad4e0e29638d84e92", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "4136c54fcc0e88097b6a475b24dbaa00439fd4ae0b3078dad4e0e29638d84e92", kill_on_drop: false }` [INFO] [stdout] 4136c54fcc0e88097b6a475b24dbaa00439fd4ae0b3078dad4e0e29638d84e92 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 5cffe21d28afd7af590a35cf06b35a1e02309a4c6244bc387c460f802b21d8b0 [INFO] running `Command { std: "docker" "start" "-a" "5cffe21d28afd7af590a35cf06b35a1e02309a4c6244bc387c460f802b21d8b0", kill_on_drop: false }` [INFO] [stderr] Compiling getrandom v0.2.17 [INFO] [stderr] Compiling cc v1.2.56 [INFO] [stderr] Compiling tokio-macros v2.6.0 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling hashbrown v0.16.1 [INFO] [stderr] Compiling zeroize_derive v1.4.3 [INFO] [stderr] Compiling futures-macro v0.3.32 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling tracing-attributes v0.1.31 [INFO] [stderr] Compiling openssl v0.10.75 [INFO] [stderr] Compiling bitflags v2.11.0 [INFO] [stderr] Compiling zerocopy v0.8.39 [INFO] [stderr] Compiling inout v0.1.4 [INFO] [stderr] Compiling openssl-macros v0.1.1 [INFO] [stderr] Compiling rustls v0.23.36 [INFO] [stderr] Compiling native-tls v0.2.18 [INFO] [stderr] Compiling icu_normalizer v2.1.1 [INFO] [stderr] Compiling opaque-debug v0.3.1 [INFO] [stderr] Compiling rand_core v0.6.4 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling base64ct v1.8.3 [INFO] [stderr] Compiling toml_write v0.1.2 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling crypto-common v0.1.7 [INFO] [stderr] Compiling cipher v0.4.4 [INFO] [stderr] Compiling digest v0.10.7 [INFO] [stderr] Compiling universal-hash v0.5.1 [INFO] [stderr] Compiling toml_datetime v0.6.11 [INFO] [stderr] Compiling tokio v1.49.0 [INFO] [stderr] Compiling zeroize v1.8.2 [INFO] [stderr] Compiling polyval v0.6.2 [INFO] [stderr] Compiling serde_spanned v0.6.9 [INFO] [stderr] Compiling idna_adapter v1.2.1 [INFO] [stderr] Compiling aes v0.8.4 [INFO] [stderr] Compiling indexmap v2.13.0 [INFO] [stderr] Compiling ctr v0.9.2 [INFO] [stderr] Compiling idna v1.1.0 [INFO] [stderr] Compiling blake2 v0.10.6 [INFO] [stderr] Compiling rustls-pki-types v1.14.0 [INFO] [stderr] Compiling ghash v0.5.1 [INFO] [stderr] Compiling password-hash v0.5.0 [INFO] [stderr] Compiling aead v0.5.2 [INFO] [stderr] Compiling openssl-sys v0.9.111 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Compiling serde_urlencoded v0.7.1 [INFO] [stderr] Compiling chrono v0.4.44 [INFO] [stderr] Compiling futures-util v0.3.32 [INFO] [stderr] Compiling argon2 v0.5.3 [INFO] [stderr] Compiling aes-gcm v0.10.3 [INFO] [stderr] Compiling url v2.5.8 [INFO] [stderr] Compiling webpki-roots v1.0.6 [INFO] [stderr] Compiling sha2 v0.10.9 [INFO] [stderr] Compiling tracing v0.1.44 [INFO] [stderr] Compiling toml_edit v0.22.27 [INFO] [stderr] Compiling toml v0.8.23 [INFO] [stderr] Compiling futures-executor v0.3.32 [INFO] [stderr] Compiling ppv-lite86 v0.2.21 [INFO] [stderr] Compiling futures v0.3.32 [INFO] [stderr] Compiling rand_chacha v0.3.1 [INFO] [stderr] Compiling rustls-webpki v0.103.9 [INFO] [stderr] Compiling rand v0.8.5 [INFO] [stderr] Compiling ironclad-core v0.9.7 [INFO] [stderr] Compiling tokio-util v0.7.18 [INFO] [stderr] Compiling tokio-native-tls v0.3.1 [INFO] [stderr] Compiling tower v0.5.3 [INFO] [stderr] Compiling h2 v0.4.13 [INFO] [stderr] Compiling tower-http v0.6.8 [INFO] [stderr] Compiling hyper v1.8.1 [INFO] [stderr] Compiling tokio-rustls v0.26.4 [INFO] [stderr] Compiling hyper-util v0.1.20 [INFO] [stderr] Compiling hyper-tls v0.6.0 [INFO] [stderr] Compiling hyper-rustls v0.27.7 [INFO] [stderr] Compiling reqwest v0.12.28 [INFO] [stderr] Compiling ironclad-llm v0.9.7 (/opt/rustwide/workdir) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 52.84s [INFO] running `Command { std: "docker" "inspect" "5cffe21d28afd7af590a35cf06b35a1e02309a4c6244bc387c460f802b21d8b0", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "5cffe21d28afd7af590a35cf06b35a1e02309a4c6244bc387c460f802b21d8b0", kill_on_drop: false }` [INFO] [stdout] 5cffe21d28afd7af590a35cf06b35a1e02309a4c6244bc387c460f802b21d8b0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 7334626a93020ee1eff694d919005ee6dbd35274d374f593fba6f800c05feb5b [INFO] running `Command { std: "docker" "start" "-a" "7334626a93020ee1eff694d919005ee6dbd35274d374f593fba6f800c05feb5b", kill_on_drop: false }` [INFO] [stderr] Compiling openssl v0.10.75 [INFO] [stderr] Compiling rustix v1.1.4 [INFO] [stderr] Compiling linux-raw-sys v0.12.1 [INFO] [stderr] Compiling chrono v0.4.44 [INFO] [stderr] Compiling tower-http v0.6.8 [INFO] [stderr] Compiling bit-vec v0.8.0 [INFO] [stderr] Compiling quick-error v1.2.3 [INFO] [stderr] Compiling rand v0.9.2 [INFO] [stderr] Compiling rand_xorshift v0.4.0 [INFO] [stderr] Compiling rand_chacha v0.9.0 [INFO] [stderr] Compiling unarray v0.1.4 [INFO] [stderr] Compiling bit-set v0.8.0 [INFO] [stderr] Compiling ironclad-core v0.9.7 [INFO] [stderr] Compiling tempfile v3.25.0 [INFO] [stderr] Compiling rusty-fork v0.3.1 [INFO] [stderr] Compiling proptest v1.10.0 [INFO] [stderr] Compiling native-tls v0.2.18 [INFO] [stderr] Compiling tokio-native-tls v0.3.1 [INFO] [stderr] Compiling hyper-tls v0.6.0 [INFO] [stderr] Compiling reqwest v0.12.28 [INFO] [stderr] Compiling ironclad-llm v0.9.7 (/opt/rustwide/workdir) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 26.92s [INFO] running `Command { std: "docker" "inspect" "7334626a93020ee1eff694d919005ee6dbd35274d374f593fba6f800c05feb5b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "7334626a93020ee1eff694d919005ee6dbd35274d374f593fba6f800c05feb5b", kill_on_drop: false }` [INFO] [stdout] 7334626a93020ee1eff694d919005ee6dbd35274d374f593fba6f800c05feb5b [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 1e3752e727ad9b3dcd161f45a1a69359bd9df5ceb9244670f17b01d26f9dd04f [INFO] running `Command { std: "docker" "start" "-a" "1e3752e727ad9b3dcd161f45a1a69359bd9df5ceb9244670f17b01d26f9dd04f", kill_on_drop: false }` [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.35s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/ironclad_llm-de818addf1b77d13) [INFO] [stdout] [INFO] [stdout] running 325 tests [INFO] [stdout] test accuracy::tests::seed_from_history_empty ... ok [INFO] [stdout] test accuracy::tests::tracked_models_list ... ok [INFO] [stdout] test accuracy::tests::seed_from_history_populates_tracker ... ok [INFO] [stdout] test accuracy::tests::tracker_clamp ... ok [INFO] [stdout] test accuracy::tests::seed_from_history_respects_window ... ok [INFO] [stdout] test accuracy::tests::tracker_window_size ... ok [INFO] [stdout] test cache::tests::cache_duplicate_key_overwrites ... ok [INFO] [stdout] test accuracy::tests::tracker_unknown_model ... ok [INFO] [stdout] test cache::tests::cache_zero_capacity_still_stores_one ... ok [INFO] [stdout] test accuracy::tests::tracker_record_and_query ... ok [INFO] [stdout] test cache::tests::cosine_similarity_properties ... ok [INFO] [stdout] test cache::tests::disabled_cache_ignores_import ... ok [INFO] [stdout] test cache::tests::export_import_roundtrip_preserves_embeddings ... ok [INFO] [stdout] test cache::tests::import_skips_expired_entries ... ok [INFO] [stdout] test cache::tests::lfu_eviction_at_capacity ... ok [INFO] [stdout] test cache::tests::lookup_strict_does_not_use_semantic_near_match ... ok [INFO] [stdout] test cache::tests::lookup_with_embedding_uses_provided_vector ... ok [INFO] [stdout] test cache::tests::miss_for_unknown_hash ... ok [INFO] [stdout] test cache::tests::multi_level_lookup_prefers_exact ... ok [INFO] [stdout] test cache::tests::ngram_embedding_properties ... ok [INFO] [stdout] test cache::tests::export_entries_produces_valid_data ... ok [INFO] [stdout] test cache::tests::semantic_dissimilar_miss ... ok [INFO] [stdout] test cache::tests::expiration_eviction ... ok [INFO] [stdout] test cache::tests::tool_ttl_shorter_than_normal ... ok [INFO] [stdout] test cache::tests::store_and_exact_hit ... ok [INFO] [stdout] test capacity::tests::is_near_capacity_false_when_idle ... ok [INFO] [stdout] test capacity::tests::is_sustained_hot_false_for_unknown ... ok [INFO] [stdout] test cache::tests::with_threshold_uses_custom_value ... ok [INFO] [stdout] test capacity::tests::is_sustained_hot_false_when_idle ... ok [INFO] [stdout] test capacity::tests::is_sustained_hot_true_via_high_token_count ... ok [INFO] [stdout] test cache::tests::semantic_similarity_finds_near_matches ... ok [INFO] [stdout] test capacity::tests::is_sustained_hot_true_via_rpm_pressure ... ok [INFO] [stdout] test capacity::tests::list_stats_multiple_providers ... ok [INFO] [stdout] test capacity::tests::is_sustained_hot_false_with_high_util_low_samples ... ok [INFO] [stdout] test capacity::tests::rpm_limits_headroom ... ok [INFO] [stdout] test capacity::tests::is_near_capacity_true_when_saturated ... ok [INFO] [stdout] test capacity::tests::new_tracker_has_full_headroom ... ok [INFO] [stdout] test capacity::tests::stats_near_capacity_when_saturated ... ok [INFO] [stdout] test capacity::tests::stats_no_limits_zero_utilization ... ok [INFO] [stdout] test capacity::tests::stats_only_rpm_limit ... ok [INFO] [stdout] test capacity::tests::stats_only_tpm_limit ... ok [INFO] [stdout] test capacity::tests::stats_reflects_usage ... ok [INFO] [stdout] test capacity::tests::stats_returns_correct_values_idle ... ok [INFO] [stdout] test capacity::tests::stats_returns_none_for_unknown_provider ... ok [INFO] [stdout] test capacity::tests::stats_utilization_clamped_to_one ... ok [INFO] [stdout] test capacity::tests::saturated_provider_zero_headroom ... ok [INFO] [stdout] test cascade::tests::expected_utility_no_data ... ok [INFO] [stdout] test cascade::tests::high_success_rate_favors_cascade ... ok [INFO] [stdout] test cascade::tests::query_classes_listed ... ok [INFO] [stdout] test capacity::tests::min_of_tpm_and_rpm ... ok [INFO] [stdout] test capacity::tests::no_limits_means_full_headroom ... ok [INFO] [stdout] test capacity::tests::is_sustained_hot_true_with_high_util_enough_requests ... ok [INFO] [stdout] test capacity::tests::list_stats_empty_tracker ... ok [INFO] [stdout] test circuit::tests::capacity_pressure_sets_half_open_without_blocking ... ok [INFO] [stdout] test capacity::tests::unknown_provider_full_headroom ... ok [INFO] [stdout] test cascade::tests::low_success_rate_favors_direct ... ok [INFO] [stdout] test cascade::tests::strategy_display ... ok [INFO] [stdout] test circuit::tests::credit_error_clears_on_manual_reset ... ok [INFO] [stdout] test cache::tests::lookup_with_embedding_prefers_exact ... ok [INFO] [stdout] test capacity::tests::record_reduces_headroom ... ok [INFO] [stdout] test capacity::tests::record_unknown_provider_is_noop ... ok [INFO] [stdout] test circuit::tests::credit_error_immediate_trip ... ok [INFO] [stdout] test circuit::tests::normal_operation ... ok [INFO] [stdout] test circuit::tests::reset_clears_state ... ok [INFO] [stdout] test circuit::tests::half_open_failure_doubles_cooldown ... ok [INFO] [stdout] test circuit::tests::credit_error_never_auto_recovers ... ok [INFO] [stdout] test circuit::tests::recovery_after_cooldown ... ok [INFO] [stdout] test circuit::tests::force_open_blocks_and_stays_open ... ok [INFO] [stdout] test cache::tests::import_entries_restores_lookups ... ok [INFO] [stdout] test cascade::tests::unknown_class_defaults ... ok [INFO] [stdout] test cascade::tests::window_eviction ... ok [INFO] [stdout] test circuit::tests::trip_on_threshold ... ok [INFO] [stdout] test client::tests::auth_value_formatting ... ok [INFO] [stdout] test cache::tests::cosine_self_similarity_is_one ... ok [INFO] [stdout] test circuit::tests::transient_failure_still_auto_recovers ... ok [INFO] [stdout] test client::tests::pct_encode_all_bytes ... ok [INFO] [stdout] test client::tests::pct_encode_ampersand_equals ... ok [INFO] [stdout] test client::tests::pct_encode_empty_string ... ok [INFO] [stdout] test client::tests::pct_encode_slash_colon ... ok [INFO] [stdout] test client::tests::pct_encode_spaces_and_special ... ok [INFO] [stdout] test client::tests::pct_encode_unreserved_chars_pass_through ... ok [INFO] [stdout] test client::tests::request_body_is_valid_json ... ok [INFO] [stdout] test compression::tests::compress_empty_string ... ok [INFO] [stdout] test compression::tests::compress_keeps_content_words ... ok [INFO] [stdout] test compression::tests::compress_preserves_order ... ok [INFO] [stdout] test compression::tests::compress_ratio_clamped ... ok [INFO] [stdout] test compression::tests::compress_ratio_one_no_change ... ok [INFO] [stdout] test compression::tests::compress_reduces_tokens ... ok [INFO] [stdout] test compression::tests::content_word_detection ... ok [INFO] [stdout] test compression::tests::estimate_savings ... ok [INFO] [stdout] test compression::tests::estimate_savings_empty ... ok [INFO] [stdout] test compression::tests::short_input_no_compression ... ok [INFO] [stdout] test compression::tests::stop_word_detection ... ok [INFO] [stdout] test dedup::tests::different_models_different_fingerprints ... ok [INFO] [stdout] test dedup::tests::duplicate_detected ... ok [INFO] [stdout] test dedup::tests::expired_entries_evicted ... ok [INFO] [stdout] test dedup::tests::release_allows_retrack ... ok [INFO] [stdout] test dedup::tests::unique_request_tracked ... ok [INFO] [stdout] test embedding::tests::build_embedding_url_google_batch_uses_batch_endpoint ... ok [INFO] [stdout] test embedding::tests::build_embedding_url_google_substitutes_model ... ok [INFO] [stdout] test embedding::tests::build_embedding_url_non_google ... ok [INFO] [stdout] test embedding::tests::build_embedding_url_openai ... ok [INFO] [stdout] test embedding::tests::build_embedding_url_query_auth ... ok [INFO] [stdout] test embedding::tests::build_google_request_batch ... ok [INFO] [stdout] test embedding::tests::build_google_request_single ... ok [INFO] [stdout] test embedding::tests::build_openai_request ... ok [INFO] [stdout] test cache::tests::proptest_cosine_similarity_bounded_for_nonneg ... ok [INFO] [stdout] test cache::tests::proptest_cosine_similarity_is_commutative ... ok [INFO] [stdout] test cache::tests::proptest_ngram_embedding_is_deterministic ... ok [INFO] [stdout] test embedding::tests::client_with_provider ... ok [INFO] [stdout] test client::tests::forward_with_query_auth_encodes_special_chars_in_key ... ok [INFO] [stdout] test embedding::tests::fallback_ngram_deterministic ... ok [INFO] [stdout] test embedding::tests::fallback_ngram_different_dims ... ok [INFO] [stdout] test embedding::tests::fallback_ngram_empty ... ok [INFO] [stdout] test embedding::tests::fallback_ngram_short_text ... ok [INFO] [stdout] test client::tests::forward_stream_custom_auth_header ... ok [INFO] [stdout] test embedding::tests::parse_f32_array_handles_non_numbers ... ok [INFO] [stdout] test embedding::tests::fallback_ngram_unit_normalized ... ok [INFO] [stdout] test embedding::tests::parse_google_batch_response ... ok [INFO] [stdout] test embedding::tests::parse_google_mismatched_count_returns_error ... ok [INFO] [stdout] test embedding::tests::parse_google_single_response ... ok [INFO] [stdout] test embedding::tests::parse_google_unparseable_returns_error ... ok [INFO] [stdout] test embedding::tests::parse_ollama_response ... ok [INFO] [stdout] test embedding::tests::parse_openai_mismatched_count_returns_error ... ok [INFO] [stdout] test embedding::tests::parse_openai_response ... ok [INFO] [stdout] test embedding::tests::parse_unparseable_returns_error ... ok [INFO] [stdout] test eval_harness::tests::replay_accuracy_floor_filters ... ok [INFO] [stdout] test eval_harness::tests::replay_empty_input ... ok [INFO] [stdout] test eval_harness::tests::replay_respects_cost_weight ... ok [INFO] [stdout] test eval_harness::tests::replay_single_row ... ok [INFO] [stdout] test eval_harness::tests::replay_skips_blocked_candidates ... ok [INFO] [stdout] test eval_harness::tests::summarize_computes_deltas ... ok [INFO] [stdout] test eval_harness::tests::summarize_empty ... ok [INFO] [stdout] test format::tests::content_part_audio_to_text ... ok [INFO] [stdout] test format::tests::content_part_image_base64_to_text ... ok [INFO] [stdout] test eval_harness::tests::replay_no_candidates_returns_none ... ok [INFO] [stdout] test format::tests::content_part_image_url_to_text ... ok [INFO] [stdout] test format::tests::content_part_text_to_text ... ok [INFO] [stdout] test format::tests::is_multimodal_false_with_text_only_parts ... ok [INFO] [stdout] test format::tests::parse_anthropic_response_empty_content ... ok [INFO] [stdout] test format::tests::parse_anthropic_response_missing_usage ... ok [INFO] [stdout] test format::tests::parse_google_response_function_call_only ... ok [INFO] [stdout] test format::tests::parse_google_response_multiple_function_calls ... ok [INFO] [stdout] test format::tests::parse_google_response_no_candidates ... ok [INFO] [stdout] test format::tests::parse_google_response_with_function_call ... ok [INFO] [stdout] test format::tests::parse_openai_response_no_choices_errors ... ok [INFO] [stdout] test format::tests::image_url_detail_passed_through_openai ... ok [INFO] [stdout] test format::tests::parse_openai_responses_empty_output ... ok [INFO] [stdout] test client::tests::forward_with_provider_extra_headers_propagated ... ok [INFO] [stdout] test format::tests::parse_openai_responses_function_call_only ... ok [INFO] [stdout] test client::tests::forward_stream_bearer_auth ... ok [INFO] [stdout] test client::tests::forward_stream_connection_refused ... ok [INFO] [stdout] test format::tests::parse_openai_responses_multiple_function_calls ... ok [INFO] [stdout] test format::tests::parse_sse_anthropic_missing_delta_returns_none ... ok [INFO] [stdout] test format::tests::parse_openai_responses_with_function_call ... ok [INFO] [stdout] test format::tests::parse_sse_anthropic_no_text_returns_empty ... ok [INFO] [stdout] test format::tests::parse_sse_anthropic_with_stop_reason ... ok [INFO] [stdout] test format::tests::parse_sse_done_for_all_formats ... ok [INFO] [stdout] test client::tests::forward_request_connection_refused_maps_to_network_error ... ok [INFO] [stdout] test client::tests::client_construction ... ok [INFO] [stdout] test format::tests::parse_sse_google_no_text_returns_empty ... ok [INFO] [stdout] test format::tests::parse_sse_done_returns_none ... ok [INFO] [stdout] test format::tests::parse_sse_openai_chunk ... ok [INFO] [stdout] test format::tests::parse_sse_openai_missing_content_returns_empty_delta ... ok [INFO] [stdout] test format::tests::parse_sse_non_data_line_returns_none ... ok [INFO] [stdout] test format::tests::parse_sse_openai_with_finish_reason ... ok [INFO] [stdout] test format::tests::parse_sse_openai_responses_format ... ok [INFO] [stdout] test format::tests::parts_to_anthropic_audio_becomes_text ... ok [INFO] [stdout] test format::tests::parts_to_anthropic_base64_image ... ok [INFO] [stdout] test format::tests::parse_sse_google_missing_candidates_returns_none ... ok [INFO] [stdout] test format::tests::parts_to_anthropic_mixed_all_types ... ok [INFO] [stdout] test format::tests::parts_to_anthropic_url_image ... ok [INFO] [stdout] test format::tests::parts_to_openai_audio_becomes_text ... ok [INFO] [stdout] test format::tests::parts_to_openai_base64_image ... ok [INFO] [stdout] test format::tests::parts_to_openai_text_only ... ok [INFO] [stdout] test format::tests::parts_to_openai_with_image ... ok [INFO] [stdout] test format::tests::stream_accumulator_captures_model ... ok [INFO] [stdout] test format::tests::stream_accumulator_empty ... ok [INFO] [stdout] test format::tests::parse_sse_anthropic_chunk ... ok [INFO] [stdout] test format::tests::parse_sse_google_chunk ... ok [INFO] [stdout] test format::tests::stream_chunk_serialization_roundtrip ... ok [INFO] [stdout] test format::tests::parts_to_openai_mixed_all_types ... ok [INFO] [stdout] test format::tests::translate_anthropic_no_max_tokens ... ok [INFO] [stdout] test format::tests::stream_accumulator_captures_tokens_from_last ... ok [INFO] [stdout] test format::tests::translate_anthropic_system_from_message_when_no_system_field ... ok [INFO] [stdout] test format::tests::translate_anthropic_multimodal_message ... ok [INFO] [stdout] test format::tests::stream_accumulator_pushes_deltas ... ok [INFO] [stdout] test format::tests::parse_sse_invalid_json_returns_none ... ok [INFO] [stdout] test format::tests::parse_sse_openai_null_content_returns_empty_delta ... ok [INFO] [stdout] test client::tests::forward_with_query_auth_no_existing_params ... ok [INFO] [stdout] test client::tests::forward_with_provider_authorization_case_insensitive ... ok [INFO] [stdout] test format::tests::translate_google_filters_system_messages ... ok [INFO] [stdout] test format::tests::translate_google_includes_tools ... ok [INFO] [stdout] test format::tests::translate_openai_responses_includes_tools ... ok [INFO] [stdout] test format::tests::translate_google_no_gen_config_fields ... ok [INFO] [stdout] test format::tests::translate_openai_multimodal_message ... ok [INFO] [stdout] test format::tests::translate_openai_no_system_no_max_tokens_no_temp ... ok [INFO] [stdout] test format::tests::translate_openai_responses_no_max_tokens ... ok [INFO] [stdout] test format::tests::translate_openai_skips_empty_assistant_messages ... ok [INFO] [stdout] test format::tests::translate_openai_responses_skips_empty_assistant_messages ... ok [INFO] [stdout] test format::tests::translate_request_google ... ok [INFO] [stdout] test format::tests::translate_request_openai_responses ... ok [INFO] [stdout] test format::tests::translate_response_anthropic ... ok [INFO] [stdout] test format::tests::translate_response_openai_responses ... ok [INFO] [stdout] test format::tests::unified_message_is_multimodal_false_for_text ... ok [INFO] [stdout] test format::tests::unified_message_is_multimodal_true_with_image ... ok [INFO] [stdout] test format::tests::translate_response_google ... ok [INFO] [stdout] test format::tests::translate_google_skips_empty_assistant_messages ... ok [INFO] [stdout] test format::tests::translate_request_anthropic ... ok [INFO] [stdout] test format::tests::translate_response_openai_completions ... ok [INFO] [stdout] test format::tests::translate_request_openai_completions ... ok [INFO] [stdout] test format::tests::unified_message_multimodal_helper ... ok [INFO] [stdout] test format::tests::unified_message_text_helper ... ok [INFO] [stdout] test ml_router::tests::classify_feature_sensitive ... ok [INFO] [stdout] test format::tests::unified_request_serialization_roundtrip ... ok [INFO] [stdout] test ml_router::tests::load_missing_file ... ok [INFO] [stdout] test ml_router::tests::backend_trait_implementation ... ok [INFO] [stdout] test ml_router::tests::classify_with_zero_weights ... ok [INFO] [stdout] test ml_router::tests::classify_positive_bias ... ok [INFO] [stdout] test ml_router::tests::preference_collector ... ok [INFO] [stdout] test format::tests::unified_response_serialization_roundtrip ... ok [INFO] [stdout] test ml_router::tests::load_invalid_file ... ok [INFO] [stdout] test oauth::tests::authorization_url_structure ... ok [INFO] [stdout] test oauth::tests::base64url_encode_roundtrip ... ok [INFO] [stdout] test oauth::tests::callback_port_returns_constant ... ok [INFO] [stdout] test ml_router::tests::train_learns_separation ... ok [INFO] [stdout] test oauth::tests::authorization_url_encodes_state ... ok [INFO] [stdout] test ml_router::tests::save_and_load ... ok [INFO] [stdout] test ml_router::tests::sigmoid_bounds ... ok [INFO] [stdout] test ml_router::tests::train_empty_examples ... ok [INFO] [stdout] test oauth::tests::authorization_url_encodes_special_chars_in_client_id ... ok [INFO] [stdout] test ml_router::tests::weights_accessor ... ok [INFO] [stdout] test oauth::tests::code_challenge_is_sha256_base64url ... ok [INFO] [stdout] test ml_router::tests::preference_record_conversion ... ok [INFO] [stdout] test oauth::tests::code_verifier_is_base64url ... ok [INFO] [stdout] test embedding::tests::client_without_provider ... ok [INFO] [stdout] test oauth::tests::different_verifiers_produce_different_challenges ... ok [INFO] [stdout] test oauth::tests::default_redirect_uri_contains_port ... ok [INFO] [stdout] test client::tests::forward_with_provider_custom_auth_connection_refused ... ok [INFO] [stdout] test oauth::tests::code_verifiers_are_unique ... ok [INFO] [stdout] test embedding::tests::embed_single_without_provider ... ok [INFO] [stdout] test client::tests::forward_with_query_auth_existing_params ... ok [INFO] [stdout] test embedding::tests::embed_without_provider_uses_ngram ... ok [INFO] [stdout] test oauth::tests::stored_tokens_client_id_present_when_some ... ok [INFO] [stdout] test oauth::tests::stored_tokens_client_id_skipped_when_none ... ok [INFO] [stdout] test oauth::tests::token_file_backward_compat_no_client_id ... ok [INFO] [stdout] test oauth::tests::token_file_empty_tokens ... ok [INFO] [stdout] test oauth::tests::token_file_multiple_providers ... ok [INFO] [stdout] test oauth::tests::token_file_path_contains_ironclad ... ok [INFO] [stdout] test oauth::tests::token_file_roundtrip ... ok [INFO] [stdout] test oauth::tests::token_url_is_anthropic ... ok [INFO] [stdout] test profile::tests::metascore_all_blocked ... ok [INFO] [stdout] test profile::tests::metascore_blocked_model_filtered ... ok [INFO] [stdout] test profile::tests::metascore_breakdown_components_bounded ... ok [INFO] [stdout] test profile::tests::metascore_cloud_complex_task ... ok [INFO] [stdout] test profile::tests::metascore_cold_start_penalty ... ok [INFO] [stdout] test profile::tests::metascore_cost_aware_prefers_cheap ... ok [INFO] [stdout] test profile::tests::metascore_deterministic_tiebreak ... ok [INFO] [stdout] test profile::tests::metascore_empty_profiles ... ok [INFO] [stdout] test profile::tests::metascore_local_simple_task ... ok [INFO] [stdout] test provider::tests::config_format_overrides_inference ... ok [INFO] [stdout] test provider::tests::from_config_maps_tiers_and_formats ... ok [INFO] [stdout] test provider::tests::lookup_by_model_string ... ok [INFO] [stdout] test provider::tests::parse_api_format_variants ... ok [INFO] [stdout] test provider::tests::parse_tier_variants ... ok [INFO] [stdout] test provider::tests::register_and_lookup ... ok [INFO] [stdout] test router::tests::advance_through_fallbacks ... ok [INFO] [stdout] test router::tests::complexity_classification ... ok [INFO] [stdout] test router::tests::model_override_takes_precedence ... ok [INFO] [stdout] test router::tests::select_primary_model ... ok [INFO] [stdout] test embedding::tests::embed_with_unreachable_provider_falls_back ... ok [INFO] [stdout] test cache::tests::proptest_ngram_embedding_has_fixed_dimension ... ok [INFO] [stdout] test tests::resolve_embedding_config_default_dimensions ... ok [INFO] [stdout] test tests::llm_service_construction ... ok [INFO] [stdout] test tests::resolve_embedding_config_missing_provider ... ok [INFO] [stdout] test tests::resolve_embedding_config_falls_back_to_provider_model ... ok [INFO] [stdout] test tests::resolve_embedding_config_provider_no_embedding_path ... ok [INFO] [stdout] test tests::resolve_embedding_config_no_provider ... ok [INFO] [stdout] test tests::sse_chunk_stream_anthropic_format ... ok [INFO] [stdout] test tests::resolve_embedding_config_uses_memory_model_override ... ok [INFO] [stdout] test tests::sse_chunk_stream_empty_buffer_at_end ... ok [INFO] [stdout] test tests::sse_chunk_stream_empty_bytes ... ok [INFO] [stdout] test tests::sse_chunk_stream_empty_input ... ok [INFO] [stdout] test tests::sse_chunk_stream_google_format ... ok [INFO] [stdout] test tests::sse_chunk_stream_multiple_lines_in_one_chunk ... ok [INFO] [stdout] test tests::sse_chunk_stream_multiple_trailing_chunks ... ok [INFO] [stdout] test tests::sse_chunk_stream_non_data_lines_skipped ... ok [INFO] [stdout] test tests::sse_chunk_stream_only_whitespace_lines ... ok [INFO] [stdout] test tests::sse_chunk_stream_pending_queue_drains_correctly ... ok [INFO] [stdout] test tests::sse_chunk_stream_split_across_boundaries ... ok [INFO] [stdout] test tests::sse_chunk_stream_split_utf8_boundary ... ok [INFO] [stdout] test tests::sse_chunk_stream_trailing_data_no_newline ... ok [INFO] [stdout] test tests::sse_chunk_stream_trailing_done_not_lost ... ok [INFO] [stdout] test tier::tests::classify_known_models ... ok [INFO] [stdout] test tier::tests::t1_config_disables_strip_and_condense ... ok [INFO] [stdout] test tier::tests::t1_strips_system_and_condenses ... ok [INFO] [stdout] test tier::tests::t2_adds_preamble ... ok [INFO] [stdout] test tier::tests::t2_custom_preamble ... ok [INFO] [stdout] test tier::tests::t2_no_preamble_when_none ... ok [INFO] [stdout] test tier::tests::t3_t4_passthrough ... ok [INFO] [stdout] test tiered::tests::escalation_tracker_basic ... ok [INFO] [stdout] test tiered::tests::escalation_tracker_cache_hit_rate ... ok [INFO] [stdout] test tiered::tests::escalation_tracker_empty_rates ... ok [INFO] [stdout] test tiered::tests::escalation_tracker_rates ... ok [INFO] [stdout] test tiered::tests::evaluator_empty_response ... ok [INFO] [stdout] test tiered::tests::evaluator_floor_accessor ... ok [INFO] [stdout] test tiered::tests::evaluator_high_confidence ... ok [INFO] [stdout] test tiered::tests::evaluator_low_confidence_hedging ... ok [INFO] [stdout] test tiered::tests::evaluator_low_confidence_short ... ok [INFO] [stdout] test tiered::tests::tiered_result_display ... ok [INFO] [stdout] test tests::sse_chunk_stream_buffer_overflow_error ... ok [INFO] [stdout] test tests::llm_service_with_embedding_provider ... ok [INFO] [stdout] test oauth::tests::oauth_manager_new_with_no_file ... ok [INFO] [stdout] test oauth::tests::oauth_manager_remove_nonexistent ... ok [INFO] [stdout] test oauth::tests::oauth_manager_resolve_missing_provider ... ok [INFO] [stdout] test oauth::tests::resolve_token_expired_no_refresh_token_errors ... ok [INFO] [stdout] test oauth::tests::resolve_token_not_expired_returns_access_token ... ok [INFO] [stdout] test oauth::tests::oauth_manager_status_reports_expiry has been running for over 60 seconds [INFO] [stdout] test oauth::tests::oauth_manager_store_and_resolve has been running for over 60 seconds [INFO] [stdout] test oauth::tests::resolve_token_about_to_expire_attempts_refresh has been running for over 60 seconds [INFO] [stdout] test oauth::tests::resolve_token_expired_attempts_refresh_fails_network has been running for over 60 seconds [INFO] [stdout] test oauth::tests::resolve_token_no_expiry_returns_access_token has been running for over 60 seconds [INFO] [stdout] test oauth::tests::status_empty_access_token_reports_false has been running for over 60 seconds [INFO] [stdout] test oauth::tests::status_not_expired_when_future has been running for over 60 seconds [INFO] [stdout] test oauth::tests::store_tokens_overwrites_existing has been running for over 60 seconds [INFO] [stdout] test oauth::tests::oauth_manager_status_reports_expiry ... ok [INFO] [stdout] test oauth::tests::resolve_token_no_expiry_returns_access_token ... ok [INFO] [stdout] test oauth::tests::resolve_token_about_to_expire_attempts_refresh ... ok [INFO] [stdout] test oauth::tests::oauth_manager_store_and_resolve ... ok [INFO] [stdout] test oauth::tests::status_not_expired_when_future ... ok [INFO] [stdout] test oauth::tests::status_empty_access_token_reports_false ... ok [INFO] [stdout] test oauth::tests::resolve_token_expired_attempts_refresh_fails_network ... ok [INFO] [stdout] test oauth::tests::store_tokens_overwrites_existing ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 325 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 71.94s [INFO] [stdout] [INFO] [stderr] Doc-tests ironclad_llm [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] running `Command { std: "docker" "inspect" "1e3752e727ad9b3dcd161f45a1a69359bd9df5ceb9244670f17b01d26f9dd04f", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "1e3752e727ad9b3dcd161f45a1a69359bd9df5ceb9244670f17b01d26f9dd04f", kill_on_drop: false }` [INFO] [stdout] 1e3752e727ad9b3dcd161f45a1a69359bd9df5ceb9244670f17b01d26f9dd04f