[INFO] cloning repository https://github.com/jamesra26/indexlink
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/jamesra26/indexlink" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjamesra26%2Findexlink", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjamesra26%2Findexlink'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 79c56eaeef3a62097854340a98a8e0585ed4a556
[INFO] testing jamesra26/indexlink against 1.99.0-beta.1+cargoflags=--release for beta-release-1.99-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjamesra26%2Findexlink" "/workspace/builds/worker-7-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc2/source'...
[INFO] [stderr] done.
[INFO] removed /workspace/builds/worker-7-tc2/source/rust-toolchain.toml
[INFO] started tweaking git repo https://github.com/jamesra26/indexlink
[INFO] finished tweaking git repo https://github.com/jamesra26/indexlink
[INFO] tweaked toml for git repo https://github.com/jamesra26/indexlink written to /workspace/builds/worker-7-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/jamesra26/indexlink on toolchain 1.99.0-beta.1
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/jamesra26/indexlink 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.1" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:8683fc1fc2eb5c9ac98e0d076ab094b2ffac7f99da555d2b6a2e27f346de2ec7" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] d603f2b4e3e32835d73874487d5cafbdf83428590c5c301a457cc18e7dfc619c
[INFO] running `Command { std: "docker" "start" "d603f2b4e3e32835d73874487d5cafbdf83428590c5c301a457cc18e7dfc619c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "d603f2b4e3e32835d73874487d5cafbdf83428590c5c301a457cc18e7dfc619c", 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" "d603f2b4e3e32835d73874487d5cafbdf83428590c5c301a457cc18e7dfc619c" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "d603f2b4e3e32835d73874487d5cafbdf83428590c5c301a457cc18e7dfc619c", 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" "d603f2b4e3e32835d73874487d5cafbdf83428590c5c301a457cc18e7dfc619c" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.1" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.186
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling shlex v2.0.1
[INFO] [stderr]    Compiling syn v2.0.118
[INFO] [stderr]    Compiling autocfg v1.5.1
[INFO] [stderr]    Compiling bytes v1.12.0
[INFO] [stderr]    Compiling stable_deref_trait v1.2.1
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling cc v1.2.65
[INFO] [stderr]    Compiling serde_json v1.0.150
[INFO] [stderr]    Compiling memchr v2.8.2
[INFO] [stderr]    Compiling rustls v0.23.40
[INFO] [stderr]    Compiling cfg-if v1.0.4
[INFO] [stderr]    Compiling futures-sink v0.3.32
[INFO] [stderr]    Compiling log v0.4.32
[INFO] [stderr]    Compiling futures-io v0.3.32
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling socket2 v0.6.4
[INFO] [stderr]    Compiling mio v1.2.1
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling zerocopy v0.8.52
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]    Compiling typenum v1.20.1
[INFO] [stderr]    Compiling zeroize v1.9.0
[INFO] [stderr]    Compiling rustls-pki-types v1.14.1
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling litemap v0.8.2
[INFO] [stderr]    Compiling writeable v0.6.3
[INFO] [stderr]    Compiling subtle v2.6.1
[INFO] [stderr]    Compiling pin-project-lite v0.2.17
[INFO] [stderr]    Compiling futures-core v0.3.32
[INFO] [stderr]    Compiling utf8_iter v1.0.4
[INFO] [stderr]    Compiling icu_normalizer_data v2.2.0
[INFO] [stderr]    Compiling icu_properties_data v2.2.0
[INFO] [stderr]    Compiling scopeguard v1.2.0
[INFO] [stderr]    Compiling lock_api v0.4.14
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling crypto-common v0.1.7
[INFO] [stderr]    Compiling digest v0.10.7
[INFO] [stderr]    Compiling futures-channel v0.3.32
[INFO] [stderr]    Compiling http v1.4.2
[INFO] [stderr]    Compiling pkg-config v0.3.33
[INFO] [stderr]    Compiling vcpkg v0.2.15
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling libsqlite3-sys v0.30.1
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling webpki-roots v1.0.8
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling untrusted v0.9.0
[INFO] [stderr]    Compiling once_cell v1.21.4
[INFO] [stderr]    Compiling equivalent v1.0.2
[INFO] [stderr]    Compiling percent-encoding v2.3.2
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling zmij v1.0.21
[INFO] [stderr]    Compiling futures-task v0.3.32
[INFO] [stderr]    Compiling allocator-api2 v0.2.21
[INFO] [stderr]    Compiling itoa v1.0.18
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling foldhash v0.1.5
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling zerovec-derive v0.11.3
[INFO] [stderr]    Compiling displaydoc v0.2.6
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling tokio-macros v2.7.0
[INFO] [stderr]    Compiling zerofrom v0.1.8
[INFO] [stderr]    Compiling yoke v0.8.3
[INFO] [stderr]    Compiling zerovec v0.11.6
[INFO] [stderr]    Compiling tokio v1.52.3
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling tinystr v0.8.3
[INFO] [stderr]    Compiling potential_utf v0.1.5
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling zerotrie v0.2.4
[INFO] [stderr]    Compiling icu_locale_core v2.2.0
[INFO] [stderr]    Compiling icu_collections v2.2.0
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling icu_provider v2.2.0
[INFO] [stderr]    Compiling smallvec v1.15.2
[INFO] [stderr]    Compiling rustls-webpki v0.103.13
[INFO] [stderr]    Compiling icu_properties v2.2.0
[INFO] [stderr]    Compiling icu_normalizer v2.2.0
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling idna_adapter v1.2.2
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling hashbrown v0.15.5
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling concurrent-queue v2.5.0
[INFO] [stderr]    Compiling tinyvec_macros v0.1.1
[INFO] [stderr]    Compiling cpufeatures v0.2.17
[INFO] [stderr]    Compiling hashbrown v0.17.1
[INFO] [stderr]    Compiling crc-catalog v2.5.0
[INFO] [stderr]    Compiling parking v2.2.1
[INFO] [stderr]    Compiling event-listener v5.4.1
[INFO] [stderr]    Compiling crc v3.4.0
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling sha2 v0.10.9
[INFO] [stderr]    Compiling tinyvec v1.11.0
[INFO] [stderr]    Compiling webpki-roots v0.26.11
[INFO] [stderr]    Compiling tokio-stream v0.1.18
[INFO] [stderr]    Compiling hashlink v0.10.0
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling futures-intrusive v0.5.0
[INFO] [stderr]    Compiling either v1.16.0
[INFO] [stderr]    Compiling crossbeam-queue v0.3.12
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling base64 v0.22.1
[INFO] [stderr]    Compiling bitflags v2.13.0
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling hyper v1.10.1
[INFO] [stderr]    Compiling atoi v2.0.0
[INFO] [stderr]    Compiling unicode-normalization v0.1.25
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling hmac v0.12.1
[INFO] [stderr]    Compiling spin v0.9.8
[INFO] [stderr]    Compiling unicode-properties v0.1.4
[INFO] [stderr]    Compiling unicode-bidi v0.3.18
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]    Compiling ryu v1.0.23
[INFO] [stderr]    Compiling rust_decimal v1.42.1
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling sqlx-core v0.8.6
[INFO] [stderr]    Compiling stringprep v0.1.5
[INFO] [stderr]    Compiling flume v0.11.1
[INFO] [stderr]    Compiling hkdf v0.12.4
[INFO] [stderr]    Compiling rand v0.8.6
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling md-5 v0.10.6
[INFO] [stderr]    Compiling byteorder v1.5.0
[INFO] [stderr]    Compiling dotenvy v0.15.7
[INFO] [stderr]    Compiling arrayvec v0.7.7
[INFO] [stderr]    Compiling hex v0.4.3
[INFO] [stderr]    Compiling home v0.5.12
[INFO] [stderr]    Compiling whoami v1.6.1
[INFO] [stderr]    Compiling sqlx-postgres v0.8.6
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling deranged v0.5.8
[INFO] [stderr]    Compiling time-core v0.1.9
[INFO] [stderr]    Compiling num-conv v0.2.2
[INFO] [stderr]    Compiling time v0.3.51
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling sqlx-sqlite v0.8.6
[INFO] [stderr]    Compiling uuid v1.23.3
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling sqlx-macros-core v0.8.6
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling chrono v0.4.45
[INFO] [stderr]    Compiling quick-xml v0.37.5
[INFO] [stderr]    Compiling core-domain v0.1.0 (/opt/rustwide/workdir/crates/core-domain)
[INFO] [stderr]    Compiling regex-syntax v0.8.11
[INFO] [stderr]    Compiling sqlx-macros v0.8.6
[INFO] [stderr]    Compiling axum-core v0.4.5
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling ai-client v0.1.0 (/opt/rustwide/workdir/crates/ai-client)
[INFO] [stderr]    Compiling quant-engine v0.1.0 (/opt/rustwide/workdir/crates/quant-engine)
[INFO] [stderr]    Compiling decision-records v0.1.0 (/opt/rustwide/workdir/crates/decision-records)
[INFO] [stderr]    Compiling investment-plans v0.1.0 (/opt/rustwide/workdir/crates/investment-plans)
[INFO] [stderr]    Compiling sha1 v0.10.6
[INFO] [stderr]    Compiling serde_path_to_error v0.1.20
[INFO] [stderr]    Compiling matchit v0.7.3
[INFO] [stderr]    Compiling axum v0.7.9
[INFO] [stderr]    Compiling broker v0.1.0 (/opt/rustwide/workdir/crates/broker)
[INFO] [stderr]    Compiling decision-engine v0.1.0 (/opt/rustwide/workdir/crates/decision-engine)
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling sqlx v0.8.6
[INFO] [stderr]    Compiling indexlink-storage v0.1.0 (/opt/rustwide/workdir/crates/storage)
[INFO] [stderr]    Compiling indexlink-api v0.1.0 (/opt/rustwide/workdir/crates/api)
[INFO] [stderr]    Compiling indexlink-server v0.1.0 (/opt/rustwide/workdir/apps/server)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 8m 21s
[INFO] running `Command { std: "docker" "inspect" "d603f2b4e3e32835d73874487d5cafbdf83428590c5c301a457cc18e7dfc619c", 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" "d603f2b4e3e32835d73874487d5cafbdf83428590c5c301a457cc18e7dfc619c" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling broker v0.1.0 (/opt/rustwide/workdir/crates/broker)
[INFO] [stderr]    Compiling ai-client v0.1.0 (/opt/rustwide/workdir/crates/ai-client)
[INFO] [stderr]    Compiling indexlink-storage v0.1.0 (/opt/rustwide/workdir/crates/storage)
[INFO] [stderr]    Compiling indexlink-api v0.1.0 (/opt/rustwide/workdir/crates/api)
[INFO] [stderr]    Compiling indexlink-server v0.1.0 (/opt/rustwide/workdir/apps/server)
[INFO] [stderr]    Compiling quant-engine v0.1.0 (/opt/rustwide/workdir/crates/quant-engine)
[INFO] [stderr]    Compiling decision-engine v0.1.0 (/opt/rustwide/workdir/crates/decision-engine)
[INFO] [stderr]    Compiling decision-records v0.1.0 (/opt/rustwide/workdir/crates/decision-records)
[INFO] [stderr]    Compiling investment-plans v0.1.0 (/opt/rustwide/workdir/crates/investment-plans)
[INFO] [stderr]    Compiling core-domain v0.1.0 (/opt/rustwide/workdir/crates/core-domain)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 1m 39s
[INFO] running `Command { std: "docker" "inspect" "d603f2b4e3e32835d73874487d5cafbdf83428590c5c301a457cc18e7dfc619c", 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" "d603f2b4e3e32835d73874487d5cafbdf83428590c5c301a457cc18e7dfc619c" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.1" "test" "--frozen" "--release", kill_on_drop: false }`
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 0.26s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/deps/ai_client-f5977998efe9a6ed)
[INFO] [stdout] 
[INFO] [stdout] running 77 tests
[INFO] [stdout] test client::tests::build_request_includes_user_prompt ... ok
[INFO] [stdout] test client::tests::chat_url_without_trailing_slash ... ok
[INFO] [stdout] test client::tests::client_constructs_without_panic ... ok
[INFO] [stdout] test client::tests::extract_json_from_markdown_code_block ... ok
[INFO] [stdout] test client::tests::extract_json_no_braces_returns_none ... ok
[INFO] [stdout] test client::tests::extract_json_unclosed_brace_returns_none ... ok
[INFO] [stdout] test client::tests::extract_json_with_prefix_text ... ok
[INFO] [stdout] test client::tests::extract_nested_json ... ok
[INFO] [stdout] test client::tests::extract_pure_json ... ok
[INFO] [stdout] test client::tests::chat_url_appends_v1_when_missing ... ok
[INFO] [stdout] test client::tests::parse_negative_sentiment_json ... ok
[INFO] [stdout] test client::tests::parse_sentiment_fails_on_missing_field ... ok
[INFO] [stdout] test client::tests::parse_sentiment_fails_on_unparseable_output ... ok
[INFO] [stdout] test client::tests::parse_sentiment_from_markdown_wrapped_json ... ok
[INFO] [stdout] test client::tests::parse_sentiment_from_pure_json ... ok
[INFO] [stdout] test client::tests::parse_sentiment_json_rejects_missing_field ... ok
[INFO] [stdout] test client::tests::parse_sentiment_with_explanatory_prefix ... ok
[INFO] [stdout] test client::tests::chat_url_does_not_double_v1 ... ok
[INFO] [stdout] test client::tests::system_prompt_includes_required_fields ... ok
[INFO] [stdout] test client::tests::parse_valid_sentiment_json ... ok
[INFO] [stdout] test error::tests::all_error_variants_never_contain_secret_patterns ... ok
[INFO] [stdout] test error::tests::empty_response_display_is_safe ... ok
[INFO] [stdout] test error::tests::http_status_display_is_safe ... ok
[INFO] [stdout] test error::tests::invalid_json_display_is_safe ... ok
[INFO] [stdout] test error::tests::timeout_display_is_safe ... ok
[INFO] [stdout] test error::tests::unexpected_structure_display_is_safe ... ok
[INFO] [stdout] test mock::tests::mock_custom_default ... ok
[INFO] [stdout] test mock::tests::mock_negative_strong ... ok
[INFO] [stdout] test mock::tests::mock_neutral_on_unmatched ... ok
[INFO] [stdout] test mock::tests::mock_negative_weak ... ok
[INFO] [stdout] test mock::tests::mock_positive_strong ... ok
[INFO] [stdout] test error::tests::parse_failure_display_is_safe ... ok
[INFO] [stdout] test mock::tests::mock_strong_signal_overrides_weak ... ok
[INFO] [stdout] test mock::tests::mock_positive_weak ... ok
[INFO] [stdout] test news::tests::filter_keeps_recent_items ... ok
[INFO] [stdout] test mock::tests::mock_implements_provider_trait ... ok
[INFO] [stdout] test news::tests::filter_removes_old_items ... ok
[INFO] [stdout] test news::tests::filter_mixed_old_and_recent ... ok
[INFO] [stdout] test news::tests::parse_empty_feed_returns_empty_vec ... ok
[INFO] [stdout] test news::tests::filter_respects_max_items ... ok
[INFO] [stdout] test news::tests::parse_multiple_items ... ok
[INFO] [stdout] test news::tests::parse_invalid_date_returns_none ... ok
[INFO] [stdout] test news::tests::parse_rejects_malformed_xml ... ok
[INFO] [stdout] test news::tests::parse_rfc2822_date ... ok
[INFO] [stdout] test news::tests::parse_rfc3339_date ... ok
[INFO] [stdout] test news::tests::parse_handles_html_in_description ... ok
[INFO] [stdout] test news::tests::parse_single_item ... ok
[INFO] [stdout] test news::tests::parse_skips_items_without_title_or_date ... ok
[INFO] [stdout] test news::tests::pipeline_fetch_and_analyze ... ok
[INFO] [stdout] test news::tests::pipeline_negative_sentiment ... ok
[INFO] [stdout] test news::tests::prompt_empty_news ... ok
[INFO] [stdout] test news::tests::prompt_includes_headlines ... ok
[INFO] [stdout] test news::tests::prompt_truncates_long_content ... ok
[INFO] [stdout] test news::tests::prompt_includes_all_items ... ok
[INFO] [stdout] test news::tests::truncate_at_period ... ok
[INFO] [stdout] test news::tests::truncate_short_text_unchanged ... ok
[INFO] [stdout] test news::tests::truncate_without_period_falls_back_to_cutoff ... ok
[INFO] [stdout] test provider::tests::config_debug_redacts_api_key ... ok
[INFO] [stdout] test provider::tests::config_debug_redacts_embedded_url_credentials ... ok
[INFO] [stdout] test provider::tests::config_default_values ... ok
[INFO] [stdout] test provider::tests::config_display_hides_api_key_and_url_credentials ... ok
[INFO] [stdout] test sentiment::tests::sentiment_converts_into_f64 ... ok
[INFO] [stdout] test sentiment::tests::sentiment_display_negative ... ok
[INFO] [stdout] test sentiment::tests::sentiment_display_positive ... ok
[INFO] [stdout] test sentiment::tests::sentiment_error_display ... ok
[INFO] [stdout] test sentiment::tests::sentiment_display_neutral ... ok
[INFO] [stdout] test sentiment::tests::sentiment_neutral_is_zero ... ok
[INFO] [stdout] test sentiment::tests::sentiment_new_clamped_above_range ... ok
[INFO] [stdout] test sentiment::tests::sentiment_new_clamped_below_range ... ok
[INFO] [stdout] test sentiment::tests::sentiment_new_clamped_infinity_is_clamped ... ok
[INFO] [stdout] test sentiment::tests::sentiment_new_clamped_inside_range ... ok
[INFO] [stdout] test sentiment::tests::sentiment_new_out_of_range ... ok
[INFO] [stdout] test sentiment::tests::sentiment_new_clamped_nan_is_neutral ... ok
[INFO] [stdout] test sentiment::tests::sentiment_new_valid_range ... ok
[INFO] [stdout] test sentiment::tests::sentiment_ordering ... ok
[INFO] [stdout] test sentiment::tests::sentiment_new_rejects_infinity ... ok
[INFO] [stdout] test sentiment::tests::sentiment_try_from_reports_failure_reason ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 77 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/client.rs (/opt/rustwide/target/release/deps/client-462712d2db1bb911)
[INFO] [stdout] 
[INFO] [stdout] running 11 tests
[INFO] [stdout] test client_clamps_out_of_range_sentiment ... ok
[INFO] [stdout] test client_returns_error_on_auth_failure ... ok
[INFO] [stdout] test client_returns_error_on_connection_refused ... ok
[INFO] [stdout] test client_analyzes_positive_news ... ok
[INFO] [stdout] test client_request_includes_bearer_auth ... ok
[INFO] [stdout] test client_returns_error_on_empty_choices ... ok
[INFO] [stdout] test client_returns_error_on_http_error ... ok
[INFO] [stdout] test client_analyzes_neutral_news ... ok
[INFO] [stdout] test client_analyzes_negative_news ... ok
[INFO] [stdout] test client_returns_error_on_empty_content ... ok
[INFO] [stdout] test client_returns_error_on_invalid_json_response ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/news.rs (/opt/rustwide/target/release/deps/news-ae324b83af90c47a)
[INFO] [stdout] 
[INFO] [stdout] running 2 tests
[INFO] [stdout] test real_cnbc_with_mock ... ignored, 需要网络，手动运行
[INFO] [stdout] test real_cnbc_with_qwen ... ignored, 需要网络和 DASHSCOPE_API_KEY，手动运行
[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/provider.rs (/opt/rustwide/target/release/deps/provider-6e5beaa38bcee5e7)
[INFO] [stdout] 
[INFO] [stdout] running 7 tests
[INFO] [stdout] test config_debug_hides_api_key ... ok
[INFO] [stdout] test config_default_uses_qwen_dashscope ... ok
[INFO] [stdout] test config_display_hides_api_key ... ok
[INFO] [stdout] test mock_provider_propagates_error_to_caller ... ok
[INFO] [stdout] test mock_provider_returns_neutral ... ok
[INFO] [stdout] test mock_provider_returns_negative_sentiment ... ok
[INFO] [stdout] test mock_provider_returns_positive_sentiment ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/sentiment.rs (/opt/rustwide/target/release/deps/sentiment-eb77af5bc623b146)
[INFO] [stdout] 
[INFO] [stdout] running 7 tests
[INFO] [stdout] test sentiment_into_f64_roundtrip ... ok
[INFO] [stdout] test sentiment_display_format ... ok
[INFO] [stdout] test sentiment_new_clamped_is_permissive ... ok
[INFO] [stdout] test sentiment_new_validates_strictly ... ok
[INFO] [stdout] test sentiment_neutral_is_zero_signal ... ok
[INFO] [stdout] test sentiment_neutral_is_zero ... ok
[INFO] [stdout] test sentiment_partial_ord ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/deps/broker-feadab879ba74e54)
[INFO] [stdout] 
[INFO] [stdout] running 36 tests
[INFO] [stdout] test opend_session::tests::frame_encoding_matches_independent_golden_frame ... ok
[INFO] [stdout] test opend_session::tests::frame_reader_rejects_corrupted_golden_frame ... ok
[INFO] [stdout] test opend_session::tests::limit_order_payload_preserves_price ... ok
[INFO] [stdout] test opend_session::tests::loopback_host_check_uses_ip_semantics ... ok
[INFO] [stdout] test opend_session::tests::heartbeat_interval_requires_positive_seconds ... ok
[INFO] [stdout] test opend_session::tests::order_ack_requires_selected_paper_account_and_us_market ... ok
[INFO] [stdout] test opend_session::tests::paper_account_selection_requires_one_safe_candidate ... ok
[INFO] [stdout] test opend_session::tests::session_initializes_and_selects_single_paper_account ... ok
[INFO] [stdout] test opend_session::tests::session_maps_opend_rejection_to_safe_broker_error ... ok
[INFO] [stdout] test opend_session::tests::session_marks_sent_order_without_response_as_outcome_unknown ... ok
[INFO] [stdout] test opend_session::tests::session_rejects_malformed_paper_account ... ok
[INFO] [stdout] test opend_session::tests::session_rejects_opend_without_trade_login ... ok
[INFO] [stdout] test opend_session::tests::localhost_uses_a_literal_loopback_address ... ok
[INFO] [stdout] test opend_session::tests::session_rejects_remote_raw_tcp_host ... ok
[INFO] [stdout] test tests::limit_order_requires_positive_limit_price ... ok
[INFO] [stdout] test tests::market_order_normalizes_symbol_and_idempotency_key ... ok
[INFO] [stdout] test opend_session::tests::session_uses_explicit_paper_account_selection ... ok
[INFO] [stdout] test opend_session::tests::session_submits_us_market_order_and_maps_ack ... ok
[INFO] [stdout] test tests::mock_broker_accepts_paper_orders ... ok
[INFO] [stdout] test tests::mock_broker_deduplicates_repeated_idempotency_key ... ok
[INFO] [stdout] test tests::opend_config_debug_redacts_account_id ... ok
[INFO] [stdout] test tests::opend_config_rejects_environment_mismatch ... ok
[INFO] [stdout] test tests::opend_config_rejects_invalid_connection_fields ... ok
[INFO] [stdout] test tests::opend_config_requires_live_gate_for_live_orders ... ok
[INFO] [stdout] test tests::opend_paper_broker_propagates_gateway_failure ... ok
[INFO] [stdout] test tests::opend_paper_broker_rejects_enabled_live_gate ... ok
[INFO] [stdout] test tests::opend_paper_broker_rejects_live_config ... ok
[INFO] [stdout] test tests::opend_paper_broker_submits_order_through_gateway ... ok
[INFO] [stdout] test tests::opend_paper_broker_rejects_live_order_before_gateway ... ok
[INFO] [stdout] test tests::opend_paper_config_normalizes_host_and_disables_live ... ok
[INFO] [stdout] test tests::order_request_rejects_invalid_fields ... ok
[INFO] [stdout] test tests::mock_broker_rejects_live_orders_by_default ... ok
[INFO] [stdout] test opend_session::tests::gateway_rejects_mismatched_account_before_sending_order ... ok
[INFO] [stdout] test opend_session::tests::gateway_rejects_live_configuration_before_sending_order ... ok
[INFO] [stdout] test opend_session::tests::session_rejects_non_paper_request_before_sending_order ... ok
[INFO] [stdout] test opend_session::tests::session_sends_keep_alive_at_server_interval ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 36 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.01s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/deps/core_domain-85e1d1c8a5e9f6dd)
[INFO] [stdout] 
[INFO] [stdout] running 13 tests
[INFO] [stdout] test tests::multiplier_clamp ... ok
[INFO] [stdout] test tests::multiplier_display ... ok
[INFO] [stdout] test tests::multiplier_to_action_boundaries ... ok
[INFO] [stdout] test tests::multiplier_to_action ... ok
[INFO] [stdout] test tests::percentile_converts_into_f64 ... ok
[INFO] [stdout] test tests::percentile_error_display ... ok
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/deps/decision_engine-e73b72e4ba3d214f)
[INFO] [stdout] test tests::percentile_display ... ok
[INFO] [stdout] test tests::percentile_out_of_range ... ok
[INFO] [stdout] test tests::percentile_try_from_reports_failure_reason ... ok
[INFO] [stdout] test tests::percentile_valid_range ... ok
[INFO] [stdout] test tests::multiplier_to_action_rejects_negative_internal_value - should panic ... ok
[INFO] [stdout] test tests::percentile_invert ... ok
[INFO] [stdout] test tests::multiplier_to_action_rejects_invalid_internal_value - should panic ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 10 tests
[INFO] [stdout] test tests::decision_weights_require_sum_of_one ... ok
[INFO] [stdout] test tests::trend_regime_triggers_tactical_delay ... ok
[INFO] [stdout] test tests::default_config_uses_70_20_10_and_90_10_0_fallback ... ok
[INFO] [stdout] test tests::expensive_negative_inputs_underweight ... ok
[INFO] [stdout] test tests::unavailable_sentiment_uses_neutral_value_for_custom_fallback_weights ... ok
[INFO] [stdout] test tests::cheap_positive_neutral_timing_overweights ... ok
[INFO] [stdout] test tests::unavailable_sentiment_uses_fallback_weights ... ok
[INFO] [stdout] test tests::extreme_low_score_can_skip_execution ... ok
[INFO] [stdout] test tests::multiplier_mapping_is_continuous_around_skip_boundary ... ok
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/deps/decision_records-bbacbd628c53c7ab)
[INFO] [stdout] test tests::neutral_inputs_produce_standard_action ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 10 tests
[INFO] [stdout] test tests::list_query_rejects_unbounded_limits ... ok
[INFO] [stdout] test tests::normalize_symbol_rejects_invalid_boundaries ... ok
[INFO] [stdout] test tests::normalize_summary_rejects_invalid_boundaries ... ok
[INFO] [stdout] test tests::service_creates_lists_and_gets_records ... ok
[INFO] [stdout] test tests::service_rejects_all_null_snapshot_boundaries ... ok
[INFO] [stdout] test tests::service_maps_repository_not_found ... ok
[INFO] [stdout] test tests::service_rejects_invalid_create_input_before_repository ... ok
[INFO] [stdout] test tests::service_normalizes_create_input_before_repository ... ok
[INFO] [stdout] test tests::service_supports_bounded_list_queries ... ok
[INFO] [stdout] test tests::normalize_currency_rejects_invalid_boundaries ... ok
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/deps/indexlink_api-fbf80f4527b9d3ae)
[INFO] [stdout] test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 9 tests
[INFO] [stdout] test error::tests::broker_rejection_maps_to_bad_request ... ok
[INFO] [stdout] test error::tests::service_unavailable_response_uses_safe_json_contract ... ok
[INFO] [stdout] test state::tests::custom_backend_debug_hides_checker_fields ... ok
[INFO] [stdout] test state::tests::sqlite_backend_debug_and_error_hide_pool_details ... ok
[INFO] [stdout] test state::tests::readiness_error_display_preserves_internal_diagnostic_for_logs ... ok
[INFO] [stdout] test error::tests::envelope_omits_absent_request_id ... ok
[INFO] [stdout] test error::tests::broker_outcome_unknown_uses_non_retryable_conflict_contract ... ok
[INFO] [stdout] test error::tests::envelope_serializes_present_request_id ... ok
[INFO] [stderr]      Running tests/decision_preview.rs (/opt/rustwide/target/release/deps/decision_preview-d1e6825fcab21c3a)
[INFO] [stdout] test state::tests::with_broker_replaces_default_mock_broker ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 4 tests
[INFO] [stdout] test decision_preview_maps_bad_input_to_safe_bad_request ... ok
[INFO] [stdout] test decision_preview_waiting_does_not_submit_order ... ok
[INFO] [stdout] test decision_preview_tactical_delay_does_not_submit_order ... ok
[INFO] [stdout] test decision_preview_submits_mock_paper_order_when_due ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/decision_records.rs (/opt/rustwide/target/release/deps/decision_records-a639f7b3f3bb65ca)
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] test list_history_returns_bounded_newest_records_for_existing_plan ... ok
[INFO] [stdout] test get_history_returns_one_record_by_id ... ok
[INFO] [stdout] test history_routes_map_invalid_and_unavailable_paths_to_safe_errors ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/health.rs (/opt/rustwide/target/release/deps/health-737b13b3df5ed0d6)
[INFO] [stdout] 
[INFO] [stdout] running 8 tests
[INFO] [stdout] test configured_cors_origin_is_returned_for_preflight_request ... ok
[INFO] [stdout] test health_does_not_call_failing_readiness_dependency ... ok
[INFO] [stdout] test health_returns_ok_with_expected_json ... ok
[INFO] [stdout] test same_origin_router_does_not_grant_cross_origin_access ... ok
[INFO] [stdout] test health_reports_version_supplied_by_application_state ... ok
[INFO] [stdout] test ready_hides_internal_error_when_database_is_unavailable ... ok
[INFO] [stdout] test unconfigured_cors_origin_is_not_reflected ... ok
[INFO] [stderr]      Running tests/investment_plans.rs (/opt/rustwide/target/release/deps/investment_plans-5b2a3c3a68897c9d)
[INFO] [stdout] test ready_returns_ok_when_database_is_available ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 7 tests
[INFO] [stdout] test preview_execution_omits_bucket_split_when_waiting ... ok
[INFO] [stdout] test preview_execution_maps_bad_input_to_safe_bad_request ... ok
[INFO] [stdout] test invalid_create_json_returns_safe_bad_request ... ok
[INFO] [stdout] test preview_execution_returns_bucket_split_when_due ... ok
[INFO] [stdout] test update_plan_merges_fields_and_maps_bad_input ... ok
[INFO] [stdout] test create_plan_returns_normalized_plan_json ... ok
[INFO] [stdout] test list_get_and_bad_id_routes_use_service ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/market_sentiment.rs (/opt/rustwide/target/release/deps/market_sentiment-be7f6c5316e19689)
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] test preview_provider_error_uses_safe_unavailable_response ... ok
[INFO] [stdout] test preview_returns_sentiment_from_injected_provider ... ok
[INFO] [stdout] test preview_without_configured_provider_is_unavailable ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 27 tests
[INFO] [stdout] test config::tests::invalid_connect_timeout_is_rejected ... ok
[INFO] [stdout] test config::tests::configuration_errors_do_not_expose_database_url ... ok
[INFO] [stdout] test config::tests::invalid_cors_header_value_is_rejected ... ok
[INFO] [stdout] test config::tests::invalid_host_is_rejected ... ok
[INFO] [stdout] test config::tests::invalid_max_connections_is_rejected ... ok
[INFO] [stdout] test config::tests::invalid_port_is_rejected_with_variable_name ... ok
[INFO] [stdout] test config::tests::invalid_qwen_temperature_is_rejected ... ok
[INFO] [stdout] test config::tests::minimal_configuration_uses_documented_defaults ... ok
[INFO] [stdout] test config::tests::multiple_cors_origins_are_trimmed ... ok
[INFO] [stdout] test config::tests::non_sqlite_database_url_is_rejected ... ok
[INFO] [stdout] test config::tests::opend_configuration_is_optional_and_paper_only ... ok
[INFO] [stdout] test config::tests::opend_configuration_normalizes_loopback_literals ... ok
[INFO] [stdout] test config::tests::qwen_configuration_accepts_explicit_runtime_values ... ok
[INFO] [stdout] test config::tests::qwen_configuration_is_optional_and_uses_safe_defaults ... ok
[INFO] [stdout] test config::tests::unsafe_opend_configuration_is_rejected ... ok
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/release/deps/indexlink_server-fb077468f6f1e306)
[INFO] [stdout] test config::tests::zero_connect_timeout_is_rejected ... ok
[INFO] [stdout] test config::tests::custom_network_and_pool_values_are_parsed ... ok
[INFO] [stdout] test config::tests::zero_max_connections_is_rejected ... ok
[INFO] [stdout] test config::tests::empty_cors_entries_are_filtered ... ok
[INFO] [stdout] test tests::real_opend_paper_order_smoke ... ignored, requires an explicitly confirmed local OpenD paper order
[INFO] [stdout] test config::tests::blank_database_url_is_rejected ... ok
[INFO] [stdout] test tests::build_api_state_leaves_market_sentiment_unconfigured_without_qwen ... ok
[INFO] [stdout] test tests::build_api_state_returns_session_error_when_opend_factory_fails ... ok
[INFO] [stdout] test config::tests::blank_qwen_key_is_rejected_without_echoing_the_value ... ok
[INFO] [stdout] test config::tests::single_cors_origin_is_parsed ... ok
[INFO] [stdout] test tests::build_api_state_injects_qwen_market_sentiment_when_configured ... ok
[INFO] [stdout] test tests::build_api_state_uses_configured_broker_factory ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 26 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/deps/indexlink_storage-2ccd2fa5bdc27354)
[INFO] [stdout] 
[INFO] [stdout] running 30 tests
[INFO] [stdout] test decision_records::tests::maps_sqlx_errors_to_safe_repository_errors ... ok
[INFO] [stdout] test decision_records::tests::query_strings_are_static_and_bounded ... ok
[INFO] [stdout] test investment_plans::tests::maps_sqlx_errors_to_safe_repository_errors ... ok
[INFO] [stdout] test investment_plans::tests::validates_final_update_amount_relationship ... ok
[INFO] [stdout] test sqlite::tests::connect_rejects_zero_max_connections ... ok
[INFO] [stdout] test decision_records::tests::rejects_invalid_database_uuid_snapshot ... ok
[INFO] [stdout] test decision_records::tests::rejects_invalid_database_json_snapshot ... ok
[INFO] [stdout] test sqlite_decision_records::tests::maps_storage_failures_to_safe_repository_errors ... ok
[INFO] [stdout] test decision_records::tests::maps_execution_status_roundtrip ... ok
[INFO] [stdout] test sqlite_decision_records::tests::query_strings_are_static_and_bounded ... ok
[INFO] [stdout] test decision_records::tests::rejects_invalid_database_timestamp_snapshot ... ok
[INFO] [stdout] test sqlite_investment_plans::tests::amount_codec_enforces_sqlite_representation ... ok
[INFO] [stdout] test sqlite_investment_plans::tests::maps_storage_failures_to_safe_repository_errors ... ok
[INFO] [stdout] test sqlite::tests::schema_enforces_amount_timestamp_and_snapshot_invariants ... ok
[INFO] [stdout] test sqlite_investment_plans::tests::query_strings_are_static_and_sqlite_compatible ... ok
[INFO] [stdout] test sqlite::tests::migration_creates_mvp_schema_in_memory ... ok
[INFO] [stdout] test sqlite_decision_records::tests::nonexistent_plan_is_not_persisted ... ok
[INFO] [stdout] test tests::connect_rejects_invalid_url_without_exposing_input ... ok
[INFO] [stdout] test tests::ping_maps_closed_pool_to_safe_ping_error ... ok
[INFO] [stdout] test sqlite_decision_records::tests::rejects_unrepresentable_amounts_and_reports_missing_records ... ok
[INFO] [stdout] test sqlite_decision_records::tests::list_query_applies_limit_with_stable_database_order ... ok
[INFO] [stdout] test tests::rejects_zero_timeout_without_contacting_database ... ok
[INFO] [stdout] test tests::storage_error_display_is_stable_and_safe ... ok
[INFO] [stdout] test sqlite_investment_plans::tests::creates_lists_and_gets_plans ... ok
[INFO] [stdout] test sqlite_investment_plans::tests::toggles_activity_and_rejects_unrepresentable_amounts ... ok
[INFO] [stdout] test sqlite_investment_plans::tests::update_preserves_atomic_amount_validation ... ok
[INFO] [stdout] test sqlite_decision_records::tests::creates_lists_and_gets_decision_records ... ok
[INFO] [stdout] test sqlite_investment_plans::tests::updates_advance_timestamp_even_when_clock_does_not ... ok
[INFO] [stdout] test tests::pool_returns_lazy_pool_without_contacting_database ... ok
[INFO] [stdout] test tests::rejects_zero_max_connections_without_contacting_database ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 30 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/deps/investment_plans-377be094b593cc4e)
[INFO] [stdout] 
[INFO] [stdout] running 31 tests
[INFO] [stdout] test tests::create_plan_normalizes_text_fields ... ok
[INFO] [stdout] test tests::create_plan_rejects_invalid_amount_relationship ... ok
[INFO] [stdout] test tests::bucket_allocation_ratio_serializes_as_json_string ... ok
[INFO] [stdout] test tests::create_plan_rejects_invalid_schedule_day_and_currency ... ok
[INFO] [stdout] test tests::create_plan_rejects_non_ascii_symbol ... ok
[INFO] [stdout] test tests::bucket_split_preview_serializes_amounts_as_json_strings ... ok
[INFO] [stdout] test tests::decimal_deserializes_from_json_string_without_float ... ok
[INFO] [stdout] test tests::decimal_fields_remain_json_strings_on_create_input ... ok
[INFO] [stdout] test tests::decimal_rejects_json_number_at_api_boundary ... ok
[INFO] [stdout] test tests::decimal_serializes_to_json_string_without_float ... ok
[INFO] [stdout] test tests::service_maps_repository_errors_to_safe_application_errors ... ok
[INFO] [stdout] test tests::preview_execution_input_rejects_invalid_day ... ok
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/deps/quant_engine-e5dce969e54eb8e9)
[INFO] [stdout] test tests::execution_preview_never_exceeds_single_execution_cap ... ok
[INFO] [stdout] test tests::service_omits_bucket_split_when_execution_is_not_due ... ok
[INFO] [stdout] test tests::service_lists_and_gets_plans_through_repository ... ok
[INFO] [stdout] test tests::service_normalizes_create_input_before_persisting ... ok
[INFO] [stdout] test tests::service_previews_waiting_and_inactive_execution ... ok
[INFO] [stdout] test tests::service_previews_due_execution_without_bucket_logic ... ok
[INFO] [stdout] test tests::service_previews_due_execution_with_bucket_split ... ok
[INFO] [stdout] test tests::bucket_allocation_ratio_accepts_only_closed_unit_interval ... ok
[INFO] [stdout] test tests::service_rejects_invalid_create_before_repository ... ok
[INFO] [stdout] test tests::service_sets_active_state ... ok
[INFO] [stdout] test tests::service_rejects_update_that_breaks_final_amount_limit ... ok
[INFO] [stdout] test tests::two_bucket_contribution_split_returns_amount_by_bucket ... ok
[INFO] [stdout] test tests::two_bucket_contribution_split_serializes_amounts_as_json_strings ... ok
[INFO] [stdout] test tests::two_bucket_config_requires_ratios_to_sum_to_one ... ok
[INFO] [stdout] test tests::two_bucket_contribution_split_preserves_total_amount ... ok
[INFO] [stdout] test tests::update_plan_normalizes_name_and_validates_amounts ... ok
[INFO] [stdout] test tests::two_bucket_contribution_split_rejects_non_positive_amount ... ok
[INFO] [stdout] test tests::service_updates_plan_fields ... ok
[INFO] [stdout] test tests::update_plan_rejects_empty_patch ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 31 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/fundamental.rs (/opt/rustwide/target/release/deps/fundamental-61f5cf06812a2856)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 20 tests
[INFO] [stdout] test audit_fields_reflect_raw_percentiles ... ok
[INFO] [stdout] test cape_weight_full_uses_only_cape ... ok
[INFO] [stdout] test cape_weight_zero_uses_only_inverted_erp ... ok
[INFO] [stdout] test default_config_matches_readme_contract ... ok
[INFO] [stdout] test fundamental_expensive_market ... ok
[INFO] [stdout] test fundamental_neutral_market ... ok
[INFO] [stdout] test infinite_current_returns_invalid_input ... ok
[INFO] [stdout] test propagates_insufficient_history_for_circuit_breaker ... ok
[INFO] [stdout] test propagates_invalid_input_on_nan_current ... ok
[INFO] [stdout] test rejects_zero_min_history_len_at_construction ... ok
[INFO] [stdout] test unequal_lengths_below_min_propagate_insufficient_for_short_series ... ok
[INFO] [stdout] test unequal_history_lengths_are_accepted ... ok
[INFO] [stdout] test rate_repricing_low_erp_pushes_score_expensive_despite_neutral_cape ... ok
[INFO] [stdout] test weight_converts_into_raw_f64 ... ok
[INFO] [stdout] test rejects_cape_weight_above_one_at_construction ... ok
[INFO] [stdout] test weight_display_uses_percent_format_for_audit_logs ... ok
[INFO] [stdout] test rejects_cape_weight_below_zero_at_construction ... ok
[INFO] [stdout] test weight_try_from_accepts_valid_raw_value ... ok
[INFO] [stdout] test erp_percentile_audit_field_is_not_inverted ... ok
[INFO] [stdout] test fundamental_cheap_market ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 20 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stderr]      Running tests/percentile.rs (/opt/rustwide/target/release/deps/percentile-4a25a7020a4f7837)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 25 tests
[INFO] [stdout] test ew_percentile_config_from_half_life_maps_to_alpha ... ok
[INFO] [stdout] test ew_percentile_config_rejects_invalid_alpha_and_min_len ... ok
[INFO] [stdout] test ew_percentile_config_rejects_invalid_half_life ... ok
[INFO] [stdout] test all_nan_history_returns_insufficient ... ok
[INFO] [stdout] test exact_min_len_boundary_succeeds ... ok
[INFO] [stdout] test insufficient_history_reports_indicator_and_required ... ok
[INFO] [stdout] test duplicate_values_use_less_than_or_equal ... ok
[INFO] [stdout] test insufficient_history_returns_error ... ok
[INFO] [stdout] test nan_current_returns_error ... ok
[INFO] [stdout] test nan_in_history_is_filtered ... ok
[INFO] [stdout] test percentile_of_above_all_history ... ok
[INFO] [stdout] test negative_infinity_current_returns_error ... ok
[INFO] [stdout] test percentile_of_at_maximum ... ok
[INFO] [stdout] test percentile_of_below_all_history ... ok
[INFO] [stdout] test percentile_of_median ... ok
[INFO] [stdout] test percentile_of_at_minimum ... ok
[INFO] [stdout] test weighted_percentile_returns_insufficient_when_all_valid_weights_underflow ... ok
[INFO] [stdout] test weighted_percentile_skips_nan_without_compressing_lag ... ok
[INFO] [stdout] test weighted_percentile_propagates_invalid_current_and_insufficient_history ... ok
[INFO] [stdout] test quant_error_display_is_descriptive ... ok
[INFO] [stdout] test positive_infinity_current_returns_error ... ok
[INFO] [stdout] test weighted_percentile_weights_recent_samples_more ... ok
[INFO] [stdout] test zero_min_len_returns_error_before_empty_history_division ... ok
[INFO] [stdout] test weighted_percentile_softens_oldest_sample_drop ... ok
[INFO] [stdout] test weighted_percentile_is_monotonic_in_current_value ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 25 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/trend.rs (/opt/rustwide/target/release/deps/trend-ee0e4600dde16964)
[INFO] [stdout] 
[INFO] [stdout] running 52 tests
[INFO] [stdout] test config::accepts_weight_sum_exactly_one ... ok
[INFO] [stdout] test config::accepts_weight_sum_within_tolerance ... ok
[INFO] [stdout] test config::default_half_life_matches_design ... ok
[INFO] [stdout] test config::default_percentile_config_matches_fundamental ... ok
[INFO] [stdout] test config::default_thresholds_match_design_constants ... ok
[INFO] [stdout] test config::rejects_individual_weight_above_one ... ok
[INFO] [stdout] test config::default_weights_match_design_constants ... ok
[INFO] [stdout] test config::rejects_individual_weight_below_zero ... ok
[INFO] [stdout] test config::rejects_invalid_falling_knife_threshold ... ok
[INFO] [stdout] test config::rejects_invalid_overheated_threshold ... ok
[INFO] [stdout] test config::default_config_min_len_matches_design ... ok
[INFO] [stdout] test config::rejects_negative_threshold ... ok
[INFO] [stdout] test config::rejects_nan_overheated_threshold ... ok
[INFO] [stdout] test config::rejects_weight_sum_beyond_tolerance ... ok
[INFO] [stdout] test config::rejects_weight_sum_not_equal_to_one ... ok
[INFO] [stdout] test direction::evaluate_trend_or_stub_returns_real_signal_after_implementation ... ok
[INFO] [stdout] test config::rejects_zero_min_history_len ... ok
[INFO] [stdout] test direction::evaluate_trend_returns_real_neutral_signal ... ok
[INFO] [stdout] test config::rejects_nan_weight ... ok
[INFO] [stdout] test direction::neutral_weighted_history_is_near_half_under_trend_config ... ok
[INFO] [stdout] test direction::stub_regime_is_neutral ... ok
[INFO] [stdout] test direction::stub_still_returns_neutral_score_for_transition_period ... ok
[INFO] [stdout] test direction::trend_falling_knife_market_score_is_high ... ok
[INFO] [stdout] test direction::trend_neutral_market_score_is_near_half ... ok
[INFO] [stdout] test direction::trend_score_clamps_tiny_weight_sum_drift_at_upper_bound ... ok
[INFO] [stdout] test direction::trend_overheated_market_score_is_low ... ok
[INFO] [stdout] test errors::propagates_insufficient_history_for_rsi ... ok
[INFO] [stdout] test errors::propagates_insufficient_history_for_ma_distance ... ok
[INFO] [stdout] test errors::propagates_invalid_current_value_for_nan_ma ... ok
[INFO] [stdout] test errors::propagates_insufficient_history_for_vix ... ok
[INFO] [stdout] test errors::propagates_invalid_current_value_for_nan_rsi ... ok
[INFO] [stdout] test errors::propagates_invalid_current_value_for_nan_vix ... ok
[INFO] [stdout] test errors::propagates_invalid_current_value_for_infinite_inputs ... ok
[INFO] [stdout] test errors::unequal_history_lengths_each_evaluated_independently ... ok
[INFO] [stdout] test indicators::audit_fields_falling_knife_scenario ... ok
[INFO] [stdout] test indicators::audit_fields_reflect_raw_unreversed_percentiles ... ok
[INFO] [stdout] test indicators::high_vix_with_neutral_ma_rsi_pushes_score_above_neutral ... ok
[INFO] [stdout] test indicators::ma_only_high_distance_produces_low_score ... ok
[INFO] [stdout] test indicators::ma_only_score_equals_one_minus_ma_percentile ... ok
[INFO] [stdout] test indicators::rsi_only_high_rsi_produces_low_score ... ok
[INFO] [stdout] test indicators::rsi_only_score_equals_one_minus_rsi_percentile ... ok
[INFO] [stdout] test indicators::score_is_distinct_from_raw_audit_fields_when_reversed ... ok
[INFO] [stdout] test indicators::vix_only_high_vix_produces_high_score ... ok
[INFO] [stdout] test regime::regime_is_falling_knife_when_vix_above_threshold ... ok
[INFO] [stdout] test indicators::vix_only_score_equals_vix_percentile ... ok
[INFO] [stdout] test regime::regime_is_neutral_when_all_indicators_are_moderate ... ok
[INFO] [stdout] test regime::regime_is_neutral_when_rsi_equals_overheated_threshold ... ok
[INFO] [stdout] test regime::regime_is_neutral_when_ma_equals_overheated_threshold ... ok
[INFO] [stdout] test regime::regime_is_neutral_when_vix_equals_falling_knife_threshold ... ok
[INFO] [stdout] test regime::regime_is_overheated_when_ma_above_threshold ... ok
[INFO] [stderr]    Doc-tests ai_client
[INFO] [stdout] test regime::regime_is_overheated_when_rsi_above_threshold ... ok
[INFO] [stdout] test regime::regime_falling_knife_takes_precedence_over_overheated ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 52 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 4 tests
[INFO] [stdout] test crates/ai-client/src/news.rs - news (line 6) - compile ... ok
[INFO] [stdout] test crates/ai-client/src/client.rs - client::QwenClient (line 88) - compile ... ok
[INFO] [stdout] test crates/ai-client/src/lib.rs - (line 21) - compile ... ok
[INFO] [stderr]    Doc-tests broker
[INFO] [stdout] test crates/ai-client/src/mock.rs - mock::MockAiProvider (line 25) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.38s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests core_domain
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests decision_engine
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests decision_records
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests indexlink_api
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests indexlink_storage
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests investment_plans
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests quant_engine
[INFO] [stdout] 
[INFO] [stdout] running 1 test
[INFO] [stdout] test crates/quant-engine/src/percentile.rs - percentile::percentile_of (line 18) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.38s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "d603f2b4e3e32835d73874487d5cafbdf83428590c5c301a457cc18e7dfc619c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "d603f2b4e3e32835d73874487d5cafbdf83428590c5c301a457cc18e7dfc619c", kill_on_drop: false }`
[INFO] [stdout] d603f2b4e3e32835d73874487d5cafbdf83428590c5c301a457cc18e7dfc619c
