[INFO] cloning repository https://github.com/windoze/llm-proxy
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/windoze/llm-proxy" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fwindoze%2Fllm-proxy", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fwindoze%2Fllm-proxy'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 08c327b6c37a8aaec2ecd11698578666d0b7e197
[INFO] testing windoze/llm-proxy against 1.98.0-beta.1 for beta-1.98-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fwindoze%2Fllm-proxy" "/workspace/builds/worker-1-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/windoze/llm-proxy
[INFO] finished tweaking git repo https://github.com/windoze/llm-proxy
[INFO] tweaked toml for git repo https://github.com/windoze/llm-proxy written to /workspace/builds/worker-1-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/windoze/llm-proxy on toolchain 1.98.0-beta.1
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.98.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/windoze/llm-proxy 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.98.0-beta.1" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3d5ced03c013a94a2f102a4510f48a6e9184255caf5fd8244f58017bde7f5210" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 911a6b960cf0a85881ddf6e6d1efbbee178f540a248014cbe6b7bb59773eb87e
[INFO] running `Command { std: "docker" "start" "911a6b960cf0a85881ddf6e6d1efbbee178f540a248014cbe6b7bb59773eb87e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "911a6b960cf0a85881ddf6e6d1efbbee178f540a248014cbe6b7bb59773eb87e", 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" "911a6b960cf0a85881ddf6e6d1efbbee178f540a248014cbe6b7bb59773eb87e" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "911a6b960cf0a85881ddf6e6d1efbbee178f540a248014cbe6b7bb59773eb87e", 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" "911a6b960cf0a85881ddf6e6d1efbbee178f540a248014cbe6b7bb59773eb87e" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling quote v1.0.46
[INFO] [stderr]    Compiling pin-project-lite v0.2.17
[INFO] [stderr]    Compiling smallvec v1.15.2
[INFO] [stderr]    Compiling bytes v1.12.0
[INFO] [stderr]    Compiling jobserver v0.1.34
[INFO] [stderr]    Compiling log v0.4.33
[INFO] [stderr]    Compiling memchr v2.8.2
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling futures-channel v0.3.32
[INFO] [stderr]    Compiling cc v1.2.66
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling syn v2.0.118
[INFO] [stderr]    Compiling mio v1.2.1
[INFO] [stderr]    Compiling socket2 v0.6.4
[INFO] [stderr]    Compiling http v1.4.2
[INFO] [stderr]    Compiling aws-lc-rs v1.17.1
[INFO] [stderr]    Compiling litemap v0.8.2
[INFO] [stderr]    Compiling writeable v0.6.3
[INFO] [stderr]    Compiling futures-io v0.3.32
[INFO] [stderr]    Compiling zeroize v1.9.0
[INFO] [stderr]    Compiling icu_normalizer_data v2.2.0
[INFO] [stderr]    Compiling icu_properties_data v2.2.0
[INFO] [stderr]    Compiling rustls-pki-types v1.15.0
[INFO] [stderr]    Compiling rustls v0.23.41
[INFO] [stderr]    Compiling serde_json v1.0.150
[INFO] [stderr]    Compiling ipnet v2.12.0
[INFO] [stderr]    Compiling regex-syntax v0.8.11
[INFO] [stderr]    Compiling hashbrown v0.17.1
[INFO] [stderr]    Compiling cmake v0.1.58
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling rustls-native-certs v0.8.4
[INFO] [stderr]    Compiling anyhow v1.0.103
[INFO] [stderr]    Compiling winnow v1.0.3
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]    Compiling crc32fast v1.5.0
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling aws-lc-sys v0.42.0
[INFO] [stderr]    Compiling toml_parser v1.1.2+spec-1.1.0
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling serde_path_to_error v0.1.20
[INFO] [stderr]    Compiling toml_datetime v0.7.5+spec-1.1.0
[INFO] [stderr]    Compiling serde_spanned v1.1.1
[INFO] [stderr]    Compiling unsafe-libyaml v0.2.11
[INFO] [stderr]    Compiling winnow v0.7.15
[INFO] [stderr]    Compiling toml_writer v1.1.1+spec-1.1.0
[INFO] [stderr]    Compiling eventsource-stream v0.2.3
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling toml v0.9.12+spec-1.1.0
[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.6
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling tokio-macros v2.7.0
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling async-stream-impl v0.3.6
[INFO] [stderr]    Compiling zerofrom v0.1.8
[INFO] [stderr]    Compiling tokio v1.52.3
[INFO] [stderr]    Compiling yoke v0.8.3
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling zerovec v0.11.6
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling zerotrie v0.2.4
[INFO] [stderr]    Compiling axum-core v0.5.6
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling tinystr v0.8.3
[INFO] [stderr]    Compiling icu_locale_core v2.2.0
[INFO] [stderr]    Compiling potential_utf v0.1.5
[INFO] [stderr]    Compiling icu_collections v2.2.0
[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 thiserror v2.0.18
[INFO] [stderr]    Compiling tower-http v0.7.0
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling async-stream v0.3.6
[INFO] [stderr]    Compiling idna_adapter v1.2.2
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling serde_yaml v0.9.34+deprecated
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling hyper v1.10.1
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling axum v0.8.9
[INFO] [stderr]    Compiling rustls-webpki v0.103.13
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling rustls-platform-verifier v0.7.0
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling reqwest v0.13.4
[INFO] [stderr]    Compiling llm-proxy v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 44s
[INFO] running `Command { std: "docker" "inspect" "911a6b960cf0a85881ddf6e6d1efbbee178f540a248014cbe6b7bb59773eb87e", 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" "911a6b960cf0a85881ddf6e6d1efbbee178f540a248014cbe6b7bb59773eb87e" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling tokio v1.52.3
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling bitflags v2.13.0
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling deadpool-runtime v0.1.4
[INFO] [stderr]    Compiling fastrand v2.4.1
[INFO] [stderr]    Compiling assert-json-diff v2.0.2
[INFO] [stderr]    Compiling console v0.16.4
[INFO] [stderr]    Compiling similar v2.7.0
[INFO] [stderr]    Compiling tower-http v0.7.0
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling insta v1.48.0
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling regex v1.12.4
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling deadpool v0.12.3
[INFO] [stderr]    Compiling tokio-stream v0.1.18
[INFO] [stderr]    Compiling h2 v0.4.15
[INFO] [stderr]    Compiling tokio-test v0.4.5
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling hyper v1.10.1
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling wiremock v0.6.5
[INFO] [stderr]    Compiling axum v0.8.9
[INFO] [stderr]    Compiling reqwest v0.13.4
[INFO] [stderr]    Compiling llm-proxy v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 24s
[INFO] running `Command { std: "docker" "inspect" "911a6b960cf0a85881ddf6e6d1efbbee178f540a248014cbe6b7bb59773eb87e", 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" "911a6b960cf0a85881ddf6e6d1efbbee178f540a248014cbe6b7bb59773eb87e" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.37s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/llm_proxy-870834d7fe894131)
[INFO] [stdout] 
[INFO] [stdout] running 235 tests
[INFO] [stdout] test config::tests::alias_targets_default_failover_policy_when_omitted ... ok
[INFO] [stdout] test config::tests::env_backend_json_replaces_file_backend_list ... ok
[INFO] [stdout] test config::tests::alias_with_targets_list_parses_failover_policy ... ok
[INFO] [stdout] test config::tests::alias_rejects_both_legacy_and_targets ... ok
[INFO] [stdout] test config::tests::env_overrides_proxy_api_key ... ok
[INFO] [stdout] test config::tests::from_path_detects_toml_extension ... ok
[INFO] [stdout] test config::tests::env_overrides_file_values_and_creates_legacy_backends ... ok
[INFO] [stdout] test config::tests::alias_rejects_target_to_unknown_backend ... ok
[INFO] [stdout] test config::tests::env_model_aliases_still_accept_legacy_json ... ok
[INFO] [stdout] test config::tests::alias_rejects_invalid_failover_policy ... ok
[INFO] [stdout] test config::tests::legacy_alias_backend_model_folds_into_single_target ... ok
[INFO] [stdout] test config::tests::validation_rejects_alias_to_unknown_backend ... ok
[INFO] [stdout] test config::tests::validation_rejects_invalid_additional_header_name ... ok
[INFO] [stdout] test config::tests::toml_config_loads_proxy_api_key_and_backend_extras ... ok
[INFO] [stdout] test config::tests::validation_rejects_missing_backend_profile ... ok
[INFO] [stdout] test error::tests::formats_anthropic_error_body ... ok
[INFO] [stdout] test config::tests::toml_config_loads_backends_aliases_and_switches ... ok
[INFO] [stdout] test config::tests::validation_rejects_invalid_backend_request_limits ... ok
[INFO] [stdout] test config::tests::yaml_config_loads_anthropic_backend_defaults ... ok
[INFO] [stdout] test config::tests::validation_rejects_duplicate_backend_names ... ok
[INFO] [stdout] test error::tests::preserves_upstream_client_error_status ... ok
[INFO] [stdout] test error::tests::maps_config_errors_to_json_response ... ok
[INFO] [stdout] test error::tests::translates_openai_rate_limit_headers_for_anthropic_errors ... ok
[INFO] [stdout] test error::tests::formats_responses_error_body ... ok
[INFO] [stdout] test ir::event::tests::block_start_serializes_expected_shape ... ok
[INFO] [stdout] test ir::event::tests::message_delta_preserves_stop_reason_and_usage ... ok
[INFO] [stdout] test ir::event::tests::thinking_metadata_preserves_source_and_opaque_bytes ... ok
[INFO] [stdout] test error::tests::translates_anthropic_rate_limit_headers_for_responses_errors ... ok
[INFO] [stdout] test ir::request::tests::ir_request_serializes_expected_fields ... ok
[INFO] [stdout] test ir::request::tests::ir_response_preserves_stop_reason_and_usage ... ok
[INFO] [stdout] test metrics::tests::ignores_unknown_backend_names ... ok
[INFO] [stdout] test metrics::tests::records_success_and_failure_counts_and_tokens ... ok
[INFO] [stdout] test observability::tests::redacts_sensitive_json_fields_recursively ... ok
[INFO] [stdout] test protocol::anthropic::decode::tests::decodes_anthropic_response_thinking_signature_to_ir ... ok
[INFO] [stdout] test observability::tests::redacts_sensitive_headers_only ... ok
[INFO] [stdout] test metrics::tests::snapshot_is_sorted_by_backend_name ... ok
[INFO] [stdout] test protocol::anthropic::decode::tests::decodes_string_system_string_content_and_tool_choice_modes ... ok
[INFO] [stdout] test protocol::anthropic::decode::tests::decodes_anthropic_request_with_blocks_tools_and_thinking ... ok
[INFO] [stdout] test protocol::anthropic::decode::tests::rejects_anthropic_response_thinking_without_signature ... ok
[INFO] [stdout] test protocol::anthropic::decode::tests::rejects_unknown_content_block_type ... ok
[INFO] [stdout] test protocol::anthropic::decode::tests::rejects_gateway_signature_with_non_responses_source ... ok
[INFO] [stdout] test protocol::anthropic::decode::tests::unwraps_gateway_responses_signature_into_responses_thinking ... ok
[INFO] [stdout] test protocol::anthropic::encode::tests::encodes_image_and_tool_result_blocks_recursively ... ok
[INFO] [stdout] test protocol::anthropic::encode::tests::encodes_all_stop_reason_variants ... ok
[INFO] [stdout] test protocol::anthropic::encode::tests::encodes_response_with_thinking_text_tool_use_and_usage ... ok
[INFO] [stdout] test protocol::anthropic::encode::tests::rejects_responses_origin_thinking_for_anthropic_backend_request ... ok
[INFO] [stdout] test protocol::anthropic::encode::tests::coalesces_adjacent_messages_by_anthropic_role ... ok
[INFO] [stdout] test protocol::anthropic::encode::tests::rejects_structured_output_emulation_when_user_tools_are_present ... ok
[INFO] [stdout] test protocol::anthropic::encode::tests::emulates_responses_json_schema_with_forced_anthropic_tool ... ok
[INFO] [stdout] test protocol::anthropic::encode::tests::wraps_responses_thinking_opaque_as_anthropic_signature ... ok
[INFO] [stdout] test protocol::capability::tests::classifies_extra_fields_for_each_ir_target_protocol ... ok
[INFO] [stdout] test protocol::anthropic::encode::tests::encodes_request_with_restored_anthropic_thinking_signature ... ok
[INFO] [stdout] test protocol::anthropic::stream::tests::encodes_message_and_content_block_lifecycle ... ok
[INFO] [stdout] test protocol::anthropic::encode::tests::rejects_responses_thinking_without_opaque_payload ... ok
[INFO] [stdout] test protocol::anthropic::stream::tests::rejects_non_sequential_block_indexes ... ok
[INFO] [stdout] test protocol::capability::tests::converts_responses_json_schema_to_chat_response_format ... ok
[INFO] [stdout] test protocol::anthropic::stream::tests::stream_wrapper_formats_sse_frames ... ok
[INFO] [stdout] test protocol::capability::tests::creates_anthropic_structured_output_tool_from_json_schema ... ok
[INFO] [stdout] test protocol::openai_chat::decode::tests::decodes_text_response_finish_reasons_and_usage_without_cache ... ok
[INFO] [stdout] test protocol::capability::tests::filters_extra_fields_with_explicit_drop_emulate_and_reject_actions ... ok
[INFO] [stdout] test protocol::openai_chat::decode::tests::decodes_deepseek_request_with_reasoning_and_tools ... ok
[INFO] [stdout] test protocol::openai_chat::decode::tests::keeps_standard_openai_sampling_params ... ok
[INFO] [stdout] test protocol::openai_chat::decode::tests::rejects_invalid_tool_call_arguments ... ok
[INFO] [stdout] test protocol::openai_chat::decode::tests::rejects_multiple_choices_for_deepseek ... ok
[INFO] [stdout] test protocol::openai_chat::encode::tests::applies_profile_blocklist_and_normalizes_extra_parameters ... ok
[INFO] [stdout] test protocol::openai_chat::encode::tests::drops_reasoning_without_tool_calls_when_policy_allows ... ok
[INFO] [stdout] test protocol::openai_chat::encode::tests::emulates_responses_structured_output_and_reasoning_controls ... ok
[INFO] [stdout] test protocol::openai_chat::encode::tests::rejects_multiple_choices_for_deepseek_but_preserves_them_for_generic_openai ... ok
[INFO] [stdout] test protocol::responses::decode::tests::decodes_codex_custom_tools_as_string_input_tools ... ok
[INFO] [stdout] test protocol::openai_chat::encode::tests::encodes_deepseek_request_with_strict_ordering_and_tool_results ... ok
[INFO] [stdout] test protocol::responses::decode::tests::decodes_codex_namespace_tools_and_ignores_disabled_web_search ... ok
[INFO] [stdout] test protocol::responses::decode::tests::decodes_string_input_message_and_tool_choice_modes ... ok
[INFO] [stdout] test protocol::responses::decode::tests::decodes_response_reasoning_item_to_ir_thinking ... ok
[INFO] [stdout] test protocol::responses::decode::tests::hoists_system_and_developer_input_messages ... ok
[INFO] [stdout] test protocol::responses::decode::tests::decodes_codex_request_with_reasoning_and_function_calls ... ok
[INFO] [stdout] test protocol::responses::decode::tests::rejects_duplicate_function_call_outputs ... ok
[INFO] [stdout] test protocol::responses::decode::tests::preserves_reasoning_item_fields_and_omits_null_status_on_round_trip ... ok
[INFO] [stdout] test protocol::responses::decode::tests::rejects_enabled_web_search_tool_for_chat_backend ... ok
[INFO] [stdout] test protocol::responses::decode::tests::rejects_function_call_output_without_prior_function_call ... ok
[INFO] [stdout] test protocol::responses::decode::tests::rejects_invalid_function_arguments_json ... ok
[INFO] [stdout] test protocol::responses::decode::tests::rejects_reasoning_without_encrypted_content ... ok
[INFO] [stdout] test protocol::responses::decode::tests::rejects_response_reasoning_without_encrypted_content ... ok
[INFO] [stdout] test protocol::responses::decode::tests::rejects_unanswered_function_call_items ... ok
[INFO] [stdout] test protocol::responses::decode::tests::unwraps_gateway_anthropic_reasoning_input_to_anthropic_thinking ... ok
[INFO] [stdout] test protocol::anthropic::stream::tests::encodes_responses_thinking_metadata_as_signature_delta ... ok
[INFO] [stdout] test protocol::responses::decode::tests::rejects_tampered_gateway_anthropic_reasoning_input ... ok
[INFO] [stdout] test protocol::responses::encode::tests::encodes_request_reasoning_from_preserved_item_without_null_status ... ok
[INFO] [stdout] test protocol::anthropic::stream::tests::rejects_deltas_for_unopened_blocks ... ok
[INFO] [stdout] test protocol::capability::tests::converts_chat_response_format_to_responses_text_format ... ok
[INFO] [stdout] test protocol::responses::encode::tests::encodes_tool_result_for_complete_ir_coverage ... ok
[INFO] [stdout] test protocol::responses::encode::tests::groups_contiguous_text_and_omits_absent_encrypted_content ... ok
[INFO] [stdout] test protocol::responses::encode::tests::encodes_response_with_reasoning_text_function_call_and_usage ... ok
[INFO] [stdout] test protocol::responses::encode::tests::preserves_responses_reasoning_status_when_raw_item_is_available ... ok
[INFO] [stdout] test protocol::responses::encode::tests::rejects_anthropic_thinking_without_signature_for_responses_envelope ... ok
[INFO] [stdout] test protocol::responses::decode::tests::validates_responses_call_ids_across_multi_turn_agent_loop ... ok
[INFO] [stdout] test protocol::responses::encode::tests::maps_stop_reasons_to_responses_status ... ok
[INFO] [stdout] test protocol::responses::encode::tests::request_extra_forwards_only_responses_native_fields ... ok
[INFO] [stdout] test protocol::responses::encode::tests::rejects_non_responses_thinking_in_request_input ... ok
[INFO] [stdout] test protocol::responses::encode::tests::wraps_anthropic_thinking_as_responses_reasoning_envelope ... ok
[INFO] [stdout] test protocol::responses::stream::tests::encodes_thinking_metadata_as_reasoning_encrypted_content ... ok
[INFO] [stdout] test protocol::responses::stream::tests::rejects_non_sequential_block_indexes ... ok
[INFO] [stdout] test protocol::responses::encode::tests::encodes_request_with_restored_responses_reasoning_and_tool_results ... ok
[INFO] [stdout] test protocol::responses::stream::tests::stream_wrapper_formats_multiple_sse_frames_per_message_start ... ok
[INFO] [stdout] test protocol::responses::stream::tests::encodes_anthropic_thinking_metadata_as_full_reasoning_envelope ... ok
[INFO] [stdout] test protocol::responses::stream::tests::rejects_message_stop_without_terminal_delta ... ok
[INFO] [stdout] test protocol::responses::stream::tests::rejects_delta_for_wrong_block_type ... ok
[INFO] [stdout] test protocol::tool_ids::tests::builds_identity_map_for_multi_turn_tool_pairs ... ok
[INFO] [stdout] test protocol::tool_ids::tests::maps_explicit_pairs_in_both_directions ... ok
[INFO] [stdout] test protocol::tool_ids::tests::maps_responses_call_ids_in_both_directions ... ok
[INFO] [stdout] test protocol::tool_ids::tests::rejects_conflicting_pairs ... ok
[INFO] [stdout] test protocol::tool_ids::tests::rejects_duplicate_tool_results_for_one_call ... ok
[INFO] [stdout] test protocol::tool_ids::tests::rejects_duplicate_tool_use_ids ... ok
[INFO] [stdout] test protocol::tool_ids::tests::rejects_tool_blocks_on_wrong_roles ... ok
[INFO] [stdout] test protocol::tool_ids::tests::rejects_tool_result_without_prior_call ... ok
[INFO] [stdout] test protocol::tool_ids::tests::rejects_unanswered_tool_uses ... ok
[INFO] [stdout] test protocol::responses::stream::tests::encodes_response_stream_lifecycle_with_reasoning_text_tool_call_and_usage ... ok
[INFO] [stdout] test protocol::openai_chat::decode::tests::decodes_deepseek_response_without_tool_calls_as_droppable_reasoning ... ok
[INFO] [stdout] test protocol::openai_chat::decode::tests::decodes_deepseek_response_with_reasoning_tools_and_usage ... ok
[INFO] [stdout] test provider::anthropic_backend::tests::client_can_enable_cache_control_injection ... ok
[INFO] [stdout] test provider::anthropic_backend::tests::rejects_empty_api_key ... ok
[INFO] [stdout] test provider::anthropic_cache::tests::converts_string_content_when_selected_for_cache_control ... ok
[INFO] [stdout] test provider::anthropic_cache::tests::injects_ephemeral_breakpoints_on_latest_cacheable_blocks ... ok
[INFO] [stdout] test provider::anthropic_cache::tests::preserves_existing_cache_control_and_is_idempotent ... ok
[INFO] [stdout] test provider::anthropic_cache::tests::preserves_json_object_request_body ... ok
[INFO] [stdout] test provider::anthropic_cache::tests::rejects_more_than_four_existing_cache_control_markers ... ok
[INFO] [stdout] test provider::anthropic_cache::tests::rejects_non_object_request_body ... ok
[INFO] [stdout] test provider::anthropic_backend::tests::attaches_additional_headers_and_query_params ... ok
[INFO] [stdout] test provider::anthropic_backend::tests::posts_bearer_auth_for_token_credentials ... ok
[INFO] [stdout] test provider::anthropic_backend::tests::rejects_empty_anthropic_version ... ok
[INFO] [stdout] test provider::anthropic_backend::tests::posts_anthropic_headers_json_and_keeps_response_streaming ... ok
[INFO] [stdout] test provider::backend_request::tests::retry_after_parses_seconds_and_http_dates ... ok
[INFO] [stdout] test provider::deepseek::tests::disables_multiple_choices_and_detects_thinking_model ... ok
[INFO] [stdout] test provider::deepseek::tests::drops_unsupported_deepseek_parameters ... ok
[INFO] [stdout] test provider::deepseek::tests::normalizes_reasoning_effort_to_deepseek_levels ... ok
[INFO] [stdout] test provider::deepseek::tests::uses_conditional_reasoning_echo_policy ... ok
[INFO] [stdout] test provider::deepseek::tests::uses_deepseek_api_base_url_and_identity_model_mapping ... ok
[INFO] [stdout] test provider::failover::tests::does_not_advance_past_last_target ... ok
[INFO] [stdout] test provider::failover::tests::does_not_switch_before_min_interval_even_when_threshold_met ... ok
[INFO] [stdout] test provider::failover::tests::expired_failures_do_not_count_toward_threshold ... ok
[INFO] [stdout] test provider::failover::tests::registry_returns_zero_for_unknown_alias ... ok
[INFO] [stdout] test provider::failover::tests::switches_after_threshold_reached_within_window ... ok
[INFO] [stdout] test provider::anthropic_backend::tests::rejects_invalid_endpoint_url ... ok
[INFO] [stdout] test provider::responses_backend::tests::does_not_duplicate_existing_reasoning_include ... ok
[INFO] [stdout] test provider::responses_backend::tests::forces_store_false_and_reasoning_include ... ok
[INFO] [stdout] test provider::anthropic_backend::tests::surfaces_upstream_error_body ... ok
[INFO] [stdout] test provider::backend_request::tests::retries_retryable_status_then_returns_success ... ok
[INFO] [stdout] test provider::responses_backend::tests::rejects_invalid_include_shape ... ok
[INFO] [stdout] test provider::backend_request::tests::per_attempt_timeout_aborts_slow_backend_request ... ok
[INFO] [stdout] test provider::router::tests::alias_rejects_backend_that_cannot_serve_endpoint ... ok
[INFO] [stdout] test provider::router::tests::alias_selects_backend_profile_and_rewrites_model ... ok
[INFO] [stdout] test provider::router::tests::default_deepseek_chat_backend_preserves_envless_legacy_routing ... ok
[INFO] [stdout] test provider::router::tests::implicit_anthropic_endpoint_prefers_responses_for_non_deepseek_models ... ok
[INFO] [stdout] test provider::router::tests::implicit_responses_endpoint_uses_anthropic_default_model ... ok
[INFO] [stdout] test provider::router::tests::legacy_override_reports_missing_selected_backend ... ok
[INFO] [stdout] test provider::tests::generic_openai_supports_custom_base_url ... ok
[INFO] [stdout] test provider::tests::generic_openai_uses_neutral_defaults ... ok
[INFO] [stdout] test reasoning::envelope::tests::anthropic_signature_client_echo_round_trips_tool_use_payload_bytes ... ok
[INFO] [stdout] test reasoning::envelope::tests::anthropic_signature_detects_tampered_payload ... ok
[INFO] [stdout] test provider::backend_request::tests::retries_rate_limit_with_retry_after_header ... ok
[INFO] [stdout] test reasoning::envelope::tests::anthropic_signature_preserves_payload_bytes ... ok
[INFO] [stdout] test reasoning::envelope::tests::checksum_detects_payload_tampering ... ok
[INFO] [stdout] test reasoning::envelope::tests::checksum_detects_source_tampering ... ok
[INFO] [stdout] test reasoning::envelope::tests::inline_envelope_does_not_use_store_when_under_limit ... ok
[INFO] [stdout] test reasoning::envelope::tests::anthropic_signature_store_fallback_respects_prefixed_limit ... ok
[INFO] [stdout] test reasoning::envelope::tests::oversized_envelope_round_trips_through_configured_store ... ok
[INFO] [stdout] test provider::responses_backend::tests::attaches_additional_headers_and_query_params ... ok
[INFO] [stdout] test reasoning::envelope::tests::preserves_anthropic_thinking_block_payload_bytes ... ok
[INFO] [stdout] test reasoning::envelope::tests::oversized_envelope_requires_explicit_store ... ok
[INFO] [stdout] test reasoning::envelope::tests::rejects_non_base64_input ... ok
[INFO] [stdout] test reasoning::envelope::tests::rejects_non_proxy_anthropic_signature ... ok
[INFO] [stdout] test reasoning::envelope::tests::rejects_empty_anthropic_signature_payload ... ok
[INFO] [stdout] test reasoning::envelope::tests::rejects_non_reasoning_responses_item ... ok
[INFO] [stdout] test reasoning::envelope::tests::rejects_valid_checksum_with_unsupported_version ... ok
[INFO] [stdout] test reasoning::envelope::tests::responses_encrypted_content_client_echo_round_trips_tool_use_payload_bytes ... ok
[INFO] [stdout] test reasoning::envelope::tests::responses_reasoning_item_detects_tampered_encrypted_content ... ok
[INFO] [stdout] test reasoning::envelope::tests::responses_reasoning_item_store_fallback_respects_limit ... ok
[INFO] [stdout] test reasoning::envelope::tests::unwraps_codex_echoed_reasoning_item_without_id_or_status ... ok
[INFO] [stdout] test reasoning::envelope::tests::wraps_and_unwraps_responses_reasoning_item_json ... ok
[INFO] [stdout] test reasoning::envelope::tests::wraps_envelope_as_anthropic_signature ... ok
[INFO] [stdout] test reasoning::envelope::tests::wraps_envelope_as_responses_reasoning_item ... ok
[INFO] [stdout] test reasoning::envelope::tests::rejects_non_rs_reasoning_id_when_present ... ok
[INFO] [stdout] test stream::anthropic_decoder::tests::decodes_terminal_delta_with_null_usage ... ok
[INFO] [stdout] test stream::anthropic_decoder::tests::decodes_thinking_signature_stream_to_ir_events ... ok
[INFO] [stdout] test provider::backend_request::tests::does_not_retry_invalid_request_status ... ok
[INFO] [stdout] test stream::anthropic_decoder::tests::stream_wrapper_accepts_default_sse_message_event_type ... ok
[INFO] [stdout] test stream::anthropic_decoder::tests::rejects_thinking_stream_without_signature_delta ... ok
[INFO] [stdout] test stream::chat_decoder::tests::decodes_reasoning_and_text_blocks_with_usage ... ok
[INFO] [stdout] test stream::chat_decoder::tests::rejects_streams_that_end_before_finish_reason ... ok
[INFO] [stdout] test stream::chat_decoder::tests::buffers_tool_arguments_until_id_and_name_are_known ... ok
[INFO] [stdout] test stream::responses_decoder::tests::decodes_reasoning_text_tool_call_and_usage ... ok
[INFO] [stdout] test stream::chat_decoder::tests::decodes_multiple_tool_calls_with_fragmented_arguments ... ok
[INFO] [stdout] test stream::chat_decoder::tests::stream_wrapper_preserves_usage_chunk_before_message_stop ... ok
[INFO] [stdout] test stream::responses_decoder::tests::rejects_non_sequential_output_indexes ... ok
[INFO] [stdout] test stream::responses_decoder::tests::rejects_reasoning_done_without_encrypted_content ... ok
[INFO] [stdout] test stream::responses_decoder::tests::stream_wrapper_feeds_anthropic_sse_with_signature_delta ... ok
[INFO] [stdout] test stream::responses_decoder::tests::recovers_reasoning_encrypted_content_from_terminal_response ... ok
[INFO] [stdout] test stream::sse::tests::openai_chat_parser_stops_on_done_marker ... ok
[INFO] [stdout] test stream::anthropic_decoder::tests::stream_wrapper_feeds_responses_sse_with_anthropic_reasoning_envelope ... ok
[INFO] [stdout] test stream::sse::tests::parses_reqwest_bytes_stream_into_sse_events ... ok
[INFO] [stdout] test stream::sse::tests::parser_errors_are_reported_as_protocol_mapping_failures ... ok
[INFO] [stdout] test tests::backend_bearer_token_uses_configured_key_and_never_client_credentials ... ok
[INFO] [stdout] test provider::backend_request::tests::concurrency_permit_is_held_until_stream_response_is_dropped ... ok
[INFO] [stdout] test provider::responses_backend::tests::surfaces_upstream_error_body ... ok
[INFO] [stdout] test provider::responses_backend::tests::rejects_empty_api_key ... ok
[INFO] [stdout] test provider::responses_backend::tests::posts_authenticated_json_and_keeps_response_streaming ... ok
[INFO] [stdout] test tests::e2e_regression::chain1_chat_to_responses_reasoning_snapshot ... ok
[INFO] [stdout] test tests::health_route_open_without_proxy_api_key ... ok
[INFO] [stdout] test tests::e2e_regression::chain2_anthropic_to_responses_text_snapshot ... ok
[INFO] [stdout] test tests::failover_stays_on_primary_until_threshold_reached ... ok
[INFO] [stdout] test tests::e2e_regression::chain4_responses_to_anthropic_text_snapshot ... ok
[INFO] [stdout] test tests::failover_switches_to_fallback_after_threshold_reached ... ok
[INFO] [stdout] test tests::health_route_returns_ok_json ... ok
[INFO] [stdout] test tests::messages_route_retries_retryable_chat_backend_status ... ok
[INFO] [stdout] test tests::messages_route_keyless_backend_sends_no_authorization_header ... ok
[INFO] [stdout] test tests::messages_route_maps_upstream_error_to_anthropic_format ... ok
[INFO] [stdout] test tests::messages_route_rejects_missing_and_wrong_proxy_api_key ... ok
[INFO] [stdout] test tests::messages_route_streams_chat_sse_as_anthropic_sse ... ok
[INFO] [stdout] test tests::messages_route_accepts_correct_proxy_api_key_via_both_headers ... ok
[INFO] [stdout] test tests::messages_route_translates_non_streaming_anthropic_request_to_chat_backend ... ok
[INFO] [stdout] test tests::messages_route_streams_plain_text_chat_sse_as_anthropic_snapshot ... ok
[INFO] [stdout] test tests::messages_route_round_trips_responses_reasoning_signature_to_responses_backend ... ok
[INFO] [stdout] test tests::metrics_route_reports_backend_counts_and_alias_targets ... ok
[INFO] [stdout] test tests::messages_route_streams_reasoning_chat_sse_as_anthropic_snapshot ... ok
[INFO] [stdout] test tests::messages_route_streams_responses_backend_sse_as_anthropic_sse ... ok
[INFO] [stdout] test tests::metrics_route_requires_proxy_api_key_when_configured ... ok
[INFO] [stdout] test tests::passthrough_requires_upstream_url_configuration ... ok
[INFO] [stdout] test tests::messages_route_streams_tool_use_multiturn_chat_sse_as_anthropic_snapshot ... ok
[INFO] [stdout] test tests::passthrough_rejects_missing_proxy_api_key ... ok
[INFO] [stdout] test tests::passthrough_streams_upstream_body_and_content_type ... ok
[INFO] [stdout] test tests::responses_route_maps_upstream_error_to_responses_format ... ok
[INFO] [stdout] test tests::responses_route_streams_plain_text_chat_sse_as_responses_snapshot ... ok
[INFO] [stdout] test tests::responses_route_streams_anthropic_backend_sse_as_responses_sse ... ok
[INFO] [stdout] test tests::responses_route_streams_tool_use_chat_sse_as_responses_sse ... ok
[INFO] [stdout] test tests::responses_route_translates_non_streaming_request_to_chat_backend ... ok
[INFO] [stdout] test tests::responses_route_round_trips_anthropic_reasoning_signature_to_anthropic_backend ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 235 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.22s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "911a6b960cf0a85881ddf6e6d1efbbee178f540a248014cbe6b7bb59773eb87e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "911a6b960cf0a85881ddf6e6d1efbbee178f540a248014cbe6b7bb59773eb87e", kill_on_drop: false }`
[INFO] [stdout] 911a6b960cf0a85881ddf6e6d1efbbee178f540a248014cbe6b7bb59773eb87e
