[INFO] cloning repository https://github.com/kaija/arlo [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/kaija/arlo" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fkaija%2Farlo", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fkaija%2Farlo'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 8a47091c4a18e7ebb8cff0e74c59b07b94768a5b [INFO] testing kaija/arlo against 1.100.0-beta.1 for beta-1.100-2 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fkaija%2Farlo" "/workspace/builds/worker-6-tc2/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc2/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/kaija/arlo [INFO] finished tweaking git repo https://github.com/kaija/arlo [INFO] tweaked toml for git repo https://github.com/kaija/arlo written to /workspace/builds/worker-6-tc2/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/kaija/arlo on toolchain 1.100.0-beta.1 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/kaija/arlo 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.100.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-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-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:3111399a4047eeb3a02b7a90e478d715f38a8c6669b5c4b49d30a17385265909" "sleep" "infinity", kill_on_drop: false }` [INFO] [stdout] b7b0f8b2cc978832bd59c6046bbf6a72a524f1754c1e30855352c75638796a58 [INFO] running `Command { std: "docker" "start" "b7b0f8b2cc978832bd59c6046bbf6a72a524f1754c1e30855352c75638796a58", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "b7b0f8b2cc978832bd59c6046bbf6a72a524f1754c1e30855352c75638796a58", 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" "b7b0f8b2cc978832bd59c6046bbf6a72a524f1754c1e30855352c75638796a58" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "b7b0f8b2cc978832bd59c6046bbf6a72a524f1754c1e30855352c75638796a58", 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" "b7b0f8b2cc978832bd59c6046bbf6a72a524f1754c1e30855352c75638796a58" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stderr] Compiling smallvec v1.15.2 [INFO] [stderr] Compiling pin-project-lite v0.2.17 [INFO] [stderr] Compiling futures-core v0.3.32 [INFO] [stderr] Compiling serde_core v1.0.228 [INFO] [stderr] Compiling syn v2.0.118 [INFO] [stderr] Compiling memchr v2.8.2 [INFO] [stderr] Compiling bytes v1.12.0 [INFO] [stderr] Compiling stable_deref_trait v1.2.1 [INFO] [stderr] Compiling once_cell v1.21.4 [INFO] [stderr] Compiling futures-sink v0.3.32 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling socket2 v0.6.4 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling phf_shared v0.11.3 [INFO] [stderr] Compiling rand_core v0.6.4 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling rand v0.8.6 [INFO] [stderr] Compiling tracing-core v0.1.36 [INFO] [stderr] Compiling futures-channel v0.3.32 [INFO] [stderr] Compiling futures-io v0.3.32 [INFO] [stderr] Compiling futures-task v0.3.32 [INFO] [stderr] Compiling http v1.4.2 [INFO] [stderr] Compiling hashbrown v0.17.1 [INFO] [stderr] Compiling phf_generator v0.11.3 [INFO] [stderr] Compiling cc v1.2.65 [INFO] [stderr] Compiling serde_json v1.0.150 [INFO] [stderr] Compiling litemap v0.8.2 [INFO] [stderr] Compiling writeable v0.6.3 [INFO] [stderr] Compiling icu_normalizer_data v2.2.0 [INFO] [stderr] Compiling icu_properties_data v2.2.0 [INFO] [stderr] Compiling phf_codegen v0.11.3 [INFO] [stderr] Compiling zerocopy v0.8.52 [INFO] [stderr] Compiling sync_wrapper v1.0.2 [INFO] [stderr] Compiling openssl v0.10.81 [INFO] [stderr] Compiling new_debug_unreachable v1.0.6 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling ipnet v2.12.0 [INFO] [stderr] Compiling native-tls v0.2.18 [INFO] [stderr] Compiling indexmap v2.14.0 [INFO] [stderr] Compiling http-body v1.0.1 [INFO] [stderr] Compiling http-body-util v0.1.3 [INFO] [stderr] Compiling string_cache_codegen v0.5.4 [INFO] [stderr] Compiling mac v0.1.1 [INFO] [stderr] Compiling precomputed-hash v0.1.1 [INFO] [stderr] Compiling openssl-probe v0.2.1 [INFO] [stderr] Compiling futf v0.1.5 [INFO] [stderr] Compiling dirs-sys v0.4.1 [INFO] [stderr] Compiling uuid v1.23.4 [INFO] [stderr] Compiling markup5ever v0.14.1 [INFO] [stderr] Compiling openssl-sys v0.9.117 [INFO] [stderr] Compiling strsim v0.11.1 [INFO] [stderr] Compiling getrandom v0.3.4 [INFO] [stderr] Compiling dtoa v1.0.11 [INFO] [stderr] Compiling tendril v0.4.3 [INFO] [stderr] Compiling dtoa-short v0.3.5 [INFO] [stderr] Compiling ahash v0.8.12 [INFO] [stderr] Compiling dirs v5.0.1 [INFO] [stderr] Compiling selectors v0.26.0 [INFO] [stderr] Compiling getrandom v0.2.17 [INFO] [stderr] Compiling chrono v0.4.45 [INFO] [stderr] Compiling unicode-width v0.2.0 [INFO] [stderr] Compiling zeroize v1.9.0 [INFO] [stderr] Compiling rustix v0.38.44 [INFO] [stderr] Compiling rustls-pki-types v1.15.0 [INFO] [stderr] Compiling fxhash v0.2.1 [INFO] [stderr] Compiling aho-corasick v1.1.4 [INFO] [stderr] Compiling servo_arc v0.4.3 [INFO] [stderr] Compiling paste v1.0.15 [INFO] [stderr] Compiling regex-syntax v0.8.11 [INFO] [stderr] Compiling foldhash v0.1.5 [INFO] [stderr] Compiling linux-raw-sys v0.4.15 [INFO] [stderr] Compiling hashbrown v0.15.5 [INFO] [stderr] Compiling synstructure v0.13.2 [INFO] [stderr] Compiling darling_core v0.23.0 [INFO] [stderr] Compiling itertools v0.13.0 [INFO] [stderr] Compiling getopts v0.2.24 [INFO] [stderr] Compiling ppv-lite86 v0.2.21 [INFO] [stderr] Compiling regex-automata v0.4.14 [INFO] [stderr] Compiling serde_path_to_error v0.1.20 [INFO] [stderr] Compiling zerofrom-derive v0.1.7 [INFO] [stderr] Compiling tokio-macros v2.7.0 [INFO] [stderr] Compiling yoke-derive v0.8.2 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling tokio v1.52.3 [INFO] [stderr] Compiling tracing-attributes v0.1.31 [INFO] [stderr] Compiling zerovec-derive v0.11.3 [INFO] [stderr] Compiling zerofrom v0.1.8 [INFO] [stderr] Compiling futures-macro v0.3.32 [INFO] [stderr] Compiling displaydoc v0.2.6 [INFO] [stderr] Compiling yoke v0.8.3 [INFO] [stderr] Compiling openssl-macros v0.1.1 [INFO] [stderr] Compiling phf_macros v0.11.3 [INFO] [stderr] Compiling zerotrie v0.2.4 [INFO] [stderr] Compiling futures-util v0.3.32 [INFO] [stderr] Compiling tracing v0.1.44 [INFO] [stderr] Compiling zerovec v0.11.6 [INFO] [stderr] Compiling phf v0.11.3 [INFO] [stderr] Compiling thiserror-impl v2.0.18 [INFO] [stderr] Compiling async-trait v0.1.89 [INFO] [stderr] Compiling tinystr v0.8.3 [INFO] [stderr] Compiling icu_locale_core v2.2.0 [INFO] [stderr] Compiling potential_utf v0.1.5 [INFO] [stderr] Compiling icu_collections v2.2.0 [INFO] [stderr] Compiling thiserror v2.0.18 [INFO] [stderr] Compiling cssparser-macros v0.6.1 [INFO] [stderr] Compiling cssparser v0.34.0 [INFO] [stderr] Compiling darling_macro v0.23.0 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Compiling icu_provider v2.2.0 [INFO] [stderr] Compiling serde_urlencoded v0.7.1 [INFO] [stderr] Compiling string_cache v0.8.9 [INFO] [stderr] Compiling serde_yaml v0.9.34+deprecated [INFO] [stderr] Compiling icu_properties v2.2.0 [INFO] [stderr] Compiling icu_normalizer v2.2.0 [INFO] [stderr] Compiling futures-executor v0.3.32 [INFO] [stderr] Compiling match_token v0.1.0 [INFO] [stderr] Compiling futures v0.3.32 [INFO] [stderr] Compiling derive_more v0.99.20 [INFO] [stderr] Compiling thiserror v1.0.69 [INFO] [stderr] Compiling jsonptr v0.6.3 [INFO] [stderr] Compiling darling v0.23.0 [INFO] [stderr] Compiling axum-core v0.5.6 [INFO] [stderr] Compiling html5ever v0.29.1 [INFO] [stderr] Compiling tokio-util v0.7.18 [INFO] [stderr] Compiling idna_adapter v1.2.2 [INFO] [stderr] Compiling tower v0.5.3 [INFO] [stderr] Compiling h2 v0.4.15 [INFO] [stderr] Compiling idna v1.1.0 [INFO] [stderr] Compiling tokio-native-tls v0.3.1 [INFO] [stderr] Compiling agent-core v0.1.0 (/opt/rustwide/workdir/crates/agent-core) [INFO] [stderr] Compiling tokio-stream v0.1.18 [INFO] [stderr] Compiling url v2.5.8 [INFO] [stderr] Compiling strum_macros v0.26.4 [INFO] [stderr] Compiling rand_chacha v0.3.1 [INFO] [stderr] Compiling tower-http v0.6.11 [INFO] [stderr] Compiling unicode-width v0.1.14 [INFO] [stderr] Compiling ego-tree v0.9.0 [INFO] [stderr] Compiling matchit v0.8.4 [INFO] [stderr] Compiling instability v0.3.12 [INFO] [stderr] Compiling scraper v0.21.0 [INFO] [stderr] Compiling unicode-truncate v1.1.0 [INFO] [stderr] Compiling compact_str v0.8.2 [INFO] [stderr] Compiling json-patch v3.0.1 [INFO] [stderr] Compiling ag-ui-protocol v0.1.0 (https://github.com/kaija/ag-ui-rust#bfd3b545) [INFO] [stderr] Compiling regex v1.12.4 [INFO] [stderr] Compiling strum v0.26.3 [INFO] [stderr] Compiling crossterm v0.28.1 [INFO] [stderr] Compiling lru v0.12.5 [INFO] [stderr] Compiling cassowary v0.3.0 [INFO] [stderr] Compiling glob v0.3.3 [INFO] [stderr] Compiling ratatui v0.29.0 [INFO] [stderr] Compiling agent-mcp v0.1.0 (/opt/rustwide/workdir/crates/agent-mcp) [INFO] [stderr] Compiling hyper v1.10.1 [INFO] [stderr] Compiling hyper-util v0.1.20 [INFO] [stderr] Compiling hyper-tls v0.6.0 [INFO] [stderr] Compiling axum v0.8.9 [INFO] [stderr] Compiling reqwest v0.12.28 [INFO] [stderr] Compiling agent-llm v0.1.0 (/opt/rustwide/workdir/crates/agent-llm) [INFO] [stderr] Compiling agent-tools v0.1.0 (/opt/rustwide/workdir/crates/agent-tools) [INFO] [stderr] Compiling ag-ui-server v0.1.0 (https://github.com/kaija/ag-ui-rust#bfd3b545) [INFO] [stderr] Compiling agent-cli v0.1.0 (/opt/rustwide/workdir/crates/agent-cli) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 2m 51s [INFO] running `Command { std: "docker" "inspect" "b7b0f8b2cc978832bd59c6046bbf6a72a524f1754c1e30855352c75638796a58", 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" "b7b0f8b2cc978832bd59c6046bbf6a72a524f1754c1e30855352c75638796a58" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling rustix v1.1.4 [INFO] [stderr] Compiling fastrand v2.4.1 [INFO] [stderr] Compiling wait-timeout v0.2.1 [INFO] [stderr] Compiling bit-vec v0.8.0 [INFO] [stderr] Compiling quick-error v1.2.3 [INFO] [stderr] Compiling rand_chacha v0.9.0 [INFO] [stderr] Compiling rand v0.9.4 [INFO] [stderr] Compiling rand_xorshift v0.4.0 [INFO] [stderr] Compiling bit-set v0.8.0 [INFO] [stderr] Compiling unarray v0.1.4 [INFO] [stderr] Compiling ahash v0.8.12 [INFO] [stderr] Compiling scraper v0.21.0 [INFO] [stderr] Compiling chrono v0.4.45 [INFO] [stderr] Compiling agent-core v0.1.0 (/opt/rustwide/workdir/crates/agent-core) [INFO] [stderr] Compiling tempfile v3.27.0 [INFO] [stderr] Compiling rusty-fork v0.3.1 [INFO] [stderr] Compiling proptest v1.11.0 [INFO] [stderr] Compiling agent-llm v0.1.0 (/opt/rustwide/workdir/crates/agent-llm) [INFO] [stderr] Compiling agent-tools v0.1.0 (/opt/rustwide/workdir/crates/agent-tools) [INFO] [stderr] Compiling agent-mcp v0.1.0 (/opt/rustwide/workdir/crates/agent-mcp) [INFO] [stderr] Compiling agent-cli v0.1.0 (/opt/rustwide/workdir/crates/agent-cli) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 53s [INFO] running `Command { std: "docker" "inspect" "b7b0f8b2cc978832bd59c6046bbf6a72a524f1754c1e30855352c75638796a58", 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" "b7b0f8b2cc978832bd59c6046bbf6a72a524f1754c1e30855352c75638796a58" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen", kill_on_drop: false }` [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.52s [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/build/agent-cli/7b47c2a4266088f9/out/arlo-7b47c2a4266088f9) [INFO] [stdout] [INFO] [stdout] running 248 tests [INFO] [stdout] test assembly::tests::no_provider_returns_error ... ok [INFO] [stdout] test assembly::tests::serve_has_task_store ... ok [INFO] [stdout] test assembly::tests::serve_no_deny_all_handler ... ok [INFO] [stdout] test assembly::tests::project_settings_layer_over_empty_user ... ok [INFO] [stdout] test assembly::tests::settings_permissions_reach_engine ... ok [INFO] [stdout] test assembly::tests::anthropic_base_url_applied_in_env_path ... ok [INFO] [stdout] test assembly::tests::serve_skip_permissions_bypasses ... ok [INFO] [stdout] test assembly::tests::unknown_profile_returns_error ... ok [INFO] [stdout] test assembly::tests::serve_normal_mode_needs_approval ... ok [INFO] [stdout] test serve::approval::tests::cancelled_maps_to_deny ... ok [INFO] [stdout] test serve::approval::tests::multiple_entries_mixed ... ok [INFO] [stdout] test serve::approval::tests::approval_parks_and_resumes ... ok [INFO] [stdout] test serve::approval::tests::channel_drop_returns_deny ... ok [INFO] [stdout] test serve::approval::tests::resolved_with_always_allow_no_pattern_defaults_to_star ... ok [INFO] [stdout] test serve::approval::tests::resolved_maps_to_allow ... ok [INFO] [stdout] test serve::approval::tests::resolved_with_always_allow_payload ... ok [INFO] [stdout] test assembly::tests::model_override_respected ... ok [INFO] [stdout] test serve::bridge::tests::agent_end_closes_text_and_finishes ... ok [INFO] [stdout] test serve::approval::tests::resolved_with_deny_action_in_payload ... ok [INFO] [stdout] test serve::bridge::tests::aborted_maps_to_run_error ... ok [INFO] [stdout] test serve::bridge::tests::convert_messages_skips_tool_messages ... ok [INFO] [stdout] test serve::bridge::tests::convert_messages_empty_returns_fresh ... ok [INFO] [stdout] test serve::bridge::tests::convert_messages_assistant_empty_content_skipped ... ok [INFO] [stdout] test serve::bridge::tests::convert_messages_user_text ... ok [INFO] [stdout] test serve::bridge::tests::convert_messages_system_and_developer ... ok [INFO] [stdout] test serve::bridge::tests::drain_over_terminal_stream_returns_finished ... ok [INFO] [stdout] test serve::bridge::tests::error_maps_to_run_error ... ok [INFO] [stdout] test serve::bridge::tests::finish_closes_open_step ... ok [INFO] [stdout] test serve::bridge::tests::finish_closes_open_text_message ... ok [INFO] [stdout] test serve::bridge::tests::finish_on_empty_produces_nothing ... ok [INFO] [stdout] test serve::bridge::tests::interrupt_fields_from_pending_approval ... ok [INFO] [stdout] test serve::bridge::tests::interruption_maps_to_interrupt_outcome ... ok [INFO] [stdout] test serve::bridge::tests::max_turns_maps_to_run_finished ... ok [INFO] [stdout] test serve::bridge::tests::message_id_consistent_across_deltas ... ok [INFO] [stdout] test serve::bridge::tests::park_then_resume_delivers_to_second_emitter ... ok [INFO] [stdout] test assembly::tests::tui_has_task_store ... ok [INFO] [stdout] test serve::bridge::tests::drain_over_interrupt_stream_returns_interrupted ... ok [INFO] [stdout] test serve::bridge::tests::prop_no_open_step_at_terminal ... ok [INFO] [stdout] test assembly::tests::tui_normal_permissions ... ok [INFO] [stdout] test assembly::tests::single_prompt_has_no_task_store ... ok [INFO] [stdout] test assembly::tests::tui_skip_permissions_bypasses ... ok [INFO] [stdout] test serve::bridge::tests::subsequent_text_deltas_emit_content_only ... ok [INFO] [stdout] test serve::bridge::tests::text_delta_starts_message_on_first_chunk ... ok [INFO] [stdout] test serve::bridge::tests::resume_unknown_thread_returns_error ... ok [INFO] [stdout] test serve::bridge::tests::tool_end_is_error_prefixes_content ... ok [INFO] [stdout] test serve::bridge::tests::thinking_delta_produces_no_events ... ok [INFO] [stdout] test serve::bridge::tests::tool_end_maps_to_tool_call_end ... ok [INFO] [stdout] test serve::bridge::tests::tool_end_success_no_error_prefix ... ok [INFO] [stdout] test serve::bridge::tests::terminal_event_closes_step ... ok [INFO] [stdout] test serve::bridge::tests::tool_use_input_delta_maps_to_args ... ok [INFO] [stdout] test serve::bridge::tests::tool_use_start_closes_open_text ... ok [INFO] [stdout] test serve::bridge::tests::turn_start_emits_step_finished_before_new_step_started ... ok [INFO] [stdout] test serve::bridge::tests::unexecuted_tool_call_is_closed_before_terminal_event ... ok [INFO] [stdout] test serve::bridge::tests::turn_start_closes_text_and_emits_step ... ok [INFO] [stdout] test serve::session::tests::concurrent_access ... ok [INFO] [stdout] test serve::session::tests::insert_and_get ... ok [INFO] [stdout] test serve::session::tests::mark_interrupted_nonexistent_returns_false ... ok [INFO] [stdout] test serve::session::tests::mark_interrupted_transitions_state ... ok [INFO] [stdout] test serve::session::tests::reap_expired_removes_old_sessions ... ok [INFO] [stdout] test serve::session::tests::reap_expired_drops_parked_run ... ok [INFO] [stdout] test serve::session::tests::remove_nonexistent_returns_none ... ok [INFO] [stdout] test serve::session::tests::remove_returns_session ... ok [INFO] [stdout] test serve::session::tests::update_parked_nonexistent_returns_false ... ok [INFO] [stdout] test serve::session::tests::update_parked_stores_parked_run ... ok [INFO] [stdout] test serve::tests::host_port ... ok [INFO] [stdout] test serve::tests::invalid_non_numeric_port ... ok [INFO] [stdout] test serve::tests::malformed_host ... ok [INFO] [stdout] test serve::tests::none_defaults_to_localhost_8080 ... ok [INFO] [stdout] test serve::tests::port_overflow ... ok [INFO] [stdout] test serve::tests::port_only ... ok [INFO] [stdout] test serve::tests::prop_port_only_parses_to_localhost ... ok [INFO] [stdout] test serve::tests::prop_valid_ipv4_host_port_parses ... ok [INFO] [stdout] test serve::tests::prop_invalid_inputs_return_err ... ok [INFO] [stdout] test tests::test_profile_flag_missing_value ... ok [INFO] [stdout] test tests::test_serve_flag_at_end ... ok [INFO] [stdout] test tests::test_serve_flag_followed_by_another_flag ... ok [INFO] [stdout] test tests::test_serve_flag_host_port ... ok [INFO] [stdout] test tests::test_serve_flag_no_value ... ok [INFO] [stdout] test tests::test_serve_flag_port_only ... ok [INFO] [stdout] test tui::app::p_key_handler_tests::editing_pattern_backspace_at_start_does_nothing ... ok [INFO] [stdout] test tui::app::p_key_handler_tests::editing_pattern_backspace_removes_char ... ok [INFO] [stdout] test tui::app::p_key_handler_tests::editing_pattern_char_inserts_at_cursor ... ok [INFO] [stdout] test tui::app::p_key_handler_tests::editing_pattern_confirm_grants_session_allow ... ok [INFO] [stdout] test tui::app::p_key_handler_tests::editing_pattern_delete_removes_char_at_cursor ... ok [INFO] [stdout] test tui::app::p_key_handler_tests::editing_pattern_enter_resolves_handler_path ... ok [INFO] [stdout] test tui::app::p_key_handler_tests::editing_pattern_enter_resolves_legacy_path ... ok [INFO] [stdout] test tui::app::p_key_handler_tests::editing_pattern_esc_returns_to_awaiting_key ... ok [INFO] [stdout] test tui::app::p_key_handler_tests::editing_pattern_left_arrow_moves_cursor ... ok [INFO] [stdout] test tui::app::p_key_handler_tests::editing_pattern_left_at_start_does_nothing ... ok [INFO] [stdout] test tui::app::p_key_handler_tests::editing_pattern_right_arrow_moves_cursor ... ok [INFO] [stdout] test tui::app::p_key_handler_tests::editing_pattern_right_at_end_does_nothing ... ok [INFO] [stdout] test tui::app::p_key_handler_tests::p_key_transitions_to_editing_pattern ... ok [INFO] [stdout] test tui::app::p_key_handler_tests::p_key_with_no_approvals_stays_awaiting ... ok [INFO] [stdout] test tui::app::p_key_handler_tests::y_a_n_still_work_in_awaiting_key ... ok [INFO] [stdout] test tests::prop_profile_flag_roundtrip ... ok [INFO] [stdout] test tui::app::property_tests::conversation_history_accumulates ... ok [INFO] [stdout] test serve::bridge::tests::prop_tool_call_lifecycle_completeness ... ok [INFO] [stdout] test tui::app::property_tests::double_ctrl_c_after_2s_resets ... ok [INFO] [stdout] test tui::app::property_tests::double_ctrl_c_idle_after_2s_resets ... ok [INFO] [stdout] test tui::app::property_tests::double_ctrl_c_idle_within_2s_exits ... ok [INFO] [stdout] test tui::app::property_tests::ctrl_c_in_running_aborts_without_exit ... ok [INFO] [stdout] test tui::app::property_tests::double_ctrl_c_within_2s_exits ... ok [INFO] [stdout] test tui::app::property_tests::permission_prompt_filters_non_yan_keys ... ok [INFO] [stdout] test tui::app::property_tests::ctrl_c_in_idle_clears_input ... ok [INFO] [stdout] test tui::app::property_tests::session_allow_persists_after_a_press ... ok [INFO] [stdout] test tui::app::property_tests::running_state_blocks_submission ... ok [INFO] [stdout] test tui::app::property_tests::terminal_events_transition_running_to_idle ... ok [INFO] [stdout] test serve::bridge::tests::prop_text_message_lifecycle ... ok [INFO] [stdout] test tui::app::property_tests::interruption_populates_permission_prompt ... ok [INFO] [stdout] test serve::bridge::tests::prop_terminal_event_uniqueness ... ok [INFO] [stdout] test tui::app::suggest_pattern_property_tests::suggest_pattern_no_primary_arg_matches ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::prompt_state_defaults_to_awaiting_key ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::prompt_state_reset_on_approval_event ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::prompt_state_reset_on_clear_approval ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::prompt_state_reset_on_interruption ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_bash_cargo_prefix ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_bash_docker_prefix ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_bash_git_prefix ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_bash_lowercase_tool_name ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_bash_make_prefix ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_bash_npm_prefix ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_bash_pip_prefix ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_bash_pnpm_prefix ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_bash_unknown_command_uses_first_word ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_bash_yarn_prefix ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_empty_object ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_fallback_matches_tool_name ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_file_tool_with_directory ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_file_tool_with_root_dir ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_file_tool_without_slash ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_generic_tool_with_command ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_no_primary_arg ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_read_tool_with_path ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_result_matches_original_call ... ok [INFO] [stdout] test serve::approval::tests::prop_interrupt_round_trip_preserves_semantics ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_short_generic_arg ... ok [INFO] [stdout] test tui::app::property_tests::tool_lifecycle_produces_completed_entry ... ok [INFO] [stdout] test tui::app::tests::agent_end_transitions_to_idle ... ok [INFO] [stdout] test tui::app::tests::compaction_is_ignored ... ok [INFO] [stdout] test tui::app::tests::error_transitions_to_idle_with_error_span ... ok [INFO] [stdout] test tui::app::tests::exiting_mode_returns_exit_for_any_key ... ok [INFO] [stdout] test tui::app::tests::guardrail_tripped_transitions_to_idle ... ok [INFO] [stdout] test tui::app::tests::idle_backspace_removes_last_char ... ok [INFO] [stdout] test tui::app::tests::idle_char_key_inserts_into_buffer ... ok [INFO] [stdout] test tui::app::tests::idle_ctrl_c_empty_input_sets_last_ctrl_c ... ok [INFO] [stdout] test tui::app::tests::aborted_transitions_to_idle_with_warning ... ok [INFO] [stdout] test tui::app::tests::idle_ctrl_c_with_input_clears_buffer ... ok [INFO] [stdout] test tui::app::tests::idle_double_ctrl_c_after_2s_does_not_exit ... ok [INFO] [stdout] test tui::app::tests::idle_enter_with_empty_input_returns_continue ... ok [INFO] [stdout] test tui::app::tests::idle_enter_with_nonempty_input_returns_start_run ... ok [INFO] [stdout] test tui::app::suggest_pattern_tests::suggest_pattern_write_tool_with_path ... ok [INFO] [stdout] test tui::app::tests::idle_double_ctrl_c_within_2s_exits ... ok [INFO] [stdout] test tui::app::tests::interruption_sets_permission_prompt_mode ... ok [INFO] [stdout] test tui::app::tests::max_turns_transitions_to_idle ... ok [INFO] [stdout] test tui::app::tests::message_stop_does_not_push_span ... ok [INFO] [stdout] test tui::app::tests::prompt_a_grants_session_allow_and_resumes ... ok [INFO] [stdout] test tui::app::tests::prompt_n_returns_resume_run_false ... ok [INFO] [stdout] test tui::app::tests::prompt_other_keys_return_continue ... ok [INFO] [stdout] test tui::app::tests::prompt_y_returns_resume_run_true ... ok [INFO] [stdout] test tui::app::tests::running_ctrl_c_returns_abort_run ... ok [INFO] [stdout] test tui::app::tests::running_double_ctrl_c_exits ... ok [INFO] [stdout] test tui::app::tests::running_non_ctrl_c_keys_are_blocked ... ok [INFO] [stdout] test tui::app::tests::text_delta_pushes_normal_span ... ok [INFO] [stdout] test tui::app::tests::thinking_delta_pushes_thinking_span ... ok [INFO] [stdout] test tui::app::tests::tool_end_updates_matching_entry ... ok [INFO] [stdout] test tui::app::tests::tool_end_with_error_flag ... ok [INFO] [stdout] test tui::app::tests::tool_start_adds_executing_entry ... ok [INFO] [stdout] test tui::app::tests::tool_use_start_pushes_tool_name_span ... ok [INFO] [stdout] test tui::app::tests::idle_quit_command_returns_exit ... ok [INFO] [stdout] test tui::app::tests::turn_start_is_ignored ... ok [INFO] [stdout] test tui::app::tests::update_resize_returns_continue ... ok [INFO] [stdout] test tui::app::tests::update_tick_returns_continue ... ok [INFO] [stdout] test tui::app::tests::update_key_returns_continue ... ok [INFO] [stdout] test tui::approval::tests::handler_denies_all_when_response_channel_closed ... ok [INFO] [stdout] test tui::approval::tests::handler_sends_request_and_receives_response ... ok [INFO] [stdout] test tui::approval::tests::handler_denies_all_when_request_channel_closed ... ok [INFO] [stdout] test tui::app::tests::idle_exit_command_returns_exit ... ok [INFO] [stdout] test tui::approval::tests::handler_with_always_allow_response ... ok [INFO] [stdout] test tui::commands::tests::no_store_shows_error ... ok [INFO] [stdout] test tui::approval::tests::handler_with_no_agent_name ... ok [INFO] [stdout] test tui::commands::tests::non_slash_input_returns_none ... ok [INFO] [stdout] test tui::app::suggest_pattern_property_tests::suggest_pattern_always_matches_original_call ... ok [INFO] [stdout] test tui::commands::tests::slash_tasks_ack_empty ... ok [INFO] [stdout] test tui::commands::tests::slash_tasks_ack_with_terminal_tasks ... ok [INFO] [stdout] test tui::commands::tests::slash_tasks_clear_empty ... ok [INFO] [stdout] test tui::commands::tests::slash_tasks_empty_state ... ok [INFO] [stdout] test tui::commands::tests::slash_tasks_with_tasks_present ... ok [INFO] [stdout] test tui::commands::tests::slash_tasks_with_whitespace_trimming ... ok [INFO] [stdout] test tui::commands::tests::slash_todos_empty_state ... ok [INFO] [stdout] test tui::commands::tests::slash_todos_with_items ... ok [INFO] [stdout] test tui::commands::tests::slash_todos_with_whitespace_trimming ... ok [INFO] [stdout] test tui::commands::tests::unknown_command_shows_error ... ok [INFO] [stdout] test tui::app::property_tests::text_deltas_preserve_order ... ok [INFO] [stdout] test tui::app::property_tests::tool_start_without_end_stays_executing ... ok [INFO] [stdout] test tui::input::tests::property_tests::insert_at_any_position_produces_correct_string ... ok [INFO] [stdout] test tui::input::tests::test_backspace_at_start_is_noop ... ok [INFO] [stdout] test tui::input::tests::test_backspace_multibyte_in_middle ... ok [INFO] [stdout] test tui::input::tests::test_backspace_removes_previous_char ... ok [INFO] [stdout] test tui::input::tests::test_backspace_unicode ... ok [INFO] [stdout] test tui::input::tests::test_clear ... ok [INFO] [stdout] test tui::input::tests::test_delete_at_end_is_noop ... ok [INFO] [stdout] test tui::input::tests::test_delete_multibyte ... ok [INFO] [stdout] test tui::input::tests::test_delete_removes_char_at_cursor ... ok [INFO] [stdout] test tui::input::tests::test_insert_ascii ... ok [INFO] [stdout] test tui::input::tests::test_insert_at_middle ... ok [INFO] [stdout] test tui::input::tests::test_insert_between_multibyte_chars ... ok [INFO] [stdout] test tui::input::tests::test_insert_unicode ... ok [INFO] [stdout] test tui::input::tests::test_move_home_and_end ... ok [INFO] [stdout] test tui::input::tests::test_move_left_and_right ... ok [INFO] [stdout] test tui::input::tests::test_move_left_at_start_is_noop ... ok [INFO] [stdout] test tui::input::tests::test_move_right_at_end_is_noop ... ok [INFO] [stdout] test tui::input::tests::test_new_buffer_is_empty ... ok [INFO] [stdout] test tui::input::tests::test_take ... ok [INFO] [stdout] test tui::input::tests::test_take_empty ... ok [INFO] [stdout] test tui::input::tests::test_unicode_cursor_navigation ... ok [INFO] [stdout] test tui::notifications::tests::completed_with_empty_output ... ok [INFO] [stdout] test tui::notifications::tests::completed_with_exactly_200_chars_no_truncation ... ok [INFO] [stdout] test tui::notifications::tests::completed_with_long_output_truncated ... ok [INFO] [stdout] test tui::notifications::tests::completed_with_no_output ... ok [INFO] [stdout] test tui::notifications::tests::completed_with_short_output ... ok [INFO] [stdout] test tui::notifications::tests::failed_with_empty_error ... ok [INFO] [stdout] test tui::notifications::tests::failed_with_error ... ok [INFO] [stdout] test tui::notifications::tests::failed_with_no_error ... ok [INFO] [stdout] test tui::notifications::tests::poll_notifications_formats_and_acknowledges ... ok [INFO] [stdout] test tui::notifications::tests::poll_notifications_handles_failed_task ... ok [INFO] [stdout] test tui::notifications::tests::poll_notifications_with_empty_store ... ok [INFO] [stdout] test tui::notifications::tests::poll_notifications_with_no_store ... ok [INFO] [stdout] test tui::input::tests::property_tests::take_returns_accumulated_content ... ok [INFO] [stdout] test tui::notifications::tests::prop_acknowledge_prevents_duplicate_notification ... ok [INFO] [stdout] test tui::commands::tests::prop_unknown_slash_command_error ... ok [INFO] [stdout] test tui::input::tests::property_tests::cursor_never_exceeds_content_length ... ok [INFO] [stdout] test tui::render::tests::cursor_byte_to_column_ascii ... ok [INFO] [stdout] test tui::render::tests::cursor_byte_to_column_multibyte ... ok [INFO] [stdout] test tui::render::tests::cursor_byte_to_column_unicode ... ok [INFO] [stdout] test tui::render::tests::render_output_splits_newlines ... ok [INFO] [stdout] test tui::render::tests::span_style_error_is_red_bold ... ok [INFO] [stdout] test tui::render::tests::span_style_normal_is_default ... ok [INFO] [stdout] test tui::render::tests::span_style_system_is_dark_gray_dim ... ok [INFO] [stdout] test tui::render::tests::span_style_thinking_is_cyan_italic ... ok [INFO] [stdout] test tui::render::tests::span_style_tool_name_is_yellow_bold ... ok [INFO] [stdout] test tui::render::tests::span_style_warning_is_yellow ... ok [INFO] [stdout] test tui::render::property_tests::status_bar_todo_display ... ok [INFO] [stdout] test tui::commands::tests::prop_slash_command_whitespace_tolerance ... ok [INFO] [stdout] test tui::commands::tests::prop_slash_command_never_produces_start_run ... ok [INFO] [stdout] test tui::notifications::tests::prop_notification_formatting_and_truncation ... ok [INFO] [stdout] test serve::bridge::tests::prop_event_ordering_preserved ... ok [INFO] [stdout] test tui::render::property_tests::layout_bounds_fit_terminal_dimensions ... ok [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/build/agent-core/40ead774a3d80b44/out/agent_core-40ead774a3d80b44) [INFO] [stdout] test serve::session::tests::prop_reap_respects_timeout ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 248 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.04s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 625 tests [INFO] [stdout] test agent::tests::agent_builder_additive_guardrails ... ok [INFO] [stdout] test agent::tests::agent_builder_model_accepts_string_and_str ... ok [INFO] [stdout] test agent::tests::agent_debug ... ok [INFO] [stdout] test agent::tests::agent_builder_additive_sub_agents ... ok [INFO] [stdout] test agent::tests::agent_clone ... ok [INFO] [stdout] test agent::tests::agent_builder_additive_tools ... ok [INFO] [stdout] test agent::tests::agent_builder_with_all_fields ... ok [INFO] [stdout] test agent::tests::agent_builder_defaults ... ok [INFO] [stdout] test agent::tests::instructions_dynamic_can_be_invoked ... ok [INFO] [stdout] test agent::tests::instructions_dynamic_clone ... ok [INFO] [stdout] test agent::tests::instructions_static_clone ... ok [INFO] [stdout] test agent::tests::agent_is_send_sync ... ok [INFO] [stdout] test agent::tests::instructions_default_is_empty_static ... ok [INFO] [stdout] test agent::tests::instructions_dynamic_debug ... ok [INFO] [stdout] test agent::tests::instructions_static_debug ... ok [INFO] [stdout] test agent::tests::sub_agent_def_clone ... ok [INFO] [stdout] test agent::tests::sub_agent_def_debug ... ok [INFO] [stdout] test compaction::full_summarize::tests::test_format_assistant_with_tool_use ... ok [INFO] [stdout] test compaction::config::tests::default_compactable_tools ... ok [INFO] [stdout] test compaction::config::tests::default_numeric_values ... ok [INFO] [stdout] test compaction::config::tests::default_optional_fields_are_none ... ok [INFO] [stdout] test compaction::full_summarize::tests::test_format_assistant_message ... ok [INFO] [stdout] test compaction::full_summarize::tests::test_format_tool_result_error ... ok [INFO] [stdout] test compaction::full_summarize::tests::test_format_user_message ... ok [INFO] [stdout] test compaction::full_summarize::tests::test_pair_integrity_empty_indices ... ok [INFO] [stdout] test compaction::full_summarize::tests::test_pair_integrity_last_is_assistant_tool_use ... ok [INFO] [stdout] test compaction::full_summarize::tests::test_format_system_message ... ok [INFO] [stdout] test compaction::full_summarize::tests::test_format_tool_result ... ok [INFO] [stdout] test compaction::full_summarize::tests::test_pair_integrity_tool_result_is_first_preserved ... ok [INFO] [stdout] test compaction::full_summarize::tests::test_prompt_contains_all_9_sections ... ok [INFO] [stdout] test compaction::full_summarize::tests::test_prompt_contains_conversation ... ok [INFO] [stdout] test compaction::layer::tests::compaction_context_debug ... ok [INFO] [stdout] test compaction::layer::tests::compaction_context_clone ... ok [INFO] [stdout] test compaction::layer::tests::compaction_layer_trait_is_object_safe ... ok [INFO] [stdout] test compaction::full_summarize::tests::test_pair_integrity_no_tool_messages ... ok [INFO] [stdout] test compaction::full_summarize::tests::test_pair_integrity_tool_result_at_boundary_pulled_in ... ok [INFO] [stdout] test compaction::layer::tests::layer_result_applied_equality ... ok [INFO] [stdout] test compaction::layer::tests::layer_result_noop_equality ... ok [INFO] [stdout] test compaction::layer::tests::layer_result_variants_are_distinct ... ok [INFO] [stdout] test compaction::pipeline_tests::test_circuit_breaker_resets_on_success ... ok [INFO] [stdout] test compaction::pipeline_tests::test_circuit_breaker_trips_after_3_failures ... ok [INFO] [stdout] test compaction::layer::tests::layer_result_failed_equality ... ok [INFO] [stdout] test compaction::pipeline_tests::test_pipeline_stops_at_tools_compact_when_sufficient ... ok [INFO] [stdout] test compaction::pipeline_tests::test_pipeline_fails_when_all_layers_insufficient ... ok [INFO] [stdout] test compaction::session_memory::proptests::prop_noop_when_tokens_below_minimum ... ok [INFO] [stdout] test compaction::session_memory::proptests::prop_noop_when_fewer_than_min_text_messages ... ok [INFO] [stdout] test compaction::session_memory::tests::applies_when_all_guards_pass ... ok [INFO] [stdout] test compaction::session_memory::tests::layer_name_is_session_memory ... ok [INFO] [stdout] test compaction::session_memory::tests::noop_when_fewer_than_min_text_block_messages ... ok [INFO] [stdout] test compaction::session_memory::tests::noop_when_no_session_memory_path ... ok [INFO] [stdout] test compaction::session_memory::tests::noop_when_nothing_to_remove_before_boundary ... ok [INFO] [stdout] test compaction::session_memory::tests::noop_when_session_memory_path_does_not_exist ... ok [INFO] [stdout] test compaction::session_memory::tests::noop_when_tokens_below_minimum ... ok [INFO] [stdout] test compaction::session_memory::tests::preserves_system_messages ... ok [INFO] [stdout] test compaction::session_memory::tests::session_memory_inserted_after_last_system_message ... ok [INFO] [stdout] test compaction::tokens::tests::test_compute_token_count_falls_back_to_heuristic ... ok [INFO] [stdout] test compaction::tokens::tests::test_compute_token_count_prefers_usage ... ok [INFO] [stdout] test compaction::tokens::tests::test_estimate_assistant_message_with_tool_use ... ok [INFO] [stdout] test compaction::tokens::tests::test_estimate_empty_messages ... ok [INFO] [stdout] test compaction::tokens::tests::test_estimate_image_block ... ok [INFO] [stdout] test compaction::tokens::tests::test_estimate_system_message ... ok [INFO] [stdout] test compaction::tokens::tests::test_estimate_tokens_sums_all_messages ... ok [INFO] [stdout] test compaction::tokens::tests::test_estimate_tool_result ... ok [INFO] [stdout] test compaction::tokens::tests::test_estimate_user_message_multiple_blocks ... ok [INFO] [stdout] test compaction::tokens::tests::test_estimate_user_message_text ... ok [INFO] [stdout] test compaction::tokens::tests::test_integer_division_truncation ... ok [INFO] [stdout] test compaction::pipeline_tests::prop_circuit_breaker_behavior ... ok [INFO] [stdout] test compaction::pipeline_tests::prop_trigger_threshold_correctly_computed ... ok [INFO] [stdout] test compaction::tools_compact::tests::test_clears_old_compactable_results ... ok [INFO] [stdout] test compaction::tools_compact::tests::test_name_returns_tools_compact ... ok [INFO] [stdout] test compaction::tools_compact::tests::test_noop_when_all_results_in_exempt_zone ... ok [INFO] [stdout] test compaction::tools_compact::tests::test_noop_when_no_tool_results ... ok [INFO] [stdout] test compaction::tools_compact::tests::test_preserves_tool_use_id_and_is_error ... ok [INFO] [stdout] test compaction::tools_compact::tests::test_skips_already_cleared_results ... ok [INFO] [stdout] test compaction::tools_compact::tests::test_skips_non_compactable_tools ... ok [INFO] [stdout] test compaction::tools_compact::tests::test_tokens_before_and_after_in_event ... ok [INFO] [stdout] test config::tests::approval_handler_multiple_pending ... ok [INFO] [stdout] test config::tests::approval_handler_send_sync_bounds ... ok [INFO] [stdout] test config::tests::approval_handler_trait_object_safety ... ok [INFO] [stdout] test config::tests::deny_all_handler_empty_pending_returns_empty ... ok [INFO] [stdout] test config::tests::deny_all_handler_implements_approval_handler_trait ... ok [INFO] [stdout] test config::tests::deny_all_handler_multiple_pending_returns_deny_for_all ... ok [INFO] [stdout] test config::tests::deny_all_handler_never_blocks ... ok [INFO] [stdout] test config::tests::deny_all_handler_send_sync ... ok [INFO] [stdout] test config::tests::deny_all_handler_single_pending_returns_deny ... ok [INFO] [stdout] test config::tests::input_fresh_variant ... ok [INFO] [stdout] test config::tests::input_items_variant ... ok [INFO] [stdout] test config::tests::input_resume_variant ... ok [INFO] [stdout] test config::tests::load_settings_missing_files_empty_policy ... ok [INFO] [stdout] test config::tests::load_settings_no_call_has_empty_policy ... ok [INFO] [stdout] test config::tests::load_settings_valid_file_applies_rules ... ok [INFO] [stdout] test config::tests::load_settings_with_runtime_overrides ... ok [INFO] [stdout] test compaction::full_summarize::tests::proptests::prop_full_summarize_preserves_recent_messages ... ok [INFO] [stdout] test compaction::full_summarize::tests::proptests::prop_full_summarize_failure_leaves_messages_unchanged ... ok [INFO] [stdout] test config::tests::prop_deny_all_handler_denies_all_items ... ok [INFO] [stdout] test config::tests::prop_temperature_nan_rejected ... ok [INFO] [stdout] test config::tests::prop_temperature_negative_infinity_rejected ... ok [INFO] [stdout] test config::tests::prop_temperature_positive_infinity_rejected ... ok [INFO] [stdout] test config::tests::prop_temperature_valid_values_accepted ... ok [INFO] [stdout] test config::tests::run_config_builder_all_fields ... ok [INFO] [stdout] test config::tests::run_config_builder_defaults ... ok [INFO] [stdout] test config::tests::run_config_builder_temperature_max ... ok [INFO] [stdout] test config::tests::run_config_builder_temperature_negative - should panic ... ok [INFO] [stdout] test config::tests::run_config_builder_temperature_too_high - should panic ... ok [INFO] [stdout] test config::tests::run_config_builder_temperature_very_high - should panic ... ok [INFO] [stdout] test config::tests::run_config_builder_temperature_zero ... ok [INFO] [stdout] test config::tests::run_config_debug ... ok [INFO] [stdout] test config::tests::run_result_construction ... ok [INFO] [stdout] test config::tests::run_result_debug ... ok [INFO] [stdout] test config_resolver::tests::apply_env_overrides_all_providers ... ok [INFO] [stdout] test config_resolver::tests::apply_model_override_none_leaves_model_unchanged ... ok [INFO] [stdout] test config_resolver::tests::apply_model_override_replaces_model ... ok [INFO] [stdout] test config_resolver::tests::load_profiles_from_path_invalid_json ... ok [INFO] [stdout] test config_resolver::tests::load_profiles_from_path_missing_file ... ok [INFO] [stdout] test config_resolver::tests::load_profiles_from_path_no_profiles_key ... ok [INFO] [stdout] test config_resolver::tests::load_profiles_from_path_valid_profiles ... ok [INFO] [stdout] test config_resolver::tests::load_profiles_from_project_uses_correct_path ... ok [INFO] [stdout] test config_resolver::tests::merge_default_falls_back_to_user_when_project_has_none ... ok [INFO] [stdout] test config_resolver::tests::merge_default_project_takes_priority ... ok [INFO] [stdout] test config_resolver::tests::merge_empty_inputs_returns_empty ... ok [INFO] [stdout] test config_resolver::tests::merge_non_conflicting_profiles_unioned ... ok [INFO] [stdout] test config_resolver::tests::merge_project_fully_replaces_user_for_same_name ... ok [INFO] [stdout] test config_resolver::tests::merge_project_only_profiles_preserved ... ok [INFO] [stdout] test config_resolver::tests::merge_user_only_profiles_preserved ... ok [INFO] [stdout] test config::tests::prop_temperature_above_range_rejected ... ok [INFO] [stdout] test config::tests::prop_temperature_below_range_rejected ... ok [INFO] [stdout] test config_resolver::tests::prop_tests::prop_default_key_project_over_user ... ok [INFO] [stdout] test config_resolver::tests::prop_tests::prop_env_vars_override_profile_credentials ... ok [INFO] [stdout] test config_resolver::tests::prop_tests::prop_missing_credentials_produce_error ... ok [INFO] [stdout] test config_resolver::tests::prop_tests::prop_cli_profile_selects_correct_profile ... ok [INFO] [stdout] test config_resolver::tests::prop_tests::prop_model_override_replaces_model_only ... ok [INFO] [stdout] test config_resolver::tests::prop_tests::prop_project_overrides_user_for_same_name ... ok [INFO] [stdout] test config_resolver::tests::resolve_cli_profile_selects_named_profile ... ok [INFO] [stdout] test config_resolver::tests::resolve_cli_unknown_profile_errors ... ok [INFO] [stdout] test config_resolver::tests::resolve_model_override_applied ... ok [INFO] [stdout] test config_resolver::tests::resolve_returns_none_when_default_references_nonexistent ... ok [INFO] [stdout] test config_resolver::tests::resolve_returns_none_when_no_default_and_no_flag ... ok [INFO] [stdout] test config_resolver::tests::resolve_returns_none_when_no_profiles_and_no_flag ... ok [INFO] [stdout] test config_resolver::tests::resolve_selects_default_profile_from_project ... ok [INFO] [stdout] test config_resolver::tests::select_profile_default_references_nonexistent_returns_none ... ok [INFO] [stdout] test config_resolver::tests::select_profile_defaults_missing_provider_and_model ... ok [INFO] [stdout] test config_resolver::tests::select_profile_maps_all_fields_from_config ... ok [INFO] [stdout] test config_resolver::tests::select_profile_no_cli_no_default_returns_none ... ok [INFO] [stdout] test config_resolver::tests::select_profile_uses_default_key ... ok [INFO] [stdout] test config_resolver::tests::select_profile_with_cli_flag_existing_profile ... ok [INFO] [stdout] test config_resolver::tests::select_profile_with_cli_flag_unknown_profile_errors ... ok [INFO] [stdout] test config_resolver::tests::test_config_error_equality ... ok [INFO] [stdout] test config_resolver::tests::test_config_error_missing_credentials_display ... ok [INFO] [stdout] test config_resolver::tests::test_config_error_unknown_profile_display ... ok [INFO] [stdout] test config_resolver::tests::test_config_inputs_default ... ok [INFO] [stdout] test config_resolver::tests::test_resolved_profile_construction ... ok [INFO] [stdout] test config_resolver::tests::validate_credentials_anthropic_no_key_errors ... ok [INFO] [stdout] test config_resolver::tests::validate_credentials_ollama_no_key_passes ... ok [INFO] [stdout] test config_resolver::tests::validate_credentials_openai_no_key_errors ... ok [INFO] [stdout] test config_resolver::tests::validate_credentials_openai_with_key_passes ... ok [INFO] [stdout] test config_resolver::tests::validate_credentials_unknown_provider_no_key_passes ... ok [INFO] [stdout] test error::tests::from_model_error_to_run_error ... ok [INFO] [stdout] test error::tests::from_tool_error_to_run_error ... ok [INFO] [stdout] test error::tests::model_error_display_api ... ok [INFO] [stdout] test error::tests::model_error_display_connection ... ok [INFO] [stdout] test error::tests::model_error_display_max_output_tokens ... ok [INFO] [stdout] test error::tests::model_error_display_prompt_too_long ... ok [INFO] [stdout] test error::tests::model_error_display_rate_limited ... ok [INFO] [stdout] test error::tests::model_error_display_stream_interrupted ... ok [INFO] [stdout] test error::tests::prop_model_error_api_display_contains_context ... ok [INFO] [stdout] test config_resolver::tests::prop_tests::prop_merge_preserves_disjoint_profiles ... ok [INFO] [stdout] test error::tests::prop_model_error_prompt_too_long_display_contains_context ... ok [INFO] [stdout] test error::tests::prop_model_error_rate_limited_display_contains_context ... ok [INFO] [stdout] test error::tests::prop_model_error_connection_display_contains_context ... ok [INFO] [stdout] test error::tests::prop_run_error_aborted_display_contains_context ... ok [INFO] [stdout] test error::tests::prop_run_error_budget_exceeded_display_contains_context ... ok [INFO] [stdout] test error::tests::prop_model_error_stream_interrupted_display_contains_context ... ok [INFO] [stdout] test error::tests::prop_run_error_max_turns_display_contains_context ... ok [INFO] [stdout] test compaction::session_memory::proptests::prop_noop_when_no_session_memory_file ... ok [INFO] [stdout] test error::tests::prop_run_error_mcp_display_contains_context ... ok [INFO] [stdout] test error::tests::prop_run_error_guardrail_display_contains_context ... ok [INFO] [stdout] test error::tests::prop_run_error_model_prompt_too_long_display_contains_context ... ok [INFO] [stdout] test config_resolver::tests::prop_tests::prop_unknown_profile_produces_error_with_name ... ok [INFO] [stdout] test error::tests::prop_run_error_model_rate_limited_display_contains_context ... ok [INFO] [stdout] test error::tests::prop_run_error_recovery_exhausted_display_contains_context ... ok [INFO] [stdout] test error::tests::prop_run_error_model_api_display_contains_context ... ok [INFO] [stdout] test error::tests::prop_run_error_serialization_display_contains_context ... ok [INFO] [stdout] test error::tests::prop_run_error_model_stream_interrupted_display_contains_context ... ok [INFO] [stdout] test error::tests::prop_run_error_model_connection_display_contains_context ... ok [INFO] [stdout] test error::tests::prop_run_error_tool_execution_failed_display_contains_context ... ok [INFO] [stdout] test error::tests::prop_run_error_tool_not_available_display_contains_context ... ok [INFO] [stdout] test error::tests::prop_run_error_tool_invalid_input_display_contains_context ... ok [INFO] [stdout] test error::tests::question_mark_operator_with_model_error ... ok [INFO] [stdout] test error::tests::question_mark_operator_with_tool_error ... ok [INFO] [stdout] test error::tests::run_error_display_aborted ... ok [INFO] [stdout] test error::tests::run_error_display_budget_exceeded ... ok [INFO] [stdout] test error::tests::run_error_display_guardrail ... ok [INFO] [stdout] test error::tests::run_error_display_includes_model_error_context ... ok [INFO] [stdout] test error::tests::prop_tool_error_not_available_display_contains_context ... ok [INFO] [stdout] test error::tests::run_error_display_includes_tool_error_context ... ok [INFO] [stdout] test error::tests::prop_tool_error_execution_failed_display_contains_context ... ok [INFO] [stdout] test error::tests::run_error_display_recovery_exhausted ... ok [INFO] [stdout] test error::tests::run_error_display_serialization ... ok [INFO] [stdout] test error::tests::run_error_display_max_turns ... ok [INFO] [stdout] test error::tests::run_error_display_mcp ... ok [INFO] [stdout] test error::tests::tool_error_display_not_available ... ok [INFO] [stdout] test error::tests::tool_error_display_timeout ... ok [INFO] [stdout] test error::tests::tool_error_display_execution_failed ... ok [INFO] [stdout] test error::tests::tool_error_display_invalid_input ... ok [INFO] [stdout] test executor::tests::test_empty_queue_execute_all ... ok [INFO] [stdout] test executor::tests::test_error_cascading_cancels_siblings ... ok [INFO] [stdout] test executor::tests::test_exclusive_between_safe_batches ... ok [INFO] [stdout] test executor::tests::test_multiple_safe_tools_parallel ... ok [INFO] [stdout] test executor::tests::test_new_clamps_min_concurrency ... ok [INFO] [stdout] test executor::tests::test_non_cascading_error_does_not_cancel ... ok [INFO] [stdout] test executor::tests::test_exclusive_tool_runs_alone ... ok [INFO] [stdout] test executor::tests::test_single_safe_tool ... ok [INFO] [stdout] test fs_session_store::tests::append_then_load_roundtrip ... ok [INFO] [stdout] test fs_session_store::tests::delete_removes_session ... ok [INFO] [stdout] test fs_session_store::tests::list_returns_sessions_newest_first ... ok [INFO] [stdout] test fs_session_store::tests::load_missing_is_not_found ... ok [INFO] [stdout] test fs_session_store::tests::rejects_path_traversal_ids ... ok [INFO] [stdout] test fs_session_store::tests::save_overwrites ... ok [INFO] [stdout] test error::tests::prop_tool_error_invalid_input_display_contains_context ... ok [INFO] [stdout] test guardrail::prop_tests::prop_all_pass_yields_overall_pass ... ok [INFO] [stdout] test executor::tests::test_results_in_enqueue_order_despite_varying_durations ... ok [INFO] [stdout] test executor::tests::test_max_concurrency_respected ... ok [INFO] [stdout] test guardrail::prop_tests::prop_guardrails_after_failure_never_checked ... ok [INFO] [stdout] test guardrail::tests::all_guardrails_pass_when_input_clean ... ok [INFO] [stdout] test guardrail::tests::guardrail_result_clone_and_eq ... ok [INFO] [stdout] test guardrail::tests::guardrail_result_debug ... ok [INFO] [stdout] test guardrail::tests::guardrail_result_fail ... ok [INFO] [stdout] test guardrail::tests::guardrail_result_fail_with_metadata ... ok [INFO] [stdout] test guardrail::tests::guardrail_result_pass ... ok [INFO] [stdout] test guardrail::tests::input_guardrail_blocks_banned_word ... ok [INFO] [stdout] test guardrail::tests::input_guardrail_is_object_safe ... ok [INFO] [stdout] test guardrail::tests::input_guardrail_name ... ok [INFO] [stdout] test guardrail::tests::input_guardrail_passes_clean_input ... ok [INFO] [stdout] test guardrail::tests::input_guardrail_send_sync ... ok [INFO] [stdout] test guardrail::tests::multiple_input_guardrails_sequential_check ... ok [INFO] [stdout] test guardrail::tests::output_guardrail_blocks_long_output ... ok [INFO] [stdout] test guardrail::tests::output_guardrail_is_object_safe ... ok [INFO] [stdout] test guardrail::tests::output_guardrail_name ... ok [INFO] [stdout] test guardrail::tests::output_guardrail_passes_short_output ... ok [INFO] [stdout] test guardrail::tests::output_guardrail_send_sync ... ok [INFO] [stdout] test guardrail::tests::output_guardrail_with_structured_output ... ok [INFO] [stdout] test guardrail::tests::tool_guardrail_blocks_forbidden_tool ... ok [INFO] [stdout] test guardrail::tests::tool_guardrail_check_output_blocks_sensitive ... ok [INFO] [stdout] test guardrail::tests::tool_guardrail_check_output_passes ... ok [INFO] [stdout] test guardrail::tests::tool_guardrail_is_object_safe ... ok [INFO] [stdout] test guardrail::tests::tool_guardrail_name ... ok [INFO] [stdout] test guardrail::tests::tool_guardrail_passes_allowed_tool ... ok [INFO] [stdout] test guardrail::tests::tool_guardrail_send_sync ... ok [INFO] [stdout] test compaction::tools_compact::tests::proptests::prop_tools_compact_clears_only_eligible_tool_results ... ok [INFO] [stdout] test guardrail::prop_tests::prop_failure_reason_matches_first_failing_guardrail ... ok [INFO] [stdout] test guardrail::prop_tests::prop_first_failure_short_circuits ... ok [INFO] [stdout] test guardrail::prop_tests::prop_input_guardrails_first_turn_only ... ok [INFO] [stdout] test in_memory_task_store::tests::all_deps_completed_transition_succeeds ... ok [INFO] [stdout] test in_memory_task_store::tests::dep_killed_returns_dependency_failed_error ... ok [INFO] [stdout] test in_memory_task_store::tests::dep_failed_returns_dependency_failed_error ... ok [INFO] [stdout] test in_memory_task_store::tests::dep_pending_returns_invalid_transition ... ok [INFO] [stdout] test in_memory_task_store::tests::dep_running_returns_invalid_transition ... ok [INFO] [stdout] test in_memory_task_store::tests::acknowledge_excludes_from_terminal_queries ... ok [INFO] [stdout] test in_memory_task_store::tests::evict_acknowledged_safety ... ok [INFO] [stdout] test in_memory_task_store::tests::evict_older_than_safety ... ok [INFO] [stdout] test in_memory_task_store::tests::invalid_transition_pending_to_completed ... ok [INFO] [stdout] test in_memory_task_store::tests::invalid_transition_from_failed ... ok [INFO] [stdout] test in_memory_task_store::tests::invalid_transition_from_completed ... ok [INFO] [stdout] test in_memory_task_store::tests::invalid_transition_from_killed ... ok [INFO] [stdout] test compaction::tools_compact::tests::proptests::prop_tools_compact_preserves_tool_use_id_and_is_error ... ok [INFO] [stdout] test in_memory_task_store::tests::invalid_transition_pending_to_failed ... ok [INFO] [stdout] test in_memory_task_store::tests::task_id_uniqueness ... ok [INFO] [stdout] test in_memory_task_store::tests::todo_item_crud_round_trip ... ok [INFO] [stdout] test in_memory_task_store::tests::status_filtering_correctness ... ok [INFO] [stdout] test in_memory_task_store::tests::task_entry_crud_round_trip ... ok [INFO] [stdout] test in_memory_task_store::tests::retry_logic_semantics ... ok [INFO] [stdout] test compaction::session_memory::proptests::prop_preserves_recent_messages_and_injects_summary ... ok [INFO] [stdout] test in_memory_task_store::tests::valid_transition_pending_to_killed ... ok [INFO] [stdout] test message::tests::test_assistant_message_with_tool_use ... ok [INFO] [stdout] test message::tests::test_assistant_message_without_usage ... ok [INFO] [stdout] test message::tests::test_content_block_text_roundtrip ... ok [INFO] [stdout] test message::tests::test_multiple_content_blocks ... ok [INFO] [stdout] test message::tests::test_system_message_roundtrip ... ok [INFO] [stdout] test message::tests::test_tool_result_error ... ok [INFO] [stdout] test message::tests::test_tool_result_message ... ok [INFO] [stdout] test message::tests::test_tool_use_block_with_complex_input ... ok [INFO] [stdout] test message::tests::test_usage_default ... ok [INFO] [stdout] test message::tests::test_user_message_with_image ... ok [INFO] [stdout] test message::tests::test_user_message_with_text ... ok [INFO] [stdout] test model::tests::content_block_text_variant ... ok [INFO] [stdout] test model::tests::content_block_tool_use_variant ... ok [INFO] [stdout] test model::tests::model_request_serialization ... ok [INFO] [stdout] test model::tests::model_request_with_no_optional_fields ... ok [INFO] [stdout] test model::tests::model_request_with_output_schema ... ok [INFO] [stdout] test model::tests::model_response_serialization_roundtrip ... ok [INFO] [stdout] test model::tests::tool_definition_equality ... ok [INFO] [stdout] test model::tests::tool_definition_serialization_roundtrip ... ok [INFO] [stdout] test next_step::tests::pending_approval_serialization_roundtrip ... ok [INFO] [stdout] test pattern::tests::display_bare ... ok [INFO] [stdout] test pattern::tests::display_compound ... ok [INFO] [stdout] test pattern::tests::display_round_trips_through_parse ... ok [INFO] [stdout] test pattern::tests::extract_primary_arg_command_key ... ok [INFO] [stdout] test pattern::tests::extract_primary_arg_empty_object ... ok [INFO] [stdout] test pattern::tests::extract_primary_arg_no_recognized_key ... ok [INFO] [stdout] test pattern::tests::extract_primary_arg_non_object ... ok [INFO] [stdout] test pattern::tests::extract_primary_arg_non_string_value ... ok [INFO] [stdout] test pattern::tests::extract_primary_arg_null_value ... ok [INFO] [stdout] test pattern::tests::extract_primary_arg_path_key ... ok [INFO] [stdout] test pattern::tests::extract_primary_arg_priority_order ... ok [INFO] [stdout] test pattern::tests::extract_primary_arg_url_key ... ok [INFO] [stdout] test pattern::tests::glob_all_star ... ok [INFO] [stdout] test pattern::tests::glob_complex_patterns ... ok [INFO] [stdout] test pattern::tests::glob_empty_pattern_matches_empty_text ... ok [INFO] [stdout] test pattern::tests::glob_exact_match ... ok [INFO] [stdout] test pattern::tests::glob_multiple_stars ... ok [INFO] [stdout] test pattern::tests::glob_no_meta_exact_only ... ok [INFO] [stdout] test pattern::tests::glob_question_and_star ... ok [INFO] [stdout] test pattern::tests::glob_question_matches_one ... ok [INFO] [stdout] test pattern::tests::glob_star_at_start ... ok [INFO] [stdout] test pattern::tests::glob_star_in_middle ... ok [INFO] [stdout] test pattern::tests::glob_star_matches_empty ... ok [INFO] [stdout] test pattern::tests::glob_star_matches_many ... ok [INFO] [stdout] test pattern::tests::is_glob_bare_no_meta ... ok [INFO] [stdout] test in_memory_task_store::tests::valid_transition_pending_to_running_no_deps ... ok [INFO] [stdout] test pattern::tests::is_glob_bare_star ... ok [INFO] [stdout] test pattern::tests::is_glob_compound_no_meta ... ok [INFO] [stdout] test pattern::tests::is_glob_compound_question_in_tool_name ... ok [INFO] [stdout] test pattern::tests::is_glob_compound_star_in_arg ... ok [INFO] [stdout] test pattern::tests::matches_bare_exact_no_glob ... ok [INFO] [stdout] test pattern::tests::matches_bare_ignores_tool_input ... ok [INFO] [stdout] test pattern::tests::matches_bare_pattern_tool_name_only ... ok [INFO] [stdout] test pattern::tests::matches_bare_question_mark_glob ... ok [INFO] [stdout] test pattern::tests::matches_compound_empty_arg_glob_matches_empty_arg ... ok [INFO] [stdout] test pattern::tests::matches_compound_exact_tool_name_and_arg_glob ... ok [INFO] [stdout] test pattern::tests::matches_compound_returns_false_when_no_input ... ok [INFO] [stdout] test pattern::tests::matches_compound_returns_false_when_no_primary_arg ... ok [INFO] [stdout] test pattern::tests::matches_compound_tool_name_case_sensitive ... ok [INFO] [stdout] test pattern::tests::matches_compound_with_path_arg ... ok [INFO] [stdout] test pattern::tests::matches_compound_with_url_arg ... ok [INFO] [stdout] test pattern::tests::matches_compound_wrong_tool_name ... ok [INFO] [stdout] test pattern::tests::parse_bare_simple ... ok [INFO] [stdout] test in_memory_task_store::tests::valid_transition_pending_to_running_deps_completed ... ok [INFO] [stdout] test pattern::tests::parse_bare_with_unmatched_close_paren_returns_none ... ok [INFO] [stdout] test pattern::tests::parse_bare_with_glob ... ok [INFO] [stdout] test pattern::tests::parse_compound_empty_arg_glob ... ok [INFO] [stdout] test pattern::tests::parse_compound_empty_tool_name_returns_none ... ok [INFO] [stdout] test pattern::tests::parse_compound_simple ... ok [INFO] [stdout] test pattern::tests::parse_compound_unclosed_paren_returns_none ... ok [INFO] [stdout] test pattern::tests::parse_compound_with_path ... ok [INFO] [stdout] test pattern::tests::parse_empty_returns_none ... ok [INFO] [stdout] test pattern::tests::parse_trims_whitespace ... ok [INFO] [stdout] test pattern::tests::parse_compound_with_spaces_in_arg ... ok [INFO] [stdout] test pattern::tests::is_glob_bare_question ... ok [INFO] [stdout] test pattern::tests::property_tests::bare_exact_pattern_matches_name_only_no_input ... ok [INFO] [stdout] test in_memory_task_store::tests::valid_transition_running_to_failed_no_retries ... ok [INFO] [stdout] test pattern::tests::property_tests::bare_pattern_matches_without_input ... ok [INFO] [stdout] test pattern::tests::property_tests::glob_question_does_not_match_zero_chars ... ok [INFO] [stdout] test in_memory_task_store::tests::valid_transition_running_to_completed ... ok [INFO] [stdout] test in_memory_task_store::tests::valid_transition_running_to_killed ... ok [INFO] [stdout] test pattern::tests::property_tests::bare_exact_string_matches_only_itself ... ok [INFO] [stdout] test permission::tests::clear_session_allows_removes_all ... ok [INFO] [stdout] test permission::tests::engine_add_static_rules ... ok [INFO] [stdout] test permission::tests::engine_builder_pattern ... ok [INFO] [stdout] test permission::tests::engine_new_defaults ... ok [INFO] [stdout] test permission::tests::full_pipeline_normal_flow ... ok [INFO] [stdout] test pattern::tests::property_tests::glob_question_matches_exactly_one ... ok [INFO] [stdout] test permission::tests::full_pipeline_with_session_allow_after_approval ... ok [INFO] [stdout] test permission::tests::grant_session_allow_persists ... ok [INFO] [stdout] test permission::tests::layer1_bypass_mode_allows_all ... ok [INFO] [stdout] test permission::tests::grant_session_allow_idempotent ... ok [INFO] [stdout] test permission::tests::layer1_bypass_overrides_static_deny ... ok [INFO] [stdout] test permission::tests::layer1_deny_all_mode_denies_all ... ok [INFO] [stdout] test permission::tests::layer1_deny_all_overrides_static_allow ... ok [INFO] [stdout] test permission::tests::layer2_static_allow_short_circuits ... ok [INFO] [stdout] test permission::tests::layer2_static_deny_takes_precedence_over_static_allow ... ok [INFO] [stdout] test permission::tests::layer2_static_deny_short_circuits ... ok [INFO] [stdout] test permission::tests::layer3_session_allow_does_not_override_static_deny ... ok [INFO] [stdout] test permission::tests::layer4_approval_always_needs_approval ... ok [INFO] [stdout] test permission::tests::layer3_session_allow_short_circuits ... ok [INFO] [stdout] test permission::tests::layer4_approval_conditional_needs_approval ... ok [INFO] [stdout] test permission::tests::layer4_approval_never_allows ... ok [INFO] [stdout] test permission::tests::permission_decision_deny_variant ... ok [INFO] [stdout] test permission::tests::permission_decision_allow_variant ... ok [INFO] [stdout] test permission::tests::permission_decision_needs_approval_variant ... ok [INFO] [stdout] test permission::tests::permission_mode_debug_clone_copy_eq ... ok [INFO] [stdout] test pattern::tests::property_tests::glob_exact_matches_only_itself ... ok [INFO] [stdout] test pattern::tests::property_tests::glob_star_matches_zero_or_more ... ok [INFO] [stdout] test pattern::tests::property_tests::compound_pattern_rejects_missing_primary_arg ... ok [INFO] [stdout] test pattern::tests::property_tests::glob_star_requires_prefix ... ok [INFO] [stdout] test permission::tests::property_tests::first_match_rule_ordering ... ok [INFO] [stdout] test permission::tests::property_tests::shared_session_grant_propagation ... ok [INFO] [stdout] test permission::tests::property_tests::shared_session_grant_propagation_compound ... ok [INFO] [stdout] test permission::tests::property_tests::shared_session_grant_propagation_with_glob ... ok [INFO] [stdout] test permission::tests::property_tests::pattern_based_session_grants ... ok [INFO] [stdout] test in_memory_task_store::tests::todo_item_insertion_order_preserved ... ok [INFO] [stdout] test permission::tests::property_tests::session_allow_does_not_override_static_deny ... ok [INFO] [stdout] test permission::tests::set_mode_changes_behavior ... ok [INFO] [stdout] test permission::tests::property_tests::session_allow_works_for_non_static_tools ... ok [INFO] [stdout] test permission::tests::property_tests::bypass_mode_always_allows ... ok [INFO] [stdout] test profile::tests::test_profile_config_all_fields ... ok [INFO] [stdout] test profile::tests::test_profile_config_empty_object ... ok [INFO] [stdout] test profile::tests::test_profile_config_ignores_unknown_fields ... ok [INFO] [stdout] test profile::tests::test_profile_config_partial_fields ... ok [INFO] [stdout] test profile::tests::test_profiles_section_from_value_full ... ok [INFO] [stdout] test profile::tests::test_profiles_section_from_value_no_default ... ok [INFO] [stdout] test profile::tests::test_profiles_section_from_value_not_object ... ok [INFO] [stdout] test profile::tests::test_profiles_section_from_value_null ... ok [INFO] [stdout] test profile::tests::test_profiles_section_skips_unparseable_entries ... ok [INFO] [stdout] test permission::tests::property_tests::static_deny_takes_precedence_over_static_allow ... ok [INFO] [stdout] test profile::tests::profile_config_any_field_subset_parses ... ok [INFO] [stdout] test recovery::tests::test_api_error_gives_up_immediately ... ok [INFO] [stdout] test recovery::tests::test_attempts_for_returns_current_count ... ok [INFO] [stdout] test recovery::tests::test_connection_error_gives_up_immediately ... ok [INFO] [stdout] test recovery::tests::test_different_error_variants_tracked_independently ... ok [INFO] [stdout] test recovery::tests::prop_recovery_different_variants_tracked_independently ... ok [INFO] [stdout] test recovery::tests::test_escalation_to_give_up_after_max_attempts ... ok [INFO] [stdout] test recovery::tests::test_max_output_tokens_escalates_on_third_attempt ... ok [INFO] [stdout] test recovery::tests::test_max_output_tokens_maps_to_continue_message ... ok [INFO] [stdout] test recovery::tests::test_prompt_too_long_maps_to_compact_and_retry ... ok [INFO] [stdout] test recovery::tests::test_rate_limited_gives_up ... ok [INFO] [stdout] test recovery::tests::test_reset_clears_all_attempts ... ok [INFO] [stdout] test recovery::tests::test_stream_interrupted_maps_to_continue_message ... ok [INFO] [stdout] test permission::tests::property_tests::deny_all_mode_always_denies ... ok [INFO] [stdout] test recovery::tests::prop_recovery_escalates_to_give_up_after_max_attempts ... ok [INFO] [stdout] test run_loop::tests::test_accumulate_usage_sums_correctly ... ok [INFO] [stdout] test run_loop::tests::test_approval_handler_allow_continues_run ... ok [INFO] [stdout] test run_loop::tests::test_approval_handler_always_allow_grants_session_permission ... ok [INFO] [stdout] test run_loop::tests::test_approval_handler_deny_injects_denial_result ... ok [INFO] [stdout] test permission::tests::property_tests::static_deny_always_denies ... ok [INFO] [stdout] test run_loop::tests::test_budget_enforcement_in_stream ... ok [INFO] [stdout] test run_loop::tests::test_budget_enforcement_triggers_when_exceeded ... ok [INFO] [stdout] test run_loop::tests::test_budget_not_exceeded_stays_within ... ok [INFO] [stdout] test run_loop::tests::test_build_tool_definitions ... ok [INFO] [stdout] test run_loop::tests::test_cost_accumulates_over_multiple_turns ... ok [INFO] [stdout] test run_loop::tests::test_deny_all_approval_handler_denies_tool_in_non_interactive_mode ... ok [INFO] [stdout] test run_loop::tests::test_deny_all_approval_handler_run_loop_continues_after_denial ... ok [INFO] [stdout] test run_loop::tests::test_extract_text_from_content ... ok [INFO] [stdout] test run_loop::tests::test_guardrail_tripped_in_stream ... ok [INFO] [stdout] test run_loop::tests::test_initialize_state_fresh ... ok [INFO] [stdout] test run_loop::tests::test_initialize_state_items ... ok [INFO] [stdout] test run_loop::tests::test_initialize_state_resume ... ok [INFO] [stdout] test run_loop::tests::test_input_guardrail_passes_allows_run ... ok [INFO] [stdout] test run_loop::tests::test_input_guardrail_trips_on_first_turn ... ok [INFO] [stdout] test run_loop::tests::test_input_guardrails_not_invoked_on_subsequent_turns ... ok [INFO] [stdout] test run_loop::tests::test_input_guardrails_short_circuit_at_first_failure ... ok [INFO] [stdout] test run_loop::tests::test_no_approval_handler_returns_interruption ... ok [INFO] [stdout] test run_loop::tests::test_no_budget_enforcement_when_none ... ok [INFO] [stdout] test run_loop::tests::test_output_guardrail_passes_allows_delivery ... ok [INFO] [stdout] test run_loop::tests::test_output_guardrail_tripped_in_stream ... ok [INFO] [stdout] test run_loop::tests::test_output_guardrail_trips_on_final_output ... ok [INFO] [stdout] test run_loop::tests::test_recovery_connection_error_gives_up_immediately ... ok [INFO] [stdout] test run_loop::tests::test_recovery_exhausted_gives_up_after_max_attempts ... ok [INFO] [stdout] test run_loop::tests::test_recovery_max_tokens_continues_with_prompt ... ok [INFO] [stdout] test run_loop::tests::test_recovery_prompt_too_long_compacts_and_retries ... ok [INFO] [stdout] test run_loop::tests::test_recovery_stream_interrupted_retries_with_continuation ... ok [INFO] [stdout] test run_loop::tests::test_resolve_next_step_content_filter_aborts ... ok [INFO] [stdout] test run_loop::tests::test_resolve_next_step_content_filter_takes_priority_over_max_turns ... ok [INFO] [stdout] test run_loop::tests::test_resolve_next_step_end_turn_final_output ... ok [INFO] [stdout] test run_loop::tests::test_resolve_next_step_max_tokens_recovery_continue_message ... ok [INFO] [stdout] test run_loop::tests::test_resolve_next_step_max_tokens_recovery_escalate ... ok [INFO] [stdout] test run_loop::tests::test_resolve_next_step_max_turns_check ... ok [INFO] [stdout] test run_loop::tests::test_resolve_next_step_permission_deny_aborts ... ok [INFO] [stdout] test run_loop::tests::test_resolve_next_step_permission_interruption ... ok [INFO] [stdout] test run_loop::tests::test_resolve_next_step_stop_sequence_final_output ... ok [INFO] [stdout] test run_loop::tests::test_resolve_next_step_structured_output ... ok [INFO] [stdout] test run_loop::tests::test_resolve_next_step_structured_output_invalid_json ... ok [INFO] [stdout] test run_loop::tests::test_resolve_next_step_tool_use_continue ... ok [INFO] [stdout] test run_loop::tests::test_run_max_turns_reached ... ok [INFO] [stdout] test run_loop::tests::test_run_simple_text_response ... ok [INFO] [stdout] test run_loop::tests::test_run_stream_emits_events ... ok [INFO] [stdout] test run_loop::tests::test_run_with_items_input ... ok [INFO] [stdout] test run_loop::tests::test_run_with_tool_calls ... ok [INFO] [stdout] test run_loop::tests::test_tool_output_to_string ... ok [INFO] [stdout] test settings::tests::end_to_end_load_and_merge ... ok [INFO] [stdout] test settings::tests::load_handles_missing_allow_or_deny_arrays ... ok [INFO] [stdout] test settings::tests::load_ignores_unrecognized_top_level_keys ... ok [INFO] [stdout] test settings::tests::load_invalid_json_returns_default ... ok [INFO] [stdout] test settings::tests::load_missing_file_returns_default ... ok [INFO] [stdout] test settings::tests::load_skips_non_string_entries ... ok [INFO] [stdout] test settings::tests::load_skips_unparseable_entries ... ok [INFO] [stdout] test settings::tests::load_valid_json_no_permissions_key ... ok [INFO] [stdout] test settings::tests::load_valid_settings_with_allow_and_deny ... ok [INFO] [stdout] test settings::tests::merge_compound_patterns_override_correctly ... ok [INFO] [stdout] test settings::tests::merge_deny_wins_within_same_level ... ok [INFO] [stdout] test settings::tests::merge_empty_inputs_returns_empty_policy ... ok [INFO] [stdout] test run_loop::tests::prop_usage_and_cost_accumulation ... ok [INFO] [stdout] test settings::tests::merge_non_conflicting_rules_are_unioned ... ok [INFO] [stdout] test settings::tests::merge_project_overrides_user_for_same_pattern ... ok [INFO] [stdout] test settings::tests::merge_runtime_deny_overrides_runtime_allow_for_same_pattern ... ok [INFO] [stdout] test settings::tests::merge_runtime_overrides_project_and_user ... ok [INFO] [stdout] test settings::tests::merge_runtime_strings_parsed_with_bare_fallback ... ok [INFO] [stdout] test settings::tests::merge_runtime_unparseable_falls_back_to_bare ... ok [INFO] [stdout] test settings::tests::merge_user_rules_preserved_when_no_conflict ... ok [INFO] [stdout] test settings::tests::project_path_concatenates_correctly ... ok [INFO] [stdout] test run_loop::tests::test_accumulate_usage_with_zero_usage ... ok [INFO] [stdout] test run_loop::tests::test_approval_handler_receives_agent_name ... ok [INFO] [stdout] test settings::tests::merge_multiple_levels_with_complex_scenario ... ok [INFO] [stdout] test settings::tests::project_path_returns_correct_path ... ok [INFO] [stdout] test permission::tests::property_tests::static_allow_always_allows ... ok [INFO] [stdout] test settings::tests::property_tests::deny_wins_over_allow_at_same_level ... ok [INFO] [stdout] test settings::tests::property_tests::merge_precedence_highest_level_wins ... ok [INFO] [stdout] test settings::tests::property_tests::merge_project_overrides_user_when_no_runtime ... ok [INFO] [stdout] test profile::tests::profile_config_serialization_roundtrip ... ok [INFO] [stdout] test settings::tests::user_path_returns_some_with_home_dir ... ok [INFO] [stdout] test skill::tests::parse_invalid_yaml ... ok [INFO] [stdout] test skill::tests::parse_missing_frontmatter ... ok [INFO] [stdout] test skill::tests::parse_missing_name_field ... ok [INFO] [stdout] test skill::tests::parse_valid_fork_skill ... ok [INFO] [stdout] test skill::tests::parse_valid_inline_skill ... ok [INFO] [stdout] test settings::tests::property_tests::non_conflicting_rules_are_unioned ... ok [INFO] [stdout] test settings::tests::property_tests::invalid_json_returns_default_without_panic ... ok [INFO] [stdout] test settings::tests::property_tests::invalid_patterns_skipped_valid_preserved ... ok [INFO] [stdout] test settings::tests::property_tests::parsing_preserves_valid_patterns_in_order ... ok [INFO] [stdout] test skill::tests::prop_skill_template_arguments_substituted ... ok [INFO] [stdout] test skill::tests::registry_activate_for_path ... ok [INFO] [stdout] test skill::tests::registry_find_nonexistent ... ok [INFO] [stdout] test skill::tests::registry_load_from_directory ... ok [INFO] [stdout] test skill::tests::registry_load_mixed_formats ... ok [INFO] [stdout] test skill::tests::registry_load_subdirectory_format ... ok [INFO] [stdout] test skill::tests::registry_nonexistent_directory ... ok [INFO] [stdout] test skill::tests::registry_project_takes_precedence ... ok [INFO] [stdout] test skill::tests::registry_skips_invalid_files ... ok [INFO] [stdout] test skill::tests::registry_subdirectory_without_skill_md_is_skipped ... ok [INFO] [stdout] test skill::tests::registry_system_prompt_section_empty ... ok [INFO] [stdout] test skill::tests::registry_system_prompt_section_with_skills ... ok [INFO] [stdout] test skill::tests::render_body_all_variables ... ok [INFO] [stdout] test skill::tests::render_body_empty_arguments ... ok [INFO] [stdout] test skill::tests::render_body_no_variables ... ok [INFO] [stdout] test skill::tests::render_body_unresolved_positional ... ok [INFO] [stdout] test skill::tests::skill_context_enum_equality ... ok [INFO] [stdout] test skill::tests::skill_source_enum_equality ... ok [INFO] [stdout] test skill::tests::skill_tool_fork_execution ... ok [INFO] [stdout] test skill::tests::skill_tool_inline_execution ... ok [INFO] [stdout] test skill::tests::skill_tool_no_arguments ... ok [INFO] [stdout] test state::tests::compaction_state_default ... ok [INFO] [stdout] test state::tests::compaction_state_serialization_roundtrip ... ok [INFO] [stdout] test state::tests::deserialize_empty_bytes_returns_error ... ok [INFO] [stdout] test state::tests::deserialize_malformed_bytes_returns_error ... ok [INFO] [stdout] test state::tests::deserialize_unrecognized_schema_version_returns_error ... ok [INFO] [stdout] test state::tests::deserialize_valid_json_but_wrong_shape_returns_error ... ok [INFO] [stdout] test state::tests::new_defaults_are_correct ... ok [INFO] [stdout] test state::tests::new_sets_schema_version ... ok [INFO] [stdout] test state::tests::run_state_partial_eq_works ... ok [INFO] [stdout] test state::tests::run_state_with_none_session_and_max_turns ... ok [INFO] [stdout] test state::tests::serialize_deserialize_roundtrip_empty ... ok [INFO] [stdout] test state::tests::serialize_deserialize_roundtrip_with_messages ... ok [INFO] [stdout] test skill::tests::prop_skill_template_all_vars_substituted ... ok [INFO] [stdout] test sub_agent::tests::extract_prompt_with_task_object ... ok [INFO] [stdout] test sub_agent::tests::extract_prompt_with_task_string ... ok [INFO] [stdout] test skill::tests::prop_skill_template_skill_dir_substituted ... ok [INFO] [stdout] test sub_agent::tests::extract_prompt_without_task_field ... ok [INFO] [stdout] test sub_agent::tests::prop_cost_accumulation::prop_sub_agent_usage_extraction ... ok [INFO] [stdout] test sub_agent::tests::sub_agent_config_creates_shared_session_grants_store ... ok [INFO] [stdout] test sub_agent::tests::sub_agent_config_no_override ... ok [INFO] [stdout] test sub_agent::tests::sub_agent_config_overrides_max_turns ... ok [INFO] [stdout] test sub_agent::tests::sub_agent_config_sets_agent_name_from_def ... ok [INFO] [stdout] test sub_agent::tests::sub_agent_config_shares_approval_handler_via_arc ... ok [INFO] [stdout] test sub_agent::tests::sub_agent_config_without_handler_has_none ... ok [INFO] [stdout] test sub_agent::tests::sub_agent_tool_approval_is_never ... ok [INFO] [stdout] test sub_agent::tests::sub_agent_tool_as_dyn_tool ... ok [INFO] [stdout] test sub_agent::tests::sub_agent_tool_concurrency_is_safe ... ok [INFO] [stdout] test sub_agent::tests::sub_agent_tool_description_falls_back ... ok [INFO] [stdout] test sub_agent::tests::sub_agent_tool_description_uses_custom ... ok [INFO] [stdout] test sub_agent::tests::sub_agent_tool_execute_background ... ok [INFO] [stdout] test sub_agent::tests::sub_agent_tool_execute_foreground ... ok [INFO] [stdout] test sub_agent::tests::sub_agent_tool_is_send_sync ... ok [INFO] [stdout] test sub_agent::tests::sub_agent_tool_name_falls_back_to_agent_name ... ok [INFO] [stdout] test sub_agent::tests::sub_agent_tool_name_uses_tool_name_field ... ok [INFO] [stdout] test sub_agent::tests::sub_agent_tool_parameters_schema_custom ... ok [INFO] [stdout] test sub_agent::tests::sub_agent_tool_parameters_schema_default ... ok [INFO] [stdout] test sub_agent::tests::sub_agent_usage_from_run_result ... ok [INFO] [stdout] test sub_agent::tests::prop_cost_accumulation::prop_sub_agent_accumulation ... ok [INFO] [stdout] test task_store::tests::error_display_contains_context ... ok [INFO] [stdout] test skill::tests::prop_skill_template_positional_substituted ... ok [INFO] [stdout] test todolist_tool::tests::add_active_form_too_long_returns_error ... ok [INFO] [stdout] test todolist_tool::tests::add_content_too_long_returns_error ... ok [INFO] [stdout] test todolist_tool::tests::add_missing_content_returns_error ... ok [INFO] [stdout] test todolist_tool::tests::add_returns_id ... ok [INFO] [stdout] test todolist_tool::tests::add_with_active_form ... ok [INFO] [stdout] test todolist_tool::tests::clear_completed_removes_only_completed ... ok [INFO] [stdout] test todolist_tool::tests::concurrency_returns_safe ... ok [INFO] [stdout] test todolist_tool::tests::description_mentions_tracking_plans ... ok [INFO] [stdout] test todolist_tool::tests::list_empty_returns_empty_array ... ok [INFO] [stdout] test todolist_tool::tests::list_returns_all_items ... ok [INFO] [stdout] test todolist_tool::tests::missing_action_returns_error ... ok [INFO] [stdout] test todolist_tool::tests::name_returns_todolist ... ok [INFO] [stdout] test todolist_tool::tests::parameters_schema_has_action_enum ... ok [INFO] [stdout] test task_store::tests::todo_item_serialization_round_trip ... ok [INFO] [stdout] test skill::tests::prop_tests::skill_registry_project_takes_precedence_over_user ... ok [INFO] [stdout] test task_store::tests::task_entry_serialization_round_trip ... ok [INFO] [stdout] test sub_agent::prop_tests::prop_sub_agent_starts_with_empty_history ... ok [INFO] [stdout] test todolist_tool::tests::prop_clear_completed_correctness ... ok [INFO] [stdout] test todolist_tool::tests::prop_invalid_action_error ... ok [INFO] [stdout] test todolist_tool::tests::prop_add_round_trip ... ok [INFO] [stdout] test run_loop::tests::prop_budget_enforcement ... ok [INFO] [stdout] test todolist_tool::tests::remove_deletes_item ... ok [INFO] [stdout] test todolist_tool::tests::remove_missing_id_returns_error ... ok [INFO] [stdout] test todolist_tool::tests::remove_nonexistent_id_returns_error ... ok [INFO] [stdout] test todolist_tool::tests::unknown_action_returns_error ... ok [INFO] [stdout] test todolist_tool::tests::update_changes_status ... ok [INFO] [stdout] test todolist_tool::tests::update_invalid_status_returns_error ... ok [INFO] [stdout] test todolist_tool::tests::update_missing_id_returns_error ... ok [INFO] [stdout] test todolist_tool::tests::update_missing_status_returns_error ... ok [INFO] [stdout] test todolist_tool::tests::update_nonexistent_id_returns_error ... ok [INFO] [stdout] test tool::tests::approval_requirement_always ... ok [INFO] [stdout] test tool::tests::approval_requirement_conditional ... ok [INFO] [stdout] test tool::tests::approval_requirement_inequality ... ok [INFO] [stdout] test tool::tests::approval_requirement_never ... ok [INFO] [stdout] test tool::tests::concurrency_enum_debug_clone_copy_eq ... ok [INFO] [stdout] test tool::tests::dangerous_tool_overrides_defaults ... ok [INFO] [stdout] test tool::tests::echo_tool_basic_properties ... ok [INFO] [stdout] test tool::tests::echo_tool_default_implementations ... ok [INFO] [stdout] test tool::tests::echo_tool_execute_invalid_input ... ok [INFO] [stdout] test tool::tests::echo_tool_execute_success ... ok [INFO] [stdout] test tool::tests::shell_tool_dynamic_concurrency ... ok [INFO] [stdout] test tool::tests::shell_tool_execute ... ok [INFO] [stdout] test tool::tests::tool_context_debug_clone ... ok [INFO] [stdout] test tool::tests::tool_output_error_variant ... ok [INFO] [stdout] test tool::tests::tool_output_inequality ... ok [INFO] [stdout] test tool::tests::tool_output_structured_variant ... ok [INFO] [stdout] test tool::tests::tool_output_text_variant ... ok [INFO] [stdout] test tool::tests::tool_trait_is_object_safe ... ok [INFO] [stdout] test tool::tests::tool_trait_send_sync_bounds ... ok [INFO] [stdout] test settings::tests::property_tests::profiles_and_permissions_are_independent ... ok [INFO] [stdout] test todolist_tool::tests::prop_missing_parameter_error ... ok [INFO] [stdout] test todolist_tool::tests::prop_remove_round_trip ... ok [INFO] [stdout] test todolist_tool::tests::prop_update_confirmation ... ok [INFO] [stdout] test todolist_tool::tests::prop_not_found_propagation ... ok [INFO] [stdout] test todolist_tool::tests::prop_list_completeness ... ok [INFO] [stdout] test compaction::session_memory::proptests::prop_preserved_messages_respect_token_limit ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 625 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 18.01s [INFO] [stdout] [INFO] [stderr] Running tests/background_subagent_repro.rs (/opt/rustwide/target/debug/build/agent-core/b25440c32f7eee4c/out/background_subagent_repro-b25440c32f7eee4c) [INFO] [stdout] [INFO] [stdout] running 2 tests [INFO] [stderr] Running tests/compaction_integration.rs (/opt/rustwide/target/debug/build/agent-core/b83e80f9e403da84/out/compaction_integration-b83e80f9e403da84) [INFO] [stdout] test background_sub_agent_completes_in_store ... ok [INFO] [stdout] test parent_run_receives_background_sub_agent_result ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 9 tests [INFO] [stdout] test test_property12_successful_compaction_event_and_state ... ok [INFO] [stdout] test test_property14_system_messages_preserved_tools_compact ... ok [INFO] [stdout] test test_property13_relative_ordering_preserved ... ok [INFO] [stdout] test test_property16_tool_pairs_preserved_in_retained_messages ... ok [INFO] [stdout] test test_property15_summary_insertion_after_last_system_msg ... ok [INFO] [stdout] test prop_system_messages_never_removed ... ok [INFO] [stdout] test prop_successful_compaction_event_and_state ... ok [INFO] [stdout] test prop_relative_ordering_preserved ... ok [INFO] [stderr] Running tests/event_stream_property_tests.rs (/opt/rustwide/target/debug/build/agent-core/1f44b3454fe8e8ee/out/event_stream_property_tests-1f44b3454fe8e8ee) [INFO] [stdout] test prop_tool_pairs_preserved_after_compaction ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.14s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 8 tests [INFO] [stdout] test test_event_stream_budget_exceeded ... ok [INFO] [stdout] test test_event_stream_simple_text_response ... ok [INFO] [stdout] test test_event_stream_max_turns_one ... ok [INFO] [stdout] test test_event_stream_items_input ... ok [INFO] [stdout] test test_event_stream_model_error ... ok [INFO] [stdout] test test_event_stream_parametric_text_responses ... ok [INFO] [stderr] Running tests/executor_property_tests.rs (/opt/rustwide/target/debug/build/agent-core/0ef508c7d6e36608/out/executor_property_tests-0ef508c7d6e36608) [INFO] [stdout] test test_event_stream_single_tool_call ... ok [INFO] [stdout] test test_event_stream_max_turns_reached ... 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 5 tests [INFO] [stdout] test prop_safe_tools_can_run_concurrently ... ok [INFO] [stdout] test prop_drain_completed_preserves_enqueue_order ... ok [INFO] [stdout] test prop_exclusive_tools_never_overlap_with_any_other_tool ... ok [INFO] [stdout] test prop_drain_completed_preserves_order_limited_concurrency ... ok [INFO] [stdout] test prop_drain_completed_preserves_order_sequential ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 37.29s [INFO] [stdout] [INFO] [stderr] Running tests/property_tests.rs (/opt/rustwide/target/debug/build/agent-core/d9a8aefd5eb80588/out/property_tests-d9a8aefd5eb80588) [INFO] [stdout] [INFO] [stdout] running 9 tests [INFO] [stdout] test run_state_deserialize_wrong_schema_version_returns_err ... ok [INFO] [stdout] test usage_serialization_roundtrip ... ok [INFO] [stdout] test stream_chunk_serialization_roundtrip ... ok [INFO] [stdout] test run_state_deserialize_arbitrary_bytes_never_panics ... ok [INFO] [stdout] test run_state_deserialize_wrong_schema_json_returns_err ... ok [INFO] [stdout] test content_block_serialization_roundtrip ... ok [INFO] [stdout] test tool_use_block_serialization_roundtrip ... ok [INFO] [stdout] test message_serialization_roundtrip ... ok [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/build/agent-llm/92ce784668e49fd0/out/agent_llm-92ce784668e49fd0) [INFO] [stdout] test run_state_serialization_roundtrip ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.90s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 152 tests [INFO] [stdout] test anthropic_http::tests::empty_stream_events_received_stays_false ... ok [INFO] [stdout] test anthropic_http::tests::non_html_error_body_passed_through_truncated ... ok [INFO] [stdout] test anthropic_http::tests::html_error_body_without_title_returns_proxy_error ... ok [INFO] [stdout] test anthropic_http::tests::html_error_body_extracts_title ... ok [INFO] [stdout] test anthropic_http::tests::overloaded_error_in_stream_detected ... ok [INFO] [stdout] test anthropic_http::tests::cache_read_input_tokens_populated ... ok [INFO] [stdout] test anthropic_http::tests::premature_stream_termination_flush_emits_message_stop ... ok [INFO] [stdout] test anthropic_http::tests::http_529_returns_rate_limited ... ok [INFO] [stdout] test anthropic_http::tests::ping_event_discarded ... ok [INFO] [stdout] test anthropic_http::tests::interleaved_content_blocks_routed_by_index ... ok [INFO] [stdout] test anthropic_http::tests::malformed_tool_input_json_emits_empty_object ... ok [INFO] [stdout] test anthropic_http::tests::prop_cache_read_tokens_propagation ... ok [INFO] [stdout] test anthropic_http::tests::prop_http_529_treated_as_rate_limited ... ok [INFO] [stdout] test anthropic_http::tests::prop_non_streaming_fallback_on_empty_stream ... ok [INFO] [stdout] test anthropic_http::tests::empty_api_key_construction_succeeds ... ok [INFO] [stdout] test anthropic_http::tests::prop_error_body_truncation ... ok [INFO] [stdout] test anthropic_http::tests::prop_html_error_body_sanitization ... ok [INFO] [stdout] test anthropic_http::tests::prop_overloaded_error_detection_in_stream ... ok [INFO] [stdout] test anthropic_http::tests::prop_rate_limit_retry_after_parsing ... ok [INFO] [stdout] test anthropic_http::tests::prop_rate_limit_default_when_header_absent ... ok [INFO] [stdout] test anthropic_http::tests::prop_retry_after_header_parsed_as_seconds ... ok [INFO] [stdout] test anthropic_http::tests::prop_indexed_content_block_routing ... ok [INFO] [stdout] test anthropic_http::tests::prop_partial_line_buffering_across_chunk_boundaries ... ok [INFO] [stdout] test anthropic_http::tests::prop_stream_idle_timeout_triggers_flush ... ok [INFO] [stdout] test anthropic_http::tests::prop_malformed_sse_lines_do_not_corrupt_state ... ok [INFO] [stdout] test anthropic_http::tests::prop_sse_event_to_stream_chunk_mapping ... ok [INFO] [stdout] test anthropic_http::tests::prop_tool_input_json_accumulation_round_trip ... ok [INFO] [stdout] test anthropic_http::tests::prop_unknown_stop_reason_defaults_to_end_turn ... ok [INFO] [stdout] test anthropic_http::tests::prop_usage_accumulation_across_stream_events ... ok [INFO] [stdout] test anthropic_http::tests::required_headers_present ... ok [INFO] [stdout] test anthropic_http::tests::retry_after_header_parsed_as_seconds ... ok [INFO] [stdout] test anthropic_http::tests::stop_reason_end_turn ... ok [INFO] [stdout] test anthropic_http::tests::stop_reason_max_tokens ... ok [INFO] [stdout] test anthropic_http::tests::stop_reason_stop_sequence ... ok [INFO] [stdout] test anthropic_http::tests::stop_reason_tool_use ... ok [INFO] [stdout] test convert::anthropic::tests::assistant_message_with_tool_use_to_wire ... ok [INFO] [stdout] test convert::anthropic::tests::from_wire_image_block ... ok [INFO] [stdout] test convert::anthropic::tests::from_wire_message_object ... ok [INFO] [stdout] test convert::anthropic::tests::from_wire_missing_tool_use_id_returns_error ... ok [INFO] [stdout] test convert::anthropic::tests::from_wire_text_block ... ok [INFO] [stdout] test convert::anthropic::tests::from_wire_tool_use_block ... ok [INFO] [stdout] test convert::anthropic::tests::from_wire_unknown_type_returns_error ... ok [INFO] [stdout] test convert::anthropic::tests::image_to_wire ... ok [INFO] [stdout] test convert::anthropic::tests::multiple_system_messages_concatenated ... ok [INFO] [stdout] test convert::anthropic::tests::no_system_messages_yields_none ... ok [INFO] [stdout] test convert::anthropic::tests::proptests::prop_anthropic_assistant_roundtrip ... ok [INFO] [stdout] test convert::anthropic::tests::proptests::prop_anthropic_text_and_tool_use_roundtrip ... ok [INFO] [stdout] test convert::anthropic::tests::proptests::prop_anthropic_text_only_roundtrip ... ok [INFO] [stdout] test convert::anthropic::tests::roundtrip_text_and_tool_use ... ok [INFO] [stdout] test convert::anthropic::tests::system_message_extracted_separately ... ok [INFO] [stdout] test convert::anthropic::tests::tool_result_error_to_wire ... ok [INFO] [stdout] test convert::anthropic::tests::tool_result_to_wire ... ok [INFO] [stdout] test convert::anthropic::tests::user_message_to_wire ... ok [INFO] [stdout] test convert::openai::tests::assistant_simple_text_to_wire ... ok [INFO] [stdout] test convert::openai::tests::assistant_with_tool_calls_to_wire ... ok [INFO] [stdout] test convert::openai::tests::from_wire_array_content ... ok [INFO] [stdout] test convert::openai::tests::from_wire_image_url ... ok [INFO] [stdout] test convert::openai::tests::from_wire_missing_tool_call_id_returns_error ... ok [INFO] [stdout] test convert::openai::tests::from_wire_null_content ... ok [INFO] [stdout] test convert::openai::tests::from_wire_simple_text ... ok [INFO] [stdout] test convert::openai::tests::from_wire_unknown_block_type_returns_error ... ok [INFO] [stdout] test convert::openai::tests::from_wire_with_tool_calls ... ok [INFO] [stdout] test convert::openai::tests::proptests::prop_openai_single_text_roundtrip ... ok [INFO] [stdout] test convert::openai::tests::proptests::prop_openai_text_and_tool_calls_roundtrip ... ok [INFO] [stdout] test convert::openai::tests::proptests::prop_openai_tool_calls_only_roundtrip ... ok [INFO] [stdout] test convert::openai::tests::roundtrip_text_message ... ok [INFO] [stdout] test convert::openai::tests::roundtrip_tool_use_message ... ok [INFO] [stdout] test convert::openai::tests::system_message_to_wire ... ok [INFO] [stdout] test convert::openai::tests::tool_result_to_wire ... ok [INFO] [stdout] test convert::openai::tests::user_message_with_image_to_wire ... ok [INFO] [stdout] test convert::openai::tests::user_message_with_text_to_wire ... ok [INFO] [stdout] test model_override::tests::complete_delegates_to_inner ... ok [INFO] [stdout] test model_override::tests::delegated_methods_pass_through ... ok [INFO] [stdout] test model_override::tests::prop_context_window_override_applied ... ok [INFO] [stdout] test model_override::tests::prop_max_output_tokens_override_applied ... ok [INFO] [stdout] test model_override::tests::prop_passthrough_non_overridden_methods ... ok [INFO] [stdout] test model_override::tests::wrap_if_needed_returns_inner_when_no_overrides ... ok [INFO] [stdout] test model_override::tests::wrap_if_needed_wraps_when_both_overrides_present ... ok [INFO] [stdout] test model_override::tests::wrap_if_needed_wraps_when_context_window_override_present ... ok [INFO] [stdout] test model_override::tests::wrap_if_needed_wraps_when_max_output_tokens_override_present ... ok [INFO] [stdout] test openai_responses_http::tests::body_has_instructions_flat_tools_and_reasoning ... ok [INFO] [stdout] test openai_responses_http::tests::input_items_cover_tool_round_trip ... ok [INFO] [stdout] test openai_responses_http::tests::parse_incomplete_max_tokens ... ok [INFO] [stdout] test openai_responses_http::tests::parse_non_streaming_response ... ok [INFO] [stdout] test openai_responses_http::tests::stream_failed_event_yields_error ... ok [INFO] [stdout] test openai_responses_http::tests::stream_text_reasoning_and_tool_call ... ok [INFO] [stdout] test openai_responses_http::tests::temperature_only_sent_when_reasoning_disabled ... ok [INFO] [stdout] test provider::prop_tests::parse_identifies_known_prefixes ... ok [INFO] [stdout] test provider::prop_tests::parse_rejects_unknown_prefixes ... ok [INFO] [stdout] test anthropic_http::tests::prop_temperature_clamping ... ok [INFO] [stdout] test anthropic_http::tests::prop_temperature_absent_when_none ... ok [INFO] [stdout] test anthropic_http::tests::prop_system_prompt_concatenation ... ok [INFO] [stdout] test provider::tests::available_models_returns_empty ... ok [INFO] [stdout] test provider::tests::from_profile_anthropic_succeeds ... ok [INFO] [stdout] test provider::tests::from_profile_openai_rejects_unknown_api ... ok [INFO] [stdout] test provider::tests::from_profile_openai_responses_options ... ok [INFO] [stdout] test provider::tests::from_profile_openai_succeeds ... ok [INFO] [stdout] test provider::tests::from_profile_unknown_provider_error_contains_name ... ok [INFO] [stdout] test provider::tests::from_profile_unknown_provider_returns_error ... ok [INFO] [stdout] test provider::tests::has_any_provider_with_no_keys_returns_false ... ok [INFO] [stdout] test provider::tests::has_any_provider_with_openai_key_returns_true ... ok [INFO] [stdout] test provider::tests::new_with_no_credentials_returns_error ... ok [INFO] [stdout] test provider::tests::new_with_openai_key_succeeds ... ok [INFO] [stdout] test provider::tests::openai_model_stream_returns_connection_error_with_bad_endpoint ... ok [INFO] [stdout] test provider::tests::parse_model_name_colon_only ... ok [INFO] [stdout] test provider::tests::parse_model_name_empty_string ... ok [INFO] [stdout] test provider::tests::parse_model_name_no_prefix ... ok [INFO] [stdout] test provider::tests::parse_model_name_unknown_prefix_treated_as_no_prefix ... ok [INFO] [stdout] test provider::tests::parse_model_name_with_ollama_prefix ... ok [INFO] [stdout] test provider::tests::parse_model_name_with_openai_prefix ... ok [INFO] [stdout] test provider::tests::parse_model_name_with_prefix ... ok [INFO] [stdout] test anthropic_http::tests::prop_model_name_prefix_stripping ... ok [INFO] [stdout] test provider::tests::resolve_no_default_returns_error ... ok [INFO] [stdout] test provider::tests::resolve_prefixed_anthropic_model ... ok [INFO] [stdout] test anthropic_http::tests::prop_request_body_required_fields ... ok [INFO] [stdout] test provider::tests::resolve_unavailable_prefix_returns_error ... ok [INFO] [stdout] test provider::tests::resolve_model_with_colons_in_name ... ok [INFO] [stdout] test provider::tests::resolve_prefixed_openai_model ... ok [INFO] [stdout] test provider::tests::resolve_unprefixed_model_uses_default ... ok [INFO] [stdout] test retry::proptests::zero_jitter_is_deterministic ... ok [INFO] [stdout] test provider::tests::stub_model_metadata ... ok [INFO] [stdout] test retry::tests::compute_backoff_capped_at_max ... ok [INFO] [stdout] test retry::tests::compute_backoff_second_attempt ... ok [INFO] [stdout] test retry::tests::compute_backoff_third_attempt ... ok [INFO] [stdout] test retry::tests::compute_backoff_with_jitter_clamped ... ok [INFO] [stdout] test retry::tests::compute_backoff_with_jitter_deterministic ... ok [INFO] [stdout] test retry::tests::default_retry_config ... ok [INFO] [stdout] test retry::tests::effective_backoff_caps_retry_after ... ok [INFO] [stdout] test retry::tests::effective_backoff_non_rate_limited_uses_exponential ... ok [INFO] [stdout] test retry::tests::effective_backoff_respects_retry_after ... ok [INFO] [stdout] test retry::tests::effective_backoff_zero_retry_after_uses_exponential ... ok [INFO] [stdout] test retry::tests::is_retryable_api_with_non_retryable_status ... ok [INFO] [stdout] test retry::tests::is_retryable_api_with_retryable_status ... ok [INFO] [stdout] test retry::tests::is_retryable_connection ... ok [INFO] [stdout] test retry::tests::is_retryable_custom_status_list ... ok [INFO] [stdout] test retry::tests::is_retryable_max_output_tokens ... ok [INFO] [stdout] test retry::tests::is_retryable_prompt_too_long ... ok [INFO] [stdout] test retry::tests::is_retryable_rate_limited ... ok [INFO] [stdout] test retry::tests::is_retryable_stream_interrupted ... ok [INFO] [stdout] test retry::tests::retry_with_fallback_all_models_exhausted ... ok [INFO] [stdout] test retry::tests::retry_with_fallback_first_attempt_succeeds ... ok [INFO] [stdout] test retry::tests::retry_with_fallback_no_models_returns_error ... ok [INFO] [stdout] test retry::tests::retry_with_fallback_non_retryable_error_no_retry ... ok [INFO] [stdout] test retry::tests::retry_with_fallback_uses_fallback_on_exhaustion ... ok [INFO] [stdout] test retry::proptests::backoff_within_jitter_bounds ... ok [INFO] [stdout] test tests::unified_provider_is_exported ... ok [INFO] [stdout] test retry::tests::compute_backoff_first_attempt ... ok [INFO] [stdout] test anthropic_http::tests::prop_base_url_trailing_slash_normalization ... ok [INFO] [stdout] test anthropic_http::tests::prop_tool_definition_wire_format_mapping ... ok [INFO] [stdout] test provider::prop_tests::prefixed_model_routes_to_correct_provider ... ok [INFO] [stdout] test provider::prop_tests::unprefixed_model_routes_to_default_provider ... ok [INFO] [stdout] test provider::prop_tests::unknown_prefix_treated_as_model_name ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 152 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 26.24s [INFO] [stdout] [INFO] [stderr] Running tests/anthropic_http_props.rs (/opt/rustwide/target/debug/build/agent-llm/e4f33b4143ff4847/out/anthropic_http_props-e4f33b4143ff4847) [INFO] [stdout] [INFO] [stdout] running 10 tests [INFO] [stdout] test connection_failure_returns_connection_error ... ok [INFO] [stdout] test streaming_http_429_returns_rate_limited_error ... ok [INFO] [stdout] test http_429_returns_rate_limited_error ... ok [INFO] [stdout] test html_error_page_returns_sanitized_api_error ... ok [INFO] [stdout] test http_401_returns_api_error ... ok [INFO] [stdout] test http_500_returns_api_error ... ok [INFO] [stdout] test non_streaming_completion_with_mock ... ok [INFO] [stdout] test http_529_returns_rate_limited_error ... ok [INFO] [stdout] test streaming_with_tool_use_interleaved ... ok [INFO] [stdout] test streaming_round_trip_with_mock ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s [INFO] [stdout] [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/build/agent-mcp/faed8a30139ec88b/out/agent_mcp-faed8a30139ec88b) [INFO] [stdout] [INFO] [stdout] running 28 tests [INFO] [stdout] test client::tests::build_list_tools_request_structure ... ok [INFO] [stdout] test client::tests::build_call_tool_request_structure ... ok [INFO] [stdout] test client::tests::mcp_tool_definition_serde ... ok [INFO] [stdout] test client::tests::mcp_tool_wrapper_execute_not_connected ... ok [INFO] [stdout] test client::tests::convert_mcp_tools_produces_correct_count ... ok [INFO] [stdout] test client::tests::mcp_tool_wrapper_properties ... ok [INFO] [stdout] test client::tests::parse_json_rpc_response_error ... ok [INFO] [stdout] test client::tests::mcp_tool_wrapper_execute_connected ... ok [INFO] [stdout] test client::tests::parse_json_rpc_response_malformed ... ok [INFO] [stdout] test client::tests::parse_json_rpc_response_no_result_no_error ... ok [INFO] [stdout] test client::tests::parse_json_rpc_response_success ... ok [INFO] [stdout] test client::tests::stdio_server_close ... ok [INFO] [stdout] test client::tests::stdio_server_accessors ... ok [INFO] [stdout] test client::tests::stdio_server_connect_and_call_tool ... ok [INFO] [stdout] test client::tests::stdio_server_connect_and_list_tools ... ok [INFO] [stdout] test client::tests::stdio_server_name ... ok [INFO] [stdout] test client::tests::stdio_server_not_connected_call_tool ... ok [INFO] [stdout] test client::tests::stdio_server_not_connected_list_tools ... ok [INFO] [stdout] test error::tests::io_error_display ... ok [INFO] [stdout] test error::tests::connection_timeout_display ... ok [INFO] [stdout] test transport::tests::sse_transport_type ... ok [INFO] [stdout] test error::tests::json_rpc_display ... ok [INFO] [stdout] test error::tests::not_connected_display ... ok [INFO] [stdout] test error::tests::protocol_error_display ... ok [INFO] [stdout] test transport::tests::stdio_transport_type ... ok [INFO] [stdout] test transport::tests::http_transport_type ... ok [INFO] [stdout] test transport::tests::transport_is_clone ... ok [INFO] [stdout] test transport::tests::transport_is_debug ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 28 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/debug/build/agent-tools/4c42b20cedbf2155/out/agent_tools-4c42b20cedbf2155) [INFO] [stdout] [INFO] [stdout] running 331 tests [INFO] [stdout] test file_edit::tests::file_edit_tool_properties ... ok [INFO] [stdout] test file_edit::tests::file_edit_tool_missing_old_string ... ok [INFO] [stdout] test file_edit::tests::file_edit_tool_missing_path ... ok [INFO] [stdout] test file_edit::tests::file_edit_tool_missing_new_string ... ok [INFO] [stdout] test file_edit::tests::file_edit_tool_schema_has_required_fields ... ok [INFO] [stdout] test file_edit::tests::file_edit_tool_rejects_empty_old_string ... ok [INFO] [stdout] test file_edit::tests::file_edit_tool_missing_file ... ok [INFO] [stdout] test file_read::tests::file_read_tool_missing_path_field ... ok [INFO] [stdout] test file_edit::tests::file_edit_tool_not_found ... ok [INFO] [stdout] test file_read::tests::file_read_tool_properties ... ok [INFO] [stdout] test file_read::tests::file_read_tool_absolute_path ... ok [INFO] [stdout] test file_edit::tests::file_edit_tool_ambiguous_match_without_replace_all ... ok [INFO] [stdout] test file_edit::tests::file_edit_tool_replace_all_multiple_matches ... ok [INFO] [stdout] test file_read::tests::file_read_tool_schema_has_path ... ok [INFO] [stdout] test file_write::tests::file_write_tool_missing_content ... ok [INFO] [stdout] test file_read::tests::file_read_tool_nonexistent_file ... ok [INFO] [stdout] test file_write::tests::file_write_tool_schema_has_required_fields ... ok [INFO] [stdout] test file_edit::tests::file_edit_tool_replaces_unique_match ... ok [INFO] [stdout] test file_write::tests::file_write_tool_properties ... ok [INFO] [stdout] test file_read::tests::file_read_tool_reads_file ... ok [INFO] [stdout] test glob_tool::tests::glob_tool_properties ... ok [INFO] [stdout] test glob_tool::tests::glob_tool_missing_pattern ... ok [INFO] [stdout] test file_write::tests::file_write_tool_writes_file ... ok [INFO] [stdout] test file_write::tests::file_write_tool_overwrites_existing ... ok [INFO] [stdout] test file_write::tests::file_write_tool_creates_parent_dirs ... ok [INFO] [stdout] test glob_tool::tests::glob_tool_schema_has_pattern ... ok [INFO] [stdout] test file_write::tests::file_write_tool_missing_path ... ok [INFO] [stdout] test glob_tool::tests::glob_tool_no_matches ... ok [INFO] [stdout] test grep_tool::tests::grep_tool_missing_pattern ... ok [INFO] [stdout] test grep_tool::tests::grep_tool_schema_has_pattern ... ok [INFO] [stdout] test glob_tool::tests::glob_tool_finds_files ... ok [INFO] [stdout] test glob_tool::tests::glob_tool_recursive_pattern ... ok [INFO] [stdout] test grep_tool::tests::grep_tool_properties ... ok [INFO] [stdout] test grep_tool::tests::grep_tool_invalid_regex ... ok [INFO] [stdout] test grep_tool::tests::grep_tool_no_matches ... ok [INFO] [stdout] test grep_tool::tests::grep_tool_single_file_path ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_blockquote_empty_content ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_blockquote_filter_matches ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_blockquote_filter_rejects_non_blockquote ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_blockquote_multiline ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_blockquote_single_line ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_blockquote_trims_surrounding_whitespace ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_blockquote_with_empty_line ... ok [INFO] [stdout] test grep_tool::tests::grep_tool_finds_matching_lines ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_builtin_rules_blockquote_matches ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_builtin_rules_emphasis_matches ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_builtin_rules_heading_matches ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_builtin_rules_horizontal_rule_matches ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_builtin_rules_image_matches ... ok [INFO] [stdout] test grep_tool::tests::grep_tool_with_include_filter ... ok [INFO] [stdout] test grep_tool::tests::grep_tool_regex_pattern ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_builtin_rules_inline_code_matches ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_builtin_rules_list_item_matches ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_builtin_rules_list_matches ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_builtin_rules_line_break_matches ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_builtin_rules_inline_link_matches ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_builtin_rules_paragraph_matches ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_builtin_rules_returns_thirteen_rules ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_emphasis_empty_content_returns_empty ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_emphasis_filter_matches_em ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_emphasis_filter_matches_i ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_emphasis_filter_rejects_non_emphasis ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_emphasis_wraps_content ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_fenced_code_block_even_longer_fence ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_emphasis_custom_delimiter ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_fenced_code_block_filter_matches_pre_with_code_child ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_fenced_code_block_filter_rejects_non_fenced_style ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_fenced_code_block_filter_rejects_pre_without_code_child ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_fenced_code_block_longer_fence_for_backticks_in_content ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_fenced_code_block_simple ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_builtin_rules_strong_matches ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_fenced_code_block_tilde_fence_char ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_fenced_code_block_strips_trailing_newlines ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_fenced_code_block_with_multiple_classes ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_heading_atx_style ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_heading_empty_content ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_builtin_rules_code_block_matches ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_fenced_code_block_tilde_fence_longer_for_tildes_in_content ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_heading_filter_matches_h1_through_h6 ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_fenced_code_block_with_language ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_heading_setext_falls_back_to_atx_for_h3_plus ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_heading_filter_rejects_non_heading ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_heading_setext_style_h1 ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_heading_setext_style_h2 ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_heading_trims_content ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_horizontal_rule_custom_hr_string ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_horizontal_rule_default_output ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_horizontal_rule_filter_rejects_non_hr ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_horizontal_rule_filter_matches_hr ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_image_escapes_src_parens ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_image_empty_src_returns_empty ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_image_escapes_alt_special_chars ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_image_no_alt_uses_empty ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_image_simple ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_image_with_title ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_inline_code_backtick_in_content_uses_double ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_image_filter_matches_img ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_image_filter_rejects_non_img ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_image_escapes_title_quotes ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_inline_code_empty_returns_empty ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_inline_code_filter_rejects_code_inside_pre ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_inline_code_double_backtick_in_content_uses_triple ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_inline_code_normalizes_newlines ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_inline_code_simple ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_inline_code_single_space_no_padding ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_inline_code_ends_with_backtick_adds_space ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_inline_code_starts_and_ends_with_space_adds_padding ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_inline_code_filter_matches_code_not_in_pre ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_inline_code_starts_with_backtick_adds_space ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_inline_link_escapes_destination_parens ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_inline_link_filter_matches_a_with_href ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_inline_link_filter_rejects_a_without_href ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_inline_link_simple ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_inline_link_with_spaces_in_url ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_inline_link_with_title ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_line_break_custom_br ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_inline_code_filter_rejects_non_code ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_line_break_default_output ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_line_break_filter_rejects_non_br ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_list_filter_matches_ol ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_list_filter_matches_ul ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_list_filter_rejects_non_list ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_list_item_custom_bullet_marker ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_list_item_filter_matches_li ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_list_item_filter_rejects_non_li ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_list_item_multiline_indentation ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_list_item_multiline_with_empty_line ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_line_break_filter_matches_br ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_inline_link_escapes_title_quotes ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_inline_link_filter_rejects_reference_style ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_list_item_ordered_with_start_attr ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_list_item_unordered_bullet ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_list_replacement_nested_last_child ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_list_replacement_nested_not_last_child ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_paragraph_filter_matches_p ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_paragraph_filter_rejects_non_p ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_paragraph_replacement_trims_content ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_list_item_unordered_last_item_no_trailing_newline ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_list_replacement_top_level ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_paragraph_replacement_wraps_content ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_strong_custom_delimiter ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_strong_filter_matches_strong ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_strong_filter_rejects_non_strong ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_strong_wraps_content ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_list_item_ordered_numbering ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_strong_empty_content_returns_empty ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::test_strong_filter_matches_b ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::prop_ordered_list_respects_start_attr ... ok [INFO] [stdout] test html_to_markdown::escape::tests::test_angle_bracket_escaped_always ... ok [INFO] [stdout] test html_to_markdown::escape::tests::test_empty_input ... ok [INFO] [stdout] test html_to_markdown::escape::tests::test_escape_line_start_blockquote ... ok [INFO] [stdout] test html_to_markdown::escape::tests::test_escape_line_start_heading ... ok [INFO] [stdout] test html_to_markdown::escape::tests::test_escape_line_start_list ... ok [INFO] [stdout] test html_to_markdown::escape::tests::test_escape_link_destination_basic ... ok [INFO] [stdout] test html_to_markdown::escape::tests::test_escape_link_title_basic ... ok [INFO] [stdout] test html_to_markdown::escape::tests::test_escape_multiline ... ok [INFO] [stdout] test html_to_markdown::escape::tests::test_escape_setext_heading ... ok [INFO] [stdout] test html_to_markdown::escape::tests::test_escape_special_chars ... ok [INFO] [stdout] test html_to_markdown::escape::tests::test_escape_tilde_fence ... ok [INFO] [stdout] test html_to_markdown::escape::tests::test_no_special_chars ... ok [INFO] [stdout] test html_to_markdown::node_info::tests::test_block_elements_classification ... ok [INFO] [stdout] test html_to_markdown::node_info::tests::test_flanking_whitespace ... ok [INFO] [stdout] test html_to_markdown::node_info::tests::test_meaningful_when_blank ... ok [INFO] [stdout] test html_to_markdown::node_info::tests::test_node_info_construction_and_accessors ... ok [INFO] [stdout] test html_to_markdown::node_info::tests::test_node_info_inside_pre ... ok [INFO] [stdout] test html_to_markdown::node_info::tests::test_node_info_last_child ... ok [INFO] [stdout] test html_to_markdown::node_info::tests::test_void_elements ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::prop_inline_code_delimiter_avoids_conflict ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::prop_fence_longer_than_content_backticks ... ok [INFO] [stdout] test html_to_markdown::commonmark::tests::prop_heading_level_maps_to_hash_count ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_conversion_rule_custom_append ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_conversion_rule_default_append ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_conversion_rule_filter_and_replacement ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_named_rule_new ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_named_rule_send_sync ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_rule_filter_predicate ... ok [INFO] [stdout] test html_to_markdown::rules::tests::prop_tests::prop_added_rule_overrides_initial_rules ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_rule_filter_tag ... ok [INFO] [stdout] test html_to_markdown::escape::tests::prop_escape_never_shortens ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_rule_filter_tags ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_ruleset_add_keep_inserts_at_front ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_ruleset_add_keep_rule ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_ruleset_add_remove_with_tags_filter ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_ruleset_add_remove_inserts_at_front ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_ruleset_add_remove_rule ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_ruleset_add_rule_inserts_at_front ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_ruleset_apply_rule_blank_block_node ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_ruleset_apply_rule_blank_inline_node ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_ruleset_apply_rule_default_block ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_ruleset_apply_rule_default_inline ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_ruleset_apply_rule_primary_rule_matches ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_ruleset_collect_appends ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_ruleset_collect_appends_empty ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_ruleset_later_added_rule_matches_first ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_ruleset_new_creates_empty_keep_remove ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_ruleset_predicate_remove_rule ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_ruleset_priority_blank_over_all ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_ruleset_priority_keep_over_remove ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_ruleset_priority_primary_over_keep ... ok [INFO] [stdout] test html_to_markdown::escape::tests::prop_escape_covers_all_special_chars ... ok [INFO] [stdout] test html_to_markdown::rules::tests::prop_tests::prop_later_added_rules_have_priority ... ok [INFO] [stdout] test html_to_markdown::tests::test_add_rule_overrides_builtin ... ok [INFO] [stdout] test html_to_markdown::tests::test_all_disallowed_elements_removed ... ok [INFO] [stdout] test html_to_markdown::tests::test_compute_flanking_whitespace_both ... ok [INFO] [stdout] test html_to_markdown::tests::test_compute_flanking_whitespace_empty ... ok [INFO] [stdout] test html_to_markdown::tests::test_compute_flanking_whitespace_all_whitespace ... ok [INFO] [stdout] test html_to_markdown::escape::tests::prop_escape_neutralizes_line_start_patterns ... ok [INFO] [stdout] test html_to_markdown::tests::test_compute_flanking_whitespace_no_whitespace ... ok [INFO] [stdout] test html_to_markdown::rules::tests::test_ruleset_with_commonmark_rules ... ok [INFO] [stdout] test html_to_markdown::tests::test_convert_blockquote ... ok [INFO] [stdout] test html_to_markdown::tests::test_convert_code_block ... ok [INFO] [stdout] test html_to_markdown::tests::test_convert_emphasis ... ok [INFO] [stdout] test html_to_markdown::tests::test_convert_empty_input ... ok [INFO] [stdout] test html_to_markdown::tests::test_convert_h2 ... ok [INFO] [stdout] test html_to_markdown::tests::test_convert_heading ... ok [INFO] [stdout] test html_to_markdown::tests::test_compute_flanking_whitespace_trailing ... ok [INFO] [stdout] test html_to_markdown::rules::tests::prop_tests::prop_last_added_rule_always_wins ... ok [INFO] [stdout] test html_to_markdown::tests::test_convert_horizontal_rule ... ok [INFO] [stdout] test html_to_markdown::tests::test_convert_inline_code ... ok [INFO] [stdout] test html_to_markdown::tests::test_convert_inline_link ... ok [INFO] [stdout] test html_to_markdown::tests::test_convert_image ... ok [INFO] [stdout] test html_to_markdown::tests::test_convert_ordered_list ... ok [INFO] [stdout] test html_to_markdown::tests::test_convert_simple_paragraph ... ok [INFO] [stdout] test html_to_markdown::escape::tests::prop_escape_preserves_all_content ... ok [INFO] [stdout] test html_to_markdown::tests::test_convert_whitespace_collapsing ... ok [INFO] [stdout] test html_to_markdown::tests::test_convert_unordered_list ... ok [INFO] [stdout] test html_to_markdown::tests::test_convert_line_break ... ok [INFO] [stdout] test html_to_markdown::tests::test_disallowed_elements_dont_affect_other_content ... ok [INFO] [stdout] test html_to_markdown::tests::test_is_ancestor_pre_in_pre ... ok [INFO] [stdout] test html_to_markdown::tests::test_keep_preserves_content ... ok [INFO] [stdout] test html_to_markdown::tests::test_is_ancestor_pre_not_in_pre ... ok [INFO] [stdout] test html_to_markdown::tests::test_post_process_trims_leading_newlines ... ok [INFO] [stdout] test html_to_markdown::tests::test_remove_produces_empty_output ... ok [INFO] [stdout] test html_to_markdown::tests::test_compute_flanking_whitespace_leading ... ok [INFO] [stdout] test html_to_markdown::tests::test_post_process_trims_trailing_whitespace ... ok [INFO] [stdout] test html_to_markdown::tests::test_disallowed_elements_nested_content_suppressed ... ok [INFO] [stdout] test html_to_markdown::tests::test_remove_with_tags_filter ... ok [INFO] [stdout] test html_to_markdown::tests::test_convert_nested_structure ... ok [INFO] [stdout] test html_to_markdown::tests::test_convert_code_block_with_language ... ok [INFO] [stdout] test html_to_markdown::tests::test_smart_join_empty_right ... ok [INFO] [stdout] test html_to_markdown::tests::test_smart_join_empty_left ... ok [INFO] [stdout] test html_to_markdown::tests::test_smart_join_leading_newline_in_right ... ok [INFO] [stdout] test html_to_markdown::tests::test_smart_join_many_newlines_capped ... ok [INFO] [stdout] test html_to_markdown::tests::test_script_inline_with_surrounding_text ... ok [INFO] [stdout] test html_to_markdown::tests::test_smart_join_no_newlines ... ok [INFO] [stdout] test html_to_markdown::tests::test_smart_join_both_empty ... ok [INFO] [stdout] test html_to_markdown::tests::test_smart_join_trailing_newline_in_left ... ok [INFO] [stdout] test html_to_markdown::tests::test_smart_join_two_newlines_max ... ok [INFO] [stdout] test html_to_markdown::tests::test_smart_join_caps_at_two ... ok [INFO] [stdout] test html_to_markdown::tests::test_style_element_removed ... ok [INFO] [stdout] test html_to_markdown::tests::test_smart_join_uses_max_of_both ... ok [INFO] [stdout] test html_to_markdown::tests::test_use_plugin_can_add_remove_and_keep ... ok [INFO] [stdout] test html_to_markdown::tests::test_script_element_removed ... ok [INFO] [stdout] test html_to_markdown::tests::test_use_plugin_adds_multiple_rules ... ok [INFO] [stdout] test html_to_markdown::whitespace::tests::test_collapse_empty_text_omitted ... ok [INFO] [stdout] test html_to_markdown::whitespace::tests::test_collapse_consecutive_spaces_between_inline ... ok [INFO] [stdout] test html_to_markdown::whitespace::tests::test_collapse_multiple_inline_nodes ... ok [INFO] [stdout] test html_to_markdown::whitespace::tests::test_collapse_preserves_pre_content ... ok [INFO] [stdout] test html_to_markdown::whitespace::tests::test_collapse_runs_basic ... ok [INFO] [stdout] test html_to_markdown::whitespace::tests::test_collapse_runs_tabs_and_newlines ... ok [INFO] [stdout] test html_to_markdown::whitespace::tests::test_collapse_newlines_in_inline_text ... ok [INFO] [stdout] test html_to_markdown::whitespace::tests::test_collapse_simple_paragraph ... ok [INFO] [stdout] test html_to_markdown::whitespace::tests::test_collapse_strips_leading_after_block ... ok [INFO] [stdout] test html_to_markdown::whitespace::tests::test_collapsed_document_get_text ... ok [INFO] [stdout] test html_to_markdown::whitespace::tests::test_collapsed_document_is_empty ... ok [INFO] [stdout] test html_to_markdown::whitespace::tests::test_collapse_strips_trailing_before_block ... ok [INFO] [stdout] test html_to_markdown::whitespace::tests::test_is_inside_pre_nested ... ok [INFO] [stdout] test html_to_markdown::whitespace::tests::test_is_inside_pre_false_for_normal ... ok [INFO] [stdout] test shell::tests::shell_tool_custom_timeout ... ok [INFO] [stdout] test shell::tests::shell_tool_execute_missing_command ... ok [INFO] [stdout] test shell::tests::shell_tool_execute_success ... ok [INFO] [stdout] test shell::tests::shell_tool_properties ... ok [INFO] [stdout] test shell::tests::shell_tool_execute_nonzero_exit ... ok [INFO] [stdout] test shell::tests::shell_tool_schema_has_command ... ok [INFO] [stdout] test shell::tests::shell_tool_uses_working_dir ... ok [INFO] [stdout] test html_to_markdown::tests::prop_smart_join_never_exceeds_two_newlines ... ok [INFO] [stdout] test html_to_markdown::tests::prop_removed_elements_produce_empty_output ... ok [INFO] [stdout] test web_fetch::tests::cache_different_urls_are_independent ... ok [INFO] [stdout] test web_fetch::tests::cache_fresh_entry_returns_content ... ok [INFO] [stdout] test web_fetch::tests::different_subdomains ... ok [INFO] [stdout] test web_fetch::tests::different_hosts ... ok [INFO] [stdout] test web_fetch::tests::html_body_gets_converted ... ok [INFO] [stdout] test web_fetch::tests::non_html_body_passes_through_unchanged ... ok [INFO] [stdout] test web_fetch::tests::non_html_content_type_detection ... ok [INFO] [stdout] test html_to_markdown::whitespace::tests::prop_pre_content_preserved_verbatim ... ok [INFO] [stdout] test web_fetch::tests::cache_expired_entry_returns_none ... ok [INFO] [stdout] test web_fetch::tests::prop_same_host_www_stripping ... ok [INFO] [stdout] test html_to_markdown::whitespace::tests::prop_collapse_is_idempotent ... ok [INFO] [stdout] test web_fetch::tests::prop_same_host_symmetric ... ok [INFO] [stdout] test web_fetch::tests::same_host_both_www ... ok [INFO] [stdout] test web_fetch::tests::same_host_case_insensitive ... ok [INFO] [stdout] test web_fetch::tests::same_host_strips_www ... ok [INFO] [stdout] test web_fetch::tests::truncate_content_at_limit ... ok [INFO] [stdout] test html_to_markdown::whitespace::tests::prop_collapse_never_increases_length ... ok [INFO] [stdout] test web_fetch::tests::truncate_content_over_limit ... ok [INFO] [stdout] test web_fetch::tests::truncate_content_under_limit ... ok [INFO] [stdout] test web_fetch::tests::prop_http_upgraded_to_https ... ok [INFO] [stdout] test web_fetch::tests::validate_url_http_upgraded_to_https ... ok [INFO] [stdout] test web_fetch::tests::validate_url_https_unchanged ... ok [INFO] [stdout] test web_fetch::tests::validate_url_malformed ... ok [INFO] [stdout] test web_fetch::tests::validate_url_no_dot_in_hostname ... ok [INFO] [stdout] test web_fetch::tests::validate_url_too_long ... ok [INFO] [stdout] test web_fetch::tests::validate_url_valid_with_subdomain ... ok [INFO] [stdout] test web_fetch::tests::validate_url_with_credentials ... ok [INFO] [stdout] test web_fetch::tests::validate_url_with_username_only ... ok [INFO] [stdout] test web_search::tests::parse_brave_results_empty_results_array ... ok [INFO] [stdout] test web_search::tests::parse_brave_results_missing_description ... ok [INFO] [stdout] test web_search::tests::parse_brave_results_missing_results_key ... ok [INFO] [stdout] test web_search::tests::parse_brave_results_missing_web_key ... ok [INFO] [stdout] test web_search::tests::parse_brave_results_null_json ... ok [INFO] [stdout] test web_search::tests::parse_brave_results_skips_items_missing_title ... ok [INFO] [stdout] test web_search::tests::parse_brave_results_skips_items_missing_url ... ok [INFO] [stdout] test web_search::tests::parse_brave_results_with_full_response ... ok [INFO] [stdout] test web_search::tests::web_search_tool_concurrency_is_safe ... ok [INFO] [stdout] test web_fetch::tests::truncate_content_multibyte_chars ... ok [INFO] [stdout] test web_search::tests::web_search_tool_execute_default_count_is_10 ... ok [INFO] [stdout] test web_search::tests::web_search_tool_execute_empty_results ... ok [INFO] [stdout] test web_search::tests::web_search_tool_execute_missing_query_returns_invalid_input ... ok [INFO] [stdout] test web_search::tests::web_search_tool_execute_propagates_provider_error ... ok [INFO] [stdout] test web_search::tests::web_search_tool_execute_respects_count_param ... ok [INFO] [stdout] test web_search::tests::web_search_tool_execute_returns_structured_json_array ... ok [INFO] [stdout] test web_fetch::tests::cache_round_trip_returns_identical_content ... ok [INFO] [stdout] test web_search::tests::web_search_tool_name ... ok [INFO] [stdout] test web_search::tests::web_search_tool_parameters_schema_has_required_query ... ok [INFO] [stdout] test html_to_markdown::whitespace::tests::prop_no_consecutive_spaces_outside_pre ... ok [INFO] [stdout] test web_search::tests::web_search_tool_timeout_is_30_seconds ... ok [INFO] [stdout] test web_search::tests::web_search_tool_description ... ok [INFO] [stdout] test web_search::tests::brave_search_provider_new_stores_api_key ... ok [INFO] [stdout] test web_fetch::tests::prop_truncation_preserves_under_limit ... ok [INFO] [stdout] test web_fetch::tests::prop_oversized_urls_rejected ... ok [INFO] [stdout] test web_fetch::tests::prop_truncation_adds_notice_over_limit ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 331 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.73s [INFO] [stdout] [INFO] [stderr] Doc-tests agent_core [INFO] [stdout] [INFO] [stdout] running 7 tests [INFO] [stdout] test crates/agent-core/src/agent.rs - agent::Agent (line 100) ... ignored [INFO] [stdout] test crates/agent-core/src/permission.rs - permission::PermissionEngine (line 66) ... ok [INFO] [stdout] test crates/agent-core/src/pattern.rs - pattern::ToolPattern::matches (line 138) ... ok [INFO] [stdout] test crates/agent-core/src/pattern.rs - pattern::ToolPattern::parse (line 57) ... ok [INFO] [stdout] test crates/agent-core/src/pattern.rs - pattern::ToolPattern (line 22) ... ok [INFO] [stdout] test crates/agent-core/src/pattern.rs - pattern::extract_primary_arg (line 194) ... ok [INFO] [stdout] test crates/agent-core/src/pattern.rs - pattern::glob_matches (line 232) ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 6 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.65s [INFO] [stdout] [INFO] [stderr] Doc-tests agent_llm [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 agent_mcp [INFO] [stdout] [INFO] [stdout] running 1 test [INFO] [stdout] test crates/agent-mcp/src/lib.rs - (line 15) ... ignored [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 agent_tools [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] running `Command { std: "docker" "inspect" "b7b0f8b2cc978832bd59c6046bbf6a72a524f1754c1e30855352c75638796a58", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "b7b0f8b2cc978832bd59c6046bbf6a72a524f1754c1e30855352c75638796a58", kill_on_drop: false }` [INFO] [stdout] b7b0f8b2cc978832bd59c6046bbf6a72a524f1754c1e30855352c75638796a58