[INFO] fetching crate ninmu-api 0.1.0...
[INFO] testing ninmu-api-0.1.0 against master#cced03bfd61a304243a34504618ecec86c17063f for pr-154065-2
[INFO] extracting crate ninmu-api 0.1.0 into /workspace/builds/worker-0-tc1/source
[INFO] started tweaking crates.io crate ninmu-api 0.1.0
[INFO] removed 0 missing tests
[INFO] finished tweaking crates.io crate ninmu-api 0.1.0
[INFO] tweaked toml for crates.io crate ninmu-api 0.1.0 written to /workspace/builds/worker-0-tc1/source/Cargo.toml
[INFO] validating manifest of crates.io crate ninmu-api 0.1.0 on toolchain cced03bfd61a304243a34504618ecec86c17063f
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate ninmu-api 0.1.0 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded signal-hook-registry v1.4.8
[INFO] [stderr]   Downloaded wasm-bindgen-shared v0.2.118
[INFO] [stderr]   Downloaded wasm-bindgen v0.2.118
[INFO] [stderr]   Downloaded wasm-bindgen-futures v0.4.68
[INFO] [stderr]   Downloaded wasm-bindgen-macro v0.2.118
[INFO] [stderr]   Downloaded ninmu-telemetry v0.1.0
[INFO] [stderr]   Downloaded idna_adapter v1.2.1
[INFO] [stderr]   Downloaded zerofrom v0.1.7
[INFO] [stderr]   Downloaded is-terminal v0.4.17
[INFO] [stderr]   Downloaded glob v0.3.3
[INFO] [stderr]   Downloaded reqwest v0.12.28
[INFO] [stderr]   Downloaded hermit-abi v0.5.2
[INFO] [stderr]   Downloaded criterion-plot v0.5.0
[INFO] [stderr]   Downloaded ninmu-plugins v0.1.0
[INFO] [stderr]   Downloaded wasm-bindgen-macro-support v0.2.118
[INFO] [stderr]   Downloaded cc v1.2.61
[INFO] [stderr]   Downloaded criterion v0.5.1
[INFO] [stderr]   Downloaded js-sys v0.3.95
[INFO] [stderr]   Downloaded tower-http v0.6.8
[INFO] [stderr]   Downloaded iri-string v0.7.12
[INFO] [stderr]   Downloaded ninmu-runtime v0.1.0
[INFO] [stderr]   Downloaded rustls v0.23.39
[INFO] [stderr]   Downloaded web-sys v0.3.95
[INFO] [stderr]   Downloaded tokio v1.52.1
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 90c7d47779b03f53422c35a4e58918f3972acdd4ff8d4423990b86fc97211641
[INFO] running `Command { std: "docker" "start" "90c7d47779b03f53422c35a4e58918f3972acdd4ff8d4423990b86fc97211641", 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" "90c7d47779b03f53422c35a4e58918f3972acdd4ff8d4423990b86fc97211641" "/opt/rustwide/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "90c7d47779b03f53422c35a4e58918f3972acdd4ff8d4423990b86fc97211641", 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=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "90c7d47779b03f53422c35a4e58918f3972acdd4ff8d4423990b86fc97211641" "/opt/rustwide/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling stable_deref_trait v1.2.1
[INFO] [stderr]    Compiling bytes v1.11.1
[INFO] [stderr]    Compiling pin-project-lite v0.2.17
[INFO] [stderr]    Compiling futures-core v0.3.32
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling version_check v0.9.5
[INFO] [stderr]    Compiling litemap v0.8.2
[INFO] [stderr]    Compiling cc v1.2.61
[INFO] [stderr]    Compiling writeable v0.6.3
[INFO] [stderr]    Compiling icu_normalizer_data v2.2.0
[INFO] [stderr]    Compiling icu_properties_data v2.2.0
[INFO] [stderr]    Compiling utf8_iter v1.0.4
[INFO] [stderr]    Compiling once_cell v1.21.4
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling mio v1.2.0
[INFO] [stderr]    Compiling socket2 v0.6.3
[INFO] [stderr]    Compiling zeroize v1.8.2
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling untrusted v0.9.0
[INFO] [stderr]    Compiling futures-task v0.3.32
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling httparse v1.10.1
[INFO] [stderr]    Compiling rustls-pki-types v1.14.1
[INFO] [stderr]    Compiling percent-encoding v2.3.2
[INFO] [stderr]    Compiling typenum v1.20.0
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling rustls v0.23.39
[INFO] [stderr]    Compiling tower-service v0.3.3
[INFO] [stderr]    Compiling try-lock v0.2.5
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling futures-channel v0.3.32
[INFO] [stderr]    Compiling atomic-waker v1.1.2
[INFO] [stderr]    Compiling subtle v2.6.1
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]    Compiling want v0.3.1
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling sync_wrapper v1.0.2
[INFO] [stderr]    Compiling http v1.4.0
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling ipnet v2.12.0
[INFO] [stderr]    Compiling tower-layer v0.3.3
[INFO] [stderr]    Compiling regex-syntax v0.8.10
[INFO] [stderr]    Compiling base64 v0.22.1
[INFO] [stderr]    Compiling webpki-roots v1.0.7
[INFO] [stderr]    Compiling cpufeatures v0.2.17
[INFO] [stderr]    Compiling iri-string v0.7.12
[INFO] [stderr]    Compiling bitflags v2.11.1
[INFO] [stderr]    Compiling ryu v1.0.23
[INFO] [stderr]    Compiling log v0.4.29
[INFO] [stderr]    Compiling glob v0.3.3
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling rustls-webpki v0.103.13
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling zerovec-derive v0.11.3
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling tokio-macros v2.7.0
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling tokio v1.52.1
[INFO] [stderr]    Compiling zerofrom v0.1.7
[INFO] [stderr]    Compiling yoke v0.8.2
[INFO] [stderr]    Compiling zerovec v0.11.6
[INFO] [stderr]    Compiling zerotrie v0.2.4
[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 icu_provider v2.2.0
[INFO] [stderr]    Compiling icu_properties v2.2.0
[INFO] [stderr]    Compiling icu_normalizer v2.2.0
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling ninmu-plugins v0.1.0
[INFO] [stderr]    Compiling ninmu-telemetry v0.1.0
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling hyper v1.9.0
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling ninmu-runtime v0.1.0
[INFO] [stderr]    Compiling tower-http v0.6.8
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling ninmu-api v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 58.59s
[INFO] running `Command { std: "docker" "inspect" "90c7d47779b03f53422c35a4e58918f3972acdd4ff8d4423990b86fc97211641", 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=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "90c7d47779b03f53422c35a4e58918f3972acdd4ff8d4423990b86fc97211641" "/opt/rustwide/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling zerocopy-derive v0.8.48
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling clap_builder v4.6.0
[INFO] [stderr]    Compiling is-terminal v0.4.17
[INFO] [stderr]    Compiling itertools v0.10.5
[INFO] [stderr]    Compiling rayon v1.12.0
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling ninmu-telemetry v0.1.0
[INFO] [stderr]    Compiling ninmu-plugins v0.1.0
[INFO] [stderr]    Compiling tinytemplate v1.2.1
[INFO] [stderr]    Compiling zerocopy v0.8.48
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling clap v4.6.1
[INFO] [stderr]    Compiling criterion-plot v0.5.0
[INFO] [stderr]    Compiling ninmu-runtime v0.1.0
[INFO] [stderr]    Compiling half v2.7.1
[INFO] [stderr]    Compiling ciborium-ll v0.2.2
[INFO] [stderr]    Compiling ciborium v0.2.2
[INFO] [stderr]    Compiling criterion v0.5.1
[INFO] [stderr]    Compiling ninmu-api v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `metadata_for_model`
[INFO] [stdout]    --> src/providers/mod.rs:746:9
[INFO] [stdout]     |
[INFO] [stdout] 746 |         metadata_for_model, model_token_limit, parse_dotenv, prefix_model_for_provider,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 41.00s
[INFO] running `Command { std: "docker" "inspect" "90c7d47779b03f53422c35a4e58918f3972acdd4ff8d4423990b86fc97211641", 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=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "90c7d47779b03f53422c35a4e58918f3972acdd4ff8d4423990b86fc97211641" "/opt/rustwide/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `metadata_for_model`
[INFO] [stderr]    --> src/providers/mod.rs:746:9
[INFO] [stderr]     |
[INFO] [stderr] 746 |         metadata_for_model, model_token_limit, parse_dotenv, prefix_model_for_provider,
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: `ninmu-api` (lib test) generated 1 warning (run `cargo fix --lib -p ninmu-api --tests` to apply 1 suggestion)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.30s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/ninmu_api-907017a7b67a8777)
[INFO] [stdout] 
[INFO] [stdout] running 179 tests
[INFO] [stdout] test client::tests::provider_detection_prefers_model_family ... ok
[INFO] [stdout] test client::tests::resolves_existing_and_grok_aliases ... ok
[INFO] [stdout] test error::tests::classifies_provider_context_window_errors ... ok
[INFO] [stdout] test error::tests::detects_generic_fatal_wrapper_and_classifies_it_as_provider_internal ... ok
[INFO] [stdout] test client::tests::dashscope_model_uses_dashscope_config_not_openai ... ok
[INFO] [stdout] test error::tests::missing_credentials_with_hint_appends_the_hint_after_base_message ... ok
[INFO] [stdout] test error::tests::json_deserialize_error_includes_provider_model_and_truncated_body_snippet ... ok
[INFO] [stdout] test error::tests::missing_credentials_without_hint_renders_the_canonical_message ... ok
[INFO] [stdout] test error::tests::truncate_body_snippet_caps_long_bodies_at_max_chars ... ok
[INFO] [stdout] test error::tests::retries_exhausted_preserves_nested_request_id_and_failure_class ... ok
[INFO] [stdout] test error::tests::truncate_body_snippet_keeps_short_bodies_intact ... ok
[INFO] [stdout] test error::tests::truncate_body_snippet_does_not_split_multibyte_characters ... ok
[INFO] [stdout] test client::tests::fallback_chain_returns_first_successful_client ... ok
[INFO] [stdout] test http_client::tests::build_http_client_returns_error_for_invalid_unified_proxy_url ... ok
[INFO] [stdout] test http_client::tests::build_http_client_returns_http_error_for_invalid_proxy_url ... ok
[INFO] [stdout] test http_client::tests::build_http_client_succeeds_when_no_proxy_is_configured ... ok
[INFO] [stdout] test http_client::tests::from_proxy_url_sets_unified_field_and_leaves_per_scheme_empty ... ok
[INFO] [stdout] test http_client::tests::build_http_client_succeeds_with_valid_http_and_https_proxies ... ok
[INFO] [stdout] test http_client::tests::build_http_client_succeeds_with_unified_proxy_url ... ok
[INFO] [stdout] test http_client::tests::proxy_config_falls_back_to_lowercase_keys ... ok
[INFO] [stdout] test http_client::tests::proxy_config_is_empty_when_no_env_vars_are_set ... ok
[INFO] [stdout] test http_client::tests::proxy_config_prefers_uppercase_over_lowercase_when_both_set ... ok
[INFO] [stdout] test http_client::tests::proxy_config_treats_empty_strings_as_unset ... ok
[INFO] [stdout] test http_client::tests::proxy_config_reads_uppercase_http_https_and_no_proxy ... ok
[INFO] [stdout] test prompt_cache::tests::changed_prompt_marks_break_as_expected ... ok
[INFO] [stdout] test http_client::tests::proxy_url_takes_precedence_over_per_scheme_fields ... ok
[INFO] [stdout] test prompt_cache::tests::path_builder_sanitizes_session_identifier ... ok
[INFO] [stdout] test prompt_cache::tests::request_hashes_are_versioned_and_stable ... ok
[INFO] [stdout] test prompt_cache::tests::sanitize_path_caps_long_values ... ok
[INFO] [stdout] test client::tests::fallback_chain_errors_when_all_fail ... ok
[INFO] [stdout] test providers::anthropic::tests::backoff_doubles_until_maximum ... ok
[INFO] [stdout] test providers::anthropic::tests::enrich_bearer_auth_error_appends_sk_ant_hint_on_401_with_pure_bearer_token ... ok
[INFO] [stdout] test providers::anthropic::tests::auth_source_applies_headers ... ok
[INFO] [stdout] test providers::anthropic::tests::auth_source_from_env_or_saved_ignores_saved_oauth_when_env_absent ... ok
[INFO] [stdout] test providers::anthropic::tests::enrich_bearer_auth_error_skips_hint_when_api_key_header_is_also_present ... ok
[INFO] [stdout] test providers::anthropic::tests::oauth_token_expiry_uses_expires_at_timestamp ... ok
[INFO] [stdout] test providers::anthropic::tests::jittered_backoff_stays_within_additive_bounds_and_varies ... ok
[INFO] [stdout] test providers::anthropic::tests::enrich_bearer_auth_error_ignores_401_when_bearer_token_is_not_sk_ant ... ok
[INFO] [stdout] test providers::anthropic::tests::oauth_token_maps_to_bearer_auth_source ... ok
[INFO] [stdout] test providers::anthropic::tests::request_id_uses_primary_or_fallback_header ... ok
[INFO] [stdout] test providers::anthropic::tests::message_request_stream_helper_sets_stream_true ... ok
[INFO] [stdout] test providers::anthropic::tests::auth_source_from_env_combines_api_key_and_bearer_token ... ok
[INFO] [stdout] test providers::anthropic::tests::read_api_key_prefers_api_key_env ... ok
[INFO] [stdout] test providers::anthropic::tests::enrich_bearer_auth_error_leaves_non_401_errors_unchanged ... ok
[INFO] [stdout] test providers::anthropic::tests::rendered_request_body_strips_betas_for_standard_messages_endpoint ... ok
[INFO] [stdout] test providers::anthropic::tests::read_api_key_requires_non_empty_value ... ok
[INFO] [stdout] test providers::anthropic::tests::read_auth_token_reads_auth_token_env ... ok
[INFO] [stdout] test providers::anthropic::tests::read_api_key_requires_presence ... ok
[INFO] [stdout] test providers::anthropic::tests::default_retry_policy_matches_exponential_schedule ... ok
[INFO] [stdout] test prompt_cache::tests::completion_cache_round_trip_persists_recent_response ... ok
[INFO] [stdout] test providers::anthropic::tests::enrich_bearer_auth_error_ignores_401_when_auth_source_has_no_bearer ... ok
[INFO] [stdout] test providers::anthropic::tests::retryable_statuses_are_detected ... ok
[INFO] [stdout] test providers::anthropic::tests::strip_does_not_add_empty_stop_sequences ... ok
[INFO] [stdout] test providers::anthropic::tests::strip_removes_openai_only_fields_and_converts_stop ... ok
[INFO] [stdout] test prompt_cache::tests::distinct_requests_do_not_collide_in_completion_cache ... ok
[INFO] [stdout] test providers::anthropic::tests::enrich_bearer_auth_error_passes_non_api_errors_through_unchanged ... ok
[INFO] [stdout] test providers::anthropic::tests::strip_unsupported_beta_body_fields_is_a_noop_when_betas_absent ... ok
[INFO] [stdout] test providers::models_file::tests::custom_model_not_found_returns_none ... ok
[INFO] [stdout] test providers::anthropic::tests::strip_unsupported_beta_body_fields_removes_betas_array ... ok
[INFO] [stdout] test providers::models_file::tests::load_from_missing_file_returns_none ... ok
[INFO] [stdout] test providers::models_file::tests::finds_custom_model_by_provider_prefix ... ok
[INFO] [stdout] test providers::models_file::tests::discover_merges_user_and_project_providers ... ok
[INFO] [stdout] test prompt_cache::tests::expired_completion_entries_are_not_reused ... ok
[INFO] [stdout] test providers::anthropic::tests::tool_delta_variant_round_trips ... ok
[INFO] [stdout] test providers::models_file::tests::custom_metadata_maps_new_api_values_to_correct_provider_kind ... ok
[INFO] [stdout] test providers::models_file::tests::parses_basic_models_file ... ok
[INFO] [stdout] test providers::openai_compat::tests::assistant_message_without_tool_calls_omits_tool_calls_field ... ok
[INFO] [stdout] test providers::models_file::tests::project_provider_overrides_same_key_user_provider ... ok
[INFO] [stdout] test providers::openai_compat::tests::build_chat_completion_request_kimi_vs_non_kimi_tool_results ... ok
[INFO] [stdout] test providers::openai_compat::tests::chunk_delta_parses_reasoning_content ... ok
[INFO] [stdout] test providers::openai_compat::tests::credential_env_vars_cover_new_providers ... ok
[INFO] [stdout] test providers::openai_compat::tests::delta_with_null_tool_calls_deserializes_as_empty_vec ... ok
[INFO] [stdout] test providers::models_file::tests::validates_api_field_accepts_all_valid_values ... ok
[INFO] [stdout] test providers::openai_compat::tests::chunk_delta_defaults_reasoning_content_to_none ... ok
[INFO] [stdout] test providers::openai_compat::tests::endpoint_builder_accepts_base_urls_and_full_endpoints ... ok
[INFO] [stdout] test providers::openai_compat::tests::gemini_models_are_not_reasoning_models ... ok
[INFO] [stdout] test providers::openai_compat::tests::check_request_body_size_passes_for_small_requests ... ok
[INFO] [stdout] test providers::models_file::tests::validates_api_field_rejects_unknown_value ... ok
[INFO] [stdout] test providers::openai_compat::tests::gpt5_uses_max_completion_tokens_not_max_tokens ... ok
[INFO] [stdout] test providers::openai_compat::tests::grok_3_mini_is_reasoning_model ... ok
[INFO] [stdout] test providers::openai_compat::tests::model_rejects_is_error_field_detects_kimi_models ... ok
[INFO] [stdout] test providers::openai_compat::tests::missing_xai_api_key_is_provider_specific ... ok
[INFO] [stdout] test providers::openai_compat::tests::new_config_constructors_have_correct_defaults ... ok
[INFO] [stdout] test providers::openai_compat::tests::non_gpt5_uses_max_tokens ... ok
[INFO] [stdout] test providers::openai_compat::tests::normalizes_stop_reasons ... ok
[INFO] [stdout] test providers::openai_compat::tests::ollama_uses_api_key_when_set_cloud_mode ... ok
[INFO] [stdout] test providers::openai_compat::tests::deepseek_reasoner_is_reasoning_model ... ok
[INFO] [stdout] test providers::openai_compat::tests::estimate_request_body_size_returns_reasonable_estimate ... ok
[INFO] [stdout] test providers::openai_compat::tests::ollama_works_without_key_local_mode ... ok
[INFO] [stdout] test providers::openai_compat::tests::provider_specific_size_limits_are_correct ... ok
[INFO] [stdout] test providers::openai_compat::tests::openai_streaming_requests_include_usage_opt_in ... ok
[INFO] [stdout] test providers::openai_compat::tests::qwen_api_key_falls_back_to_openai_api_key ... ok
[INFO] [stdout] test providers::openai_compat::tests::parses_tool_arguments_fallback ... ok
[INFO] [stdout] test providers::openai_compat::tests::qwen_reasoning_variants_are_detected ... ok
[INFO] [stdout] test providers::openai_compat::tests::qwen_api_key_prefers_qwen_over_openai_fallback ... ok
[INFO] [stdout] test providers::openai_compat::tests::read_base_url_returns_default_when_all_absent ... ok
[INFO] [stdout] test providers::openai_compat::tests::qwen_base_url_falls_back_to_openai_base_url ... ok
[INFO] [stdout] test providers::openai_compat::tests::qwen_base_url_prefers_qwen_over_openai_fallback ... ok
[INFO] [stdout] test providers::openai_compat::tests::qwen_missing_both_keys_reports_error ... ok
[INFO] [stdout] test providers::openai_compat::tests::reasoning_model_strips_tuning_params ... ok
[INFO] [stdout] test providers::openai_compat::tests::reasoning_effort_omitted_when_not_set ... ok
[INFO] [stdout] test providers::openai_compat::tests::request_translation_uses_openai_compatible_shape ... ok
[INFO] [stdout] test providers::openai_compat::tests::reasoning_effort_is_included_when_set ... ok
[INFO] [stdout] test providers::openai_compat::tests::strip_routing_prefix_handles_new_providers ... ok
[INFO] [stdout] test providers::openai_compat::tests::tool_schema_object_gets_strict_fields_for_responses_endpoint ... ok
[INFO] [stdout] test providers::openai_compat::tests::read_base_url_uses_fallback_env_var ... ok
[INFO] [stdout] test providers::openai_compat::tests::tool_choice_translation_supports_required_function ... ok
[INFO] [stdout] test providers::openai_compat::tests::translate_message_includes_is_error_for_non_kimi_models ... ok
[INFO] [stdout] test providers::openai_compat::tests::tuning_params_included_in_payload_when_set ... ok
[INFO] [stdout] test providers::openai_compat::tests::xai_streaming_requests_skip_openai_specific_usage_opt_in ... ok
[INFO] [stdout] test providers::openai_compat::tests::tuning_params_omitted_from_payload_when_none ... ok
[INFO] [stdout] test providers::tests::anthropic_auth_takes_priority_over_deepseek ... ok
[INFO] [stdout] test providers::tests::anthropic_missing_credentials_builds_error_with_canonical_env_vars_and_no_hint_when_clean ... ok
[INFO] [stdout] test providers::tests::anthropic_missing_credentials_builds_error_with_hint_when_openai_key_is_set ... ok
[INFO] [stdout] test providers::tests::anthropic_missing_credentials_hint_ignores_empty_string_values ... ok
[INFO] [stdout] test providers::tests::anthropic_missing_credentials_hint_detects_dashscope_api_key ... ok
[INFO] [stdout] test providers::tests::anthropic_missing_credentials_hint_detects_xai_api_key ... ok
[INFO] [stdout] test providers::tests::anthropic_missing_credentials_hint_detects_openai_api_key_and_recommends_openai_prefix ... ok
[INFO] [stdout] test providers::tests::anthropic_missing_credentials_hint_is_none_when_no_foreign_creds_present ... ok
[INFO] [stdout] test providers::tests::anthropic_missing_credentials_hint_prefers_openai_when_multiple_foreign_creds_set ... ok
[INFO] [stdout] test providers::openai_compat::tests::sanitize_drops_orphaned_tool_messages ... ok
[INFO] [stdout] test providers::openai_compat::tests::translate_message_excludes_is_error_for_kimi_models ... ok
[INFO] [stdout] test providers::tests::bare_qwen_dash_model_routes_to_dashscope ... ok
[INFO] [stdout] test providers::tests::detect_provider_from_deepseek_api_key ... ok
[INFO] [stdout] test providers::tests::deepseek_models_have_hardcoded_limits ... ok
[INFO] [stdout] test providers::tests::detect_provider_from_ollama_base_url ... ok
[INFO] [stdout] test providers::tests::cohere_alias_resolves_to_command_r_plus ... ok
[INFO] [stdout] test providers::tests::deepseek_model_prefix_routes_to_deepseek_provider ... ok
[INFO] [stdout] test providers::tests::detect_provider_from_qwen_api_key ... ok
[INFO] [stdout] test providers::tests::detect_provider_from_vllm_base_url ... ok
[INFO] [stdout] test providers::tests::detects_provider_from_model_name_first ... ok
[INFO] [stdout] test providers::tests::gemini_alias_resolves_to_gemini_2_5_pro ... ok
[INFO] [stdout] test providers::tests::keeps_existing_max_token_heuristic ... ok
[INFO] [stdout] test providers::tests::kimi_alias_resolves_to_kimi_k25_token_limits ... ok
[INFO] [stdout] test providers::tests::openai_namespaced_model_routes_to_openai_not_anthropic ... ok
[INFO] [stdout] test providers::tests::parse_dotenv_extracts_keys_handles_comments_quotes_and_export_prefix ... ok
[INFO] [stdout] test providers::tests::kimi_alias_resolves_to_kimi_k2_5 ... ok
[INFO] [stdout] test providers::tests::kimi_prefix_routes_to_dashscope ... ok
[INFO] [stdout] test providers::tests::max_tokens_for_model_with_override_falls_back_when_plugin_unset ... ok
[INFO] [stdout] test providers::tests::mistral_alias_resolves_to_mistral_large_latest ... ok
[INFO] [stdout] test providers::tests::prefix_model_does_not_double_prefix ... ok
[INFO] [stdout] test providers::tests::ollama_provider_prefix_routes_to_ollama ... ok
[INFO] [stdout] test providers::tests::prefix_model_for_provider_adds_prefix ... ok
[INFO] [stdout] test providers::anthropic::tests::resolve_saved_oauth_token_preserves_refresh_token_when_refresh_response_omits_it ... ok
[INFO] [stdout] test providers::tests::load_dotenv_file_reads_keys_from_disk_and_returns_none_when_missing ... ok
[INFO] [stdout] test providers::tests::openai_base_url_overrides_anthropic_fallback_for_unknown_model ... ok
[INFO] [stdout] test providers::tests::plugin_config_max_output_tokens_overrides_model_default ... ok
[INFO] [stdout] test providers::tests::qwen_prefix_routes_to_dashscope_not_anthropic ... ok
[INFO] [stdout] test providers::tests::qwen_provider_prefix_routes_to_external_qwen ... ok
[INFO] [stdout] test providers::tests::resolves_deepseek_aliases ... ok
[INFO] [stdout] test providers::tests::resolves_grok_aliases ... ok
[INFO] [stdout] test providers::tests::provider_kind_from_str_parses_all_variants ... ok
[INFO] [stdout] test providers::tests::preflight_skips_unknown_models ... ok
[INFO] [stdout] test providers::tests::returns_context_window_metadata_for_cohere_models ... ok
[INFO] [stdout] test providers::tests::returns_context_window_metadata_for_supported_models ... ok
[INFO] [stdout] test providers::tests::vllm_provider_prefix_routes_to_vllm ... ok
[INFO] [stdout] test providers::tests::returns_context_window_metadata_for_gemini_models ... ok
[INFO] [stdout] test providers::tests::returns_context_window_metadata_for_grok2 ... ok
[INFO] [stdout] test providers::tests::returns_context_window_metadata_for_kimi_models ... ok
[INFO] [stdout] test providers::tests::returns_context_window_metadata_for_mistral_models ... ok
[INFO] [stdout] test providers::anthropic::tests::resolve_saved_oauth_token_refreshes_expired_credentials ... ok
[INFO] [stdout] test providers::anthropic::tests::resolve_startup_auth_source_ignores_saved_oauth_without_loading_config ... ok
[INFO] [stdout] test sse::tests::given_message_delta_frame_with_empty_usage_when_parsed_then_usage_defaults_to_zero ... ok
[INFO] [stdout] test sse::tests::ignores_data_less_event_frames ... ok
[INFO] [stdout] test sse::tests::ignores_ping_and_done ... ok
[INFO] [stdout] test sse::tests::parses_chunked_stream ... ok
[INFO] [stdout] test sse::tests::parses_single_frame ... ok
[INFO] [stdout] test sse::tests::parses_thinking_content_block_start ... ok
[INFO] [stdout] test sse::tests::parses_split_json_across_data_lines ... ok
[INFO] [stdout] test sse::tests::parses_thinking_related_deltas ... ok
[INFO] [stdout] test types::tests::message_response_estimates_cost_from_model_usage ... ok
[INFO] [stdout] test types::tests::usage_total_tokens_includes_cache_tokens ... ok
[INFO] [stdout] test prompt_cache::tests::request_fingerprint_drives_unexpected_break_detection ... ok
[INFO] [stdout] test providers::openai_compat::tests::assistant_message_with_tool_calls_includes_tool_calls_field ... ok
[INFO] [stdout] test providers::openai_compat::tests::strip_routing_prefix_strips_kimi_provider_prefix ... ok
[INFO] [stdout] test providers::tests::preflight_blocks_requests_that_exceed_the_model_context_window ... ok
[INFO] [stdout] test providers::tests::preflight_blocks_oversized_requests_for_kimi_models ... ok
[INFO] [stdout] test providers::openai_compat::tests::check_request_body_size_fails_for_dashscope_when_exceeds_6mb ... ok
[INFO] [stdout] test providers::openai_compat::tests::check_request_body_size_allows_large_requests_for_openai ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 179 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.39s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/client_integration.rs (/opt/rustwide/target/debug/deps/client_integration-8f5dbca335cf42ea)
[INFO] [stdout] 
[INFO] [stdout] running 13 tests
[INFO] [stdout] test live_stream_smoke_test ... ignored, requires ANTHROPIC_API_KEY and network access
[INFO] [stdout] test send_message_parses_prompt_cache_token_usage_from_response ... ok
[INFO] [stdout] test send_message_posts_json_and_parses_response ... ok
[INFO] [stdout] test send_message_blocks_oversized_requests_before_the_http_call ... ok
[INFO] [stdout] test send_message_tracks_unexpected_prompt_cache_breaks ... ok
[INFO] [stdout] test given_empty_usage_object_when_send_message_parses_response_then_usage_defaults_to_zero ... ok
[INFO] [stdout] test send_message_applies_request_profile_and_records_telemetry ... ok
[INFO] [stdout] test provider_client_dispatches_anthropic_requests ... ok
[INFO] [stdout] test retries_retryable_failures_before_succeeding ... ok
[INFO] [stdout] test send_message_reuses_recent_completion_cache_entries ... ok
[INFO] [stdout] test stream_message_parses_sse_events_with_tool_use ... ok
[INFO] [stdout] test surfaces_retry_exhaustion_for_persistent_retryable_errors ... ok
[INFO] [stderr]      Running tests/models_file_e2e.rs (/opt/rustwide/target/debug/deps/models_file_e2e-0c01461cfc0f05ce)
[INFO] [stdout] test retries_multiple_retryable_failures_with_exponential_backoff_and_jitter ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 12 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.16s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 7 tests
[INFO] [stdout] test e2e_load_models_json_and_find_custom_model ... ok
[INFO] [stdout] test e2e_empty_models_file_returns_none ... ok
[INFO] [stdout] test e2e_missing_models_file_returns_none ... ok
[INFO] [stdout] test e2e_custom_model_with_env_var_api_key ... ok
[INFO] [stdout] test e2e_invalid_models_file_returns_error ... ok
[INFO] [stdout] test e2e_discover_and_load_from_standard_paths ... ok
[INFO] [stderr]      Running tests/openai_compat_integration.rs (/opt/rustwide/target/debug/deps/openai_compat_integration-715db048c93c11ee)
[INFO] [stdout] test e2e_discover_without_models_file_does_not_error ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 8 tests
[INFO] [stdout] test send_message_accepts_full_chat_completions_endpoint_override ... ok
[INFO] [stdout] test provider_client_dispatches_xai_requests_from_env ... ok
[INFO] [stdout] test stream_message_emits_thinking_blocks_for_reasoning_content ... ok
[INFO] [stdout] test stream_message_normalizes_text_and_multiple_tool_calls ... ok
[INFO] [stdout] test send_message_uses_openai_compatible_endpoint_and_auth ... ok
[INFO] [stdout] test stream_message_emits_thinking_then_tools_without_text ... ok
[INFO] [stdout] test openai_streaming_requests_opt_into_usage_chunks ... ok
[INFO] [stdout] test send_message_blocks_oversized_xai_requests_before_the_http_call ... ok
[INFO] [stderr]      Running tests/provider_client_integration.rs (/opt/rustwide/target/debug/deps/provider_client_integration-5405458181536b3e)
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 17 tests
[INFO] [stdout] test provider_client_reports_missing_deepseek_credentials ... ok
[INFO] [stdout] test provider_client_routes_cohere_via_api_key ... ok
[INFO] [stdout] test provider_client_reports_missing_xai_credentials_for_grok_models ... ok
[INFO] [stdout] test provider_client_routes_deepseek_aliases_through_deepseek ... ok
[INFO] [stdout] test provider_client_routes_deepseek_reasoner_alias ... ok
[INFO] [stdout] test provider_client_routes_gemini_via_api_key ... ok
[INFO] [stdout] test provider_client_fallback_chain_errors_when_all_exhausted ... ok
[INFO] [stdout] test provider_client_fallback_uses_primary_when_available ... ok
[INFO] [stdout] test provider_client_routes_grok_aliases_through_xai ... ok
[INFO] [stdout] test provider_client_routes_ollama_prefix_to_ollama ... ok
[INFO] [stdout] test provider_client_routes_qwen_external_with_qwen_prefix ... ok
[INFO] [stdout] test provider_client_routes_vllm_prefix_to_vllm ... ok
[INFO] [stdout] test provider_client_fallback_chain_skips_failed_models ... ok
[INFO] [stdout] test provider_client_routes_mistral_via_api_key ... ok
[INFO] [stdout] test provider_client_detects_ollama_via_base_url_env ... ok
[INFO] [stdout] test provider_client_uses_explicit_anthropic_auth_without_env_lookup ... ok
[INFO] [stdout] test read_xai_base_url_prefers_env_override ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/provider_http_integration.rs (/opt/rustwide/target/debug/deps/provider_http_integration-8ca8ff4e904ca5f6)
[INFO] [stdout] 
[INFO] [stdout] running 12 tests
[INFO] [stdout] test ollama_send_message_works_without_api_key ... ok
[INFO] [stdout] test qwen_send_message_strips_prefix_from_model_name ... ok
[INFO] [stdout] test openai_stream_message_requests_usage_inclusion ... ok
[INFO] [stdout] test ollama_send_message_strips_prefix_from_model_name ... ok
[INFO] [stdout] test qwen_falls_back_to_openai_env_vars ... ok
[INFO] [stdout] test ollama_send_message_uses_api_key_when_provided ... ok
[INFO] [stdout] test qwen_send_message_uses_qwen_credentials ... ok
[INFO] [stdout] test openai_send_message_uses_max_completion_tokens_for_gpt5 ... ok
[INFO] [stdout] test openai_provider_client_dispatches_from_model ... ok
[INFO] [stdout] test openai_send_message_uses_correct_endpoint_and_auth ... ok
[INFO] [stdout] test ollama_provider_client_dispatches_from_prefix ... ok
[INFO] [stdout] test openai_send_message_respects_100mb_size_limit ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.64s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/provider_http_integration_phase2.rs (/opt/rustwide/target/debug/deps/provider_http_integration_phase2-8d2e5b6459c7b1fa)
[INFO] [stdout] 
[INFO] [stdout] running 12 tests
[INFO] [stdout] test dashscope_send_message_excludes_is_error_for_kimi_models ... ok
[INFO] [stdout] test cohere_send_message_uses_correct_endpoint_and_auth ... ok
[INFO] [stdout] test vllm_send_message_strips_prefix_from_model_name ... ok
[INFO] [stdout] test gemini_send_message_uses_correct_endpoint_and_auth ... ok
[INFO] [stdout] test dashscope_provider_client_routes_qwen_models ... ok
[INFO] [stdout] test vllm_provider_client_dispatches_from_prefix ... ok
[INFO] [stdout] test mistral_stream_message_emits_response ... ok
[INFO] [stdout] test dashscope_send_message_uses_correct_endpoint_and_auth ... ok
[INFO] [stdout] test mistral_send_message_uses_correct_endpoint_and_auth ... ok
[INFO] [stdout] test vllm_send_message_works_without_auth ... ok
[INFO] [stdout] test gemini_send_message_respects_context_window_limit ... ok
[INFO] [stdout] test dashscope_send_message_respects_6mb_size_limit ... ok
[INFO] [stderr]      Running tests/proxy_integration.rs (/opt/rustwide/target/debug/deps/proxy_integration-85f339bb105c716e)
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.62s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 7 tests
[INFO] [stdout] test proxy_config_from_env_reads_uppercase_proxy_vars ... ok
[INFO] [stdout] test build_client_with_proxy_url_config_succeeds ... ok
[INFO] [stderr]    Doc-tests ninmu_api
[INFO] [stdout] test proxy_config_from_env_prefers_uppercase_over_lowercase ... ok
[INFO] [stdout] test build_client_with_env_proxy_config_succeeds ... ok
[INFO] [stdout] test proxy_config_from_env_is_empty_when_no_vars_set ... ok
[INFO] [stdout] test proxy_config_from_env_treats_empty_values_as_unset ... ok
[INFO] [stdout] test proxy_config_from_env_reads_lowercase_proxy_vars ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
[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] running `Command { std: "docker" "inspect" "90c7d47779b03f53422c35a4e58918f3972acdd4ff8d4423990b86fc97211641", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "90c7d47779b03f53422c35a4e58918f3972acdd4ff8d4423990b86fc97211641", kill_on_drop: false }`
[INFO] [stdout] 90c7d47779b03f53422c35a4e58918f3972acdd4ff8d4423990b86fc97211641
