[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 { [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, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 10 | pub window_id: Option, [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) -> 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, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 10 | pub window_id: Option, [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) -> 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, [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] 10 | pub window_id: Option, [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) -> 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