[INFO] fetching crate zeph-llm 0.22.5...
[INFO] testing zeph-llm-0.22.5 against 1.99.0-beta.8 for beta-1.100-2
[INFO] extracting crate zeph-llm 0.22.5 into /workspace/builds/worker-5-tc1/source
[INFO] started tweaking crates.io crate zeph-llm 0.22.5
[INFO] removed 0 missing tests
[INFO] finished tweaking crates.io crate zeph-llm 0.22.5
[INFO] tweaked toml for crates.io crate zeph-llm 0.22.5 written to /workspace/builds/worker-5-tc1/source/Cargo.toml
[INFO] validating manifest of crates.io crate zeph-llm 0.22.5 on toolchain 1.99.0-beta.8
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate zeph-llm 0.22.5 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.99.0-beta.8" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded deadpool-runtime v0.1.4
[INFO] [stderr]   Downloaded wiremock v0.6.5
[INFO] [stderr]   Downloaded assert-json-diff v2.0.2
[INFO] [stderr]   Downloaded deadpool v0.12.3
[INFO] [stderr]   Downloaded monostate v0.1.18
[INFO] [stderr]   Downloaded extended v0.1.0
[INFO] [stderr]   Downloaded realfft v3.5.0
[INFO] [stderr]   Downloaded transpose v0.2.3
[INFO] [stderr]   Downloaded tokenizers v0.23.1
[INFO] [stderr]   Downloaded crossbeam-deque v0.8.7
[INFO] [stderr]   Downloaded paste v1.0.15
[INFO] [stderr]   Downloaded monostate-impl v0.1.18
[INFO] [stderr]   Downloaded bytemuck_derive v1.12.0
[INFO] [stderr]   Downloaded strength_reduce v0.2.4
[INFO] [stderr]   Downloaded macro_rules_attribute v0.2.3
[INFO] [stderr]   Downloaded symphonia-common v0.6.1
[INFO] [stderr]   Downloaded macro_rules_attribute-proc_macro v0.2.3
[INFO] [stderr]   Downloaded castaway v0.2.4
[INFO] [stderr]   Downloaded rayon-cond v0.4.0
[INFO] [stderr]   Downloaded dary_heap v0.3.9
[INFO] [stderr]   Downloaded symphonia v0.6.1
[INFO] [stderr]   Downloaded audioadapter v5.0.0
[INFO] [stderr]   Downloaded ahash v0.8.12
[INFO] [stderr]   Downloaded symphonia-format-riff v0.6.1
[INFO] [stderr]   Downloaded audioadapter-sample v5.1.0
[INFO] [stderr]   Downloaded pastey v0.2.3
[INFO] [stderr]   Downloaded daachorse v1.0.1
[INFO] [stderr]   Downloaded symphonia-metadata v0.6.1
[INFO] [stderr]   Downloaded symphonia-format-ogg v0.6.1
[INFO] [stderr]   Downloaded symphonia-codec-pcm v0.6.1
[INFO] [stderr]   Downloaded symphonia-bundle-mp3 v0.6.1
[INFO] [stderr]   Downloaded symphonia-bundle-flac v0.6.1
[INFO] [stderr]   Downloaded primal-check v0.3.4
[INFO] [stderr]   Downloaded audioadapter-buffers v5.1.0
[INFO] [stderr]   Downloaded ripemd v0.2.0
[INFO] [stderr]   Downloaded rfc6979 v0.6.0
[INFO] [stderr]   Downloaded tokio-retry v0.3.2
[INFO] [stderr]   Downloaded num-complex v0.4.6
[INFO] [stderr]   Downloaded windowfunctions v0.1.1
[INFO] [stderr]   Downloaded primefield v0.14.0
[INFO] [stderr]   Downloaded group v0.14.0
[INFO] [stderr]   Downloaded signature v3.0.0
[INFO] [stderr]   Downloaded base64 v0.13.1
[INFO] [stderr]   Downloaded wnaf v0.14.1
[INFO] [stderr]   Downloaded pkcs8 v0.11.0
[INFO] [stderr]   Downloaded unicode-normalization-alignments v0.1.12
[INFO] [stderr]   Downloaded compact_str v0.9.1
[INFO] [stderr]   Downloaded elliptic-curve v0.14.1
[INFO] [stderr]   Downloaded tracing-appender v0.2.5
[INFO] [stderr]   Downloaded tokio_with_wasm_proc v0.8.8
[INFO] [stderr]   Downloaded rubato v5.0.0
[INFO] [stderr]   Downloaded primeorder v0.14.0
[INFO] [stderr]   Downloaded base16ct v1.0.0
[INFO] [stderr]   Downloaded countio v0.3.0
[INFO] [stderr]   Downloaded console v0.16.4
[INFO] [stderr]   Downloaded thread_local v1.1.10
[INFO] [stderr]   Downloaded spki v0.8.0
[INFO] [stderr]   Downloaded git-version v0.3.9
[INFO] [stderr]   Downloaded gemm v0.19.0
[INFO] [stderr]   Downloaded memmap2 v0.9.11
[INFO] [stderr]   Downloaded encode_unicode v1.0.0
[INFO] [stderr]   Downloaded symlink v0.1.0
[INFO] [stderr]   Downloaded oneshot v0.1.13
[INFO] [stderr]   Downloaded konst_proc_macros v0.4.1
[INFO] [stderr]   Downloaded const_panic v0.2.16
[INFO] [stderr]   Downloaded safe-transmute v0.11.3
[INFO] [stderr]   Downloaded twox-hash v2.1.3
[INFO] [stderr]   Downloaded esaxx-rs v0.1.10
[INFO] [stderr]   Downloaded symphonia-core v0.6.1
[INFO] [stderr]   Downloaded regex-lite v0.1.9
[INFO] [stderr]   Downloaded ff v0.14.0
[INFO] [stderr]   Downloaded serdect v0.4.3
[INFO] [stderr]   Downloaded sec1 v0.8.1
[INFO] [stderr]   Downloaded ecdsa v0.17.0
[INFO] [stderr]   Downloaded similar v2.7.0
[INFO] [stderr]   Downloaded hf-hub v1.0.0
[INFO] [stderr]   Downloaded xet-runtime v1.6.0
[INFO] [stderr]   Downloaded crossbeam-channel v0.5.16
[INFO] [stderr]   Downloaded tokio_with_wasm v0.8.8
[INFO] [stderr]   Downloaded shellexpand v3.1.2
[INFO] [stderr]   Downloaded os_str_bytes v6.6.1
[INFO] [stderr]   Downloaded ctor v1.0.13
[INFO] [stderr]   Downloaded link-section v0.19.3
[INFO] [stderr]   Downloaded const-str v1.1.0
[INFO] [stderr]   Downloaded lz4_flex v0.13.1
[INFO] [stderr]   Downloaded onig v6.5.3
[INFO] [stderr]   Downloaded rustfft v6.4.1
[INFO] [stderr]   Downloaded k256 v0.14.0
[INFO] [stderr]   Downloaded crypto-bigint v0.7.5
[INFO] [stderr]   Downloaded der v0.8.1
[INFO] [stderr]   Downloaded insta v1.48.0
[INFO] [stderr]   Downloaded hf-xet v1.6.0
[INFO] [stderr]   Downloaded sysinfo v0.38.4
[INFO] [stderr]   Downloaded ntapi v0.4.3
[INFO] [stderr]   Downloaded konst v0.4.3
[INFO] [stderr]   Downloaded git-version-macro v0.3.9
[INFO] [stderr]   Downloaded linktime-proc-macro v0.2.3
[INFO] [stderr]   Downloaded objc2-io-kit v0.3.2
[INFO] [stderr]   Downloaded typewit v1.15.2
[INFO] [stderr]   Downloaded humantime v2.4.0
[INFO] [stderr]   Downloaded xet-data v1.6.0
[INFO] [stderr]   Downloaded heapify v0.2.0
[INFO] [stderr]   Downloaded globset v0.4.20
[INFO] [stderr]   Downloaded candle-nn v0.11.0
[INFO] [stderr]   Downloaded objc2-metal v0.3.2
[INFO] [stderr]   Downloaded gemm-c32 v0.18.2
[INFO] [stderr]   Downloaded env_home v0.1.0
[INFO] [stderr]   Downloaded spm_precompiled v0.1.4
[INFO] [stderr]   Downloaded statrs v0.18.0
[INFO] [stderr]   Downloaded approx v0.5.1
[INFO] [stderr]   Downloaded gemm-f64 v0.19.0
[INFO] [stderr]   Downloaded pulp-wasm-simd-flag v0.1.1
[INFO] [stderr]   Downloaded dyn-stack-macros v0.1.3
[INFO] [stderr]   Downloaded gemm-c64 v0.19.0
[INFO] [stderr]   Downloaded candle-ug v0.11.0
[INFO] [stderr]   Downloaded num v0.4.3
[INFO] [stderr]   Downloaded fs2 v0.4.3
[INFO] [stderr]   Downloaded redb v3.1.3
[INFO] [stderr]   Downloaded criterion v0.8.2
[INFO] [stderr]   Downloaded safetensors v0.8.0
[INFO] [stderr]   Downloaded yoke-derive v0.7.5
[INFO] [stderr]   Downloaded gemm-f16 v0.18.2
[INFO] [stderr]   Downloaded gemm-c64 v0.18.2
[INFO] [stderr]   Downloaded more-asserts v0.3.1
[INFO] [stderr]   Downloaded colored v3.1.1
[INFO] [stderr]   Downloaded page_size v0.6.0
[INFO] [stderr]   Downloaded serde_plain v1.0.2
[INFO] [stderr]   Downloaded float8 v0.7.0
[INFO] [stderr]   Downloaded yoke v0.7.5
[INFO] [stderr]   Downloaded reqwest-middleware v0.5.2
[INFO] [stderr]   Downloaded criterion-plot v0.8.2
[INFO] [stderr]   Downloaded clap v4.6.6
[INFO] [stderr]   Downloaded half v2.7.1
[INFO] [stderr]   Downloaded gemm-c32 v0.19.0
[INFO] [stderr]   Downloaded rand_distr v0.5.1
[INFO] [stderr]   Downloaded fancy-regex v0.18.0
[INFO] [stderr]   Downloaded bon-macros v3.9.3
[INFO] [stderr]   Downloaded gemm-f32 v0.19.0
[INFO] [stderr]   Downloaded safetensors v0.4.5
[INFO] [stderr]   Downloaded num-rational v0.4.2
[INFO] [stderr]   Downloaded gemm v0.18.2
[INFO] [stderr]   Downloaded enum-as-inner v0.6.1
[INFO] [stderr]   Downloaded gemm-f64 v0.18.2
[INFO] [stderr]   Downloaded xet-core-structures v1.6.0
[INFO] [stderr]   Downloaded clap_builder v4.6.6
[INFO] [stderr]   Downloaded tokenizers v0.22.2
[INFO] [stderr]   Downloaded which v7.0.3
[INFO] [stderr]   Downloaded reborrow v0.5.5
[INFO] [stderr]   Downloaded cudarc v0.19.9
[INFO] [stderr]   Downloaded ug-metal v0.5.0
[INFO] [stderr]   Downloaded cudaforge v0.1.6
[INFO] [stderr]   Downloaded seq-macro v0.3.6
[INFO] [stderr]   Downloaded gemm-f32 v0.18.2
[INFO] [stderr]   Downloaded candle-core v0.11.0
[INFO] [stderr]   Downloaded sysctl v0.6.0
[INFO] [stderr]   Downloaded dyn-stack v0.13.2
[INFO] [stderr]   Downloaded gemm-common v0.18.2
[INFO] [stderr]   Downloaded ug-cuda v0.5.0
[INFO] [stderr]   Downloaded objc2-foundation v0.3.2
[INFO] [stderr]   Downloaded gemm-common v0.19.0
[INFO] [stderr]   Downloaded candle-transformers v0.11.0
[INFO] [stderr]   Downloaded gemm-f16 v0.19.0
[INFO] [stderr]   Downloaded libloading v0.9.0
[INFO] [stderr]   Downloaded ug v0.5.0
[INFO] [stderr]   Downloaded bech32 v0.12.0
[INFO] [stderr]   Downloaded candle-kernels v0.11.0
[INFO] [stderr]   Downloaded pulp v0.22.3
[INFO] [stderr]   Downloaded xet-client v1.6.0
[INFO] [stderr]   Downloaded pulp v0.21.5
[INFO] [stderr]   Downloaded winsafe v0.0.19
[INFO] [stderr]   Downloaded onig_sys v69.9.3
[INFO] [stderr]   Downloaded cudarc v0.17.8
[INFO] [stderr]   Downloaded bon v3.9.3
[INFO] [stderr]   Downloaded alloca v0.4.0
[INFO] [stderr]   Downloaded candle-metal-kernels v0.11.0
[INFO] [stderr]   Downloaded gearhash v0.1.3
[INFO] [stderr]   Downloaded metal v0.29.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-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:3111399a4047eeb3a02b7a90e478d715f38a8c6669b5c4b49d30a17385265909" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 41d328ffff2385b7ad31750b8427076d1b7d4fb923b93dd6b4364ac4c385dcd2
[INFO] running `Command { std: "docker" "start" "41d328ffff2385b7ad31750b8427076d1b7d4fb923b93dd6b4364ac4c385dcd2", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "41d328ffff2385b7ad31750b8427076d1b7d4fb923b93dd6b4364ac4c385dcd2", 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" "41d328ffff2385b7ad31750b8427076d1b7d4fb923b93dd6b4364ac4c385dcd2" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "41d328ffff2385b7ad31750b8427076d1b7d4fb923b93dd6b4364ac4c385dcd2", 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" "41d328ffff2385b7ad31750b8427076d1b7d4fb923b93dd6b4364ac4c385dcd2" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling syn v3.0.3
[INFO] [stderr]    Compiling syn v2.0.119
[INFO] [stderr]    Compiling serde_core v1.0.229
[INFO] [stderr]    Compiling find-msvc-tools v0.1.11
[INFO] [stderr]    Compiling smallvec v1.15.2
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]    Compiling futures-core v0.3.34
[INFO] [stderr]    Compiling memchr v2.8.3
[INFO] [stderr]    Compiling bytes v1.12.1
[INFO] [stderr]    Compiling futures-sink v0.3.34
[INFO] [stderr]    Compiling dunce v1.0.5
[INFO] [stderr]    Compiling fs_extra v1.3.0
[INFO] [stderr]    Compiling jobserver v0.1.35
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling mio v1.2.2
[INFO] [stderr]    Compiling socket2 v0.6.5
[INFO] [stderr]    Compiling pkg-config v0.3.34
[INFO] [stderr]    Compiling writeable v0.6.4
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling litemap v0.8.3
[INFO] [stderr]    Compiling cc v1.2.67
[INFO] [stderr]    Compiling icu_properties_data v2.3.0
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling icu_normalizer_data v2.3.0
[INFO] [stderr]    Compiling futures-channel v0.3.34
[INFO] [stderr]    Compiling aws-lc-rs v1.18.0
[INFO] [stderr]    Compiling futures-io v0.3.34
[INFO] [stderr]    Compiling futures-task v0.3.34
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling http v1.5.0
[INFO] [stderr]    Compiling hashbrown v0.17.1
[INFO] [stderr]    Compiling untrusted v0.9.0
[INFO] [stderr]    Compiling rustls v0.23.45
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling subtle v2.6.1
[INFO] [stderr]    Compiling rand_core v0.10.1
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]    Compiling libm v0.2.16
[INFO] [stderr]    Compiling rustversion v1.0.23
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling sync_wrapper v1.0.2
[INFO] [stderr]    Compiling ref-cast v1.0.26
[INFO] [stderr]    Compiling ipnet v2.12.1
[INFO] [stderr]    Compiling unicase v2.9.0
[INFO] [stderr]    Compiling winnow v1.0.4
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling log v0.4.33
[INFO] [stderr]    Compiling aho-corasick v1.1.5
[INFO] [stderr]    Compiling arrayref v0.3.9
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]    Compiling mime_guess v2.0.5
[INFO] [stderr]    Compiling option-ext v0.2.0
[INFO] [stderr]    Compiling dyn-clone v1.0.20
[INFO] [stderr]    Compiling constant_time_eq v0.4.2
[INFO] [stderr]    Compiling toml_writer v1.1.2+spec-1.1.0
[INFO] [stderr]    Compiling arrayvec v0.7.8
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling dirs-sys v0.5.0
[INFO] [stderr]    Compiling cmake v0.1.58
[INFO] [stderr]    Compiling http-body v1.1.0
[INFO] [stderr]    Compiling toml_parser v1.1.3+spec-1.1.0
[INFO] [stderr]    Compiling http-body-util v0.1.5
[INFO] [stderr]    Compiling chacha20 v0.10.2
[INFO] [stderr]    Compiling cpu-time v1.0.0
[INFO] [stderr]    Compiling minimal-lexical v0.2.1
[INFO] [stderr]    Compiling dirs v6.0.0
[INFO] [stderr]    Compiling static_assertions v1.1.0
[INFO] [stderr]    Compiling base64 v0.23.1
[INFO] [stderr]    Compiling regex-automata v0.4.18
[INFO] [stderr]    Compiling rapidhash v4.5.1
[INFO] [stderr]    Compiling nom v7.1.3
[INFO] [stderr]    Compiling rand v0.10.2
[INFO] [stderr]    Compiling aws-lc-sys v0.44.0
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling blake3 v1.8.6
[INFO] [stderr]    Compiling metrics v0.24.6
[INFO] [stderr]    Compiling rand_distr v0.6.0
[INFO] [stderr]    Compiling toml_datetime v1.1.1+spec-1.1.0
[INFO] [stderr]    Compiling serde_spanned v1.1.1
[INFO] [stderr]    Compiling serde_derive_internals v0.30.0
[INFO] [stderr]    Compiling uuid v1.24.1
[INFO] [stderr]    Compiling toml v1.1.4+spec-1.1.0
[INFO] [stderr]    Compiling toml_edit v0.25.13+spec-1.1.0
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling eventsource-stream v0.2.3
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling zerovec-derive v0.11.4
[INFO] [stderr]    Compiling displaydoc v0.2.7
[INFO] [stderr]    Compiling tokio-macros v2.7.2
[INFO] [stderr]    Compiling futures-macro v0.3.34
[INFO] [stderr]    Compiling ref-cast-impl v1.0.26
[INFO] [stderr]    Compiling thiserror-impl v2.0.20
[INFO] [stderr]    Compiling schemars_derive v1.2.2
[INFO] [stderr]    Compiling regex v1.13.1
[INFO] [stderr]    Compiling tokio v1.53.1
[INFO] [stderr]    Compiling futures-util v0.3.34
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling zeroize_derive v1.5.0
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling async-stream-impl v0.3.6
[INFO] [stderr]    Compiling async-stream v0.3.6
[INFO] [stderr]    Compiling thiserror v2.0.20
[INFO] [stderr]    Compiling zerofrom v0.1.8
[INFO] [stderr]    Compiling yoke v0.8.3
[INFO] [stderr]    Compiling zerovec v0.11.7
[INFO] [stderr]    Compiling zerotrie v0.2.5
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling tinystr v0.8.4
[INFO] [stderr]    Compiling potential_utf v0.1.6
[INFO] [stderr]    Compiling zeroize v1.9.0
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling schemars v1.2.2
[INFO] [stderr]    Compiling icu_locale_core v2.3.0
[INFO] [stderr]    Compiling icu_collections v2.3.0
[INFO] [stderr]    Compiling ordered-float v5.3.0
[INFO] [stderr]    Compiling rustls-pki-types v1.15.1
[INFO] [stderr]    Compiling webpki-roots v1.0.9
[INFO] [stderr]    Compiling rustls-native-certs v0.8.4
[INFO] [stderr]    Compiling icu_provider v2.3.0
[INFO] [stderr]    Compiling icu_normalizer v2.3.0
[INFO] [stderr]    Compiling icu_properties v2.3.0
[INFO] [stderr]    Compiling futures-executor v0.3.34
[INFO] [stderr]    Compiling futures v0.3.34
[INFO] [stderr]    Compiling idna_adapter v1.2.2
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling tokio-util v0.7.19
[INFO] [stderr]    Compiling hyper v1.11.0
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling tokio-stream v0.1.19
[INFO] [stderr]    Compiling zeph-common v0.22.5
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling zeph-config v0.22.5
[INFO] [stderr]    Compiling rustls-webpki v0.103.14
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling rustls-platform-verifier v0.7.0
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling reqwest v0.13.4
[INFO] [stderr]    Compiling ollama-rs v0.3.6
[INFO] [stderr]    Compiling zeph-llm v0.22.5 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 52.84s
[INFO] running `Command { std: "docker" "inspect" "41d328ffff2385b7ad31750b8427076d1b7d4fb923b93dd6b4364ac4c385dcd2", 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" "41d328ffff2385b7ad31750b8427076d1b7d4fb923b93dd6b4364ac4c385dcd2" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling tokio v1.53.1
[INFO] [stderr]    Compiling futures-util v0.3.34
[INFO] [stderr]    Compiling zerocopy v0.8.56
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling zerocopy-derive v0.8.56
[INFO] [stderr]    Compiling crossbeam-utils v0.8.22
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.20
[INFO] [stderr]    Compiling crossbeam-deque v0.8.7
[INFO] [stderr]    Compiling either v1.17.0
[INFO] [stderr]    Compiling rayon-core v1.13.0
[INFO] [stderr]    Compiling alloca v0.4.0
[INFO] [stderr]    Compiling anstyle v1.0.14
[INFO] [stderr]    Compiling plotters-backend v0.3.7
[INFO] [stderr]    Compiling ciborium-io v0.2.2
[INFO] [stderr]    Compiling clap_lex v1.1.0
[INFO] [stderr]    Compiling num_cpus v1.17.0
[INFO] [stderr]    Compiling cast v0.3.0
[INFO] [stderr]    Compiling same-file v1.0.6
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling deadpool-runtime v0.1.4
[INFO] [stderr]    Compiling walkdir v2.5.0
[INFO] [stderr]    Compiling assert-json-diff v2.0.2
[INFO] [stderr]    Compiling clap_builder v4.6.6
[INFO] [stderr]    Compiling plotters-svg v0.3.7
[INFO] [stderr]    Compiling tinytemplate v1.2.1
[INFO] [stderr]    Compiling console v0.16.4
[INFO] [stderr]    Compiling page_size v0.6.0
[INFO] [stderr]    Compiling anes v0.1.6
[INFO] [stderr]    Compiling similar v2.7.0
[INFO] [stderr]    Compiling oorandom v11.1.5
[INFO] [stderr]    Compiling ordered-float v5.3.0
[INFO] [stderr]    Compiling rand_distr v0.6.0
[INFO] [stderr]    Compiling plotters v0.3.7
[INFO] [stderr]    Compiling rayon v1.12.0
[INFO] [stderr]    Compiling criterion-plot v0.8.2
[INFO] [stderr]    Compiling clap v4.6.6
[INFO] [stderr]    Compiling futures-executor v0.3.34
[INFO] [stderr]    Compiling futures v0.3.34
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling rusty-fork v0.3.1
[INFO] [stderr]    Compiling insta v1.48.0
[INFO] [stderr]    Compiling tokio-util v0.7.19
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling tokio-stream v0.1.19
[INFO] [stderr]    Compiling deadpool v0.12.3
[INFO] [stderr]    Compiling half v2.7.1
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling h2 v0.4.19
[INFO] [stderr]    Compiling zeph-common v0.22.5
[INFO] [stderr]    Compiling ciborium-ll v0.2.2
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling ciborium v0.2.2
[INFO] [stderr]    Compiling proptest v1.11.0
[INFO] [stderr]    Compiling criterion v0.8.2
[INFO] [stderr]    Compiling zeph-config v0.22.5
[INFO] [stderr]    Compiling hyper v1.11.0
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling wiremock v0.6.5
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling reqwest v0.13.4
[INFO] [stderr]    Compiling ollama-rs v0.3.6
[INFO] [stderr]    Compiling zeph-llm v0.22.5 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 55.33s
[INFO] running `Command { std: "docker" "inspect" "41d328ffff2385b7ad31750b8427076d1b7d4fb923b93dd6b4364ac4c385dcd2", 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" "41d328ffff2385b7ad31750b8427076d1b7d4fb923b93dd6b4364ac4c385dcd2" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.37s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/zeph_llm-9fcf3cbd6e140c09)
[INFO] [stdout] 
[INFO] [stdout] running 1199 tests
[INFO] [stdout] test any::tests::any_claude_name ... ok
[INFO] [stdout] test any::tests::any_claude_supports_streaming ... ok
[INFO] [stdout] test any::tests::any_claude_supports_vision ... ok
[INFO] [stdout] test any::tests::any_claude_name_delegates ... ok
[INFO] [stdout] test any::tests::any_claude_embed_error_message ... ok
[INFO] [stdout] test any::tests::any_claude_debug ... ok
[INFO] [stdout] test any::tests::any_ollama_chat_stream_unreachable_errors ... ok
[INFO] [stdout] test any::tests::any_claude_chat_stream_unreachable_errors ... ok
[INFO] [stdout] test any::tests::any_claude_chat_unreachable_errors ... ok
[INFO] [stdout] test any::tests::any_claude_embed_returns_error ... ok
[INFO] [stdout] test any::tests::any_claude_does_not_support_embeddings ... ok
[INFO] [stdout] test any::tests::any_claude_context_window_delegates ... ok
[INFO] [stdout] test any::tests::any_cocoon_name ... ok
[INFO] [stdout] test any::tests::any_ollama_embed_unreachable_errors ... ok
[INFO] [stdout] test any::tests::any_ollama_does_not_support_structured_output ... ok
[INFO] [stdout] test any::tests::any_cocoon_supports_streaming ... ok
[INFO] [stdout] test any::tests::any_claude_clone ... ok
[INFO] [stdout] test any::tests::any_ollama_supports_streaming ... ok
[INFO] [stdout] test any::tests::any_ollama_supports_vision_true_with_vision_model ... ok
[INFO] [stdout] test any::tests::any_ollama_context_window_delegates ... ok
[INFO] [stdout] test any::tests::any_ollama_name_delegates ... ok
[INFO] [stdout] test any::tests::any_ollama_supports_embeddings ... ok
[INFO] [stdout] test any::tests::any_ollama_with_generation_overrides_preserves_variant ... ok
[INFO] [stdout] test any::tests::any_ollama_debug ... ok
[INFO] [stdout] test any::tests::any_ollama_name ... ok
[INFO] [stdout] test any::tests::any_ollama_clone ... ok
[INFO] [stdout] test any::tests::any_ollama_supports_vision_false_by_default ... ok
[INFO] [stdout] test any::tests::any_ollama_chat_unreachable_errors ... ok
[INFO] [stdout] test any::tests::any_openai_supports_streaming ... ok
[INFO] [stdout] test any::tests::chat_typed_erased_dispatches_to_mock ... ok
[INFO] [stdout] test any::tests::any_openai_name ... ok
[INFO] [stdout] test any::tests::reasoning_effort_as_str_roundtrip ... ok
[INFO] [stdout] test any::tests::reasoning_effort_from_str_case_insensitive ... ok
[INFO] [stdout] test any::tests::reasoning_effort_from_str_rejects_unknown ... ok
[INFO] [stdout] test any::tests::any_openai_supports_structured_output ... ok
[INFO] [stdout] test any::tests::any_cocoon_provider_kind_str ... ok
[INFO] [stdout] test any::tests::apply_reasoning_effort_unsupported_provider_returns_capability_mismatch ... ok
[INFO] [stdout] test any::tests::apply_reasoning_effort_compatible_sets_string_field ... ok
[INFO] [stdout] test classifier::llm::tests::build_judge_messages_escapes_xml_tags ... ok
[INFO] [stdout] test classifier::llm::tests::build_judge_messages_returns_two_messages ... ok
[INFO] [stdout] test classifier::llm::tests::build_judge_messages_truncates_long_user_msg ... ok
[INFO] [stdout] test classifier::llm::tests::llm_classifier_backend_name ... ok
[INFO] [stdout] test any::tests::any_openai_supports_vision_true_for_vision_model ... ok
[INFO] [stdout] test any::tests::apply_reasoning_effort_gemini_sets_thinking_level ... ok
[INFO] [stdout] test classifier::llm::tests::llm_classifier_low_confidence_becomes_neutral ... ok
[INFO] [stdout] test any::tests::apply_reasoning_effort_masked_dispatches_to_inner ... ok
[INFO] [stdout] test classifier::metrics::tests::p50_p95_correct_for_one_to_ten_ms ... ok
[INFO] [stdout] test classifier::metrics::tests::p50_p95_correct_for_ten_samples ... ok
[INFO] [stdout] test classifier::metrics::tests::record_single_sample_gives_same_p50_p95 ... ok
[INFO] [stdout] test classifier::llm::tests::llm_classifier_mock_returns_verdict ... ok
[INFO] [stdout] test any::tests::apply_reasoning_effort_openai_sets_string_field ... ok
[INFO] [stdout] test classifier::metrics::tests::ring_buffer_evicts_oldest_when_full ... ok
[INFO] [stdout] test classifier::metrics::tests::ring_buffer_evicts_oldest_at_default_capacity ... ok
[INFO] [stdout] test classifier::metrics::tests::empty_snapshot_has_none_percentiles ... ok
[INFO] [stdout] test any::tests::any_provider_clone_independence ... ok
[INFO] [stdout] test classifier::metrics::tests::two_samples_p50_returns_higher_with_round ... ok
[INFO] [stdout] test claude::request::tests::d4_empty_blocks_skip_can_promote_a_leading_assistant_message ... ok
[INFO] [stdout] test claude::request::tests::d4_empty_content_orphaned_tool_result_survives_as_non_empty_text_anchor ... ok
[INFO] [stdout] test claude::request::tests::adjacency_is_stricter_than_the_old_threaded_state_across_a_text_message ... ok
[INFO] [stdout] test any::tests::any_openai_supports_embeddings ... ok
[INFO] [stdout] test classifier::metrics::tests::identical_values_give_same_p50_p95 ... ok
[INFO] [stdout] test claude::request::tests::d4_leading_skip_does_not_disturb_a_following_user_message ... ok
[INFO] [stdout] test claude::request::tests::split_messages_all_roles ... ok
[INFO] [stdout] test any::tests::any_openai_debug ... ok
[INFO] [stdout] test claude::request::tests::split_messages_extracts_system ... ok
[INFO] [stdout] test claude::request::tests::split_messages_interleaved_system ... ok
[INFO] [stdout] test claude::request::tests::split_messages_multiple_system ... ok
[INFO] [stdout] test claude::request::tests::split_messages_no_system ... ok
[INFO] [stdout] test claude::request::tests::split_messages_only_assistant ... ok
[INFO] [stdout] test claude::request::tests::redacted_thinking_block_serializes_in_structured_message ... ok
[INFO] [stdout] test claude::request::tests::split_messages_empty ... ok
[INFO] [stdout] test claude::request::tests::split_messages_structured_cache_enabled_adds_cache_control ... ok
[INFO] [stdout] test claude::request::tests::split_messages_structured_compaction_round_trip ... ok
[INFO] [stdout] test claude::request::tests::split_messages_structured_produces_image_block ... ok
[INFO] [stdout] test claude::request::tests::split_messages_only_system ... ok
[INFO] [stdout] test claude::request::tests::split_messages_structured_downgrades_unmatched_tool_use_to_text ... ok
[INFO] [stdout] test claude::request::tests::split_messages_structured_two_messages_places_breakpoint_on_user ... ok
[INFO] [stdout] test claude::request::tests::split_messages_structured_breakpoint_targets_last_minus_20_position ... ok
[INFO] [stdout] test claude::request::tests::split_messages_structured_cache_disabled_no_cache_control ... ok
[INFO] [stdout] test claude::request::tests::split_messages_structured_preserves_matched_tool_use_block ... ok
[INFO] [stdout] test claude::tests::anthropic_tool_serialization ... ok
[INFO] [stdout] test claude::request::tests::split_structured_system_not_in_visible ... ok
[INFO] [stdout] test claude::request::tests::split_structured_downgrades_orphaned_tool_result ... ok
[INFO] [stdout] test claude::request::tests::split_messages_structured_single_message_no_cache_breakpoint ... ok
[INFO] [stdout] test claude::tests::api_response_deserializes ... ok
[INFO] [stdout] test claude::tests::api_response_multiple_content_blocks ... ok
[INFO] [stdout] test claude::request::tests::split_messages_structured_with_tool_parts ... ok
[INFO] [stdout] test claude::tests::apply_cache_breakpoint_propagates_one_hour_ttl ... ok
[INFO] [stdout] test claude::request::tests::thinking_block_serializes_in_structured_message ... ok
[INFO] [stdout] test claude::tests::api_response_empty_content ... ok
[INFO] [stdout] test claude::tests::anthropic_content_block_image_serializes_correctly ... ok
[INFO] [stdout] test claude::tests::api_message_serializes ... ok
[INFO] [stdout] test claude::tests::api_response_with_usage ... ok
[INFO] [stdout] test claude::tests::api_usage_deserialization ... ok
[INFO] [stdout] test any::tests::set_thinking_budget_claude_sets_and_clears ... ok
[INFO] [stdout] test any::tests::any_openai_supports_vision_false_for_gpt35 ... ok
[INFO] [stdout] test any::tests::apply_reasoning_effort_claude_sets_adaptive_and_overrides_extended ... ok
[INFO] [stdout] test claude::tests::budget_to_effort_boundaries ... ok
[INFO] [stdout] test any::tests::set_thinking_budget_masked_dispatches_to_inner ... ok
[INFO] [stdout] test any::tests::set_thinking_budget_unsupported_provider_returns_capability_mismatch ... ok
[INFO] [stdout] test claude::tests::beta_header_adaptive_mode_excludes_interleaved ... ok
[INFO] [stdout] test any::tests::set_thinking_budget_gemini_none_maps_to_disable ... ok
[INFO] [stdout] test any::tests::current_thinking_budget_and_effort_none_by_default ... ok
[INFO] [stdout] test claude::tests::any_provider_claude_surfaces_last_ttft_ms ... ok
[INFO] [stdout] test claude::tests::beta_header_excludes_compact_when_disabled ... ok
[INFO] [stdout] test any::tests::any_provider_debug_variants ... ok
[INFO] [stdout] test claude::tests::build_request_does_not_include_anthropic_beta_header ... ok
[INFO] [stdout] test claude::tests::build_request_opus_4_6_no_thinking_keeps_trailing_assistant ... ok
[INFO] [stdout] test claude::tests::build_request_multi_turn_no_top_level_cache_control ... ok
[INFO] [stdout] test claude::tests::beta_header_includes_compact_when_server_compaction_enabled ... ok
[INFO] [stdout] test claude::tests::beta_header_excluded_after_rejection ... ok
[INFO] [stdout] test claude::tests::build_request_opus_thinking_strips_trailing_assistant ... ok
[INFO] [stdout] test claude::tests::build_thinking_param_adaptive_serializes_correctly ... ok
[INFO] [stdout] test claude::tests::beta_header_omits_extended_cache_ttl_for_ephemeral ... ok
[INFO] [stdout] test claude::tests::beta_header_sonnet_4_6_extended_with_tools_includes_interleaved ... ok
[INFO] [stdout] test claude::tests::build_request_single_message_no_top_level_cache_control ... ok
[INFO] [stdout] test claude::tests::beta_header_sonnet_4_6_extended_no_tools_excludes_interleaved ... ok
[INFO] [stdout] test claude::tests::build_request_opus_4_8_no_thinking_strips_trailing_assistant ... ok
[INFO] [stdout] test claude::tests::build_request_sonnet_4_6_thinking_strips_trailing_assistant ... ok
[INFO] [stdout] test claude::tests::build_request_sonnet_4_6_no_thinking_strips_trailing_assistant ... ok
[INFO] [stdout] test claude::tests::beta_header_includes_extended_cache_ttl_for_one_hour ... ok
[INFO] [stdout] test claude::tests::build_request_opus_4_6_thinking_strips_trailing_assistant ... ok
[INFO] [stdout] test claude::tests::build_thinking_param_adaptive_with_effort_returns_effort ... ok
[INFO] [stdout] test claude::tests::build_thinking_param_no_thinking_returns_none ... ok
[INFO] [stdout] test claude::tests::build_request_with_extended_context_includes_beta_header ... ok
[INFO] [stdout] test claude::tests::build_thinking_param_adaptive_returns_adaptive_type ... ok
[INFO] [stdout] test claude::tests::build_request_sonnet_5_no_thinking_strips_trailing_assistant ... ok
[INFO] [stdout] test claude::tests::beta_header_without_thinking_returns_none ... ok
[INFO] [stdout] test claude::tests::build_thinking_param_extended_returns_enabled_with_budget ... ok
[INFO] [stdout] test claude::tests::cache_min_tokens_non_sonnet_returns_4096 ... ok
[INFO] [stdout] test claude::tests::cache_min_tokens_sonnet_returns_2048 ... ok
[INFO] [stdout] test claude::tests::cache_ttl_ephemeral_toml_round_trip ... ok
[INFO] [stdout] test claude::tests::cache_ttl_one_hour_requires_beta ... ok
[INFO] [stdout] test claude::tests::cache_ttl_ephemeral_serializes_without_ttl_field ... ok
[INFO] [stdout] test claude::tests::cache_ttl_deserialize_rejects_unknown_string ... ok
[INFO] [stdout] test claude::tests::cache_ttl_ephemeral_requires_no_beta ... ok
[INFO] [stdout] test claude::tests::cache_ttl_one_hour_toml_round_trip ... ok
[INFO] [stdout] test claude::tests::cache_ttl_one_hour_serializes_with_ttl_field ... ok
[INFO] [stdout] test claude::tests::claude_supports_embeddings_returns_false ... ok
[INFO] [stdout] test claude::tests::clone_shares_rejection_flag ... ok
[INFO] [stdout] test claude::tests::compaction_content_block_deserialized ... ok
[INFO] [stdout] test claude::tests::content_block_deserializes ... ok
[INFO] [stdout] test claude::tests::chat_stream_with_unreachable_endpoint_errors ... ok
[INFO] [stdout] test claude::tests::build_thinking_param_opus_adaptive_unchanged ... ok
[INFO] [stdout] test claude::tests::claude_embed_returns_error ... ok
[INFO] [stdout] test claude::tests::build_thinking_param_sonnet_extended_unchanged ... ok
[INFO] [stdout] test claude::tests::clone_preserves_cache_user_messages ... ok
[INFO] [stdout] test claude::tests::build_thinking_param_opus_extended_converts_to_adaptive ... ok
[INFO] [stdout] test claude::tests::clone_preserves_fields ... ok
[INFO] [stdout] test claude::tests::claude_sse_fixture_contains_expected_events ... ok
[INFO] [stdout] test claude::tests::chat_with_tools_sends_correct_tool_fields ... ok
[INFO] [stdout] test claude::tests::chat_typed_no_prefill_strips_trailing_assistant_over_wire ... ok
[INFO] [stdout] test claude::tests::context_management_serializes_correctly ... ok
[INFO] [stdout] test claude::tests::chat_with_tools_cache_hit_does_not_re_serialize ... ok
[INFO] [stdout] test claude::tests::chat_with_tools_stream_no_prefill_strips_trailing_assistant_over_wire ... ok
[INFO] [stdout] test claude::tests::chat_with_tools_no_prefill_strips_trailing_assistant_over_wire ... ok
[INFO] [stdout] test claude::tests::context_management_absent_when_disabled ... ok
[INFO] [stdout] test claude::tests::debug_redacts_api_key ... ok
[INFO] [stdout] test claude::tests::context_management_absent_after_rejection ... ok
[INFO] [stdout] test claude::tests::chat_with_unreachable_endpoint_errors ... ok
[INFO] [stdout] test claude::tests::debug_request_json_image_branch_strips_trailing_assistant_for_opus_thinking ... ok
[INFO] [stdout] test claude::tests::chat_with_tools_cache_partial_tool_set_change_invalidates ... ok
[INFO] [stdout] test claude::tests::extended_context_disabled_returns_200k_context_window ... ok
[INFO] [stdout] test claude::tests::debug_request_json_tools_branch_keeps_trailing_assistant_without_thinking ... ok
[INFO] [stdout] test claude::tests::context_management_present_when_enabled ... ok
[INFO] [stdout] test claude::tests::extended_context_enabled_haiku_returns_200k_context_window ... ok
[INFO] [stdout] test claude::tests::debug_request_json_tools_branch_strips_trailing_assistant_for_opus_thinking ... ok
[INFO] [stdout] test claude::tests::extended_context_disabled_no_beta_header ... ok
[INFO] [stdout] test claude::tests::debug_includes_model_and_max_tokens ... ok
[INFO] [stdout] test claude::tests::extended_context_enabled_includes_beta_header ... ok
[INFO] [stdout] test claude::tests::has_image_parts_detects_image_in_messages ... ok
[INFO] [stdout] test claude::tests::integration_claude_chat ... ignored, requires ZEPH_CLAUDE_API_KEY env var
[INFO] [stdout] test claude::tests::integration_claude_chat_stream ... ignored, requires ZEPH_CLAUDE_API_KEY env var
[INFO] [stdout] test claude::tests::integration_claude_stream_matches_chat ... ignored, requires ZEPH_CLAUDE_API_KEY env var
[INFO] [stdout] test claude::tests::is_compact_beta_rejection_detects_context_management_extra_inputs ... ok
[INFO] [stdout] test claude::tests::is_compact_beta_rejection_detects_context_management_generic ... ok
[INFO] [stdout] test claude::tests::is_compact_beta_rejection_detects_invalid_beta_keyword ... ok
[INFO] [stdout] test claude::tests::is_compact_beta_rejection_detects_unknown_beta ... ok
[INFO] [stdout] test claude::tests::is_compact_beta_rejection_ignores_non_400 ... ok
[INFO] [stdout] test claude::tests::is_compact_beta_rejection_ignores_unrelated_400 ... ok
[INFO] [stdout] test claude::tests::current_thinking_budget_and_effort_none_when_disabled ... ok
[INFO] [stdout] test claude::tests::is_compact_beta_rejection_ignores_unrelated_no_context_management ... ok
[INFO] [stdout] test claude::tests::context_window_unknown_model ... ok
[INFO] [stdout] test claude::tests::debug_request_json_plain_branch_strips_trailing_assistant_for_opus_thinking ... ok
[INFO] [stdout] test claude::tests::messages_response_deserialization ... ok
[INFO] [stdout] test claude::tests::extended_context_enabled_returns_1m_context_window ... ok
[INFO] [stdout] test claude::tests::model_item_filters_non_model_type ... ok
[INFO] [stdout] test claude::tests::model_item_uses_id_as_display_name_when_missing ... ok
[INFO] [stdout] test claude::tests::handle_compact_beta_rejection_sets_flags_and_returns_true_on_first_rejection ... ok
[INFO] [stdout] test claude::tests::get_or_build_api_tools_only_last_tool_has_cache_control ... ok
[INFO] [stdout] test claude::tests::messages_429_overload_propagates ... ok
[INFO] [stdout] test claude::tests::current_thinking_budget_reflects_extended_config ... ok
[INFO] [stdout] test claude::tests::handle_compact_beta_rejection_returns_false_when_already_retried ... ok
[INFO] [stdout] test claude::tests::debug_tool_request_caps_block_cache_controls_at_four ... ok
[INFO] [stdout] test claude::tests::current_reasoning_effort_reflects_adaptive_config ... ok
[INFO] [stdout] test claude::tests::handle_compact_beta_rejection_returns_false_for_non_rejection_error ... ok
[INFO] [stdout] test claude::tests::masked_provider_surfaces_last_ttft_ms ... ok
[INFO] [stdout] test claude::tests::extended_context_with_interleaved_thinking_combines_headers ... ok
[INFO] [stdout] test claude::tests::pagination_response_has_more_true_extracts_last_id ... ok
[INFO] [stdout] test claude::tests::pagination_response_has_more_false_stops_loop ... ok
[INFO] [stdout] test claude::tests::get_or_build_api_tools_single_tool_has_cache_control ... ok
[INFO] [stdout] test claude::tests::parse_tool_response_json_deserialization ... ok
[INFO] [stdout] test claude::tests::parse_tool_response_with_compaction ... ok
[INFO] [stdout] test claude::tests::parse_tool_response_text_only ... ok
[INFO] [stdout] test claude::tests::parse_tool_response_with_redacted_thinking ... ok
[INFO] [stdout] test claude::tests::messages_529_overload_propagates ... ok
[INFO] [stdout] test claude::tests::parse_tool_response_tool_use_only ... ok
[INFO] [stdout] test claude::tests::parse_tool_response_with_thinking_blocks ... ok
[INFO] [stdout] test claude::tests::request_body_serializes_stream_true ... ok
[INFO] [stdout] test claude::tests::request_body_serializes_with_stream_false_omits_stream ... ok
[INFO] [stdout] test claude::tests::request_body_serializes_with_system_blocks ... ok
[INFO] [stdout] test claude::tests::request_body_serializes_without_system ... ok
[INFO] [stdout] test claude::tests::parse_tool_response_with_tool_use ... ok
[INFO] [stdout] test claude::tests::redacted_thinking_content_block_roundtrip ... ok
[INFO] [stdout] test claude::tests::name_defaults_to_claude ... ok
[INFO] [stdout] test claude::tests::debug_vision_request_caps_total_cache_controls_at_four ... ok
[INFO] [stdout] test claude::tests::output_schema_forwarding_truncates_large_schema ... ok
[INFO] [stdout] test claude::tests::split_system_block1_padded_when_below_threshold ... ok
[INFO] [stdout] test claude::tests::split_system_block2_not_padded_when_below_threshold ... ok
[INFO] [stdout] test claude::tests::output_schema_forwarding_enabled_appends_hint ... ok
[INFO] [stdout] test claude::tests::split_system_no_markers_caches_entire_block ... ok
[INFO] [stdout] test claude::tests::split_system_into_blocks_propagates_one_hour_ttl ... ok
[INFO] [stdout] test claude::tests::split_system_no_markers_opus_caches_long_text ... ok
[INFO] [stdout] test claude::tests::split_system_no_markers_exact_threshold_sonnet_caches ... ok
[INFO] [stdout] test claude::tests::split_system_no_markers_short_text_skips_cache ... ok
[INFO] [stdout] test claude::tests::split_system_no_markers_opus_skips_short_text ... ok
[INFO] [stdout] test claude::tests::new_stores_fields_correctly ... ok
[INFO] [stdout] test claude::tests::split_system_partial_markers ... ok
[INFO] [stdout] test claude::tests::split_system_with_all_markers ... ok
[INFO] [stdout] test claude::tests::stale_model_suggestion_current_gen_returns_none ... ok
[INFO] [stdout] test claude::tests::stale_model_suggestion_future_version_fails_open ... ok
[INFO] [stdout] test claude::tests::stale_model_suggestion_legacy_claude_3_returns_some ... ok
[INFO] [stdout] test claude::tests::stale_model_suggestion_non_claude_or_alias_fails_open ... ok
[INFO] [stdout] test claude::tests::split_system_opus_block_below_threshold_skips_cache_control ... ok
[INFO] [stdout] test claude::tests::stale_model_suggestion_old_gen_below_floor_returns_some ... ok
[INFO] [stdout] test claude::tests::set_thinking_enable_disable_enable_is_idempotent ... ok
[INFO] [stdout] test claude::tests::no_prefill_false_for_opus_4_6_without_thinking ... ok
[INFO] [stdout] test claude::tests::strip_trailing_assistant_plain_removes_only_trailing_run ... ok
[INFO] [stdout] test claude::tests::strip_trailing_assistant_structured_noop_when_gate_false ... ok
[INFO] [stdout] test claude::tests::strip_trailing_assistant_structured_removes_only_trailing_run ... ok
[INFO] [stdout] test claude::tests::output_schema_forwarding_disabled_no_hint ... ok
[INFO] [stdout] test claude::tests::no_prefill_true_for_opus_4_6_with_thinking ... ok
[INFO] [stdout] test claude::tests::set_thinking_out_of_range_budget_rejected ... ok
[INFO] [stdout] test claude::tests::split_system_opus_block_above_threshold_gets_cache_control ... ok
[INFO] [stdout] test claude::tests::thinking_capability_opus_4_6_does_not_reject_prefill_unconditionally ... ok
[INFO] [stdout] test claude::tests::thinking_capability_opus_4_6_no_interleaved_beta ... ok
[INFO] [stdout] test claude::tests::thinking_capability_opus_4_6_prefers_effort ... ok
[INFO] [stdout] test claude::tests::thinking_capability_opus_4_7_prefers_effort ... ok
[INFO] [stdout] test claude::tests::thinking_capability_opus_4_7_rejects_prefill ... ok
[INFO] [stdout] test claude::tests::thinking_capability_opus_4_8_prefers_effort ... ok
[INFO] [stdout] test claude::tests::thinking_capability_opus_4_8_rejects_prefill ... ok
[INFO] [stdout] test claude::tests::thinking_capability_sonnet_4_6_needs_interleaved_beta ... ok
[INFO] [stdout] test claude::tests::thinking_capability_sonnet_4_6_no_prefers_effort ... ok
[INFO] [stdout] test claude::tests::thinking_capability_sonnet_4_6_rejects_prefill ... ok
[INFO] [stdout] test claude::tests::thinking_capability_sonnet_5_prefers_effort_no_interleaved_beta ... ok
[INFO] [stdout] test claude::tests::thinking_capability_sonnet_5_rejects_prefill ... ok
[INFO] [stdout] test claude::tests::thinking_capability_unknown_model_no_beta ... ok
[INFO] [stdout] test claude::tests::thinking_config_adaptive_deserializes ... ok
[INFO] [stdout] test claude::tests::thinking_config_adaptive_serializes_with_effort ... ok
[INFO] [stdout] test claude::tests::thinking_config_adaptive_serializes_without_effort ... ok
[INFO] [stdout] test claude::tests::thinking_config_extended_deserializes ... ok
[INFO] [stdout] test claude::tests::thinking_config_extended_serializes ... ok
[INFO] [stdout] test claude::tests::thinking_content_block_roundtrip ... ok
[INFO] [stdout] test claude::tests::server_compaction_disabled_by_default ... ok
[INFO] [stdout] test claude::tests::set_thinking_none_restores_base_max_tokens_after_enable ... ok
[INFO] [stdout] test claude::tests::server_compaction_not_rejected_by_default ... ok
[INFO] [stdout] test claude::tests::no_prefill_true_for_sonnet_4_6_with_thinking ... ok
[INFO] [stdout] test claude::tests::tool_cache_key_sensitive_to_description ... ok
[INFO] [stdout] test claude::tests::tool_cache_key_sensitive_to_output_schema ... ok
[INFO] [stdout] test claude::tests::test_claude_default_output_schema_hint_bytes_is_1024 ... ok
[INFO] [stdout] test claude::tests::no_prefill_true_for_sonnet_4_6_without_thinking ... ok
[INFO] [stdout] test claude::tests::store_cache_usage_updates_last_usage ... ok
[INFO] [stdout] test claude::tests::context_window_known_models ... ok
[INFO] [stdout] test claude::tests::supports_tool_use_returns_true ... ok
[INFO] [stdout] test claude::tests::take_compaction_summary_returns_and_clears ... ok
[INFO] [stdout] test claude::tests::set_thinking_construction_parity_with_with_thinking ... ok
[INFO] [stdout] test claude::tests::name_returns_claude ... ok
[INFO] [stdout] test claude::tests::tool_cache_hits_on_same_tools ... ok
[INFO] [stdout] test claude::tests::tool_cache_serialized_shape_snapshot ... ok
[INFO] [stdout] test claude::tests::with_provider_name_overrides_name ... ok
[INFO] [stdout] test claude::tests::supports_streaming_returns_true ... ok
[INFO] [stdout] test claude::tests::take_compaction_summary_empty_when_none ... ok
[INFO] [stdout] test claude::tests::tool_cache_invalidates_on_schema_change ... ok
[INFO] [stdout] test claude::tests::with_server_compaction_haiku_stays_disabled ... ok
[INFO] [stdout] test claude::tests::with_cache_user_messages_builder ... ok
[INFO] [stdout] test claude::tests::with_thinking_accepts_minimum_budget ... ok
[INFO] [stdout] test claude::tests::with_thinking_accepts_maximum_budget ... ok
[INFO] [stdout] test claude::tests::with_server_compaction_enables_flag ... ok
[INFO] [stdout] test cocoon::stt::tests::debug_does_not_expose_internals ... ok
[INFO] [stdout] test cocoon::stt::tests::with_language_sets_non_auto ... ok
[INFO] [stdout] test claude::tests::with_thinking_rejects_budget_below_minimum ... ok
[INFO] [stdout] test cocoon::stt::tests::set_status_tx_stores_sender ... ok
[INFO] [stdout] test claude::tests::tool_cache_invalidates_when_tools_change ... ok
[INFO] [stdout] test claude::tests::with_thinking_bumps_max_tokens_when_too_low ... ok
[INFO] [stdout] test claude::tests::tool_cache_control_uses_typed_path_for_one_hour ... ok
[INFO] [stdout] test claude::tests::tool_cache_returns_same_values_on_second_call ... ok
[INFO] [stdout] test cocoon::tests::cocoon_client_debug_redacts_access_hash ... ok
[INFO] [stdout] test claude::tests::with_thinking_rejects_budget_above_maximum ... ok
[INFO] [stdout] test cocoon::stt::tests::construction_stores_model ... ok
[INFO] [stdout] test cocoon::tests::cocoon_chat_context_length_error ... ok
[INFO] [stdout] test claude::tests::with_thinking_keeps_max_tokens_when_already_high ... ok
[INFO] [stdout] test cocoon::tests::cocoon_health_check_success ... ok
[INFO] [stdout] test cocoon::tests::cocoon_chat_stream_happy_path ... ok
[INFO] [stdout] test cocoon::stt::tests::with_language_ignores_auto ... ok
[INFO] [stdout] test cocoon::tests::cocoon_health_check_unknown_fields_ignored ... ok
[INFO] [stdout] test claude::tests::test_claude_stub_used_when_schema_exceeds_1024_bytes ... ok
[INFO] [stdout] test cocoon::tests::cocoon_embed_unsupported_without_model ... ok
[INFO] [stdout] test claude::tests::with_thinking_rejects_budget_not_less_than_max_tokens ... ok
[INFO] [stdout] test cocoon::tests::cocoon_api_error_on_5xx ... ok
[INFO] [stdout] test cocoon::tests::cocoon_embed_returns_unsupported_on_404 ... ok
[INFO] [stdout] test cocoon::tests::integration::test_chat_round_trip ... ignored, requires running Cocoon sidecar (COCOON_TEST_URL)
[INFO] [stdout] test cocoon::tests::integration::test_chat_stream ... ignored, requires running Cocoon sidecar (COCOON_TEST_URL)
[INFO] [stdout] test cocoon::tests::integration::test_chat_with_tools ... ignored, requires running Cocoon sidecar (COCOON_TEST_URL)
[INFO] [stdout] test cocoon::tests::integration::test_health_check ... ignored, requires running Cocoon sidecar (COCOON_TEST_URL)
[INFO] [stdout] test cocoon::tests::integration::test_list_models ... ignored, requires running Cocoon sidecar (COCOON_TEST_URL)
[INFO] [stdout] test cocoon::tests::cocoon_list_models_parses_response ... ok
[INFO] [stdout] test cocoon::tests::cocoon_embed_happy_path ... ok
[INFO] [stdout] test cocoon::tests::cocoon_health_check_unavailable ... ok
[INFO] [stdout] test cocoon::tests::cocoon_provider_clone_independence ... ok
[INFO] [stdout] test cocoon::tests::cocoon_embed_batch_count_mismatch ... ok
[INFO] [stdout] test compatible::tests::compatible_config_debug_redacts_api_key ... ok
[INFO] [stdout] test cocoon::tests::cocoon_post_without_access_hash ... ok
[INFO] [stdout] test compatible::tests::any_provider_set_reasoning_effort_delegates_to_compatible ... ok
[INFO] [stdout] test cocoon::tests::cocoon_post_multipart_retries_and_rebuilds_form ... ok
[INFO] [stdout] test cocoon::tests::cocoon_provider_with_generation_overrides ... ok
[INFO] [stdout] test compatible::tests::clone_preserves_name ... ok
[INFO] [stdout] test cocoon::stt::tests::with_language_ignores_empty ... ok
[INFO] [stdout] test cocoon::tests::cocoon_retry_exhausted_returns_unavailable ... ok
[INFO] [stdout] test cocoon::tests::cocoon_post_with_access_hash ... ok
[INFO] [stdout] test cocoon::tests::cocoon_chat_happy_path ... ok
[INFO] [stdout] test compatible::tests::debug_contains_provider_name ... ok
[INFO] [stdout] test compatible::tests::context_window_unknown_model_returns_some_fallback ... ok
[INFO] [stdout] test compatible::tests::last_usage_initially_none ... ok
[INFO] [stdout] test cocoon::tests::cocoon_malformed_json_response ... ok
[INFO] [stdout] test compatible::tests::last_reasoning_tokens_initially_none ... ok
[INFO] [stdout] test compatible::tests::set_reasoning_effort_applies_via_compatible ... ok
[INFO] [stdout] test compatible::tests::context_window_delegates_to_inner ... ok
[INFO] [stdout] test compatible::tests::embed_without_model_errors ... ok
[INFO] [stdout] test ema::tests::default_stats_optimistic_prior ... ok
[INFO] [stdout] test ema::tests::maybe_reorder_empty_order_returns_empty ... ok
[INFO] [stdout] test ema::tests::maybe_reorder_fast_reliable_rises_to_top ... ok
[INFO] [stdout] test ema::tests::maybe_reorder_interval_zero_always_none ... ok
[INFO] [stdout] test ema::tests::maybe_reorder_returns_none_before_interval ... ok
[INFO] [stdout] test ema::tests::maybe_reorder_returns_order_at_interval ... ok
[INFO] [stdout] test ema::tests::maybe_reorder_slow_unreliable_drops ... ok
[INFO] [stdout] test ema::tests::new_tracker_empty_stats ... ok
[INFO] [stdout] test compatible::tests::supports_tool_use_delegates_to_inner ... ok
[INFO] [stdout] test ema::tests::record_increments_total_calls ... ok
[INFO] [stdout] test ema::tests::record_multiple_providers_independent ... ok
[INFO] [stdout] test ema::tests::record_updates_latency_ema ... ok
[INFO] [stdout] test compatible::tests::supports_embeddings_without_model ... ok
[INFO] [stdout] test ema::tests::record_updates_success_ema ... ok
[INFO] [stdout] test embed::tests::empty_string_is_borrowed ... ok
[INFO] [stdout] test embed::tests::one_byte_past_overlap_guard_produces_owned ... ok
[INFO] [stdout] test embed::tests::exactly_at_limit_is_borrowed ... ok
[INFO] [stdout] test embed::tests::over_limit_utf8_multibyte_is_valid_utf8 ... ok
[INFO] [stdout] test embed::tests::over_limit_latin_is_owned_with_head_and_tail ... ok
[INFO] [stdout] test embed::tests::overlap_guard_returns_borrowed ... ok
[INFO] [stdout] test embed::tests::short_string_is_borrowed ... ok
[INFO] [stdout] test embed::tests::truncated_result_has_correct_structure ... ok
[INFO] [stdout] test error::tests::api_error_display ... ok
[INFO] [stdout] test error::tests::beta_header_rejected_display ... ok
[INFO] [stdout] test error::tests::beta_header_rejected_is_detected ... ok
[INFO] [stdout] test error::tests::body_is_context_length_error_detects_known_messages ... ok
[INFO] [stdout] test error::tests::body_is_context_length_error_ignores_unrelated_messages ... ok
[INFO] [stdout] test error::tests::body_is_reasoning_effort_tools_incompatible_detects_known_message ... ok
[INFO] [stdout] test ema::tests::record_many_failures_drives_success_ema_toward_zero ... ok
[INFO] [stdout] test error::tests::body_is_reasoning_effort_tools_incompatible_is_case_insensitive ... ok
[INFO] [stdout] test error::tests::body_is_reasoning_effort_tools_incompatible_ignores_unrelated_messages ... ok
[INFO] [stdout] test error::tests::body_is_reasoning_effort_tools_incompatible_requires_all_markers ... ok
[INFO] [stdout] test error::tests::context_length_exceeded_display ... ok
[INFO] [stdout] test error::tests::context_length_exceeded_variant_is_detected ... ok
[INFO] [stdout] test error::tests::invalid_input_display_includes_provider_and_message ... ok
[INFO] [stdout] test error::tests::invalid_input_is_detected ... ok
[INFO] [stdout] test error::tests::model_capability_mismatch_display_includes_provider_and_message ... ok
[INFO] [stdout] test error::tests::model_capability_mismatch_is_detected ... ok
[INFO] [stdout] test error::tests::other_errors_are_not_invalid_input ... ok
[INFO] [stdout] test error::tests::other_errors_are_not_model_capability_mismatch ... ok
[INFO] [stdout] test error::tests::other_variant_is_not_context_length_error ... ok
[INFO] [stdout] test error::tests::unrelated_error_is_not_detected ... ok
[INFO] [stdout] test error::tests::other_error_is_not_beta_header_rejected ... ok
[INFO] [stdout] test extractor::tests::extract_error_propagation ... ok
[INFO] [stdout] test extractor::tests::extract_with_preamble ... ok
[INFO] [stdout] test gemini::tests::embed_content_request_serialization ... ok
[INFO] [stdout] test extractor::tests::extract_without_preamble ... ok
[INFO] [stdout] test gemini::tests::embed_content_response_deserialization ... ok
[INFO] [stdout] test gemini::tests::embed_content_response_empty_values ... ok
[INFO] [stdout] test cocoon::tests::with_provider_name_overrides_name ... ok
[INFO] [stdout] test embed::tests::overlap_guard_upper_boundary_is_borrowed ... ok
[INFO] [stdout] test cocoon::tests::cocoon_retry_on_transient_503_then_succeeds ... ok
[INFO] [stdout] test cocoon::tests::cocoon_embed_batch_happy_path ... ok
[INFO] [stdout] test compatible::tests::supports_embeddings_with_model ... ok
[INFO] [stdout] test compatible::tests::with_output_schema_forwarding_does_not_panic ... ok
[INFO] [stdout] test compatible::tests::supports_vision_config_field_true_forwards_to_inner ... ok
[INFO] [stdout] test compatible::tests::chat_unreachable_errors ... ok
[INFO] [stdout] test compatible::tests::name_returns_custom_provider_name ... ok
[INFO] [stdout] test compatible::tests::supports_vision_with_vision_override_delegates_to_inner ... ok
[INFO] [stdout] test gemini::tests::gap1_http_error_response_maps_to_llm_error_other ... ok
[INFO] [stdout] test gemini::tests::gap3_successful_response_populates_last_usage ... ok
[INFO] [stdout] test gemini::tests::gemini_chat_stream_error_on_failed_request ... ok
[INFO] [stdout] test compatible::tests::supports_vision_delegates_to_inner ... ok
[INFO] [stdout] test cocoon::tests::name_defaults_to_cocoon ... ok
[INFO] [stdout] test gemini::tests::gemini_clone_resets_usage ... ok
[INFO] [stdout] test gemini::tests::gap2_resource_exhausted_maps_to_rate_limited ... ok
[INFO] [stdout] test gemini::tests::gemini_chat_stream_yields_chunks_from_sse ... ok
[INFO] [stdout] test gemini::tests::gemini_context_window_1_5_pro ... ok
[INFO] [stdout] test compatible::tests::supports_vision_config_field_false_forwards_to_inner ... ok
[INFO] [stdout] test gemini::tests::gemini_model_entry_camel_case_deser ... ok
[INFO] [stdout] test gemini::tests::gemini_context_window_2_0_flash ... ok
[INFO] [stdout] test gemini::tests::gemini_embed_malformed_response ... ok
[INFO] [stdout] test gemini::tests::gemini_embed_no_model_returns_unsupported ... ok
[INFO] [stdout] test compatible::tests::supports_streaming_delegates ... ok
[INFO] [stdout] test gemini::tests::gemini_debug_redacts_api_key ... ok
[INFO] [stdout] test gemini::tests::gemini_embed_api_error_429 ... ok
[INFO] [stdout] test gemini::tests::gemini_name ... ok
[INFO] [stdout] test gemini::tests::gemini_list_models_includes_embedding_model_when_configured ... ok
[INFO] [stdout] test gemini::tests::gemini_embed_api_error_403 ... ok
[INFO] [stdout] test gemini::tests::generation_config_with_thinking_includes_nested_field ... ok
[INFO] [stdout] test gemini::tests::integration_gemini_embed ... ignored, requires live Gemini API key
[INFO] [stdout] test gemini::tests::generation_config_without_thinking_omits_field ... ok
[INFO] [stdout] test gemini::tests::gemini_supports_embeddings_false ... ok
[INFO] [stdout] test gemini::tests::gemini_embed_api_error_500 ... ok
[INFO] [stdout] test gemini::tests::list_models_response_empty_models ... ok
[INFO] [stdout] test gemini::tests::list_models_response_extra_unknown_fields_ignored ... ok
[INFO] [stdout] test gemini::tests::list_models_response_filters_generate_content ... ok
[INFO] [stdout] test gemini::tests::list_models_response_missing_input_token_limit ... ok
[INFO] [stdout] test gemini::tests::list_models_response_missing_models_field ... ok
[INFO] [stdout] test gemini::tests::list_models_response_strips_models_prefix ... ok
[INFO] [stdout] test gemini::tests::gemini_context_window_default ... ok
[INFO] [stdout] test gemini::tests::gemini_model_identifier_returns_model_not_name ... ok
[INFO] [stdout] test gemini::tests::gemini_embed_returns_unsupported ... ok
[INFO] [stdout] test gemini::tests::gemini_embed_success ... ok
[INFO] [stdout] test gemini::tests::gemini_list_models_excludes_embedding_model_when_not_configured ... ok
[INFO] [stdout] test gemini::tests::gemini_list_models_non_empty ... ok
[INFO] [stdout] test gemini::tests::gemini_supports_embeddings_without_model ... ok
[INFO] [stdout] test gemini::tests::gemini_supports_vision_true ... ok
[INFO] [stdout] test gemini::tests::gemini_supports_embeddings_with_model ... ok
[INFO] [stdout] test gemini::tests::gemini_supports_streaming_true ... ok
[INFO] [stdout] test gemini::tests::provider_with_include_thoughts_in_gen_config ... ok
[INFO] [stdout] test gemini::tests::provider_debug_includes_thinking_level ... ok
[INFO] [stdout] test gemini::tests::test_consecutive_assistant_merging ... ok
[INFO] [stdout] test gemini::tests::provider_with_thinking_budget_included_in_gen_config ... ok
[INFO] [stdout] test gemini::tests::test_consecutive_role_merging ... ok
[INFO] [stdout] test gemini::tests::test_convert_tool_definitions_multiple ... ok
[INFO] [stdout] test gemini::tests::test_convert_tool_definitions_single ... ok
[INFO] [stdout] test gemini::tests::test_convert_tool_no_parameters ... ok
[INFO] [stdout] test gemini::tests::test_convert_tool_definitions_empty ... ok
[INFO] [stdout] test gemini::tests::gemini_with_provider_name_overrides_name ... ok
[INFO] [stdout] test gemini::tests::test_empty_system_omitted ... ok
[INFO] [stdout] test gemini::tests::provider_clone_preserves_thinking_level ... ok
[INFO] [stdout] test gemini::tests::test_error_response_parsing ... ok
[INFO] [stdout] test gemini::tests::test_first_message_guard_prepends_user ... ok
[INFO] [stdout] test gemini::tests::test_image_part_converted_to_inline_data ... ok
[INFO] [stdout] test gemini::tests::test_inline_refs_deep_plain_nesting ... ok
[INFO] [stdout] test gemini::tests::test_inline_data_serializes_to_camel_case ... ok
[INFO] [stdout] test gemini::tests::list_models_remote_success ... ok
[INFO] [stdout] test gemini::tests::gemini_with_embedding_model_empty_string_is_none ... ok
[INFO] [stdout] test gemini::tests::test_inline_refs_nested_multi_level ... ok
[INFO] [stdout] test gemini::tests::test_inline_refs_depth_limit ... ok
[INFO] [stdout] test gemini::tests::test_inline_refs_no_defs ... ok
[INFO] [stdout] test gemini::tests::test_inline_refs_unknown_ref_fallback ... ok
[INFO] [stdout] test gemini::tests::test_mixed_text_and_image_parts ... ok
[INFO] [stdout] test gemini::tests::test_mixed_text_and_tool_use ... ok
[INFO] [stdout] test gemini::tests::test_is_empty_object_schema ... ok
[INFO] [stdout] test gemini::tests::test_multiple_images_in_single_message ... ok
[INFO] [stdout] test gemini::tests::test_inline_refs_simple ... ok
[INFO] [stdout] test gemini::tests::test_multiple_tool_results_merged_into_one_user_content ... ok
[INFO] [stdout] test gemini::tests::test_normalize_schema_allowlist ... ok
[INFO] [stdout] test gemini::tests::test_normalize_schema_anyof_complex_dropped ... ok
[INFO] [stdout] test gemini::tests::test_normalize_schema_anyof_null_first_order ... ok
[INFO] [stdout] test gemini::tests::test_parse_mixed_text_and_function_call ... ok
[INFO] [stdout] test gemini::tests::test_normalize_schema_oneof_option_pattern ... ok
[INFO] [stdout] test gemini::tests::test_parse_multiple_function_calls ... ok
[INFO] [stdout] test gemini::tests::test_parse_null_args_uses_empty_object ... ok
[INFO] [stdout] test gemini::tests::test_parse_single_function_call ... ok
[INFO] [stdout] test gemini::tests::test_parse_text_only_response ... ok
[INFO] [stdout] test gemini::tests::test_normalize_schema_anyof_option_pattern ... ok
[INFO] [stdout] test gemini::tests::test_resource_exhausted_error_parsing ... ok
[INFO] [stdout] test gemini::tests::test_build_tool_request_parameterless_tools_still_includes_tools_field ... ok
[INFO] [stdout] test gemini::tests::test_tool_result_part_to_function_response_with_name_lookup ... ok
[INFO] [stdout] test gemini::tests::test_tool_result_is_error_wrapping ... ok
[INFO] [stdout] test gemini::tests::test_tool_use_part_to_function_call ... ok
[INFO] [stdout] test gemini::tests::test_uppercase_types_array ... ok
[INFO] [stdout] test gemini::tests::test_system_instruction_extraction ... ok
[INFO] [stdout] test gemini::tests::set_thinking_budget_out_of_range_rejected ... ok
[INFO] [stdout] test gemini::tests::test_uppercase_types_null ... ok
[INFO] [stdout] test gemini::tests::test_uppercase_types_simple ... ok
[INFO] [stdout] test gemini::tests::test_uppercase_types_boolean ... ok
[INFO] [stdout] test gemini::tests::test_uppercase_types_nested ... ok
[INFO] [stdout] test gemini::tests::test_uppercase_types_number ... ok
[INFO] [stdout] test gemini::tests::thinking_config_serializes_camelcase ... ok
[INFO] [stdout] test gemini::tests::thinking_config_with_budget_serializes ... ok
[INFO] [stdout] test gemini::tests::thinking_level_deserializes_from_lowercase ... ok
[INFO] [stdout] test gemini::tests::thinking_level_roundtrip_all_variants ... ok
[INFO] [stdout] test gemini::tests::test_chat_with_tools_empty_tools_falls_back_to_chat ... ok
[INFO] [stdout] test gemini::tests::thinking_level_serializes_lowercase ... ok
[INFO] [stdout] test http::tests::bad_request_with_context_length_body_returns_exceeded ... ok
[INFO] [stdout] test gemini::tests::list_models_remote_http_error ... ok
[INFO] [stdout] test gemini::tests::provider_with_thinking_level_included_in_gen_config ... ok
[INFO] [stdout] test http::tests::unauthorized_returns_api_error ... ok
[INFO] [stdout] test http::tests::too_many_requests_returns_api_error ... ok
[INFO] [stdout] test http::tests::bad_request_without_context_body_returns_api_error ... ok
[INFO] [stdout] test http::tests::server_error_returns_api_error ... ok
[INFO] [stdout] test masking::tests::chat_never_touches_thinking_block ... ok
[INFO] [stdout] test masking::tests::chat_masks_flat_content ... ok
[INFO] [stdout] test masking::tests::chat_masks_tool_result_content ... ok
[INFO] [stdout] test masking::tests::chat_masks_tool_output_body ... ok
[INFO] [stdout] test masking::tests::debug_impl_does_not_panic ... ok
[INFO] [stdout] test masking::tests::mask_messages_finds_match_among_many_clean_messages ... ok
[INFO] [stdout] test masking::tests::delegation_methods_pass_through_to_inner ... ok
[INFO] [stdout] test masking::tests::chat_with_no_match_forwards_unchanged ... ok
[INFO] [stdout] test masking::tests::mask_messages_no_match_returns_none_via_pre_scan_only ... ok
[INFO] [stdout] test model_cache::tests::cache_save_uses_json_tmp_atomic_suffix ... ok
[INFO] [stdout] test model_cache::tests::is_stale_async_missing_file_returns_true ... ok
[INFO] [stdout] test gemini::tests::set_thinking_budget_runtime_mutates_in_place ... ok
[INFO] [stdout] test model_cache::tests::fresh_cache_is_not_stale ... ok
[INFO] [stdout] test model_cache::tests::load_async_missing_file_returns_none ... ok
[INFO] [stdout] test model_cache::tests::missing_file_is_stale ... ok
[INFO] [stdout] test model_cache::tests::json_round_trip ... ok
[INFO] [stdout] test model_cache::tests::stale_detection_on_old_timestamp ... ok
[INFO] [stdout] test gemini::tests::set_thinking_level_runtime_mutates_in_place ... ok
[INFO] [stdout] test ollama::tests::chat_request_body_sets_stream_flag ... ok
[INFO] [stdout] test model_cache::tests::invalidate_removes_file ... ok
[INFO] [stdout] test model_cache::tests::is_stale_async_matches_sync_is_stale ... ok
[INFO] [stdout] test gemini::tests::provider_without_thinking_no_thinking_config ... ok
[INFO] [stdout] test model_cache::tests::load_async_matches_sync_load ... ok
[INFO] [stdout] test gemini::tests::test_debug_request_json_with_tools_includes_function_declarations ... ok
[INFO] [stdout] test gemini::tests::test_chat_with_tools_returns_tool_use ... ok
[INFO] [stdout] test gemini::tests::test_debug_request_json_no_tools_no_tools_field ... ok
[INFO] [stdout] test gemini::tests::list_models_remote_auth_error ... ok
[INFO] [stdout] test masking::tests::effective_model_identifier_resolves_through_masked_router ... ok
[INFO] [stdout] test ollama::tests::context_length_error_keywords_are_detected ... ok
[INFO] [stdout] test ollama::tests::chat_context_length_error_is_not_retried ... ok
[INFO] [stdout] test gemini::tests::test_request_serialization ... ok
[INFO] [stdout] test ollama::tests::convert_message_assistant_role ... ok
[INFO] [stdout] test ollama::tests::convert_message_empty_content ... ok
[INFO] [stdout] test ollama::tests::convert_message_preserves_content ... ok
[INFO] [stdout] test ollama::tests::convert_message_roles ... ok
[INFO] [stdout] test ollama::tests::convert_message_structured_multiple_tool_results_joined ... ok
[INFO] [stdout] test ollama::tests::convert_message_structured_no_tool_results_delegates_to_convert_message ... ok
[INFO] [stdout] test ollama::tests::convert_message_structured_tool_result_emits_tool_role ... ok
[INFO] [stdout] test ollama::tests::convert_message_structured_tool_result_with_image_sibling_attaches_image ... ok
[INFO] [stdout] test ollama::tests::convert_message_system_role ... ok
[INFO] [stdout] test ollama::tests::convert_message_text_only_has_no_images ... ok
[INFO] [stdout] test ollama::tests::convert_message_with_image_encodes_base64 ... ok
[INFO] [stdout] test ollama::tests::chat_stream_context_length_error_is_not_retried ... ok
[INFO] [stdout] test ollama::tests::chat_with_tools_retries_after_429_then_succeeds ... ok
[INFO] [stdout] test gemini::tests::test_request_no_system_instruction_when_empty ... ok
[INFO] [stdout] test ollama::tests::chat_stream_with_unreachable_endpoint_errors ... ok
[INFO] [stdout] test ollama::tests::integration_ollama_chat_stream ... ignored, requires running Ollama instance
[INFO] [stdout] test ollama::tests::integration_ollama_chat_with_tools ... ignored, requires running Ollama instance
[INFO] [stdout] test ollama::tests::integration_ollama_embed ... ignored, requires running Ollama instance
[INFO] [stdout] test ollama::tests::integration_ollama_stream_matches_chat ... ignored, requires running Ollama instance
[INFO] [stdout] test gemini::tests::thinking_budget_invalid_values_rejected ... ok
[INFO] [stdout] test ollama::tests::model_info_supports_vision_false_when_capabilities_empty ... ok
[INFO] [stdout] test ollama::tests::model_info_supports_vision_false_when_capability_absent ... ok
[INFO] [stdout] test ollama::tests::model_info_supports_vision_true_when_capability_present ... ok
[INFO] [stdout] test ollama::tests::chat_stream_retries_after_503_then_succeeds ... ok
[INFO] [stdout] test ollama::tests::chat_with_tools_unreachable_endpoint_errors ... ok
[INFO] [stdout] test ollama::tests::chat_retries_after_429_then_succeeds ... ok
[INFO] [stdout] test ollama::tests::chat_with_unreachable_endpoint_errors ... ok
[INFO] [stdout] test ollama::tests::clone_resets_last_usage ... ok
[INFO] [stdout] test ollama::tests::ollama_ndjson_stream_reassembles_utf8_split_across_chunk_boundary ... ok
[INFO] [stdout] test ollama::tests::ollama_ndjson_stream_yields_multiple_lines_from_one_chunk ... ok
[INFO] [stdout] test ollama::tests::ollama_reqwest_client_builds_without_panicking ... ok
[INFO] [stdout] test ollama::tests::parse_host_port_bare_host_colon_port ... ok
[INFO] [stdout] test ollama::tests::parse_host_port_custom_port ... ok
[INFO] [stdout] test ollama::tests::clone_preserves_fields ... ok
[INFO] [stdout] test ollama::tests::parse_host_port_empty_string ... ok
[INFO] [stdout] test ollama::tests::embed_batch_empty_returns_empty_without_network ... ok
[INFO] [stdout] test ollama::tests::parse_host_port_https_with_path ... ok
[INFO] [stdout] test ollama::tests::parse_host_port_invalid_port_falls_back ... ok
[INFO] [stdout] test ollama::tests::parse_host_port_ipv4 ... ok
[INFO] [stdout] test ollama::tests::parse_host_port_ipv4_with_path ... ok
[INFO] [stdout] test ollama::tests::parse_host_port_ipv6_no_port ... ok
[INFO] [stdout] test ollama::tests::parse_host_port_ipv6_with_path ... ok
[INFO] [stdout] test ollama::tests::parse_host_port_max_port ... ok
[INFO] [stdout] test ollama::tests::parse_host_port_multiple_trailing_slashes ... ok
[INFO] [stdout] test ollama::tests::context_window_after_set ... ok
[INFO] [stdout] test ollama::tests::parse_host_port_no_scheme ... ok
[INFO] [stdout] test ollama::tests::parse_host_port_only_scheme ... ok
[INFO] [stdout] test ollama::tests::parse_host_port_port_overflow_falls_back ... ok
[INFO] [stdout] test ollama::tests::parse_host_port_port_zero ... ok
[INFO] [stdout] test ollama::tests::parse_host_port_strips_v1_path ... ok
[INFO] [stdout] test ollama::tests::parse_host_port_strips_v1_trailing_slash ... ok
[INFO] [stdout] test ollama::tests::parse_host_port_trailing_slash ... ok
[INFO] [stdout] test ollama::tests::parse_host_port_with_port ... ok
[INFO] [stdout] test ollama::tests::parse_host_port_without_port ... ok
[INFO] [stdout] test ollama::tests::parse_num_ctx_from_parameters ... ok
[INFO] [stdout] test ollama::tests::chat_exhausts_retries_on_persistent_503 ... ok
[INFO] [stdout] test ollama::tests::context_window_none_by_default ... ok
[INFO] [stdout] test ollama::tests::debug_format ... ok
[INFO] [stdout] test ollama::tests::model_selection_uses_vision_model_when_images_present ... ok
[INFO] [stdout] test ollama::tests::model_selection_falls_back_to_main_without_vision_model ... ok
[INFO] [stdout] test ollama::tests::supports_streaming_returns_true ... ok
[INFO] [stdout] test ollama::tests::embed_with_unreachable_endpoint_errors ... ok
[INFO] [stdout] test ollama::tests::new_stores_model_and_embedding_model ... ok
[INFO] [stdout] test ollama::tests::last_usage_initially_none ... ok
[INFO] [stdout] test ollama::tests::health_check_unreachable_errors ... ok
[INFO] [stdout] test ollama::tests::new_with_different_urls ... ok
[INFO] [stdout] test openai::tests::api_message_serializes ... ok
[INFO] [stdout] test ollama::tests::supports_embeddings_returns_true ... ok
[INFO] [stdout] test ollama::tests::name_returns_ollama ... ok
[INFO] [stdout] test ollama::tests::set_vision_capable_false_keeps_supports_vision_false ... ok
[INFO] [stdout] test ollama::tests::supports_vision_false_by_default ... ok
[INFO] [stdout] test ollama::tests::supports_vision_true_after_set_vision_capable ... ok
[INFO] [stdout] test ollama::tests::with_generation_overrides_stores_overrides ... ok
[INFO] [stdout] test ollama::tests::warmup_with_unreachable_endpoint_errors ... ok
[INFO] [stdout] test ollama::tests::with_provider_name_overrides_name ... ok
[INFO] [stdout] test openai::tests::chat_request_serialization ... ok
[INFO] [stdout] test openai::tests::chat_request_serialization_non_gpt5_uses_max_tokens ... ok
[INFO] [stdout] test openai::tests::chat_request_with_reasoning_effort ... ok
[INFO] [stdout] test openai::tests::chat_request_with_stream_flag ... ok
[INFO] [stdout] test openai::tests::chat_response_empty_choices ... ok
[INFO] [stdout] test ollama::tests::supports_vision_true_with_explicit_vision_model ... ok
[INFO] [stdout] test ollama::tests::with_vision_model_builder_returns_self ... ok
[INFO] [stdout] test gemini::tests::thinking_budget_edge_values ... ok
[INFO] [stdout] test openai::tests::base_url_strips_trailing_slash ... ok
[INFO] [stdout] test openai::tests::cache_slug_custom_host ... ok
[INFO] [stdout] test openai::tests::chat_401_auth_error_propagates ... ok
[INFO] [stdout] test openai::tests::cache_slug_localhost_with_port ... ok
[INFO] [stdout] test openai::tests::chat_unreachable_endpoint_errors ... ok
[INFO] [stdout] test openai::tests::completion_tokens_details_reasoning_tokens_deserialized ... ok
[INFO] [stdout] test openai::tests::completion_tokens_legacy_models_use_max_tokens ... ok
[INFO] [stdout] test openai::tests::completion_tokens_o_series_uses_max_completion_tokens ... ok
[INFO] [stdout] test openai::tests::chat_with_tools_handles_null_assistant_content ... ok
[INFO] [stdout] test ollama::tests::with_vision_model_sets_field ... ok
[INFO] [stdout] test openai::tests::chat_with_tools_reasoning_effort_400_enriches_message ... ok
[INFO] [stdout] test openai::tests::chat_500_server_error_propagates ... ok
[INFO] [stdout] test openai::tests::any_provider_set_reasoning_effort_delegates_to_openai ... ok
[INFO] [stdout] test openai::tests::any_provider_set_reasoning_effort_noop_for_non_openai ... ok
[INFO] [stdout] test openai::tests::chat_with_tools_retries_on_429_then_succeeds ... ok
[INFO] [stdout] test openai::tests::chat_happy_path_wiremock ... ok
[INFO] [stdout] test openai::tests::clone_resets_last_usage ... ok
[INFO] [stdout] test openai::tests::clone_preserves_fields ... ok
[INFO] [stdout] test openai::tests::cache_slug_openai ... ok
[INFO] [stdout] test ollama::tests::with_provider_name_distinguishes_multiple_instances ... ok
[INFO] [stdout] test openai::tests::completion_tokens_override_forces_max_completion_tokens_for_legacy_model ... ok
[INFO] [stdout] test openai::tests::clone_resets_last_cache ... ok
[INFO] [stdout] test openai::tests::completion_tokens_override_forces_max_tokens_for_o_series_model ... ok
[INFO] [stdout] test openai::tests::convert_messages_empty ... ok
[INFO] [stdout] test openai::tests::convert_messages_maps_roles ... ok
[INFO] [stdout] test openai::tests::context_window_gpt4_turbo ... ok
[INFO] [stdout] test openai::tests::convert_messages_structured_dedupes_colliding_tool_call_ids ... ok
[INFO] [stdout] test openai::tests::convert_messages_structured_dedupes_multiple_colliding_calls_in_one_message ... ok
[INFO] [stdout] test openai::tests::context_window_o1_mini ... ok
[INFO] [stdout] test openai::tests::convert_messages_structured_assistant_tool_only_content_is_none ... ok
[INFO] [stdout] test openai::tests::convert_messages_structured_dedupes_triple_collision_fifo ... ok
[INFO] [stdout] test openai::tests::convert_messages_structured_plain_messages ... ok
[INFO] [stdout] test openai::tests::chat_with_tools_reasoning_effort_none_400_passes_through_raw_message ... ok
[INFO] [stdout] test openai::tests::convert_messages_structured_preserves_internal_variants ... ok
[INFO] [stdout] test openai::tests::convert_messages_structured_multiple_orphaned_tool_use_ids_in_one_message_are_all_downgraded ... ok
[INFO] [stdout] test openai::tests::convert_messages_structured_preserves_unique_tool_call_ids ... ok
[INFO] [stdout] test openai::tests::convert_messages_structured_trailing_unanswered_tool_use_is_downgraded_to_text ... ok
[INFO] [stdout] test openai::tests::convert_messages_vision_image_only_no_text_part ... ok
[INFO] [stdout] test openai::tests::convert_messages_structured_with_tool_parts ... ok
[INFO] [stdout] test openai::tests::convert_messages_vision_produces_data_uri ... ok
[INFO] [stdout] test openai::tests::convert_messages_vision_text_only_message ... ok
[INFO] [stdout] test openai::tests::convert_messages_structured_leading_unmatched_tool_result_is_downgraded_to_text ... ok
[INFO] [stdout] test openai::tests::context_window_o3_mini ... ok
[INFO] [stdout] test openai::tests::dedupe_tool_call_ids_empty_tool_calls_array_does_not_panic ... ok
[INFO] [stdout] test openai::tests::dedupe_tool_call_ids_orphaned_call_without_response_does_not_panic ... ok
[INFO] [stdout] test openai::tests::dedupe_tool_call_ids_tool_message_without_pending_entry_is_unchanged ... ok
[INFO] [stdout] test openai::tests::context_window_o1 ... ok
[INFO] [stdout] test openai::tests::context_window_override_takes_precedence ... ok
[INFO] [stdout] test openai::tests::context_window_override_via_builder ... ok
[INFO] [stdout] test openai::tests::context_window_gpt4o ... ok
[INFO] [stdout] test openai::tests::context_window_gpt35 ... ok
[INFO] [stdout] test openai::tests::embedding_request_serialization ... ok
[INFO] [stdout] test openai::tests::has_image_parts_detects_image ... ok
[INFO] [stdout] test openai::tests::inline_refs_openai_resolves_defs ... ok
[INFO] [stdout] test openai::tests::context_window_gpt5 ... ok
[INFO] [stdout] test openai::tests::embedding_response_empty_data ... ok
[INFO] [stdout] test openai::tests::integration_openai_chat ... ignored, requires ZEPH_OPENAI_API_KEY env var
[INFO] [stdout] test openai::tests::integration_openai_chat_stream ... ignored, requires ZEPH_OPENAI_API_KEY env var
[INFO] [stdout] test openai::tests::integration_openai_embed ... ignored, requires ZEPH_OPENAI_API_KEY env var
[INFO] [stdout] test openai::tests::context_window_o4_mini ... ok
[INFO] [stdout] test openai::tests::list_models_response_empty_data_array ... ok
[INFO] [stdout] test openai::tests::list_models_response_missing_data_key_returns_empty ... ok
[INFO] [stdout] test openai::tests::debug_redacts_api_key ... ok
[INFO] [stdout] test openai::tests::list_models_response_parses_data_array ... ok
[INFO] [stdout] test openai::tests::context_window_unknown_falls_back_to_128k ... ok
[INFO] [stdout] test openai::tests::context_window_o3 ... ok
[INFO] [stdout] test openai::tests::normalize_for_openai_strict_adds_additional_properties ... ok
[INFO] [stdout] test openai::tests::normalize_for_openai_strict_preserves_anyof_for_option ... ok
[INFO] [stdout] test openai::tests::normalize_nested_objects_get_additional_properties ... ok
[INFO] [stdout] test openai::tests::openai_config_debug_redacts_api_key ... ok
[INFO] [stdout] test openai::tests::openai_tool_empty_params_omitted_in_serialization ... ok
[INFO] [stdout] test openai::tests::openai_tool_serialization ... ok
[INFO] [stdout] test openai::tests::output_schema_forwarding_disabled_no_hint_openai ... ok
[INFO] [stdout] test openai::tests::output_schema_forwarding_enabled_appends_hint_openai ... ok
[INFO] [stdout] test openai::tests::output_schema_forwarding_none_schema_unchanged_description_openai ... ok
[INFO] [stdout] test openai::tests::output_schema_forwarding_truncates_large_schema_openai ... ok
[INFO] [stdout] test openai::tests::parse_chat_response ... ok
[INFO] [stdout] test openai::tests::parse_chat_response_with_usage ... ok
[INFO] [stdout] test openai::tests::parse_chat_response_without_usage ... ok
[INFO] [stdout] test openai::tests::parse_embedding_response ... ok
[INFO] [stdout] test openai::tests::parse_tool_chat_response_text_only ... ok
[INFO] [stdout] test openai::tests::parse_tool_chat_response_with_null_content_and_tool_calls ... ok
[INFO] [stdout] test openai::tests::debug_request_json_plain_includes_flat_reasoning_effort ... ok
[INFO] [stdout] test openai::tests::parse_usage_with_cached_tokens ... ok
[INFO] [stdout] test openai::tests::parse_usage_without_cached_tokens ... ok
[INFO] [stdout] test openai::tests::prepare_tool_params_empty_object_returns_none ... ok
[INFO] [stdout] test openai::tests::parse_tool_chat_response_with_tool_calls ... ok
[INFO] [stdout] test openai::tests::prepare_tool_params_no_properties_key_returns_none ... ok
[INFO] [stdout] test openai::tests::prepare_tool_params_non_empty_normalizes_strict ... ok
[INFO] [stdout] test openai::tests::debug_request_json_vision_includes_flat_reasoning_effort ... ok
[INFO] [stdout] test openai::tests::completion_tokens_override_none_falls_back_to_prefix_table ... ok
[INFO] [stdout] test openai::tests::starts_with_o_digit_accepts_o_followed_by_digit ... ok
[INFO] [stdout] test openai::tests::debug_request_json_tools_includes_flat_reasoning_effort ... ok
[INFO] [stdout] test openai::tests::starts_with_o_digit_rejects_non_o_series ... ok
[INFO] [stdout] test openai::tests::embed_without_model_returns_error ... ok
[INFO] [stdout] test openai::tests::embed_unreachable_endpoint_errors ... ok
[INFO] [stdout] test openai::tests::embed_batch_no_embedding_model_returns_error ... ok
[INFO] [stdout] test openai::tests::last_cache_usage_initially_none ... ok
[INFO] [stdout] test openai::tests::last_usage_initially_none ... ok
[INFO] [stdout] test openai::tests::list_models_remote_http_error_propagates ... ok
[INFO] [stdout] test openai::tests::embed_batch_empty_returns_empty_without_network ... ok
[INFO] [stdout] test openai::tests::new_with_reasoning_effort ... ok
[INFO] [stdout] test openai::tests::new_stores_fields ... ok
[INFO] [stdout] test openai::tests::set_reasoning_effort_applies_value ... ok
[INFO] [stdout] test openai::tests::name_returns_openai ... ok
[INFO] [stdout] test openai::tests::store_cache_usage_zero_cached_tokens_not_stored ... ok
[INFO] [stdout] test openai::tests::set_reasoning_effort_clears_value ... ok
[INFO] [stdout] test openai::tests::supports_embeddings_without_model ... ok
[INFO] [stdout] test openai::tests::store_and_retrieve_cache_usage ... ok
[INFO] [stdout] test openai::tests::store_cache_usage_stores_token_counts ... ok
[INFO] [stdout] test openai::tests::supports_tool_use_returns_true ... ok
[INFO] [stdout] test openai::tests::stream_unreachable_endpoint_errors ... ok
[INFO] [stdout] test openai::tests::supports_vision_false_for_o1_mini ... ok
[INFO] [stdout] test openai::tests::test_openai_default_output_schema_hint_bytes_is_1024 ... ok
[INFO] [stdout] test openai::tests::test_openai_stub_used_when_schema_exceeds_1024_bytes ... ok
[INFO] [stdout] test openai::tests::tool_chat_request_serialization_uses_gpt5_completion_tokens ... ok
[INFO] [stdout] test openai::tests::typed_chat_request_serialization_uses_gpt5_completion_tokens ... ok
[INFO] [stdout] test openai::tests::vision_chat_request_serialization_uses_gpt5_completion_tokens ... ok
[INFO] [stdout] test openai::tests::supports_vision_false_for_o3_mini ... ok
[INFO] [stdout] test openai::tests::set_reasoning_effort_rejects_invalid_value ... ok
[INFO] [stdout] test openai::tests::supports_vision_false_for_unknown_model ... ok
[INFO] [stdout] test provider::tests::chat_response_construction ... ok
[INFO] [stdout] test provider::tests::chat_stream_default_propagates_chat_error ... ok
[INFO] [stdout] test openai::tests::supports_vision_false_for_o1_preview ... ok
[INFO] [stdout] test openai::tests::supports_streaming_returns_true ... ok
[INFO] [stdout] test provider::tests::chat_stream_default_yields_single_chunk ... ok
[INFO] [stdout] test provider::tests::chat_typed_both_fail ... ok
[INFO] [stdout] test provider::tests::chat_typed_retry_succeeds ... ok
[INFO] [stdout] test provider::tests::chat_typed_chat_error_propagates ... ok
[INFO] [stdout] test provider::tests::chat_typed_strips_fences ... ok
[INFO] [stdout] test provider::tests::context_window_default_returns_none ... ok
[INFO] [stdout] test openai::tests::supports_vision_false_for_gpt35 ... ok
[INFO] [stdout] test provider::tests::chat_typed_happy_path ... ok
[INFO] [stdout] test provider::tests::embed_batch_default_calls_embed_sequentially ... ok
[INFO] [stdout] test provider::tests::fail_provider_embed_propagates_error ... ok
[INFO] [stdout] test provider::tests::flatten_compacted_tool_output_with_reference_renders_body ... ok
[INFO] [stdout] test provider::tests::chat_with_tools_default_delegates_to_chat ... ok
[INFO] [stdout] test provider::tests::flatten_parts_compaction_contributes_no_text ... ok
[INFO] [stdout] test provider::tests::flatten_parts_includes_image_placeholder ... ok
[INFO] [stdout] test provider::tests::flatten_parts_tool_use ... ok
[INFO] [stdout] test provider::tests::flatten_parts_tool_result ... ok
[INFO] [stdout] test provider::tests::embed_batch_default_empty_returns_empty ... ok
[INFO] [stdout] test provider::tests::flatten_skips_compacted_tool_output_empty_body ... ok
[INFO] [stdout] test provider::tests::from_legacy_creates_empty_parts ... ok
[INFO] [stdout] test provider::tests::from_parts_flattens_content ... ok
[INFO] [stdout] test provider::tests::from_parts_tool_output_format ... ok
[INFO] [stdout] test provider::tests::message_deserializes_without_parts ... ok
[INFO] [stdout] test provider::tests::message_clone ... ok
[INFO] [stdout] test provider::tests::message_debug ... ok
[INFO] [stdout] test provider::tests::message_metadata_agent_only ... ok
[INFO] [stdout] test provider::tests::message_metadata_default_both_visible ... ok
[INFO] [stdout] test provider::tests::message_metadata_round_trip ... ok
[INFO] [stdout] test provider::tests::message_metadata_user_only ... ok
[INFO] [stdout] test provider::tests::message_part_compaction_round_trip ... ok
[INFO] [stdout] test provider::tests::message_part_image_roundtrip_json ... ok
[INFO] [stdout] test provider::tests::message_part_tool_result_is_error_default ... ok
[INFO] [stdout] test provider::tests::message_part_serde_round_trip ... ok
[INFO] [stdout] test provider::tests::message_metadata_serde_default ... ok
[INFO] [stdout] test provider::tests::message_part_tool_use_serde_round_trip ... ok
[INFO] [stdout] test provider::tests::message_serialization ... ok
[INFO] [stdout] test provider::tests::message_visibility_db_roundtrip_both ... ok
[INFO] [stdout] test provider::tests::message_visibility_db_roundtrip_user_only ... ok
[INFO] [stdout] test provider::tests::message_visibility_db_roundtrip_agent_only ... ok
[INFO] [stdout] test provider::tests::message_visibility_from_db_str_unknown_defaults_to_both ... ok
[INFO] [stdout] test provider::tests::rebuild_content_syncs_after_mutation ... ok
[INFO] [stdout] test provider::tests::role_deserialization ... ok
[INFO] [stdout] test provider::tests::message_part_tool_result_serde_round_trip ... ok
[INFO] [stdout] test provider::tests::role_serialization ... ok
[INFO] [stdout] test provider::tests::short_type_name_extracts_last_segment ... ok
[INFO] [stdout] test provider::tests::short_type_name_nested_path_returns_last ... ok
[INFO] [stdout] test provider::tests::stream_chunk_compaction_variant ... ok
[INFO] [stdout] test provider::tests::short_type_name_primitive_returns_full_name ... ok
[INFO] [stdout] test provider::tests::strip_json_fences_empty ... ok
[INFO] [stdout] test provider::tests::strip_json_fences_only_opening_fence ... ok
[INFO] [stdout] test provider::tests::strip_json_fences_outer_whitespace ... ok
[INFO] [stdout] test provider::tests::strip_json_fences_whitespace ... ok
[INFO] [stdout] test provider::tests::strip_json_fences_with_json_fence ... ok
[INFO] [stdout] test provider::tests::strip_json_fences_with_plain_fence ... ok
[INFO] [stdout] test provider::tests::structured_parse_error_display ... ok
[INFO] [stdout] test provider::tests::stub_provider_embed_returns_vector ... ok
[INFO] [stdout] test openai::tests::supports_vision_true_for_o3 ... ok
[INFO] [stdout] test provider::tests::supports_structured_output_default_false ... ok
[INFO] [stdout] test provider::tests::supports_streaming_default_returns_false ... ok
[INFO] [stdout] test provider::tests::supports_tool_use_default_returns_false ... ok
[INFO] [stdout] test provider::tests::supports_vision_default_false ... ok
[INFO] [stdout] test provider::tests::test_image_data_debug_redacts_bytes ... ok
[INFO] [stdout] test provider::tests::summary_roundtrip ... ok
[INFO] [stdout] test provider::tests::tool_definition_serde_round_trip ... ok
[INFO] [stdout] test provider_dyn::tests::chat_typed_dyn_happy_path ... ok
[INFO] [stdout] test provider_dyn::tests::chat_typed_dyn_strips_fences ... ok
[INFO] [stdout] test openai::tests::supports_embeddings_with_model ... ok
[INFO] [stdout] test provider_dyn::tests::dyn_embed_works ... ok
[INFO] [stdout] test provider_dyn::tests::dyn_sync_methods_forward_correctly ... ok
[INFO] [stdout] test provider_dyn::tests::dyn_chat_works ... ok
[INFO] [stdout] test retry::tests::retry_delay_exponential_backoff ... ok
[INFO] [stdout] test openai::tests::supports_vision_false_with_explicit_override_on_vision_model ... ok
[INFO] [stdout] test provider::tests::tool_output_compacted_at_serde_default ... ok
[INFO] [stdout] test openai::tests::supports_vision_true_for_known_vision_model ... ok
[INFO] [stdout] test openai::tests::supports_vision_true_for_o4_mini ... ok
[INFO] [stdout] test provider::tests::strip_json_fences_plain_json ... ok
[INFO] [stdout] test retry::tests::retry_delay_range_always_valid ... ok
[INFO] [stdout] test router::asi::tests::asi_state_high_coherence_for_identical_embeddings ... ok
[INFO] [stdout] test openai::tests::supports_vision_true_for_o1 ... ok
[INFO] [stdout] test router::asi::tests::asi_state_low_coherence_for_orthogonal_embeddings ... ok
[INFO] [stdout] test router::asi::tests::asi_state_returns_one_before_warmup ... ok
[INFO] [stdout] test router::asi::tests::asi_state_window_evicts_oldest ... ok
[INFO] [stdout] test router::aware::tests::router_aware_noop_on_mock_record_quality_outcome ... ok
[INFO] [stdout] test router::aware::tests::router_aware_noop_on_mock_set_memory_confidence ... ok
[INFO] [stdout] test openai::tests::with_generation_overrides_stores_overrides ... ok
[INFO] [stdout] test router::bandit::tests::cost_weight_biases_toward_cheap_provider ... ok
[INFO] [stdout] test openai::tests::supports_vision_override_via_builder ... ok
[INFO] [stdout] test router::bandit::tests::cost_weight_zero_no_bias ... ok
[INFO] [stdout] test router::bandit::tests::dim_one_update_and_select ... ok
[INFO] [stdout] test router::bandit::tests::decay_converges_to_identity ... ok
[INFO] [stdout] test router::bandit::tests::embedding_to_features_short_returns_none ... ok
[INFO] [stdout] test router::bandit::tests::embedding_to_features_zero_vector_returns_none ... ok
[INFO] [stdout] test router::bandit::tests::embedding_to_features_normalises ... ok
[INFO] [stdout] test router::bandit::tests::load_corrupt_file_returns_default ... ok
[INFO] [stdout] test router::bandit::tests::load_clamps_out_of_range_values ... ok
[INFO] [stdout] test openai::tests::supports_vision_true_with_explicit_override_on_text_model ... ok
[INFO] [stdout] test router::bandit::tests::load_missing_file_returns_default ... ok
[INFO] [stdout] test router::bandit::tests::load_mismatched_dim_resets_arm ... ok
[INFO] [stdout] test router::bandit::tests::mar_high_confidence_boosts_cheap_provider ... ok
[INFO] [stdout] test router::bandit::tests::mar_low_confidence_no_boost ... ok
[INFO] [stdout] test router::bandit::tests::prune_removes_stale_arms ... ok
[INFO] [stdout] test router::bandit::tests::reward_clamping_via_stats ... ok
[INFO] [stdout] test router::bandit::tests::mar_cost_weight_zero_no_boost_even_high_confidence ... ok
[INFO] [stdout] test router::bandit::tests::provider_cost_estimate_tiers ... ok
[INFO] [stdout] test router::bandit::tests::select_after_warmup_returns_provider ... ok
[INFO] [stdout] test router::bandit::tests::select_converges_to_best_arm ... ok
[INFO] [stdout] test router::bandit::tests::select_one_provider_over_budget_excluded ... ok
[INFO] [stdout] test router::bandit::tests::select_returns_none_during_warmup ... ok
[INFO] [stdout] test router::bandit::tests::save_and_load_roundtrip ... ok
[INFO] [stdout] test router::bandit::tests::select_single_provider_returns_it ... ok
[INFO] [stdout] test router::bandit::tests::save_leaves_no_tmp_file ... ok
[INFO] [stdout] test router::bandit::tests::solve_identity_returns_rhs ... ok
[INFO] [stdout] test router::bandit::tests::select_returns_none_when_all_filtered ... ok
[INFO] [stdout] test router::bandit::tests::select_zero_providers_returns_none ... ok
[INFO] [stdout] test router::bandit::tests::solve_known_matrix ... ok
[INFO] [stdout] test router::bandit::tests::stats_returns_sorted_by_name ... ok
[INFO] [stdout] test router::bandit::tests::ucb_score_fresh_arm_equals_alpha_times_norm ... ok
[INFO] [stdout] test router::bandit::tests::ucb_selects_arm_with_higher_score ... ok
[INFO] [stdout] test router::bandit::tests::solve_singular_returns_none ... ok
[INFO] [stdout] test router::bandit::tests::update_increments_total_updates ... ok
[INFO] [stdout] test router::bandit::tests::update_modifies_a_and_b ... ok
[INFO] [stdout] test router::bandit::tests::ucb_score_nan_feature_returns_none ... ok
[INFO] [stdout] test router::cascade::tests::cascade_state_unknown_provider_returns_neutral ... ok
[INFO] [stdout] test router::cascade::tests::classifier_mode_default_is_heuristic ... ok
[INFO] [stdout] test router::cascade::tests::classifier_mode_serde_roundtrip ... ok
[INFO] [stdout] test router::cascade::tests::cascade_state_records_and_retrieves ... ok
[INFO] [stdout] test router::cascade::tests::empty_response_scores_zero ... ok
[INFO] [stdout] test router::cascade::tests::cascade_state_window_evicts_old_scores ... ok
[INFO] [stdout] test router::cascade::tests::highly_repetitive_response_scores_low ... ok
[INFO] [stdout] test router::cascade::tests::judge_prompt_empty_response_has_fences ... ok
[INFO] [stdout] test router::cascade::tests::judge_prompt_multiline_response_fully_enclosed ... ok
[INFO] [stdout] test router::cascade::tests::judge_prompt_old_xml_tag_appears_as_plain_text ... ok
[INFO] [stdout] test router::cascade::tests::judge_prompt_wraps_response_in_fenced_delimiters ... ok
[INFO] [stdout] test router::cascade::tests::judge_prompt_fence_string_as_entire_response ... ok
[INFO] [stdout] test router::cascade::tests::normal_response_scores_high ... ok
[INFO] [stdout] test router::cascade::tests::parse_judge_score_decimal ... ok
[INFO] [stdout] test router::cascade::tests::heuristic_score_never_panics_on_unicode ... ok
[INFO] [stdout] test router::cascade::tests::parse_judge_score_integer ... ok
[INFO] [stdout] test router::cascade::tests::parse_judge_score_garbage_returns_none ... ok
[INFO] [stdout] test router::cascade::tests::parse_judge_score_ten_clamps_to_one ... ok
[INFO] [stdout] test router::cascade::tests::parse_judge_score_with_surrounding_text ... ok
[INFO] [stdout] test router::cascade::tests::parse_judge_score_zero_is_valid ... ok
[INFO] [stdout] test router::cascade::tests::repetition_ratio_no_repetition ... ok
[INFO] [stdout] test router::cascade::tests::repetition_ratio_pinned_input ... ok
[INFO] [stdout] test router::cascade::tests::repetition_ratio_full_repetition ... ok
[INFO] [stdout] test router::cascade::tests::very_short_response_scores_low ... ok
[INFO] [stdout] test router::coe::tests::decide_escalates_inter ... ok
[INFO] [stdout] test router::coe::tests::decide_escalates_intra ... ok
[INFO] [stdout] test router::coe::tests::decide_keeps_primary_when_below_thresholds ... ok
[INFO] [stdout] test router::coe::tests::run_coe_escalates_intra_when_entropy_high ... ok
[INFO] [stdout] test router::coe::tests::run_coe_fallback_on_secondary_failure ... ok
[INFO] [stdout] test router::coe::tests::run_coe_keeps_primary_when_shadow_disabled ... ok
[INFO] [stdout] test router::coe::tests::should_shadow_returns_false_below_borderline ... ok
[INFO] [stdout] test router::coe::tests::should_shadow_returns_true_when_above_threshold ... ok
[INFO] [stdout] test router::reputation::tests::apply_decay_does_not_go_below_prior_at_one ... ok
[INFO] [stdout] test openai::tests::with_provider_name_overrides_name ... ok
[INFO] [stdout] test router::reputation::tests::apply_decay_with_zero_observations_leaves_observations_zero ... ok
[INFO] [stdout] test router::reputation::tests::apply_decay_shrinks_toward_prior ... ok
[INFO] [stdout] test router::reputation::tests::default_entry_is_uniform_prior ... ok
[INFO] [stdout] test openai::tests::with_completion_tokens_param_builder_sets_override ... ok
[INFO] [stdout] test router::reputation::tests::ema_reputation_factor_exact_value ... ok
[INFO] [stdout] test router::reputation::tests::ema_reputation_factor_in_range ... ok
[INFO] [stdout] test router::reputation::tests::empty_provider_list_does_not_panic ... ok
[INFO] [stdout] test router::reputation::tests::high_quality_provider_gets_higher_effective_alpha ... ok
[INFO] [stdout] test router::reputation::tests::load_clamps_out_of_range_values ... ok
[INFO] [stdout] test router::reputation::tests::load_corrupt_file_returns_default ... ok
[INFO] [stdout] test router::reputation::tests::load_missing_file_returns_default ... ok
[INFO] [stdout] test retry::tests::send_with_retry_succeeds_after_one_429 ... ok
[INFO] [stdout] test router::reputation::tests::load_sanitizes_nan_and_inf_values ... ok
[INFO] [stdout] test router::reputation::tests::min_observations_gate_blocks_insufficient_data ... ok
[INFO] [stdout] test router::reputation::tests::min_observations_gate_passes_at_threshold ... ok
[INFO] [stdout] test router::reputation::tests::new_clamps_zero_decay_factor_to_min_positive ... ok
[INFO] [stdout] test router::reputation::tests::prune_removes_stale_entries ... ok
[INFO] [stdout] test router::reputation::tests::prune_with_empty_known_removes_all ... ok
[INFO] [stdout] test router::reputation::tests::record_success_increments_alpha ... ok
[INFO] [stdout] test router::reputation::tests::record_failure_increments_beta ... ok
[INFO] [stdout] test router::reputation::tests::shift_thompson_priors_max_weight_shifts_fully ... ok
[INFO] [stdout] test router::reputation::tests::shift_thompson_priors_shifts_alpha_for_good_provider ... ok
[INFO] [stdout] test router::reputation::tests::shift_thompson_priors_shifts_beta_for_bad_provider ... ok
[INFO] [stdout] test router::reputation::tests::shift_thompson_priors_zero_weight_returns_original ... ok
[INFO] [stdout] test router::reputation::tests::stats_returns_sorted_entries ... ok
[INFO] [stdout] test router::tests::arc_providers_clone_shares_allocation ... ok
[INFO] [stdout] test router::tests::asi_debounce_next_turn_fires_again ... ok
[INFO] [stdout] test router::reputation::tests::shift_thompson_priors_returns_unchanged_below_min_obs ... ok
[INFO] [stdout] test router::tests::asi_debounce_same_turn_fires_once ... ok
[INFO] [stdout] test router::tests::blocking_load_runs_closure_on_current_thread_runtime ... ok
[INFO] [stdout] test router::tests::cascade_accepts_good_quality_response ... ok
[INFO] [stdout] test router::tests::cascade_all_providers_fail_preserves_last_error ... ok
[INFO] [stdout] test router::tests::cascade_budget_returns_best_seen_not_current ... ok
[INFO] [stdout] test router::tests::cascade_chat_with_tools_unaffected_by_cost_tiers ... ok
[INFO] [stdout] test router::reputation::tests::save_and_load_roundtrip ... ok
[INFO] [stdout] test router::tests::cascade_config_default_values ... ok
[INFO] [stdout] test router::reputation::tests::save_and_load_preserves_decay_factor_and_min_observations ... ok
[INFO] [stdout] test router::tests::cascade_empty_best_seen_not_returned_on_all_fail ... ok
[INFO] [stdout] test router::reputation::tests::save_leaves_no_tmp_file ... ok
[INFO] [stdout] test router::tests::cascade_empty_response_not_stored_as_best_seen ... ok
[INFO] [stdout] test router::tests::cascade_empty_router_returns_no_providers ... ok
[INFO] [stdout] test router::tests::cascade_escalations_exhausted_returns_best_seen_not_current ... ok
[INFO] [stdout] test router::tests::cascade_max_escalations_budget_exhausted_returns_last_attempted ... ok
[INFO] [stdout] test router::tests::cascade_returns_best_seen_when_all_fail_after_good_response ... ok
[INFO] [stdout] test router::tests::cascade_strategy_is_set ... ok
[INFO] [stdout] test router::tests::cascade_stream_all_fail_returns_error ... ok
[INFO] [stdout] test router::tests::cascade_stream_budget_returns_best_seen ... ok
[INFO] [stdout] test router::tests::cascade_stream_escalates_to_last_provider ... ok
[INFO] [stdout] test router::tests::cascade_stream_budget_returns_best_seen_not_current ... ok
[INFO] [stdout] test router::tests::cascade_stream_escalations_exhausted_returns_best_seen_not_current ... ok
[INFO] [stdout] test router::tests::cascade_stream_empty_response_not_stored_as_best_seen ... ok
[INFO] [stdout] test router::tests::cascade_stream_good_quality_no_escalation ... ok
[INFO] [stdout] test router::tests::cascade_token_budget_stops_escalation ... ok
[INFO] [stdout] test router::tests::chat_all_providers_exhausted_preserves_last_error ... ok
[INFO] [stdout] test router::tests::cascade_stream_last_fails_returns_best_seen ... ok
[INFO] [stdout] test router::tests::chat_stream_all_providers_exhausted_preserves_last_error ... ok
[INFO] [stdout] test router::tests::chat_with_tools_all_providers_mismatch_exhaustion_preserves_last_error ... ok
[INFO] [stdout] test router::tests::chat_with_tools_preserves_image_for_vision_capable_provider ... ok
[INFO] [stdout] test retry::tests::send_with_retry_mixed_429_then_503_returns_unavailable ... ok
[INFO] [stdout] test router::tests::chat_with_tools_invalid_input_does_not_fall_through_to_second_provider ... ok
[INFO] [stdout] test router::tests::chat_with_tools_invalid_input_breaks_loop_and_returns_invalid_input ... ok
[INFO] [stdout] test router::tests::chat_with_tools_strips_image_for_non_vision_bandit_selected_provider ... ok
[INFO] [stdout] test router::tests::chat_with_tools_single_provider_mismatch_exhaustion_preserves_error ... ok
[INFO] [stdout] test router::tests::chat_with_tools_model_capability_mismatch_falls_through_to_second_provider ... ok
[INFO] [stdout] test router::tests::chat_with_tools_strips_image_for_non_vision_provider_in_ordered_dispatch ... ok
[INFO] [stdout] test retry::tests::send_with_retry_exhausts_retries_returns_unavailable ... ok
[INFO] [stdout] test router::tests::cost_tiers_duplicate_name_uses_last_position ... ok
[INFO] [stdout] test router::tests::cost_tiers_all_providers_listed ... ok
[INFO] [stdout] test router::tests::cost_tiers_empty_router_does_not_panic ... ok
[INFO] [stdout] test router::tests::cost_tiers_none_preserves_chain_order ... ok
[INFO] [stdout] test router::tests::cost_tiers_unknown_name_ignored ... ok
[INFO] [stdout] test router::tests::concurrent_record_outcome_does_not_deadlock ... ok
[INFO] [stdout] test router::tests::embed_batch_all_providers_exhausted_preserves_last_error ... ok
[INFO] [stdout] test router::tests::embed_all_providers_exhausted_preserves_last_error ... ok
[INFO] [stdout] test router::tests::embed_batch_falls_back_after_all_retries_exhausted ... ok
[INFO] [stdout] test router::tests::cost_tiers_empty_vec_preserves_chain_order ... ok
[INFO] [stdout] test router::tests::cost_tiers_reorders_providers_at_construction ... ok
[INFO] [stdout] test router::tests::embed_candidates_prepends_and_dedupes_dedicated_provider ... ok
[INFO] [stdout] test router::tests::embed_batch_retries_on_rate_limited_then_succeeds ... ok
[INFO] [stdout] test router::tests::embed_falls_back_after_all_retries_exhausted ... ok
[INFO] [stdout] test router::tests::embed_falls_back_immediately_on_unavailable ... ok
[INFO] [stdout] test router::tests::embed_invalid_input_does_not_fall_through_to_second_provider ... ok
[INFO] [stdout] test router::tests::embed_invalid_input_breaks_loop_and_returns_invalid_input ... ok
[INFO] [stdout] test router::aware::tests::router_aware_noop_on_claude_record_quality_outcome ... ok
[INFO] [stdout] test router::tests::embed_invalid_input_does_not_record_availability ... ok
[INFO] [stdout] test router::tests::embed_prefers_dedicated_provider_over_chat_only_fallback ... ok
[INFO] [stdout] test router::tests::embed_retries_on_rate_limited_then_succeeds ... ok
[INFO] [stdout] test retry::tests::send_with_retry_mixed_503_then_429_returns_rate_limited ... ok
[INFO] [stdout] test router::tests::embed_skips_non_embedding_providers_and_falls_through ... ok
[INFO] [stdout] test router::aware::tests::router_aware_noop_on_ollama_set_memory_confidence ... ok
[INFO] [stdout] test router::tests::empty_router_chat_returns_no_providers ... ok
[INFO] [stdout] test router::tests::empty_router_chat_stream_returns_no_providers ... ok
[INFO] [stdout] test retry::tests::send_with_retry_exhausts_retries_returns_rate_limited ... ok
[INFO] [stdout] test router::tests::empty_router_chat_with_tools_returns_no_providers ... ok
[INFO] [stdout] test router::tests::empty_router_context_window_none ... ok
[INFO] [stdout] test router::tests::empty_router_embed_returns_no_providers ... ok
[INFO] [stdout] test router::tests::empty_router_name ... ok
[INFO] [stdout] test router::tests::empty_router_supports_nothing ... ok
[INFO] [stdout] test router::tests::evaluate_heuristic_empty_should_escalate_above_threshold ... ok
[INFO] [stdout] test router::tests::evaluate_heuristic_good_response_does_not_escalate ... ok
[INFO] [stdout] test router::tests::last_cache_usage_returns_none ... ok
[INFO] [stdout] test router::cascade::tests::judge_score_times_out_returns_none ... ok
[INFO] [stdout] test router::tests::mock_provider_effective_model_identifier_defaults_to_model_identifier ... ok
[INFO] [stdout] test router::tests::embed_batch_timeout_single_provider_preserves_timeout_error ... ok
[INFO] [stdout] test router::tests::quality_gate_exhaustion_returns_best_seen ... ok
[INFO] [stdout] test router::tests::quality_gate_passes_when_similarity_above_threshold ... ok
[INFO] [stdout] test router::tests::embed_batch_timeout_falls_back_to_next_provider ... ok
[INFO] [stdout] test retry::tests::send_with_retry_records_ttft_on_first_attempt_success_too ... ok
[INFO] [stdout] test router::tests::embed_batch_timeout_records_provider_unavailable ... ok
[INFO] [stdout] test router::tests::embed_timeout_records_provider_unavailable ... ok
[INFO] [stdout] test router::tests::embed_timeout_single_provider_preserves_timeout_error ... ok
[INFO] [stdout] test router::tests::embed_timeout_falls_back_to_next_provider ... ok
[INFO] [stdout] test router::tests::router_capability_target_none_for_empty_pool ... ok
[INFO] [stdout] test router::tests::router_effective_model_identifier_before_dispatch_is_router_label ... ok
[INFO] [stdout] test router::tests::router_effective_model_identifier_falls_back_to_router_on_stale_name ... ok
[INFO] [stdout] test router::tests::router_effective_model_identifier_resolves_last_active_non_reasoning_model ... ok
[INFO] [stdout] test retry::tests::send_with_retry_success_on_first_attempt ... ok
[INFO] [stdout] test router::tests::router_effective_model_identifier_resolves_last_active_reasoning_model ... ok
[INFO] [stdout] test router::tests::router_effective_model_identifier_resolves_via_real_dispatch ... ok
[INFO] [stdout] test router::tests::embed_semaphore_limits_concurrency ... ok
[INFO] [stdout] test router::tests::clone_preserves_providers ... ok
[INFO] [stdout] test router::tests::router_supports_vision_false_when_no_provider_supports_it ... ok
[INFO] [stdout] test router::tests::router_supports_vision_true_when_any_provider_supports_it ... ok
[INFO] [stdout] test router::tests::masked_router_set_thinking_budget_delegates_through_inner ... ok
[INFO] [stdout] test router::tests::routing_signals_quality_gate_above_one_is_ignored ... ok
[INFO] [stdout] test router::tests::router_set_thinking_budget_names_real_inner_provider_on_mismatch ... ok
[INFO] [stdout] test router::tests::routing_signals_quality_gate_valid_is_wired ... ok
[INFO] [stdout] test router::tests::save_thompson_state_noop_without_thompson ... ok
[INFO] [stdout] test router::tests::set_status_tx_works_with_arc ... ok
[INFO] [stdout] test router::tests::router_capability_target_falls_back_to_first_on_config_drift ... ok
[INFO] [stdout] test router::tests::router_set_thinking_budget_rebuild_path_persists_on_authoritative_instance ... ok
[INFO] [stdout] test router::tests::thompson_ordered_providers_empty ... ok
[INFO] [stdout] test router::tests::thompson_strategy_is_set ... ok
[INFO] [stdout] test router::tests::turn_counter_increments_across_clones ... ok
[INFO] [stdout] test router::tests::turn_embed_cache_hit_increments_counter ... ok
[INFO] [stdout] test router::tests::with_embed_concurrency_positive_creates_semaphore ... ok
[INFO] [stdout] test router::tests::with_embed_concurrency_zero_means_no_semaphore ... ok
[INFO] [stdout] test router::thompson::tests::beta_dist_sample_in_range ... ok
[INFO] [stdout] test router::thompson::tests::high_alpha_provider_selected_disproportionately ... ok
[INFO] [stdout] test router::thompson::tests::load_clamps_out_of_range_values ... ok
[INFO] [stdout] test router::thompson::tests::load_corrupt_file_returns_default ... ok
[INFO] [stdout] test router::thompson::tests::load_missing_file_returns_default ... ok
[INFO] [stdout] test router::thompson::tests::provider_stats_returns_sorted_entries ... ok
[INFO] [stdout] test router::thompson::tests::prune_removes_stale_entries ... ok
[INFO] [stdout] test router::thompson::tests::rate_limited_error_increments_beta_by_two ... ok
[INFO] [stdout] test router::tests::router_capability_delegation_advisory_absent_for_single_provider_pool ... ok
[INFO] [stdout] test router::thompson::tests::save_and_load_roundtrip ... ok
[INFO] [stdout] test router::thompson::tests::select_empty_providers_returns_none ... ok
[INFO] [stdout] test router::thompson::tests::select_is_mut_compatible_with_repeated_calls ... ok
[INFO] [stdout] test router::thompson::tests::select_returns_one_of_the_providers ... ok
[INFO] [stdout] test router::thompson::tests::save_leaves_no_tmp_file ... ok
[INFO] [stdout] test router::thompson::tests::select_single_provider_returns_it ... ok
[INFO] [stdout] test router::thompson::tests::update_success_increases_alpha ... ok
[INFO] [stdout] test router::triage::tests::build_triage_prompt_contains_last_user_message ... ok
[INFO] [stdout] test router::triage::tests::build_triage_prompt_has_no_context_size_metadata ... ok
[INFO] [stdout] test router::thompson::tests::update_failure_increases_beta ... ok
[INFO] [stdout] test router::triage::tests::chat_with_tools_drops_image_when_no_tier_is_vision_capable ... ok
[INFO] [stdout] test router::triage::tests::chat_with_tools_errors_when_no_tier_supports_tools ... ok
[INFO] [stdout] test router::triage::tests::chat_with_tools_escalates_to_tool_capable_tier ... ok
[INFO] [stdout] test router::triage::tests::chat_with_tools_escalates_to_vision_capable_tier_for_image_bearing_request ... ok
[INFO] [stdout] test router::triage::tests::chat_with_tools_lower_tier_fallback_accepts_context_fit_end_to_end ... ok
[INFO] [stdout] test router::tests::cascade_ordered_providers_preserves_chain_order ... ok
[INFO] [stdout] test router::triage::tests::chat_with_tools_never_sends_image_to_incapable_tier_regression ... ok
[INFO] [stdout] test router::tests::router_with_streaming_provider ... ok
[INFO] [stdout] test router::triage::tests::complexity_tier_index_ordering ... ok
[INFO] [stdout] test router::tests::router_capability_delegation_advisory_present_for_resampling_multi_provider_pool ... ok
[INFO] [stdout] test router::tests::spawn_asi_update_with_precomputed_skips_embed ... ok
[INFO] [stdout] test router::triage::tests::embed_batch_prefers_dedicated_provider_over_embedding_capable_tier ... ok
[INFO] [stdout] test router::triage::tests::embed_delegates_to_first_embedding_capable_tier ... ok
[INFO] [stdout] test router::triage::tests::embed_falls_back_to_tier_scan_without_dedicated_provider ... ok
[INFO] [stdout] test router::triage::tests::embed_returns_error_when_no_tier_supports_embeddings ... ok
[INFO] [stdout] test router::triage::tests::embed_prefers_dedicated_provider_over_embedding_capable_tier ... ok
[INFO] [stdout] test router::triage::tests::escalate_for_tool_support_falls_back_to_lower_tier ... ok
[INFO] [stdout] test router::tests::router_capability_delegation_advisory_absent_for_cascade ... ok
[INFO] [stdout] test router::triage::tests::escalate_for_tool_support_no_op_when_supported ... ok
[INFO] [stdout] test router::triage::tests::escalate_for_tool_support_none_when_no_tier_supports_tools ... ok
[INFO] [stdout] test router::triage::tests::escalate_for_tool_support_prefers_higher_over_lower_when_both_qualify ... ok
[INFO] [stdout] test router::triage::tests::escalate_for_tool_support_prefers_higher_tier ... ok
[INFO] [stdout] test router::triage::tests::escalate_for_vision_support_escalates_to_higher_tier ... ok
[INFO] [stdout] test router::triage::tests::escalate_for_vision_support_no_op_when_current_tier_supports_it ... ok
[INFO] [stdout] test router::triage::tests::escalate_for_vision_support_none_when_no_tier_supports_vision ... ok
[INFO] [stdout] test router::tests::masked_triage_set_thinking_budget_delegates_through_inner ... ok
[INFO] [stdout] test router::tests::router_capability_target_resolves_duplicate_name_to_first_slot ... ok
[INFO] [stdout] test router::triage::tests::escalate_skips_when_context_window_none ... ok
[INFO] [stdout] test router::tests::router_falls_back_on_unreachable ... ok
[INFO] [stdout] test router::triage::tests::last_usage_none_before_any_call ... ok
[INFO] [stdout] test router::triage::tests::messages_contain_image_detects_sibling_part ... ok
[INFO] [stdout] test router::triage::tests::metrics_snapshot_default ... ok
[INFO] [stdout] test router::triage::tests::parse_tier_complex ... ok
[INFO] [stdout] test router::triage::tests::parse_tier_garbage_returns_none ... ok
[INFO] [stdout] test router::triage::tests::parse_tier_json ... ok
[INFO] [stdout] test router::tests::router_capability_target_falls_back_to_first_when_no_dispatch_yet ... ok
[INFO] [stdout] test router::triage::tests::parse_tier_regex_fallback ... ok
[INFO] [stdout] test router::triage::tests::parse_tier_regex_only ... ok
[INFO] [stdout] test router::triage::tests::select_provider_escalates_to_higher ... ok
[INFO] [stdout] test router::triage::tests::select_provider_exact_tier ... ok
[INFO] [stdout] test router::triage::tests::strip_image_parts_removes_image_keeps_other_parts ... ok
[INFO] [stdout] test router::triage::tests::supports_embeddings_false_when_no_tier_supports_it ... ok
[INFO] [stdout] test router::triage::tests::supports_embeddings_true_when_tier_supports_it ... ok
[INFO] [stdout] test router::triage::tests::supports_streaming_false_if_no_tier_supports_it ... ok
[INFO] [stdout] test router::triage::tests::tier_as_str ... ok
[INFO] [stdout] test router::triage::tests::supports_streaming_true_if_any_tier_supports_it ... ok
[INFO] [stdout] test router::triage::tests::triage_capability_delegation_advisory_present_for_multi_tier_pool ... ok
[INFO] [stdout] test router::triage::tests::triage_capability_target_falls_back_to_default_index_before_first_call ... ok
[INFO] [stdout] test router::triage::tests::triage_effective_model_identifier_falls_back_to_default_index_before_first_call ... ok
[INFO] [stdout] test router::triage::tests::triage_effective_model_identifier_resolves_last_provider_idx ... ok
[INFO] [stdout] test router::triage::tests::triage_capability_delegation_advisory_absent_for_single_tier_pool ... ok
[INFO] [stdout] test router::triage::tests::triage_effective_model_identifier_resolves_last_provider_idx_non_reasoning ... ok
[INFO] [stdout] test router::triage::tests::triage_effective_model_identifier_resolves_via_real_dispatch ... ok
[INFO] [stdout] test router::triage::tests::triage_router_chat_delegates_to_correct_tier ... ok
[INFO] [stdout] test router::triage::tests::chat_with_tools_combines_context_and_tool_support_escalation ... ok
[INFO] [stdout] test router::triage::tests::triage_set_thinking_budget_names_real_inner_provider_on_mismatch ... ok
[INFO] [stdout] test sse::tests::claude_compaction_block_start_sets_buf ... ok
[INFO] [stdout] test sse::tests::claude_compaction_buf_capped_at_32kib ... ok
[INFO] [stdout] test sse::tests::claude_compaction_delta_accumulated_into_buf ... ok
[INFO] [stdout] test sse::tests::claude_compaction_delta_does_not_emit_content_chunk ... ok
[INFO] [stdout] test sse::tests::claude_compaction_stop_emits_compaction_chunk ... ok
[INFO] [stdout] test sse::tests::claude_full_compaction_sequence ... ok
[INFO] [stdout] test sse::tests::claude_non_compaction_block_start_leaves_buf_empty ... ok
[INFO] [stdout] test sse::tests::claude_parse_empty_text_delta ... ok
[INFO] [stdout] test sse::tests::claude_parse_error_event ... ok
[INFO] [stdout] test sse::tests::claude_parse_text_delta ... ok
[INFO] [stdout] test sse::tests::claude_parse_unknown_event_skipped ... ok
[INFO] [stdout] test sse::tests::claude_signature_delta_not_emitted_to_stream ... ok
[INFO] [stdout] test router::triage::tests::chat_with_tools_lower_tier_fallback_rejects_context_misfit_end_to_end ... ok
[INFO] [stdout] test sse::tests::claude_stop_without_compaction_buf_returns_none ... ok
[INFO] [stdout] test sse::tests::claude_thinking_delta_emitted_as_thinking_chunk ... ok
[INFO] [stdout] test sse::tests::claude_thinking_delta_empty_not_emitted ... ok
[INFO] [stdout] test sse::tests::claude_tool_sse_input_json_delta_emitted ... ok
[INFO] [stdout] test sse::tests::claude_tool_sse_thinking_block_done_on_stop ... ok
[INFO] [stdout] test sse::tests::claude_tool_sse_tool_call_complete_on_stop ... ok
[INFO] [stdout] test sse::tests::gemini_parse_empty_text_skipped ... ok
[INFO] [stdout] test sse::tests::gemini_parse_function_call_empty_name ... ok
[INFO] [stdout] test sse::tests::gemini_parse_function_call_no_args ... ok
[INFO] [stdout] test sse::tests::gemini_parse_function_call_null_args ... ok
[INFO] [stdout] test sse::tests::gemini_parse_function_call_with_thinking ... ok
[INFO] [stdout] test sse::tests::gemini_parse_invalid_json_error ... ok
[INFO] [stdout] test sse::tests::gemini_parse_mixed_text_and_function_call ... ok
[INFO] [stdout] test sse::tests::gemini_parse_multi_part_thinking_priority ... ok
[INFO] [stdout] test sse::tests::gemini_parse_multiple_function_calls ... ok
[INFO] [stdout] test sse::tests::gemini_parse_no_candidates_skipped ... ok
[INFO] [stdout] test sse::tests::gemini_parse_text_chunk ... ok
[INFO] [stdout] test sse::tests::gemini_parse_single_function_call ... ok
[INFO] [stdout] test sse::tests::gemini_parse_text_only_unaffected ... ok
[INFO] [stdout] test sse::tests::gemini_parse_thinking_chunk ... ok
[INFO] [stdout] test sse::tests::gemini_parse_thought_false_emitted_as_content ... ok
[INFO] [stdout] test router::tests::router_set_thinking_budget_delegates_to_last_active_provider ... ok
[INFO] [stdout] test sse::tests::openai_parse_done_signal ... ok
[INFO] [stdout] test router::triage::tests::chat_with_tools_rejects_when_context_escalated_tier_lacks_tools_and_lower_tier_misfits ... ok
[INFO] [stdout] test sse::tests::openai_parse_empty_content ... ok
[INFO] [stdout] test sse::tests::openai_parse_invalid_json ... ok
[INFO] [stdout] test sse::tests::openai_parse_reasoning_content_chunk ... ok
[INFO] [stdout] test sse::tests::openai_parse_text_chunk ... ok
[INFO] [stdout] test sse::tests::thinking_buf_accepts_data_below_cap ... ok
[INFO] [stdout] test sse::tests::tool_json_buf_accepts_data_below_cap ... ok
[INFO] [stdout] test sse::tests::thinking_buf_capped_at_1mib ... ok
[INFO] [stdout] test sse::tests::tool_json_buf_capped_at_4mib ... ok
[INFO] [stdout] test router::triage::tests::escalate_for_tool_support_lower_tier_fallback_respects_context_fit ... ok
[INFO] [stdout] test router::triage::tests::escalate_no_larger_provider_keeps_original ... ok
[INFO] [stdout] test tool_pairing::tests::adjacency_scoping_ignores_id_reuse_across_unrelated_turns ... ok
[INFO] [stdout] test tool_pairing::tests::adjacency_skips_over_an_intervening_system_message ... ok
[INFO] [stdout] test tool_pairing::tests::all_orphan_window_is_fully_repaired_in_one_sweep ... ok
[INFO] [stdout] test tool_pairing::tests::downgrade_produces_non_empty_marker_even_for_empty_content ... ok
[INFO] [stdout] test tool_pairing::tests::e1_downgrade_still_restores_the_anchor_when_stale_content_was_not_meaningful ... ok
[INFO] [stdout] test router::triage::tests::debug_request_json_reflects_last_provider_after_chat ... ok
[INFO] [stdout] test tool_pairing::tests::multiple_consecutive_orphaned_tool_use_ids_in_one_message_are_all_stripped ... ok
[INFO] [stdout] test tool_pairing::tests::intact_pair_survives_a_single_sweep ... ok
[INFO] [stdout] test tool_pairing::tests::next_non_system_is_none_at_the_last_index ... ok
[INFO] [stdout] test tool_pairing::tests::next_non_system_is_none_when_only_system_messages_follow ... ok
[INFO] [stdout] test tool_pairing::tests::next_non_system_skips_a_run_of_system_messages ... ok
[INFO] [stdout] test router::triage::tests::escalate_no_op_within_80_percent ... ok
[INFO] [stdout] test tool_pairing::tests::prev_non_system_is_none_at_index_zero ... ok
[INFO] [stdout] test tool_pairing::tests::repair_window_cascades_leading_drop_into_a_newly_orphaned_pair ... ok
[INFO] [stdout] test tool_pairing::tests::prev_non_system_skips_a_run_of_system_messages ... ok
[INFO] [stdout] test tool_pairing::tests::repair_window_on_a_system_only_window_is_a_noop ... ok
[INFO] [stdout] test tool_pairing::tests::repair_tool_pairs_never_touches_content_on_a_partial_strip ... ok
[INFO] [stdout] test tool_pairing::tests::repair_window_never_touches_divergent_content_when_nothing_needs_repair ... ok
[INFO] [stdout] test tool_pairing::tests::repair_window_resyncs_content_when_it_was_flatten_derived ... ok
[INFO] [stdout] test tool_pairing::tests::resolved_tool_result_ids_collects_multiple_results_in_one_message ... ok
[INFO] [stdout] test tool_pairing::tests::resolved_tool_result_ids_is_empty_for_non_user_role ... ok
[INFO] [stdout] test tool_pairing::tests::resolved_tool_result_ids_is_empty_for_none ... ok
[INFO] [stdout] test tool_pairing::tests::system_messages_are_never_removed ... ok
[INFO] [stdout] test tool_pairing::tests::trailing_orphaned_tool_use_is_repaired_not_exempted ... ok
[INFO] [stdout] test usage::tests::clone_resets_last_ttft_ms ... ok
[INFO] [stdout] test usage::tests::last_ttft_ms_initially_none ... ok
[INFO] [stdout] test usage::tests::record_ttft_overwrites_previous_value ... ok
[INFO] [stdout] test usage::tests::record_ttft_updates_last_ttft_ms ... ok
[INFO] [stdout] test router::triage::tests::escalate_for_tool_support_lower_tier_fallback_accepts_fitting_context ... ok
[INFO] [stdout] test router::tests::spawn_asi_update_embed_timeout_does_not_update_asi ... ok
[INFO] [stdout] test router::triage::tests::triage_set_thinking_budget_delegates_to_last_provider_idx ... ok
[INFO] [stdout] test testing::tests::claude_sse_contains_chunks ... ok
[INFO] [stdout] test testing::tests::openai_chat_response_is_200 ... ok
[INFO] [stdout] test testing::tests::openai_sse_contains_done_sentinel ... ok
[INFO] [stdout] test testing::tests::claude_messages_response_shape ... ok
[INFO] [stdout] test testing::tests::ollama_response_shape ... ok
[INFO] [stdout] test whisper::tests::whisper_provider_construction ... ok
[INFO] [stdout] test router::triage::tests::escalate_triggers_above_80_percent ... ok
[INFO] [stdout] test router::tests::spawn_asi_update_reaped_after_cap_full ... ok
[INFO] [stdout] test whisper::tests::whisper_provider_debug_redacts_key ... ok
[INFO] [stdout] test retry::tests::send_with_retry_ttft_reflects_final_attempt_not_backoff_delay ... ok
[INFO] [stdout] test router::triage::tests::triage_router_fallback_on_timeout ... ok
[INFO] [stdout] test openai::tests::chat_429_rate_limit_propagates ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 1183 passed; 0 failed; 16 ignored; 0 measured; 0 filtered out; finished in 10.78s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/claude_live.rs (/opt/rustwide/target/debug/deps/claude_live-260d519407877144)
[INFO] [stdout] 
[INFO] [stdout] running 2 tests
[INFO] [stdout] test claude_live_opus_4_8_extended_thinking_converts_to_effort ... ignored, requires ZEPH_CLAUDE_API_KEY env var and live Anthropic API access
[INFO] [stdout] test claude_live_sonnet_5_thinking_strips_trailing_assistant_prefill ... ignored, requires ZEPH_CLAUDE_API_KEY env var and live Anthropic API access
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/gonka_live.rs (/opt/rustwide/target/debug/deps/gonka_live-cdc71b155c6ab668)
[INFO] [stdout] 
[INFO] [stdout] running 1 test
[INFO] [stdout] test compatible_live::gonkagate_compatible_chat_round_trip ... ignored, requires ZEPH_COMPATIBLE_GONKAGATE_API_KEY env var and live gonkagate access
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests zeph_llm
[INFO] [stdout] 
[INFO] [stdout] running 44 tests
[INFO] [stdout] test src/cocoon/client.rs - cocoon::client::CocoonClient (line 50) - compile ... ok
[INFO] [stdout] test src/cocoon/client.rs - cocoon::client::CocoonClient::new (line 90) - compile ... ok
[INFO] [stdout] test src/claude/mod.rs - claude (line 30) - compile ... ok
[INFO] [stdout] test src/cocoon/mod.rs - cocoon (line 16) - compile ... ok
[INFO] [stdout] test src/cocoon/provider.rs - cocoon::provider::CocoonProvider (line 95) - compile ... ok
[INFO] [stdout] test src/cocoon/provider.rs - cocoon::provider::CocoonProvider::new (line 157) - compile ... ok
[INFO] [stdout] test src/cocoon/stt.rs - cocoon::stt::CocoonSttProvider (line 26) - compile ... ok
[INFO] [stdout] test src/cocoon/stt.rs - cocoon::stt::CocoonSttProvider::new (line 61) - compile ... ok
[INFO] [stdout] test src/extractor.rs - extractor (line 14) - compile ... ok
[INFO] [stdout] test src/ollama.rs - ollama (line 23) - compile ... ok
[INFO] [stdout] test src/lib.rs - (line 67) - compile ... ok
[INFO] [stdout] test src/any.rs - any::ReasoningEffort::from_str (line 176) ... ok
[INFO] [stdout] test src/provider.rs - provider::LlmProvider (line 805) - compile ... ok
[INFO] [stdout] test src/provider.rs - provider::ChatExtras::with_entropy (line 94) ... ok
[INFO] [stdout] test src/provider.rs - provider::Message (line 636) ... ok
[INFO] [stdout] test src/provider_dyn.rs - provider_dyn (line 28) - compile ... ok
[INFO] [stdout] test src/provider_dyn.rs - provider_dyn::chat_typed_dyn (line 306) - compile ... ok
[INFO] [stdout] test src/provider.rs - provider::MessagePart::strip_images (line 367) ... ok
[INFO] [stdout] test src/router/builder.rs - router::builder::RouterProvider::with_embed_timeout (line 73) - compile ... ok
[INFO] [stdout] test src/router/aware.rs - router::aware (line 19) - compile ... ok
[INFO] [stdout] test src/router/builder.rs - router::builder::RouterProvider::with_embed_provider (line 93) - compile ... ok
[INFO] [stdout] test src/tool_pairing.rs - tool_pairing::OrphanAction (line 316) ... ok
[INFO] [stdout] test src/tool_pairing.rs - tool_pairing::has_meaningful_content (line 612) ... ok
[INFO] [stdout] test src/provider.rs - provider::MessageVisibility (line 442) ... ok
[INFO] [stdout] test src/provider.rs - provider::short_type_name (line 58) ... ok
[INFO] [stdout] test src/tool_pairing.rs - tool_pairing::next_non_system (line 110) ... ok
[INFO] [stdout] test src/tool_pairing.rs - tool_pairing::repair_tool_pairs (line 376) ... ok
[INFO] [stdout] test src/tool_pairing.rs - tool_pairing::repair_window (line 550) ... ok
[INFO] [stdout] test src/tool_pairing.rs - tool_pairing::prev_non_system (line 137) ... ok
[INFO] [stdout] test src/tool_pairing.rs - tool_pairing::resolved_tool_result_ids (line 222) ... ok
[INFO] [stdout] test src/tool_pairing.rs - tool_pairing::unmatched_tool_result_ids (line 258) ... ok
[INFO] [stdout] test src/tool_pairing.rs - tool_pairing::unmatched_tool_use_ids (line 173) ... ok
[INFO] [stdout] test src/tool_pairing.rs - tool_pairing::RepairReport (line 340) ... ok
[INFO] [stdout] test src/any.rs - any::AnyProvider::masked (line 200) ... ok
[INFO] [stdout] test src/compatible.rs - compatible::CompatibleProvider::with_vision (line 213) ... ok
[INFO] [stdout] test src/openai/mod.rs - openai::OpenAiProvider::with_completion_tokens_param (line 380) ... ok
[INFO] [stdout] test src/masking.rs - masking::MaskedProvider (line 55) ... ok
[INFO] [stdout] test src/openai/mod.rs - openai::OpenAiProvider::with_context_window (line 348) ... ok
[INFO] [stdout] test src/openai/mod.rs - openai::OpenAiProvider::set_reasoning_effort (line 444) ... ok
[INFO] [stdout] test src/openai/mod.rs - openai::CompletionTokensParam (line 52) ... ok
[INFO] [stdout] test src/compatible.rs - compatible::CompatibleConfig (line 39) ... ok
[INFO] [stdout] test src/openai/mod.rs - openai::OpenAiConfig (line 85) ... ok
[INFO] [stdout] test src/compatible.rs - compatible::CompatibleProvider::with_completion_tokens_param (line 182) ... ok
[INFO] [stdout] test src/openai/mod.rs - openai::OpenAiProvider::with_vision (line 412) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 44 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.15s
[INFO] [stdout] 
[INFO] [stdout] all doctests ran in 2.49s; merged doctests compilation took 2.30s
[INFO] running `Command { std: "docker" "inspect" "41d328ffff2385b7ad31750b8427076d1b7d4fb923b93dd6b4364ac4c385dcd2", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "41d328ffff2385b7ad31750b8427076d1b7d4fb923b93dd6b4364ac4c385dcd2", kill_on_drop: false }`
[INFO] [stdout] 41d328ffff2385b7ad31750b8427076d1b7d4fb923b93dd6b4364ac4c385dcd2
