[INFO] cloning repository https://github.com/Cc-kris/codexhubone
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Cc-kris/codexhubone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FCc-kris%2Fcodexhubone", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FCc-kris%2Fcodexhubone'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 3eaaf105a64b7290cf3d2e98e753da825f8c54a9
[INFO] testing Cc-kris/codexhubone against 1.97.0-beta.6 for beta-1.98-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FCc-kris%2Fcodexhubone" "/workspace/builds/worker-4-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/Cc-kris/codexhubone
[INFO] finished tweaking git repo https://github.com/Cc-kris/codexhubone
[INFO] tweaked toml for git repo https://github.com/Cc-kris/codexhubone written to /workspace/builds/worker-4-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/Cc-kris/codexhubone on toolchain 1.97.0-beta.6
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.97.0-beta.6" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/Cc-kris/codexhubone already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.97.0-beta.6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded sha2 v0.11.0
[INFO] [stderr]   Downloaded hybrid-array v0.4.13
[INFO] [stderr]   Downloaded openssl-sys v0.9.116
[INFO] [stderr]   Downloaded openssl v0.10.80
[INFO] [stderr]   Downloaded rawzip v0.4.4
[INFO] [stderr]   Downloaded uuid v1.23.2
[INFO] [stderr]   Downloaded tokio-tungstenite v0.24.0
[INFO] [stderr]   Downloaded tungstenite v0.24.0
[INFO] [stderr]   Downloaded webpki-roots v1.0.7
[INFO] [stderr]   Downloaded rusqlite v0.32.1
[INFO] [stderr]   Downloaded qrcode v0.14.1
[INFO] [stderr]   Downloaded ecb v0.1.2
[INFO] [stderr]   Downloaded block-padding v0.3.3
[INFO] [stderr]   Downloaded rustls v0.23.40
[INFO] [stderr]   Downloaded tokio-tungstenite v0.29.0
[INFO] [stderr]   Downloaded tungstenite v0.29.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3d5ced03c013a94a2f102a4510f48a6e9184255caf5fd8244f58017bde7f5210" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 9583f05eb4ad24625c0f03af1f15fb8d410f1dd9dbf78076c802eaed00489abe
[INFO] running `Command { std: "docker" "start" "9583f05eb4ad24625c0f03af1f15fb8d410f1dd9dbf78076c802eaed00489abe", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "9583f05eb4ad24625c0f03af1f15fb8d410f1dd9dbf78076c802eaed00489abe", 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" "9583f05eb4ad24625c0f03af1f15fb8d410f1dd9dbf78076c802eaed00489abe" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "9583f05eb4ad24625c0f03af1f15fb8d410f1dd9dbf78076c802eaed00489abe", 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" "9583f05eb4ad24625c0f03af1f15fb8d410f1dd9dbf78076c802eaed00489abe" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling zerocopy v0.8.48
[INFO] [stderr]    Compiling typenum v1.20.0
[INFO] [stderr]    Compiling http v1.4.0
[INFO] [stderr]    Compiling rustls-pki-types v1.14.1
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling socket2 v0.6.3
[INFO] [stderr]    Compiling mio v1.2.0
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling cc v1.2.62
[INFO] [stderr]    Compiling tokio-macros v2.7.0
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling yoke v0.8.2
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling rustls v0.23.40
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling zerovec v0.11.6
[INFO] [stderr]    Compiling zerotrie v0.2.4
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling rand_core v0.9.5
[INFO] [stderr]    Compiling winnow v1.0.3
[INFO] [stderr]    Compiling data-encoding v2.11.0
[INFO] [stderr]    Compiling webpki-roots v1.0.7
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling semver v1.0.28
[INFO] [stderr]    Compiling compression-core v0.4.32
[INFO] [stderr]    Compiling toml_writer v1.1.1+spec-1.1.0
[INFO] [stderr]    Compiling serde_json v1.0.150
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling toml_parser v1.1.2+spec-1.1.0
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling rustc_version v0.4.1
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling pxfm v0.1.29
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]    Compiling either v1.16.0
[INFO] [stderr]    Compiling tokio v1.52.3
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling tinystr v0.8.3
[INFO] [stderr]    Compiling potential_utf v0.1.5
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling icu_locale_core v2.2.0
[INFO] [stderr]    Compiling icu_collections v2.2.0
[INFO] [stderr]    Compiling itertools v0.14.0
[INFO] [stderr]    Compiling mime_guess v2.0.5
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling utf-8 v0.7.6
[INFO] [stderr]    Compiling toml_write v0.1.2
[INFO] [stderr]    Compiling winnow v0.7.15
[INFO] [stderr]    Compiling bytemuck v1.25.0
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling zstd-sys v2.0.16+zstd.1.5.7
[INFO] [stderr]    Compiling libsqlite3-sys v0.30.1
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling block-padding v0.3.3
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling inout v0.1.4
[INFO] [stderr]    Compiling cipher v0.4.4
[INFO] [stderr]    Compiling sha1 v0.10.6
[INFO] [stderr]    Compiling icu_provider v2.2.0
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling axum-core v0.5.6
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling webpki-roots v0.26.11
[INFO] [stderr]    Compiling serde_path_to_error v0.1.20
[INFO] [stderr]    Compiling matchit v0.8.4
[INFO] [stderr]    Compiling icu_normalizer v2.2.0
[INFO] [stderr]    Compiling icu_properties v2.2.0
[INFO] [stderr]    Compiling fallible-streaming-iterator v0.1.9
[INFO] [stderr]    Compiling prost-derive v0.13.5
[INFO] [stderr]    Compiling fallible-iterator v0.3.0
[INFO] [stderr]    Compiling uuid v1.23.2
[INFO] [stderr]    Compiling ecb v0.1.2
[INFO] [stderr]    Compiling aes v0.8.4
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling md5 v0.7.0
[INFO] [stderr]    Compiling serde_spanned v1.1.1
[INFO] [stderr]    Compiling toml_datetime v1.1.1+spec-1.1.0
[INFO] [stderr]    Compiling hex v0.4.3
[INFO] [stderr]    Compiling toml v1.1.2+spec-1.1.0
[INFO] [stderr]    Compiling moxcms v0.8.1
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling hashbrown v0.14.5
[INFO] [stderr]    Compiling prost v0.13.5
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling idna_adapter v1.2.2
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling embed-resource v3.0.9
[INFO] [stderr]    Compiling rand v0.9.4
[INFO] [stderr]    Compiling rand v0.8.6
[INFO] [stderr]    Compiling codexhub v0.3.21 (/opt/rustwide/workdir)
[INFO] [stderr]    Compiling hashlink v0.9.1
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling tungstenite v0.29.0
[INFO] [stderr]    Compiling rustls-webpki v0.103.13
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling zstd-safe v7.2.4
[INFO] [stderr]    Compiling hyper v1.9.0
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling tokio-tungstenite v0.29.0
[INFO] [stderr]    Compiling zstd v0.13.3
[INFO] [stderr]    Compiling compression-codecs v0.4.38
[INFO] [stderr]    Compiling async-compression v0.4.32
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling image v0.25.10
[INFO] [stderr]    Compiling axum v0.8.9
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling tungstenite v0.24.0
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling tokio-tungstenite v0.24.0
[INFO] [stderr]    Compiling qrcode v0.14.1
[INFO] [stderr]    Compiling rusqlite v0.32.1
[INFO] [stdout] warning: struct `CatalogModelOption` is never constructed
[INFO] [stdout]   --> src/ai_gateway/catalog.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct CatalogModelOption {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `visible_catalog_model_options` is never used
[INFO] [stdout]   --> src/ai_gateway/catalog.rs:20:8
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub fn visible_catalog_model_options() -> Vec<CatalogModelOption> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `select_provider` is never used
[INFO] [stdout]   --> src/ai_gateway/config.rs:53:12
[INFO] [stdout]    |
[INFO] [stdout] 51 | impl AiGatewayConfig {
[INFO] [stdout]    | -------------------- method in this implementation
[INFO] [stdout] 52 |     /// 按 model 名选择已启用的 provider：匹配显式 model 或 model alias。
[INFO] [stdout] 53 |     pub fn select_provider(&self, model: &str) -> Option<&ProviderConfig> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `provider_display_base_url` is never used
[INFO] [stdout]    --> src/ai_gateway/config.rs:147:8
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub fn provider_display_base_url(base_url: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `thread_id` and `window_id` are never read
[INFO] [stdout]   --> src/ai_gateway/context.rs:9:9
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct GatewayContext {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout]  9 |     pub thread_id: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 10 |     pub window_id: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GatewayContext` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `not_implemented` is never used
[INFO] [stdout]   --> src/ai_gateway/error.rs:48:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl GatewayError {
[INFO] [stdout]    | ----------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn not_implemented() -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `summary_text` is never used
[INFO] [stdout]    --> src/ai_gateway/model.rs:278:12
[INFO] [stdout]     |
[INFO] [stdout] 267 | impl ContentPart {
[INFO] [stdout]     | ---------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub fn summary_text(text: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new_in_progress` is never used
[INFO] [stdout]    --> src/ai_gateway/model.rs:410:12
[INFO] [stdout]     |
[INFO] [stdout] 408 | impl ResponseObject {
[INFO] [stdout]     | ------------------- associated function in this implementation
[INFO] [stdout] 409 |     /// 创建初始的 in_progress response 对象。
[INFO] [stdout] 410 |     pub fn new_in_progress(id: String, model: String) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `chrono_timestamp` is never used
[INFO] [stdout]    --> src/ai_gateway/model.rs:425:4
[INFO] [stdout]     |
[INFO] [stdout] 425 | fn chrono_timestamp() -> i64 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CODEX_API_BASE_URL_ENV` is never used
[INFO] [stdout]   --> src/codex_app_config.rs:26:7
[INFO] [stdout]    |
[INFO] [stdout] 26 | const CODEX_API_BASE_URL_ENV: &str = "CODEX_API_BASE_URL";
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CODEX_API_ENDPOINT_ENV` is never used
[INFO] [stdout]   --> src/codex_app_config.rs:27:7
[INFO] [stdout]    |
[INFO] [stdout] 27 | const CODEX_API_ENDPOINT_ENV: &str = "CODEX_API_ENDPOINT";
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CODEX_APP_SERVER_LOGIN_ISSUER_ENV` is never used
[INFO] [stdout]   --> src/codex_app_config.rs:28:7
[INFO] [stdout]    |
[INFO] [stdout] 28 | const CODEX_APP_SERVER_LOGIN_ISSUER_ENV: &str = "CODEX_APP_SERVER_LOGIN_ISSUER";
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `inspect_codex_app_config` is never used
[INFO] [stdout]    --> src/codex_app_config.rs:304:8
[INFO] [stdout]     |
[INFO] [stdout] 304 | pub fn inspect_codex_app_config(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 01s
[INFO] running `Command { std: "docker" "inspect" "9583f05eb4ad24625c0f03af1f15fb8d410f1dd9dbf78076c802eaed00489abe", 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" "9583f05eb4ad24625c0f03af1f15fb8d410f1dd9dbf78076c802eaed00489abe" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling codexhub v0.3.21 (/opt/rustwide/workdir)
[INFO] [stdout] warning: fields `thread_id` and `window_id` are never read
[INFO] [stdout]   --> src/ai_gateway/context.rs:9:9
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct GatewayContext {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout]  9 |     pub thread_id: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 10 |     pub window_id: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `GatewayContext` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `not_implemented` is never used
[INFO] [stdout]   --> src/ai_gateway/error.rs:48:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl GatewayError {
[INFO] [stdout]    | ----------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn not_implemented() -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `summary_text` is never used
[INFO] [stdout]    --> src/ai_gateway/model.rs:278:12
[INFO] [stdout]     |
[INFO] [stdout] 267 | impl ContentPart {
[INFO] [stdout]     | ---------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub fn summary_text(text: impl Into<String>) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new_in_progress` is never used
[INFO] [stdout]    --> src/ai_gateway/model.rs:410:12
[INFO] [stdout]     |
[INFO] [stdout] 408 | impl ResponseObject {
[INFO] [stdout]     | ------------------- associated function in this implementation
[INFO] [stdout] 409 |     /// 创建初始的 in_progress response 对象。
[INFO] [stdout] 410 |     pub fn new_in_progress(id: String, model: String) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `chrono_timestamp` is never used
[INFO] [stdout]    --> src/ai_gateway/model.rs:425:4
[INFO] [stdout]     |
[INFO] [stdout] 425 | fn chrono_timestamp() -> i64 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CODEX_API_BASE_URL_ENV` is never used
[INFO] [stdout]   --> src/codex_app_config.rs:26:7
[INFO] [stdout]    |
[INFO] [stdout] 26 | const CODEX_API_BASE_URL_ENV: &str = "CODEX_API_BASE_URL";
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CODEX_API_ENDPOINT_ENV` is never used
[INFO] [stdout]   --> src/codex_app_config.rs:27:7
[INFO] [stdout]    |
[INFO] [stdout] 27 | const CODEX_API_ENDPOINT_ENV: &str = "CODEX_API_ENDPOINT";
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CODEX_APP_SERVER_LOGIN_ISSUER_ENV` is never used
[INFO] [stdout]   --> src/codex_app_config.rs:28:7
[INFO] [stdout]    |
[INFO] [stdout] 28 | const CODEX_APP_SERVER_LOGIN_ISSUER_ENV: &str = "CODEX_APP_SERVER_LOGIN_ISSUER";
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `fast_startup_enabled` is never read
[INFO] [stdout]   --> src/codex_app_config.rs:78:9
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct ConfigureCodexAppOptions {
[INFO] [stdout]    |            ------------------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub fast_startup_enabled: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ConfigureCodexAppOptions` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cleanup_gui_environment` is never used
[INFO] [stdout]    --> src/codex_app_config.rs:727:8
[INFO] [stdout]     |
[INFO] [stdout] 727 | pub fn cleanup_gui_environment(backend_url: &str) -> CodexAppGuiApiBaseStatus {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 38.61s
[INFO] running `Command { std: "docker" "inspect" "9583f05eb4ad24625c0f03af1f15fb8d410f1dd9dbf78076c802eaed00489abe", 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" "9583f05eb4ad24625c0f03af1f15fb8d410f1dd9dbf78076c802eaed00489abe" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr] warning: fields `thread_id` and `window_id` are never read
[INFO] [stderr]   --> src/ai_gateway/context.rs:9:9
[INFO] [stderr]    |
[INFO] [stderr]  6 | pub struct GatewayContext {
[INFO] [stderr]    |            -------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr]  9 |     pub thread_id: Option<String>,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr] 10 |     pub window_id: Option<String>,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `GatewayContext` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `not_implemented` is never used
[INFO] [stderr]   --> src/ai_gateway/error.rs:48:12
[INFO] [stderr]    |
[INFO] [stderr] 21 | impl GatewayError {
[INFO] [stderr]    | ----------------- associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 48 |     pub fn not_implemented() -> Self {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `summary_text` is never used
[INFO] [stderr]    --> src/ai_gateway/model.rs:278:12
[INFO] [stderr]     |
[INFO] [stderr] 267 | impl ContentPart {
[INFO] [stderr]     | ---------------- associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 278 |     pub fn summary_text(text: impl Into<String>) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `new_in_progress` is never used
[INFO] [stderr]    --> src/ai_gateway/model.rs:410:12
[INFO] [stderr]     |
[INFO] [stderr] 408 | impl ResponseObject {
[INFO] [stderr]     | ------------------- associated function in this implementation
[INFO] [stderr] 409 |     /// 创建初始的 in_progress response 对象。
[INFO] [stderr] 410 |     pub fn new_in_progress(id: String, model: String) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `chrono_timestamp` is never used
[INFO] [stderr]    --> src/ai_gateway/model.rs:425:4
[INFO] [stderr]     |
[INFO] [stderr] 425 | fn chrono_timestamp() -> i64 {
[INFO] [stderr]     |    ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `CODEX_API_BASE_URL_ENV` is never used
[INFO] [stderr]   --> src/codex_app_config.rs:26:7
[INFO] [stderr]    |
[INFO] [stderr] 26 | const CODEX_API_BASE_URL_ENV: &str = "CODEX_API_BASE_URL";
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `CODEX_API_ENDPOINT_ENV` is never used
[INFO] [stderr]   --> src/codex_app_config.rs:27:7
[INFO] [stderr]    |
[INFO] [stderr] 27 | const CODEX_API_ENDPOINT_ENV: &str = "CODEX_API_ENDPOINT";
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `CODEX_APP_SERVER_LOGIN_ISSUER_ENV` is never used
[INFO] [stderr]   --> src/codex_app_config.rs:28:7
[INFO] [stderr]    |
[INFO] [stderr] 28 | const CODEX_APP_SERVER_LOGIN_ISSUER_ENV: &str = "CODEX_APP_SERVER_LOGIN_ISSUER";
[INFO] [stderr]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `fast_startup_enabled` is never read
[INFO] [stderr]   --> src/codex_app_config.rs:78:9
[INFO] [stderr]    |
[INFO] [stderr] 63 | pub struct ConfigureCodexAppOptions {
[INFO] [stderr]    |            ------------------------ field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 78 |     pub fast_startup_enabled: bool,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `ConfigureCodexAppOptions` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: function `cleanup_gui_environment` is never used
[INFO] [stderr]    --> src/codex_app_config.rs:727:8
[INFO] [stderr]     |
[INFO] [stderr] 727 | pub fn cleanup_gui_environment(backend_url: &str) -> CodexAppGuiApiBaseStatus {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `codexhub` (bin "codexhub" test) generated 10 warnings
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.47s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/codexhub-664f571703f03380)
[INFO] [stdout] 
[INFO] [stdout] running 358 tests
[INFO] [stdout] test ai_gateway::catalog::tests::catalog_model_visibility_requires_api_support_and_list_visibility ... ok
[INFO] [stdout] test ai_gateway::codec::responses_inbound::tests::decodes_string_input_as_user_text_message ... ok
[INFO] [stdout] test ai_gateway::codec::responses_inbound::tests::decodes_namespaced_tool_and_tool_search_output_tools ... ok
[INFO] [stdout] test ai_gateway::codec::responses_inbound::tests::decodes_tool_search_and_custom_call_semantics ... ok
[INFO] [stdout] test ai_gateway::codec::responses_inbound::tests::preserves_unknown_item_raw_payload ... ok
[INFO] [stdout] test ai_gateway::config::tests::test_disabled_provider_is_not_selected ... ok
[INFO] [stdout] test ai_gateway::config::tests::test_exact_match ... ok
[INFO] [stdout] test ai_gateway::config::tests::test_exact_match_uses_configured_model_not_provider_name ... ok
[INFO] [stdout] test ai_gateway::config::tests::test_empty_model_list_does_not_match_provider_name_prefix ... ok
[INFO] [stdout] test ai_gateway::config::tests::test_model_match_is_case_insensitive ... ok
[INFO] [stdout] test ai_gateway::config::tests::test_no_fallback_even_with_legacy_default_provider ... ok
[INFO] [stdout] test ai_gateway::config::tests::test_missing_session_id_uses_highest_weight ... ok
[INFO] [stdout] test ai_gateway::config::tests::test_model_alias_routes_to_provider_model ... ok
[INFO] [stdout] test ai_gateway::config::tests::test_session_provider_selection_is_stable ... ok
[INFO] [stdout] test ai_gateway::config::tests::test_provider_api_root_accepts_versioned_or_root_base_url ... ok
[INFO] [stdout] test ai_gateway::config::tests::test_session_provider_selection_stays_when_non_selected_provider_removed ... ok
[INFO] [stdout] test ai_gateway::config::tests::test_provider_display_base_url_uses_v1 ... ok
[INFO] [stdout] test ai_gateway::config::tests::test_session_provider_selection_ignores_unmatched_models ... ok
[INFO] [stdout] test ai_gateway::config::tests::test_no_match_no_default ... ok
[INFO] [stdout] test ai_gateway::context::tests::test_codexhub_user_agent_suffix_removed_for_upstream ... ok
[INFO] [stdout] test ai_gateway::config::tests::test_session_provider_selection_is_independent_of_config_order ... ok
[INFO] [stdout] test ai_gateway::context::tests::test_empty_body_key_skipped ... ok
[INFO] [stdout] test ai_gateway::context::tests::test_fallback_generates_uuid ... ok
[INFO] [stdout] test ai_gateway::context::tests::test_invalid_turn_metadata_json ... ok
[INFO] [stdout] test ai_gateway::config::tests::test_zero_weight_is_treated_as_one ... ok
[INFO] [stdout] test ai_gateway::context::tests::test_session_id_header_priority ... ok
[INFO] [stdout] test ai_gateway::context::tests::test_turn_metadata_session_id ... ok
[INFO] [stdout] test ai_gateway::context::tests::test_upstream_headers_collected ... ok
[INFO] [stdout] test ai_gateway::context::tests::test_upstream_headers_follow_proxy_filter_rules ... ok
[INFO] [stdout] test ai_gateway::context::tests::test_body_cache_key_highest_priority ... ok
[INFO] [stdout] test ai_gateway::context::tests::test_user_agent_without_codexhub_suffix_is_kept ... ok
[INFO] [stdout] test ai_gateway::context::tests::test_thread_id_fallback ... ok
[INFO] [stdout] test ai_gateway::error::tests::parses_openai_style_upstream_error ... ok
[INFO] [stdout] test ai_gateway::error::tests::falls_back_to_status_when_upstream_body_is_empty ... ok
[INFO] [stdout] test ai_gateway::error::tests::falls_back_to_plain_text_upstream_error ... ok
[INFO] [stdout] test ai_gateway::handler::tests::filter_image_generation_tools_keeps_tools_when_filter_disabled ... ok
[INFO] [stdout] test ai_gateway::handler::tests::filter_image_generation_tools_removes_only_builtin_image_tool ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::glm_compat::tests::removes_glm_private_tool_block ... ok
[INFO] [stdout] test ai_gateway::handler::tests::responses_passthrough_envelope_accepts_future_payload_shapes ... ok
[INFO] [stdout] test ai_gateway::catalog::tests::configured_models_response_skips_unknown_configured_model ... ok
[INFO] [stdout] test ai_gateway::catalog::tests::configured_models_response_skips_hidden_catalog_model ... ok
[INFO] [stdout] test ai_gateway::catalog::tests::configured_models_response_returns_empty_when_no_models_configured ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::glm_compat::tests::removes_multiple_private_sections ... ok
[INFO] [stdout] test ai_gateway::catalog::tests::deepseek_models_preserve_apply_patch_tool_from_catalog ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::glm_compat::tests::split_filters_private_tool_block_but_streams_rest ... ok
[INFO] [stdout] test ai_gateway::context::tests::test_apply_upstream_headers_keeps_provider_managed_headers ... ok
[INFO] [stdout] test ai_gateway::error::tests::parses_anthropic_style_upstream_error ... ok
[INFO] [stdout] test ai_gateway::config::tests::test_toml_deserialization ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::glm_compat::tests::removes_glm_private_result_summary_and_keeps_answer ... ok
[INFO] [stdout] test ai_gateway::catalog::tests::visible_catalog_model_options_returns_listable_api_models ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::glm_compat::tests::keeps_prefix_before_inline_private_tool_block ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::options::tests::claude_alias_maps_to_anthropic_profile ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::options::tests::default_profile_is_anthropic ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::options::tests::explicit_anthropic_profile_is_supported ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::options::tests::unknown_profile_returns_clear_error ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::options::tests::zhipu_alias_maps_to_glm_profile ... ok
[INFO] [stdout] test ai_gateway::catalog::tests::configured_models_response_uses_codex_visible_models ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::options::tests::glm_profile_uses_anthropic_transport ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::glm_compat::tests::split_holds_back_partial_marker_lead_in ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::glm_compat::tests::split_streams_plain_text_immediately ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::bearer_authorization_normalizes_values ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::builds_anthropic_adaptive_thinking_from_reasoning_effort ... ok
[INFO] [stdout] test ai_gateway::config::tests::test_session_provider_selection_honors_weight ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::builds_anthropic_request_with_claude_code_block_level_ephemeral_cache ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::builds_anthropic_tool_result_message ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::builds_anthropic_apply_patch_custom_tool ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::appends_all_parallel_web_search_tool_results ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::builds_anthropic_text_request ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::builds_anthropic_web_search_client_tool_for_responses_web_search ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::builds_anthropic_tool_result_with_image_content_blocks ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::builds_anthropic_tool_search_result_message_and_loaded_tools ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::builds_claude_code_style_input_schema_for_tools_without_parameters ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::builds_glm_reasoning_effort_from_reasoning ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::builds_anthropic_budget_thinking_from_explicit_budget ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::builds_claude_code_aligned_headers_for_anthropic_profile ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::anthropic_profile_uses_claude_code_headers_for_regular_api_keys ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::builds_anthropic_tools_and_tool_choice ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::builds_glm_tool_result_with_image_content_blocks ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::builds_internal_web_search_body_like_claude_code ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::caches_conversation_tail_only ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::caches_trailing_assistant_message ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::converts_anthropic_text_citations_to_responses_annotations ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::converts_anthropic_cache_creation_breakdown_usage ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::converts_anthropic_text_response ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::converts_anthropic_server_web_search_response ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::converts_anthropic_apply_patch_tool_use_to_custom_tool_call ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::ignores_duplicate_web_search_tool_use_ids_from_stream ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::filters_glm_private_web_search_text_from_response ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::groups_parallel_tool_uses_and_results_in_single_messages ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::glm_profile_also_uses_claude_code_headers ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::converts_anthropic_thinking_response ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::converts_anthropic_tool_use_response ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::converts_anthropic_tool_use_web_search_response ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::injects_stable_metadata_user_id_into_main_request ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::maps_glm_medium_reasoning_to_high ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::maps_responses_web_search_filters_to_anthropic_allowed_domains ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::marks_last_block_when_tail_has_no_text ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::maps_glm_none_reasoning_to_disabled_thinking ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::preserves_existing_metadata_user_id ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::converts_glm_web_search_prime_response ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::marks_exactly_one_message_breakpoint ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::merge_anthropic_betas_preserves_required_and_extra_flags ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::non_streaming_max_tokens_stop_sets_incomplete_details ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::passes_through_anthropic_apply_patch_tool_use_input ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::preserves_mapped_function_named_web_search_response ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::internal_web_search_stream_emits_web_search_call_added_and_done_only ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::non_streaming_end_turn_has_no_incomplete_details ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::preserves_native_anthropic_client_tool_shape ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::marks_last_text_block_of_tail_message ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::preserves_native_anthropic_web_search_server_tool ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::raw_sse_first_content_token_ignores_message_start_and_ping ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::reconstructs_multiple_web_search_tool_uses_from_stream ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::internal_envelope_streams_deltas_and_renumbers_across_rounds ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::streams_anthropic_apply_patch_tool_use_as_custom_tool_call ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::streams_anthropic_text_as_responses_sse ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::streams_anthropic_citations_as_responses_annotations ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::rejects_anthropic_thinking_budget_that_reaches_max_tokens ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::rejects_invalid_anthropic_tool_use_ids_before_upstream ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::streams_anthropic_tool_use_as_responses_sse ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::streams_anthropic_thinking_as_responses_reasoning_sse ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::replays_responses_web_search_call_history_as_websearch_tool_use ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::request_defaults_max_tokens_when_codex_omits_it ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::skips_empty_anthropic_internal_web_search_response ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::streams_anthropic_tool_use_web_search_as_responses_sse ... ok
[INFO] [stdout] test ai_gateway::request_log::tests::database_path_follows_state_path_in_tests ... ok
[INFO] [stdout] test ai_gateway::request_log::tests::headers_to_json_preserves_values ... ok
[INFO] [stdout] test ai_gateway::providers::tests::total_request_timeout_is_not_applied_to_streaming_requests ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::streams_skip_empty_anthropic_internal_web_search_sse ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::streams_anthropic_web_search_as_responses_sse ... ok
[INFO] [stdout] test ai_gateway::catalog::tests::configured_models_etag_is_stable_for_same_response ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::streams_glm_plain_text_token_by_token ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::streams_glm_web_search_prime_as_responses_sse ... ok
[INFO] [stdout] test ai_gateway::catalog::tests::configured_models_etag_changes_when_visible_models_change ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::streams_max_tokens_stop_as_response_incomplete_with_reason ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::streams_glm_private_web_search_text_is_filtered ... ok
[INFO] [stdout] test ai_gateway::request_log::tests::usage_from_chat_value_extracts_deepseek_cache ... ok
[INFO] [stdout] test ai_gateway::request_log::tests::usage_from_responses_value_extracts_cache ... ok
[INFO] [stdout] test ai_gateway::request_log::tests::usage_from_value_extracts_anthropic_cache_creation_split ... ok
[INFO] [stdout] test ai_gateway::tool_names::tests::decodes_legacy_responses_unit_marker ... ok
[INFO] [stdout] test ai_gateway::tool_names::tests::roundtrips_any_responses_namespace ... ok
[INFO] [stdout] test ai_gateway::transform::chat_to_responses::tests::test_codex_app_namespace_restored_from_tool_name_map ... ok
[INFO] [stdout] test ai_gateway::transform::chat_to_responses::tests::test_deepseek_prompt_cache_hit_tokens_are_mapped ... ok
[INFO] [stdout] test ai_gateway::transform::chat_to_responses::tests::test_empty_content_no_message_item ... ok
[INFO] [stdout] test ai_gateway::transform::chat_to_responses::tests::test_empty_reasoning_content_skipped ... ok
[INFO] [stdout] test ai_gateway::transform::chat_to_responses::tests::test_empty_usage_object_is_ignored ... ok
[INFO] [stdout] test ai_gateway::transform::chat_to_responses::tests::test_length_finish_reason_incomplete ... ok
[INFO] [stdout] test ai_gateway::transform::chat_to_responses::tests::test_missing_chat_response_id_generates_response_id ... ok
[INFO] [stdout] test ai_gateway::transform::chat_to_responses::tests::test_multiple_tool_calls_response ... ok
[INFO] [stdout] test ai_gateway::transform::chat_to_responses::tests::test_namespaced_tool_call_response_restores_responses_namespace ... ok
[INFO] [stdout] test ai_gateway::tool_names::tests::encodes_names_for_strict_provider_tool_name_regex ... ok
[INFO] [stdout] test ai_gateway::transform::chat_to_responses::tests::test_no_choices_errors ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::anthropic_stream_records_ttft_end_to_end ... ok
[INFO] [stdout] test ai_gateway::transform::chat_to_responses::tests::test_no_usage_field ... ok
[INFO] [stdout] test ai_gateway::transform::chat_to_responses::tests::test_null_usage_is_ignored ... ok
[INFO] [stdout] test ai_gateway::tool_names::tests::hashes_long_or_colliding_tool_names_but_keeps_roundtrip ... ok
[INFO] [stdout] test ai_gateway::transform::chat_to_responses::tests::test_reasoning_content_response ... ok
[INFO] [stdout] test ai_gateway::transform::chat_to_responses::tests::test_reasoning_plus_tool_calls_response ... ok
[INFO] [stdout] test ai_gateway::transform::chat_to_responses::tests::test_simple_content_response ... ok
[INFO] [stdout] test ai_gateway::transform::chat_to_responses::tests::test_tool_calls_response ... ok
[INFO] [stdout] test ai_gateway::transform::chat_to_responses::tests::test_usage_with_details ... ok
[INFO] [stdout] test ai_gateway::transform::chat_to_responses::tests::test_tool_search_tool_call_response_restores_tool_search_call ... ok
[INFO] [stdout] test ai_gateway::transform::responses_stream::tests::partial_wrapped_input_prefix_decodes_complete_prefix ... ok
[INFO] [stdout] test ai_gateway::transform::responses_stream::tests::test_custom_tool_call_stream_uses_custom_input_events ... ok
[INFO] [stdout] test ai_gateway::transform::responses_stream::tests::stream_adapter_accepts_data_line_without_space ... ok
[INFO] [stdout] test ai_gateway::transform::responses_stream::tests::test_deepseek_prompt_cache_hit_tokens_are_mapped ... ok
[INFO] [stdout] test ai_gateway::transform::responses_stream::tests::test_empty_stream ... ok
[INFO] [stdout] test ai_gateway::transform::responses_stream::tests::test_empty_usage_object_is_ignored ... ok
[INFO] [stdout] test ai_gateway::transform::responses_stream::tests::test_interleaved_text_and_reasoning_closes_active_items ... ok
[INFO] [stdout] test ai_gateway::transform::responses_stream::tests::test_length_finish_reason_incomplete ... ok
[INFO] [stdout] test ai_gateway::transform::responses_stream::tests::test_null_usage_is_ignored ... ok
[INFO] [stdout] test ai_gateway::transform::responses_stream::tests::test_reasoning_then_text_stream ... ok
[INFO] [stdout] test ai_gateway::transform::responses_stream::tests::test_parallel_tool_calls_stream ... ok
[INFO] [stdout] test ai_gateway::transform::responses_stream::tests::test_simple_text_stream ... ok
[INFO] [stdout] test ai_gateway::transform::responses_stream::tests::test_sequence_numbers_monotonic ... ok
[INFO] [stdout] test ai_gateway::transform::responses_stream::tests::test_standalone_usage_chunk ... ok
[INFO] [stdout] test ai_gateway::transform::responses_stream::tests::test_stream_restores_namespaced_tool_from_tool_name_map ... ok
[INFO] [stdout] test ai_gateway::providers::anthropic_messages::tests::anthropic_real_fixture_records_ttft_bytewise ... ok
[INFO] [stdout] test ai_gateway::transform::responses_stream::tests::test_stream_restores_tool_search_call_from_tool_name_map ... ok
[INFO] [stdout] test ai_gateway::transform::responses_stream::tests::test_tool_call_stream ... ok
[INFO] [stdout] test ai_gateway::transform::responses_stream::tests::test_text_then_tool_call_stream ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_apply_patch_custom_tool_converted_to_standard_chat_function ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_chained_tool_calls_across_turns ... ok
[INFO] [stdout] test ai_gateway::request_log::tests::request_log_store_reuses_open_connection ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_custom_tool_call_history_converted_to_wrapped_chat_tool ... ok
[INFO] [stdout] test ai_gateway::transform::responses_stream::tests::test_usage_in_separate_chunk ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_deepseek_backfills_reasoning_content_for_tool_calls ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_deepseek_developer_role_to_system ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_deepseek_drops_reasoning_only_assistant ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_deepseek_effort_high_enables_thinking ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_deepseek_effort_low_maps_to_high ... ok
[INFO] [stdout] test ai_gateway::transform::responses_stream::tests::test_reasoning_then_tool_call_stream ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_deepseek_effort_max_preserved ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_deepseek_effort_xhigh_maps_to_max ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_deepseek_json_object_injects_json_instruction ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_deepseek_json_schema_downgrade ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_deepseek_effort_none_disables_thinking ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_deepseek_json_schema_injects_json_instruction ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_deepseek_pads_reasoning_content ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_deepseek_thinking_disabled_keeps_temperature ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_deepseek_effort_medium_maps_to_high ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_deepseek_thinking_strips_temperature_top_p ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_flat_tool_choice_converted_to_chat_tool_choice ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_deepseek_tool_calls_with_reasoning_padding ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_full_multiturn_conversation ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_flat_responses_function_tool_converted_to_chat_tool ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_function_call_output_missing_output_errors ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_function_call_output_content_items_to_tool_message ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_function_call_output_to_tool_message ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_function_calls_merged ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_input_image_accepts_chat_style_image_url_object ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_function_call_arguments_accepts_object ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_input_text_to_user_message ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_instructions_to_system_message ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_malformed_function_tool_without_name_filtered ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_input_string_deserialized_as_input_text ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_message_item_user_and_assistant ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_openai_json_schema_preserved ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_parallel_tool_calls_and_outputs ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_provider_tool_name_is_safe_and_roundtrips_through_tool_name_map ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_mixed_function_and_custom_tool_history_keeps_both_pairs ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_namespaced_function_call_encoded_for_chat ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_non_function_tools_filtered ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_reasoning_multi_tool_call_full_loop ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_reasoning_followed_by_assistant_message_merged ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_responses_namespace_tools_flatten_to_chat_functions ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_reasoning_followed_by_function_call_merged ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_stream_includes_usage_option ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_standalone_reasoning ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_responses_builtin_tool_calls_filtered_for_chat ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_standalone_input_image_uses_top_level_image_url_and_detail ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_tool_search_tool_converted_to_chat_function ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_tool_search_output_exposes_loaded_tools_to_chat ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_tool_choice_namespaced_function_uses_request_tool_name_map ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_tool_choice_mode_converted_to_string ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_top_level_input_text_item_uses_text_field ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_tool_search_call_history_converted_to_chat_tool_call ... ok
[INFO] [stdout] test codex::tests::agent_message_text_supports_response_message_content ... ok
[INFO] [stdout] test ai_gateway::transform::responses_to_chat::tests::test_unknown_item_types_skipped ... ok
[INFO] [stdout] test chain_log::tests::rotate_open_log_replaces_active_file ... ok
[INFO] [stdout] test codex::tests::mcp_url_elicitation_builds_protocol_response_options ... ok
[INFO] [stdout] test codex::tests::turn_reply_text_supports_not_loaded_turn_with_direct_message ... ok
[INFO] [stdout] test codex::tests::permissions_approval_builds_protocol_response_options ... ok
[INFO] [stdout] test codex::tests::command_approval_uses_available_decisions_verbatim ... ok
[INFO] [stdout] test codex::tests::v1_approval_keeps_review_decision_values ... ok
[INFO] [stdout] test codex::tests::yes_no_reply_maps_to_current_protocol_decisions ... ok
[INFO] [stdout] test codex::tests::mcp_form_elicitation_accepts_boolean_confirmation ... ok
[INFO] [stdout] test codex::tests::turn_reply_text_supports_task_complete_last_agent_message ... ok
[INFO] [stdout] test codex::tests::yes_no_reply_maps_to_permissions_decisions ... ok
[INFO] [stdout] test codex_app_config::tests::clear_legacy_codexhub_bundled_plugin_state_removes_old_catalog_cache_only ... ok
[INFO] [stdout] test codex_app_config::tests::clear_codex_models_cache_ignores_missing_cache_file ... ok
[INFO] [stdout] test codex_app_config::tests::clear_legacy_codexhub_bundled_plugin_state_removes_only_old_remote_identity ... ok
[INFO] [stdout] test codex_app_config::tests::clear_codex_models_cache_removes_cache_file ... ok
[INFO] [stdout] test ai_gateway::request_log::tests::dropping_unfinished_sse_log_stream_marks_cancelled ... ok
[INFO] [stdout] test ai_gateway::request_log::tests::record_ttft_once_does_not_overwrite_first_token ... ok
[INFO] [stdout] test ai_gateway::request_log::tests::observe_sse_chunk_records_ttft_and_total_latency_separately ... ok
[INFO] [stdout] test ai_gateway::request_log::tests::sse_log_stream_end_before_completed_is_failed ... ok
[INFO] [stdout] test ai_gateway::request_log::tests::responses_log_stream_records_ttft_for_anthropic_style_events ... ok
[INFO] [stdout] test codex_app_config::tests::configure_codex_app_can_save_provider_without_activating ... ok
[INFO] [stdout] test codex_app_config::tests::configure_codex_app_default_ai_gateway_completes_matching_existing_provider ... ok
[INFO] [stdout] test codex_app_config::tests::configure_codex_app_defaults_to_ai_gateway_provider ... ok
[INFO] [stdout] test codex_app_config::tests::configure_codex_app_default_ai_gateway_repairs_existing_provider_base_url ... ok
[INFO] [stdout] test ai_gateway::request_log::tests::upstream_sse_capture_stream_records_raw_events ... ok
[INFO] [stdout] test codex_app_config::tests::configure_codex_app_preserves_explicit_apps_feature ... ok
[INFO] [stdout] test codex_app_config::tests::configure_codex_app_enables_required_bundled_plugins ... ok
[INFO] [stdout] test ai_gateway::request_log::tests::failed_sse_log_stream_is_not_overwritten_by_drop ... ok
[INFO] [stdout] test codex_app_config::tests::default_codex_home_ignores_process_codex_home ... ok
[INFO] [stdout] test codex_app_config::tests::configure_codex_app_disables_default_otel_telemetry ... ok
[INFO] [stdout] test codex_app_config::tests::configure_codex_app_creates_managed_state_and_auth_backup ... ok
[INFO] [stdout] test codex_app_config::tests::delete_codex_app_provider_removes_provider_and_active_selection ... ok
[INFO] [stdout] test codex_app_config::tests::inspect_managed_ai_gateway_provider_requires_active_gateway_provider ... ok
[INFO] [stdout] test codex_app_config::tests::inspect_codex_app_config_lists_existing_providers ... ok
[INFO] [stdout] test ai_gateway::request_log::tests::sqlite_insert_update_and_list_roundtrip ... ok
[INFO] [stdout] test codex_app_config::tests::configure_codex_app_compatible_connection_uses_localhost ... ok
[INFO] [stdout] test codex_app_config::tests::uninstall_auth_json_preserves_non_local_chatgpt_auth ... ok
[INFO] [stdout] test codex_app_config::tests::set_provider_websocket_does_not_change_image_generation_feature ... ok
[INFO] [stdout] test codex_app_config::tests::inspect_provider_catalog_ignores_placeholder_values ... ok
[INFO] [stdout] test codex_app_config::tests::uninstall_codex_app_without_backup_falls_back_to_safe_cleanup ... ok
[INFO] [stdout] test codex_app_config::tests::configure_codex_app_repairs_duplicate_provider_key ... ok
[INFO] [stdout] test codex_app_config::tests::configure_codex_app_replaces_existing_api_key_auth_with_local_tokens ... ok
[INFO] [stdout] test codex_app_config::tests::configure_codex_app_does_not_overwrite_first_auth_backup ... ok
[INFO] [stdout] test ai_gateway::request_log::tests::sqlite_delete_older_than_keeps_recent_logs ... ok
[INFO] [stdout] test config::tests::telegram_empty_allowlist_binds_first_private_chat ... ok
[INFO] [stdout] test codex_app_config::tests::uninstall_codex_app_without_backup_preserves_user_active_provider ... ok
[INFO] [stdout] test im::core::text_renderer::tests::agent_message_is_tagged_and_not_truncated ... ok
[INFO] [stdout] test config::tests::telegram_legacy_default_account_can_bind_first_chat ... ok
[INFO] [stdout] test codex_app_config::tests::configure_codex_app_removes_plugin_blocking_feature_flags ... ok
[INFO] [stdout] test im::core::text_renderer::tests::command_execution_omits_output ... ok
[INFO] [stdout] test codex_app_config::tests::configure_codex_app_writes_provider_and_local_auth ... ok
[INFO] [stdout] test im::core::text_renderer::tests::command_execution_uses_command_actions_and_failure_icon ... ok
[INFO] [stdout] test codex_app_config::tests::configure_codex_app_replaces_existing_chatgpt_auth_with_local_tokens ... ok
[INFO] [stdout] test codex_app_config::tests::configure_codex_app_switches_existing_provider_by_name_only ... ok
[INFO] [stdout] test im::core::thread::tests::thread_entries_preserve_history_order ... ok
[INFO] [stdout] test im::feishu::renderer::markdown::tests::feishu_image_key_markdown_is_preserved ... ok
[INFO] [stdout] test im::core::text_renderer::tests::todo_list_is_rendered_fully ... ok
[INFO] [stdout] test im::core::text_renderer::tests::mcp_tool_call_renders_summary_without_raw_payloads ... ok
[INFO] [stdout] test im::feishu::renderer::markdown::tests::http_markdown_image_url_is_rendered_as_text ... ok
[INFO] [stdout] test im::feishu::renderer::markdown::tests::local_markdown_image_path_is_rendered_as_text ... ok
[INFO] [stdout] test ai_gateway::request_log::tests::sqlite_delete_all_removes_every_log ... ok
[INFO] [stdout] test im::feishu::runtime::tests::empty_first_send_is_skipped ... ok
[INFO] [stdout] test im::telegram::adapter::tests::empty_message_uses_space_placeholder ... ok
[INFO] [stdout] test im::core::text_renderer::tests::agent_message_local_markdown_image_is_rendered_as_text_and_extracted ... ok
[INFO] [stdout] test im::telegram::adapter::tests::chunks_long_text_on_char_boundaries ... ok
[INFO] [stdout] test im::telegram::adapter::tests::keeps_single_message_when_within_limit ... ok
[INFO] [stdout] test codex_session_history::tests::rewrites_first_session_meta_provider ... ok
[INFO] [stdout] test im::telegram::adapter::tests::prefers_newline_split_for_long_text ... ok
[INFO] [stdout] test im::feishu::runtime::tests::empty_update_after_message_exists_is_not_skipped ... ok
[INFO] [stdout] test im::telegram::polling::tests::converts_private_message_to_inbound ... ok
[INFO] [stdout] test im::telegram::api::tests::parses_message_and_callback_updates ... ok
[INFO] [stdout] test im::telegram::polling::tests::ignores_group_messages ... ok
[INFO] [stdout] test im::telegram::polling::tests::empty_allowed_chat_ids_do_not_pass_message_conversion ... ok
[INFO] [stdout] test im::telegram::polling::tests::ignores_group_messages_even_when_mentioned ... ok
[INFO] [stdout] test codex_app_config::tests::configure_codex_app_registers_local_curated_marketplace_and_removes_legacy_bundled ... ok
[INFO] [stdout] test im::telegram::polling::tests::parses_thread_route_callback_data ... ok
[INFO] [stdout] test im::telegram::polling::tests::rejects_private_message_from_unlisted_chat ... ok
[INFO] [stdout] test codex_app_config::tests::configure_codex_app_preserves_explicit_otel_exporter ... ok
[INFO] [stdout] test im::wechat::adapter::tests::chunks_long_unicode_text ... ok
[INFO] [stdout] test codex_session_history::tests::preserves_rollout_modified_time_when_rewriting_provider ... ok
[INFO] [stdout] test im::wechat::api::tests::business_success_accepts_empty_or_zero_code ... ok
[INFO] [stdout] test im::wechat::flow::tests::command_keeps_bare_numbers_as_user_text ... ok
[INFO] [stdout] test im::wechat::flow::tests::menu_command_accepts_wechat_text_menu_replies ... ok
[INFO] [stdout] test im_runtime::tests::approval_can_be_resolved_by_request_key_without_chat_key ... ok
[INFO] [stdout] test im_runtime::tests::approval_reply_targets_current_request ... ok
[INFO] [stdout] test codex_app_config::tests::enable_remote_control_switch_updates_existing_disabled_row ... ok
[INFO] [stdout] test im::core::text_renderer::tests::markdown_image_target_can_be_replaced_with_uploaded_key ... ok
[INFO] [stdout] test im_runtime::tests::approval_request_lifecycle_survives_replay_until_resolved ... ok
[INFO] [stdout] test im_runtime::tests::im_remote_client_key_is_deterministic_and_route_scoped ... ok
[INFO] [stdout] test im_runtime::tests::route_from_conversation_key_preserves_platform ... ok
[INFO] [stdout] test im_runtime::tests::turn_origin_is_removed_when_turn_completes ... ok
[INFO] [stdout] test im_runtime::tests::turn_starting_blocks_parallel_starts_and_expires_old_messages ... ok
[INFO] [stdout] test remote_control_backend::clients::tests::feishu_bridge_client_uses_codexhub_display_name ... ok
[INFO] [stdout] test remote_control_backend::clients::tests::remote_control_environment_fallback_uses_codexhub_display_name ... ok
[INFO] [stdout] test remote_control_backend::compatibility::tests::statsig_bootstrap_payload_matches_codex_app_sync_bootstrap_shape ... ok
[INFO] [stdout] test remote_control_backend::tests::ack_cursor_orders_whole_message_after_chunks ... ok
[INFO] [stdout] test remote_control_backend::tests::connection_reset_removes_stale_initialize_state_but_keeps_replayable_requests ... ok
[INFO] [stdout] test remote_control_backend::tests::observe_server_chunk_reassembles_json_message ... ok
[INFO] [stdout] test remote_control_backend::tests::recovery_retry_policy_does_not_replay_non_idempotent_requests ... ok
[INFO] [stdout] test codex_app_config::tests::uninstall_codex_app_cleans_files_absent_before_first_write ... ok
[INFO] [stdout] test codex_app_config::tests::uninstall_codex_app_cleans_config_without_reverting_codex_app_writes ... ok
[INFO] [stdout] test codex_session_history::tests::updates_state_db_provider_when_present ... ok
[INFO] [stdout] test remote_control_backend::tests::virtual_remote_client_stream_is_namespaced_by_connection_stream ... ok
[INFO] [stdout] test remote_control_backend::tests::observe_server_chunk_ignores_duplicate_without_dropping_current_assembly ... ok
[INFO] [stdout] test remote_control_backend::tests::observe_server_chunk_rejects_size_overflow ... ok
[INFO] [stdout] test tests::compatible_loopback_addr_ignores_non_loopback ... ok
[INFO] [stdout] test tests::compatible_loopback_addr_pairs_ipv4_and_ipv6_localhost ... ok
[INFO] [stdout] test remote_control_backend::tests::ack_server_envelope_does_not_wait_for_remote_control_inner_lock ... ok
[INFO] [stdout] test remote_control_backend::tests::non_owner_thread_server_request_is_not_forwarded_to_im ... ok
[INFO] [stdout] test remote_control_backend::tests::non_owner_thread_notification_is_not_forwarded_to_im ... ok
[INFO] [stdout] test remote_control_backend::tests::initialize_remote_clients_for_connection_sends_connection_default_client ... ok
[INFO] [stdout] test remote_control_backend::tests::unbound_thread_started_does_not_replace_bound_im_thread ... ok
[INFO] [stdout] test remote_control_backend::tests::recovery_resubscribes_bound_threads_without_changing_current_session ... ok
[INFO] [stdout] test remote_control_backend::tests::unknown_reinitializes_same_stream_without_client_closed ... ok
[INFO] [stdout] test remote_control_backend::tests::record_remote_app_pong_unknown_requests_reinitialize_after_initialize ... ok
[INFO] [stdout] test remote_control_backend::tests::server_flood_fast_ack_does_not_wait_for_work_queue_drain ... ok
[INFO] [stdout] test remote_control_backend::tests::force_ws_reconnect_sends_close_message ... ok
[INFO] [stdout] test remote_control_backend::tests::bad_server_chunk_is_acked_without_closing_connection ... ok
[INFO] [stdout] test codex_app_config::tests::rejects_invalid_provider_name ... ok
[INFO] [stdout] test im::wechat::api::tests::business_error_classifies_expired_context_token ... ok
[INFO] [stdout] test remote_control_backend::tests::virtual_remote_clients_share_enrolled_client_id_and_use_distinct_streams ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 358 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.32s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "9583f05eb4ad24625c0f03af1f15fb8d410f1dd9dbf78076c802eaed00489abe", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "9583f05eb4ad24625c0f03af1f15fb8d410f1dd9dbf78076c802eaed00489abe", kill_on_drop: false }`
[INFO] [stdout] 9583f05eb4ad24625c0f03af1f15fb8d410f1dd9dbf78076c802eaed00489abe
