[INFO] fetching crate whet 0.2.0...
[INFO] testing whet-0.2.0 against 1.99.0-beta.8 for beta-1.100-2
[INFO] extracting crate whet 0.2.0 into /workspace/builds/worker-1-tc1/source
[INFO] started tweaking crates.io crate whet 0.2.0
[INFO] removed 0 missing tests
[INFO] finished tweaking crates.io crate whet 0.2.0
[INFO] tweaked toml for crates.io crate whet 0.2.0 written to /workspace/builds/worker-1-tc1/source/Cargo.toml
[INFO] validating manifest of crates.io crate whet 0.2.0 on toolchain 1.99.0-beta.8
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate whet 0.2.0 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.8" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded endian-type v0.1.2
[INFO] [stderr]   Downloaded fd-lock v4.0.4
[INFO] [stderr]   Downloaded rustyline v15.0.0
[INFO] [stderr]   Downloaded nibble_vec v0.1.0
[INFO] [stderr]   Downloaded clap_builder v4.5.59
[INFO] [stderr]   Downloaded radix_trie v0.2.1
[INFO] [stderr]   Downloaded clap v4.5.59
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3111399a4047eeb3a02b7a90e478d715f38a8c6669b5c4b49d30a17385265909" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] bca50ba8c47d7b17d811acef68055508b3776f30da397d64a5864e62d7cd692e
[INFO] running `Command { std: "docker" "start" "bca50ba8c47d7b17d811acef68055508b3776f30da397d64a5864e62d7cd692e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "bca50ba8c47d7b17d811acef68055508b3776f30da397d64a5864e62d7cd692e", 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" "bca50ba8c47d7b17d811acef68055508b3776f30da397d64a5864e62d7cd692e" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "bca50ba8c47d7b17d811acef68055508b3776f30da397d64a5864e62d7cd692e", 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" "bca50ba8c47d7b17d811acef68055508b3776f30da397d64a5864e62d7cd692e" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.182
[INFO] [stderr]    Compiling cc v1.2.56
[INFO] [stderr]    Compiling http v1.4.0
[INFO] [stderr]    Compiling zerocopy v0.8.39
[INFO] [stderr]    Compiling rustix v1.1.3
[INFO] [stderr]    Compiling syn v2.0.116
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling rustls v0.23.36
[INFO] [stderr]    Compiling getrandom v0.4.1
[INFO] [stderr]    Compiling futures-channel v0.3.32
[INFO] [stderr]    Compiling nix v0.29.0
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling anstyle v1.0.13
[INFO] [stderr]    Compiling indexmap v2.13.0
[INFO] [stderr]    Compiling nibble_vec v0.1.0
[INFO] [stderr]    Compiling clap_lex v1.0.0
[INFO] [stderr]    Compiling endian-type v0.1.2
[INFO] [stderr]    Compiling winnow v0.7.14
[INFO] [stderr]    Compiling anstream v0.6.21
[INFO] [stderr]    Compiling iri-string v0.7.10
[INFO] [stderr]    Compiling radix_trie v0.2.1
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling home v0.5.12
[INFO] [stderr]    Compiling shell-words v1.1.1
[INFO] [stderr]    Compiling fallible-streaming-iterator v0.1.9
[INFO] [stderr]    Compiling fallible-iterator v0.3.0
[INFO] [stderr]    Compiling colored v3.1.1
[INFO] [stderr]    Compiling clap_builder v4.5.59
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling libsqlite3-sys v0.30.1
[INFO] [stderr]    Compiling socket2 v0.6.2
[INFO] [stderr]    Compiling mio v1.1.1
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling console v0.15.11
[INFO] [stderr]    Compiling dirs-sys v0.5.0
[INFO] [stderr]    Compiling uuid v1.21.0
[INFO] [stderr]    Compiling wait-timeout v0.2.1
[INFO] [stderr]    Compiling fd-lock v4.0.4
[INFO] [stderr]    Compiling tokio v1.49.0
[INFO] [stderr]    Compiling tempfile v3.25.0
[INFO] [stderr]    Compiling dirs v6.0.0
[INFO] [stderr]    Compiling rustyline v15.0.0
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling clap_derive v4.5.55
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]    Compiling rustls-webpki v0.103.9
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling hashbrown v0.14.5
[INFO] [stderr]    Compiling hashlink v0.9.1
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling dialoguer v0.11.0
[INFO] [stderr]    Compiling zerofrom v0.1.6
[INFO] [stderr]    Compiling yoke v0.8.1
[INFO] [stderr]    Compiling zerovec v0.11.5
[INFO] [stderr]    Compiling zerotrie v0.2.3
[INFO] [stderr]    Compiling clap v4.5.59
[INFO] [stderr]    Compiling tinystr v0.8.2
[INFO] [stderr]    Compiling potential_utf v0.1.4
[INFO] [stderr]    Compiling icu_collections v2.1.1
[INFO] [stderr]    Compiling icu_locale_core v2.1.1
[INFO] [stderr]    Compiling hyper v1.8.1
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling chrono v0.4.43
[INFO] [stderr]    Compiling icu_provider v2.1.1
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling tower-http v0.6.8
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling icu_normalizer v2.1.1
[INFO] [stderr]    Compiling icu_properties v2.1.2
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling hyper-rustls v0.27.7
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling rusqlite v0.32.1
[INFO] [stderr]    Compiling whet v0.2.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 39.10s
[INFO] running `Command { std: "docker" "inspect" "bca50ba8c47d7b17d811acef68055508b3776f30da397d64a5864e62d7cd692e", 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" "bca50ba8c47d7b17d811acef68055508b3776f30da397d64a5864e62d7cd692e" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling whet v0.2.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 10.69s
[INFO] running `Command { std: "docker" "inspect" "bca50ba8c47d7b17d811acef68055508b3776f30da397d64a5864e62d7cd692e", 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" "bca50ba8c47d7b17d811acef68055508b3776f30da397d64a5864e62d7cd692e" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.48s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/whet-744fed089eb637f3)
[INFO] [stdout] 
[INFO] [stdout] running 683 tests
[INFO] [stdout] test agent::display::tests::edit_diff_multi_line_replacement ... ok
[INFO] [stdout] test agent::display::tests::edit_diff_donates_slack_when_one_side_short ... ok
[INFO] [stdout] test agent::display::tests::edit_diff_max_lines_one_keeps_a_single_side_visible ... ok
[INFO] [stdout] test agent::display::tests::edit_diff_max_lines_zero_does_not_panic ... ok
[INFO] [stdout] test agent::display::tests::edit_diff_simple_single_line ... ok
[INFO] [stdout] test agent::display::tests::edit_diff_empty_new_means_pure_deletion ... ok
[INFO] [stdout] test agent::display::tests::spinner_frame_at_zero_is_first_frame ... ok
[INFO] [stdout] test agent::display::tests::spinner_frame_below_first_tick_is_first_frame ... ok
[INFO] [stdout] test agent::display::tests::repo_map_compact ... ok
[INFO] [stdout] test agent::display::tests::spinner_frame_cycles_through_all_frames ... ok
[INFO] [stdout] test agent::display::tests::spinner_frame_wraps_after_full_rotation ... ok
[INFO] [stdout] test agent::display::tests::spinner_no_op_when_not_tty ... ok
[INFO] [stdout] test agent::display::tests::spinner_stop_is_idempotent ... ok
[INFO] [stdout] test agent::display::tests::truncation_is_char_boundary_safe ... ok
[INFO] [stdout] test agent::display::tests::unified_diff_excerpt_empty_input ... ok
[INFO] [stdout] test agent::display::tests::unified_diff_excerpt_passthrough_when_short ... ok
[INFO] [stdout] test agent::display::tests::unified_diff_excerpt_truncates_when_long ... ok
[INFO] [stdout] test agent::display::tests::unknown_tool_falls_back_to_name_and_short_args ... ok
[INFO] [stdout] test agent::display::tests::unknown_tool_with_empty_args_renders_empty_parens ... ok
[INFO] [stdout] test agent::display::tests::does_not_include_legacy_tool_prefix ... ok
[INFO] [stdout] test agent::display::tests::edit_diff_empty_old_means_pure_insertion ... ok
[INFO] [stdout] test agent::display::tests::write_file_compact ... ok
[INFO] [stdout] test agent::doctor::tests::classify_ollama_response_pass_warn_fail ... ok
[INFO] [stdout] test agent::display::tests::web_fetch_and_search_compact ... ok
[INFO] [stdout] test agent::display::tests::apply_diff_compact_uses_path_when_present ... ok
[INFO] [stdout] test agent::display::tests::edit_diff_truncates_each_side_when_huge ... ok
[INFO] [stdout] test agent::display::tests::edit_file_compact ... ok
[INFO] [stdout] test agent::display::tests::git_compact ... ok
[INFO] [stdout] test agent::display::tests::grep_compact_with_path_and_without ... ok
[INFO] [stdout] test agent::display::tests::list_dir_compact_with_and_without_path ... ok
[INFO] [stdout] test agent::display::tests::missing_required_arg_does_not_panic ... ok
[INFO] [stdout] test agent::doctor::tests::config_parses_fail_on_broken_toml ... ok
[INFO] [stdout] test agent::doctor::tests::model_present_fail_when_explicit_tag_does_not_match_latest ... ok
[INFO] [stdout] test agent::doctor::tests::model_present_fail_when_missing ... ok
[INFO] [stdout] test agent::doctor::tests::model_present_pass ... ok
[INFO] [stdout] test agent::doctor::tests::format_row_uses_correct_marks ... ok
[INFO] [stdout] test agent::doctor::tests::mcp_binaries_fail_when_one_missing ... ok
[INFO] [stdout] test agent::doctor::tests::mcp_binaries_pass_when_no_servers ... ok
[INFO] [stdout] test agent::doctor::tests::model_present_does_not_match_substring_of_other_model_name ... ok
[INFO] [stdout] test agent::display::tests::read_file_compact ... ok
[INFO] [stdout] test agent::doctor::tests::model_present_pass_with_implicit_latest_tag ... ok
[INFO] [stdout] test agent::doctor::tests::overall_exit_code_is_one_when_any_fail ... ok
[INFO] [stdout] test agent::doctor::tests::overall_exit_code_is_zero_when_only_pass_or_warn ... ok
[INFO] [stdout] test agent::doctor::tests::run_all_checks_active_model_not_config_default ... ok
[INFO] [stdout] test agent::doctor::tests::run_all_succeeds_with_mocked_ollama_and_tempdir ... ok
[INFO] [stdout] test agent::doctor::tests::whet_dir_writable_pass_in_tempdir ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_chain_tools_rule ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_be_concise_rule ... ok
[INFO] [stdout] test agent::prompt::tests::test_load_project_instructions_none_when_missing ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_act_on_directives_discuss_open_ended_rule ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_has_core_rules_section ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_has_editing_rules ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_has_error_recovery ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_has_vague_request_handling ... ok
[INFO] [stdout] test agent::prompt::tests::test_load_project_instructions_dotfile ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_has_workflow_examples ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_identifies_as_whet ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_language_reminder_at_end ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_has_tool_selection_table ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_language_rule_appears_twice ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_language_rule_is_first_and_mandatory ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_no_generic_advice_rule ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_no_old_project_names ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_no_skills_means_no_skills_section ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_open_ended_section_exists ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_read_before_editing_rule ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_readme_mentioned_in_tool_selection ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_skills_appended_after_base ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_tool_selection_correct_vs_wrong ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_vague_requests_mention_cargo_test ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_workflow_read_file_before_repo_map ... ok
[INFO] [stdout] test agent::prompt::tests::test_system_prompt_contains_whet ... ok
[INFO] [stdout] test agent::prompt::tests::test_system_prompt_with_skills ... ok
[INFO] [stdout] test agent::tests::test_apply_diff_without_read_returns_warning ... ok
[INFO] [stdout] test agent::prompt::tests::test_load_project_instructions_finds_file ... ok
[INFO] [stdout] test agent::tests::test_adaptive_cap_stops_when_progress_stalls ... ok
[INFO] [stdout] test agent::prompt::tests::test_load_project_instructions_searches_parent ... ok
[INFO] [stdout] test agent::tests::test_approx_token_count_with_tools_includes_tool_def_size ... ok
[INFO] [stdout] test agent::tests::test_approx_token_count_uses_chars_div_4 ... ok
[INFO] [stdout] test agent::tests::test_agent_stats_tracked_in_process_message ... ok
[INFO] [stdout] test agent::tests::test_accept_edits_allows_write_file ... ok
[INFO] [stdout] test agent::tests::test_adaptive_cap_extends_when_making_progress ... ok
[INFO] [stdout] test agent::tests::test_compaction_disabled_via_context_compression_flag ... ok
[INFO] [stdout] test agent::tests::test_compaction_fires_when_token_count_exceeds_threshold ... ok
[INFO] [stdout] test agent::tests::test_edit_file_without_read_returns_warning ... ok
[INFO] [stdout] test agent::tests::test_compaction_does_not_fire_for_many_short_messages_below_token_threshold ... ok
[INFO] [stdout] test agent::tests::test_empty_content_response ... ok
[INFO] [stdout] test agent::tests::test_edit_file_path_normalization ... ok
[INFO] [stdout] test agent::tests::test_extract_non_tool_json_ignored ... ok
[INFO] [stdout] test agent::tests::test_llm_error_returns_error_message ... ok
[INFO] [stdout] test agent::tests::test_extract_tool_calls_from_mixed_text ... ok
[INFO] [stdout] test agent::tests::test_edit_file_after_read_succeeds ... ok
[INFO] [stdout] test agent::tests::test_max_iterations_reached ... ok
[INFO] [stdout] test agent::tests::test_looks_like_question ... ok
[INFO] [stdout] test agent::tests::test_compaction_fires_when_messages_plus_tools_exceed_threshold ... ok
[INFO] [stdout] test agent::tests::test_memory_accumulates_across_messages ... ok
[INFO] [stdout] test agent::tests::test_model_call_to_subagent_tool_dispatches_to_run_subagent ... ok
[INFO] [stdout] test agent::tests::test_needs_approval_accept_edits_mode ... ok
[INFO] [stdout] test agent::tests::test_extract_empty_content ... ok
[INFO] [stdout] test agent::tests::test_needs_approval_default_mode ... ok
[INFO] [stdout] test agent::tests::test_model_call_to_subagent_with_empty_task_returns_tool_error ... ok
[INFO] [stdout] test agent::display::tests::edit_diff_handles_unicode_safely ... ok
[INFO] [stdout] test agent::display::tests::edit_diff_identical_old_and_new_still_renders_both_sides ... ok
[INFO] [stdout] test agent::display::tests::shell_command_truncated_when_long ... ok
[INFO] [stdout] test agent::display::tests::shell_compact ... ok
[INFO] [stdout] test agent::doctor::tests::config_parses_pass_on_valid_toml ... ok
[INFO] [stdout] test agent::doctor::tests::config_parses_warn_when_missing ... ok
[INFO] [stdout] test agent::doctor::tests::run_all_fetches_ollama_tags_only_once ... ok
[INFO] [stdout] test agent::doctor::tests::run_all_marks_ollama_unreachable_as_fail_and_chains_model_check ... ok
[INFO] [stdout] test agent::prompt::tests::test_prompt_all_sections_present ... ok
[INFO] [stdout] test agent::tests::test_needs_approval_yolo_mode ... ok
[INFO] [stdout] test agent::tests::test_no_reprompt_on_read_only_qa ... ok
[INFO] [stdout] test agent::tests::test_non_question_text_returned_immediately ... ok
[INFO] [stdout] test agent::tests::test_process_message_with_callback_empty_callback ... ok
[INFO] [stdout] test agent::tests::test_plan_mode_blocks_dangerous_tools ... ok
[INFO] [stdout] test agent::tests::test_plan_mode_blocks_moderate_tools ... ok
[INFO] [stdout] test agent::tests::test_process_message_with_callback_receives_tokens ... ok
[INFO] [stdout] test agent::tests::test_plan_mode_allows_safe_tools ... ok
[INFO] [stdout] test agent::tests::test_on_token_empty_signal_fires_before_tool_call_prints ... ok
[INFO] [stdout] test agent::tests::test_process_message_with_callback_error ... ok
[INFO] [stdout] test agent::tests::test_process_message_with_callback_tool_calls ... ok
[INFO] [stdout] test agent::tests::test_question_reprompt_skipped_when_user_asked_open_ended ... ok
[INFO] [stdout] test agent::tests::test_multiple_tool_calls_in_one_response ... ok
[INFO] [stdout] test agent::tests::test_question_reprompt_still_fires_for_directive_inputs ... ok
[INFO] [stdout] test agent::tests::test_reprompt_on_question ... ok
[INFO] [stdout] test agent::tests::test_no_reprompt_after_edit_action ... ok
[INFO] [stdout] test agent::tests::test_huge_single_message_truncated_when_summarisation_cannot_help ... ok
[INFO] [stdout] test agent::tests::test_remember_tool_routes_to_on_remember_callback_with_assigned_id ... ok
[INFO] [stdout] test agent::tests::test_process_message_with_callback_multiple_turns ... ok
[INFO] [stdout] test agent::tests::test_reprompt_limit ... ok
[INFO] [stdout] test agent::tests::test_remember_callback_error_propagates_as_tool_failure ... ok
[INFO] [stdout] test agent::tests::test_remember_with_empty_content_is_a_tool_error ... ok
[INFO] [stdout] test agent::tests::test_remember_without_callback_returns_clear_error ... ok
[INFO] [stdout] test agent::tests::test_process_message_delegates_to_callback_version ... ok
[INFO] [stdout] test agent::tests::test_resumed_edit_file_skips_read_before_edit_warning ... ok
[INFO] [stdout] test agent::tests::test_resumed_session_still_tracks_read_paths ... ok
[INFO] [stdout] test agent::tests::test_reprompt_on_premature_exit_after_only_reads ... ok
[INFO] [stdout] test agent::tests::test_run_subagent_returns_exit_reason_llm_error_directly ... ok
[INFO] [stdout] test agent::tests::test_session_stats_record_llm_call_none_usage ... ok
[INFO] [stdout] test agent::tests::test_session_stats_record_tool_call ... ok
[INFO] [stdout] test agent::tests::test_subagent_max_depth_blocks_nesting ... ok
[INFO] [stdout] test agent::tests::test_simple_text_response ... ok
[INFO] [stdout] test agent::tests::test_subagent_does_not_pollute_parent_memory ... ok
[INFO] [stdout] test agent::tests::test_session_stats_default ... ok
[INFO] [stdout] test agent::tests::test_subagent_inherits_persistent_memory_from_parent_system_prompt ... ok
[INFO] [stdout] test agent::tests::test_session_stats_record_llm_call ... ok
[INFO] [stdout] test agent::tests::test_system_prompt_is_first_message ... ok
[INFO] [stdout] test agent::tests::test_subagent_returns_child_final_assistant_message ... ok
[INFO] [stdout] test agent::tests::test_stats_jsonl_disabled_writes_nothing ... ok
[INFO] [stdout] test agent::tests::test_subagent_read_paths_isolated ... ok
[INFO] [stdout] test agent::tests::test_text_to_tool_fallback_unknown_tool_ignored ... ok
[INFO] [stdout] test agent::tests::test_stats_jsonl_emits_tool_call_and_session_end ... ok
[INFO] [stdout] test agent::tests::test_subagent_hides_subagent_tool_from_child_loop ... ok
[INFO] [stdout] test agent::tests::test_subagent_remember_call_propagates_to_parent_callback ... ok
[INFO] [stdout] test agent::tests::test_subagent_inherits_system_prompt_from_parent ... ok
[INFO] [stdout] test agent::tests::test_text_to_tool_fallback_stats_tracked ... ok
[INFO] [stdout] test agent::tests::test_tool_call_then_response ... ok
[INFO] [stdout] test agent::tests::test_run_subagent_returns_exit_reason_max_iterations_directly ... ok
[INFO] [stdout] test agent::tests::test_subagent_max_iterations_marked_as_failure_at_parent ... ok
[INFO] [stdout] test agent::tests::test_safe_tool_never_needs_approval ... ok
[INFO] [stdout] test agent::tests::test_tool_execution_error_handled ... ok
[INFO] [stdout] test agent::tests::test_text_to_tool_fallback_format_a ... ok
[INFO] [stdout] test agent::tests::test_tool_denied_by_approval_callback ... ok
[INFO] [stdout] test agent::tests::test_tool_call_with_content_alongside ... ok
[INFO] [stdout] test agent::tests::test_tool_output_within_limit_not_truncated ... ok
[INFO] [stdout] test agent::tests::test_tool_output_exceeding_limit_is_truncated ... ok
[INFO] [stdout] test agent::tests::test_tool_output_exactly_at_limit_not_truncated ... ok
[INFO] [stdout] test config::tests::test_config_backward_compat_without_api_key ... ok
[INFO] [stdout] test agent::tests::test_user_input_is_open_ended_recognises_english_patterns ... ok
[INFO] [stdout] test agent::tests::test_tool_output_truncation_utf8_safe ... ok
[INFO] [stdout] test agent::tests::test_user_input_is_open_ended_recognises_japanese_patterns ... ok
[INFO] [stdout] test agent::tests::test_user_input_is_open_ended_rejects_prose_disjunctions ... ok
[INFO] [stdout] test agent::tests::test_subagent_does_not_double_emit_session_end_in_stats_jsonl ... ok
[INFO] [stdout] test agent::tests::test_write_file_without_read_succeeds ... ok
[INFO] [stdout] test agent::tests::test_truncation_pass_is_idempotent ... ok
[INFO] [stdout] test agent::tests::test_unknown_tool_handled_gracefully ... ok
[INFO] [stdout] test agent::tests::test_user_input_is_open_ended_rejects_concrete_directives ... ok
[INFO] [stdout] test agent::tests::test_truncation_pass_skips_system_prompt_and_latest_message ... ok
[INFO] [stdout] test agent::tests::test_yolo_mode_skips_approval ... ok
[INFO] [stdout] test agent::tests::test_tool_approved_by_callback ... ok
[INFO] [stdout] test config::tests::test_config_load_returns_defaults_when_no_file ... ok
[INFO] [stdout] test config::tests::test_config_load_falls_back_when_file_invalid ... ok
[INFO] [stdout] test config::tests::test_config_load_reads_existing_file ... ok
[INFO] [stdout] test config::tests::test_config_parse_custom_values ... ok
[INFO] [stdout] test config::tests::test_config_default_new_fields ... ok
[INFO] [stdout] test config::tests::test_config_parse_missing_section ... ok
[INFO] [stdout] test config::tests::test_config_parse_wrong_type ... ok
[INFO] [stdout] test config::tests::test_config_backward_compat_without_mcp ... ok
[INFO] [stdout] test config::tests::test_default_permission_mode ... ok
[INFO] [stdout] test config::tests::test_config_with_all_new_fields ... ok
[INFO] [stdout] test config::tests::test_config_with_api_key ... ok
[INFO] [stdout] test config::tests::test_config_backward_compat_without_streaming ... ok
[INFO] [stdout] test config::tests::test_config_with_mcp_servers ... ok
[INFO] [stdout] test config::tests::test_config_extra_unknown_fields_ignored ... ok
[INFO] [stdout] test config::tests::test_default_config_values ... ok
[INFO] [stdout] test config::tests::test_permission_mode_backward_compat ... ok
[INFO] [stdout] test config::tests::test_permission_mode_accept_edits ... ok
[INFO] [stdout] test config::tests::test_permission_mode_display ... ok
[INFO] [stdout] test config::tests::test_config_roundtrip_toml ... ok
[INFO] [stdout] test config::tests::test_config_parse_invalid_toml ... ok
[INFO] [stdout] test config::tests::test_config_roundtrip_with_new_fields ... ok
[INFO] [stdout] test config::tests::test_config_mcp_server_without_args ... ok
[INFO] [stdout] test agent::tests::test_subagent_guard_restores_parent_state_on_child_panic ... ok
[INFO] [stdout] test config::tests::test_permission_mode_roundtrip ... ok
[INFO] [stdout] test config::tests::test_permission_mode_yolo ... ok
[INFO] [stdout] test config::tests::test_config_with_streaming_enabled ... ok
[INFO] [stdout] test llm::ollama::tests::test_convert_assistant_with_tool_calls ... ok
[INFO] [stdout] test llm::ollama::tests::test_convert_system_message ... ok
[INFO] [stdout] test llm::ollama::tests::test_convert_tool_result_message ... ok
[INFO] [stdout] test llm::ollama::tests::test_convert_tools_empty ... ok
[INFO] [stdout] test llm::ollama::tests::test_convert_user_message ... ok
[INFO] [stdout] test llm::ollama::tests::test_convert_empty_messages ... ok
[INFO] [stdout] test llm::ollama::tests::test_message_constructors ... ok
[INFO] [stdout] test llm::ollama::tests::test_request_serialization_with_options ... ok
[INFO] [stdout] test llm::ollama::tests::test_response_parse_empty_content_becomes_none ... ok
[INFO] [stdout] test llm::ollama::tests::test_response_parse_with_tool_calls ... ok
[INFO] [stdout] test llm::ollama::tests::test_streaming_chunk_parse_content ... ok
[INFO] [stdout] test llm::ollama::tests::test_convert_mixed_conversation ... ok
[INFO] [stdout] test llm::ollama::tests::test_response_parse_without_usage ... ok
[INFO] [stdout] test llm::ollama::tests::test_request_serialization_with_tools ... ok
[INFO] [stdout] test llm::ollama::tests::test_response_parse_multiple_tool_calls ... ok
[INFO] [stdout] test llm::ollama::tests::test_response_parse_text_only ... ok
[INFO] [stdout] test llm::ollama::tests::test_convert_tools_single ... ok
[INFO] [stdout] test llm::ollama::tests::test_response_parse_with_usage ... ok
[INFO] [stdout] test llm::ollama::tests::test_client_stores_config ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_convert_assistant_with_tool_calls ... ok
[INFO] [stdout] test llm::ollama::tests::test_streaming_chunk_parse_no_done_field ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_convert_empty_tools ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_convert_system_message ... ok
[INFO] [stdout] test llm::ollama::tests::test_request_serialization_no_tools ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_convert_user_message ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_convert_tools ... ok
[INFO] [stdout] test llm::ollama::tests::test_streaming_content_accumulation_simulation ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_convert_tool_result_message ... ok
[INFO] [stdout] test llm::ollama::tests::test_streaming_tool_calls_accumulated ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_request_serialization ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_request_serialization_with_stream_true ... ok
[INFO] [stdout] test llm::ollama::tests::test_streaming_done_chunk_has_usage ... ok
[INFO] [stdout] test llm::ollama::tests::test_streaming_empty_lines_skipped ... ok
[INFO] [stdout] test llm::ollama::tests::test_default_num_predict_caps_runaway_generation ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_response_parse_null_content ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_response_parse_multiple_tool_calls ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_response_parse_text_only ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_response_parse_with_tool_calls ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_response_parse_with_partial_usage ... ok
[INFO] [stdout] test llm::ollama::tests::test_streaming_chunk_with_tool_calls ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_sse_empty_content_delta_skipped ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_sse_line_parsing_content_delta ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_sse_line_parsing_done ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_client_stores_config ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_sse_non_data_lines_skipped ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_tool_call_arguments_invalid_json_fallback ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_sse_tool_call_delta_assembly ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_client_no_api_key ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_tool_call_arguments_json_string_parsing ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_response_parse_empty_content_becomes_none ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_client_trims_trailing_slash ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_convert_mixed_conversation ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_response_parse_with_usage ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_response_parse_without_usage ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_sse_multiple_tool_calls_delta ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_sse_usage_extraction ... ok
[INFO] [stdout] test mcp::client::tests::test_mcp_error_display ... ok
[INFO] [stdout] test mcp::protocol::tests::test_json_rpc_error_negative_code ... ok
[INFO] [stdout] test mcp::protocol::tests::test_notification_serialization ... ok
[INFO] [stdout] test mcp::protocol::tests::test_notification_with_params ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_sse_malformed_json_skipped ... ok
[INFO] [stdout] test mcp::protocol::tests::test_request_large_id ... ok
[INFO] [stdout] test mcp::protocol::tests::test_request_no_params ... ok
[INFO] [stdout] test mcp::protocol::tests::test_request_serialization ... ok
[INFO] [stdout] test mcp::protocol::tests::test_request_with_nested_params ... ok
[INFO] [stdout] test mcp::protocol::tests::test_response_deserialization_error ... ok
[INFO] [stdout] test mcp::protocol::tests::test_response_deserialization_success ... ok
[INFO] [stdout] test mcp::protocol::tests::test_response_with_null_id ... ok
[INFO] [stdout] test mcp::protocol::tests::test_tool_call_result_default_is_error ... ok
[INFO] [stdout] test mcp::protocol::tests::test_tool_call_result_error ... ok
[INFO] [stdout] test mcp::protocol::tests::test_tool_call_result_multiple_content ... ok
[INFO] [stdout] test mcp::protocol::tests::test_tool_info_list_parsing ... ok
[INFO] [stdout] test mcp::protocol::tests::test_tool_call_result_camel_case_is_error ... ok
[INFO] [stdout] test mcp::protocol::tests::test_tool_info_deserialization ... ok
[INFO] [stdout] test mcp::protocol::tests::test_tool_info_minimal ... ok
[INFO] [stdout] test mcp::tests::test_register_mcp_tools_empty_servers ... ok
[INFO] [stdout] test mcp::client::tests::test_spawn_nonexistent_command ... ok
[INFO] [stdout] test llm::openai_compat::tests::test_sse_content_accumulation_simulation ... ok
[INFO] [stdout] test llm::ollama::tests::test_explicit_num_predict_is_preserved ... ok
[INFO] [stdout] test mcp::tests::test_register_mcp_tools_nonexistent_server ... ok
[INFO] [stdout] test mcp::tool_wrapper::tests::test_tool_wrapper_description ... ok
[INFO] [stdout] test mcp::tool_wrapper::tests::test_tool_wrapper_name_format ... ok
[INFO] [stdout] test mcp::tests::test_register_mcp_tools_mixed_success_failure ... ok
[INFO] [stdout] test memory::store::tests::test_add_and_list_project_scoped_memory ... ok
[INFO] [stdout] test mcp::client::tests::test_mcp_server_closes_connection ... ok
[INFO] [stdout] test memory::store::tests::test_backward_compat_null_working_dir ... ok
[INFO] [stdout] test memory::store::tests::test_create_and_load_conversation ... ok
[INFO] [stdout] test memory::store::tests::test_forget_soft_deletes_memory ... ok
[INFO] [stdout] test memory::store::tests::test_duplicate_conversation_id_fails ... ok
[INFO] [stdout] test memory::store::tests::test_forget_unknown_id_is_no_op ... ok
[INFO] [stdout] test memory::store::tests::test_get_latest_conversation ... ok
[INFO] [stdout] test memory::store::tests::test_global_memories_visible_from_any_dir ... ok
[INFO] [stdout] test memory::store::tests::test_large_content_stored ... ok
[INFO] [stdout] test memory::store::tests::test_latest_conversation_updated_on_message ... ok
[INFO] [stdout] test llm::ollama::tests::test_streaming_chunk_parse_done ... ok
[INFO] [stdout] test memory::store::tests::test_list_conversations ... ok
[INFO] [stdout] test mcp::protocol::tests::test_tool_call_result_deserialization ... ok
[INFO] [stdout] test mcp::protocol::tests::test_tool_info_with_empty_description ... ok
[INFO] [stdout] test memory::store::tests::test_list_orders_globals_before_project_scoped ... ok
[INFO] [stdout] test memory::store::tests::test_get_latest_conversation_filters_by_dir ... ok
[INFO] [stdout] test memory::store::tests::test_memory_special_characters_roundtrip ... ok
[INFO] [stdout] test memory::store::tests::test_load_empty_conversation ... ok
[INFO] [stdout] test memory::store::tests::test_list_conversations_empty_dir ... ok
[INFO] [stdout] test memory::store::tests::test_message_ordering_preserved ... ok
[INFO] [stdout] test memory::store::tests::test_special_characters_in_content ... ok
[INFO] [stdout] test memory::store::tests::test_load_nonexistent_conversation ... ok
[INFO] [stdout] test memory::store::tests::test_tool_call_id_stored ... ok
[INFO] [stdout] test memory::store::tests::test_memories_isolated_by_working_dir ... ok
[INFO] [stdout] test memory::store::tests::test_tool_calls_null_backward_compat ... ok
[INFO] [stdout] test security::path::tests::test_command_allows_awk_safe ... ok
[INFO] [stdout] test security::path::tests::test_command_allows_chmod_safe ... ok
[INFO] [stdout] test security::path::tests::test_command_allows_diff_safe ... ok
[INFO] [stdout] test security::path::tests::test_command_allows_grep_safe ... ok
[INFO] [stdout] test memory::store::tests::test_update_conversation_title ... ok
[INFO] [stdout] test memory::store::tests::test_tool_calls_json_stored_and_loaded ... ok
[INFO] [stdout] test security::path::tests::test_command_allows_redirect_to_safe_path ... ok
[INFO] [stdout] test security::path::tests::test_command_allows_normal_commands ... ok
[INFO] [stdout] test security::path::tests::test_command_allows_safe_script_execution ... ok
[INFO] [stdout] test security::path::tests::test_command_allows_tee_to_safe_path ... ok
[INFO] [stdout] test security::path::tests::test_command_allows_xargs_safe ... ok
[INFO] [stdout] test memory::store::tests::test_multiple_conversations_isolated ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_awk_sensitive ... ok
[INFO] [stdout] test security::path::tests::test_command_allows_safe_chains ... ok
[INFO] [stdout] test security::path::tests::test_command_allows_safe_find ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_cat_via_symlink ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_cat_dollar_home_ssh ... ok
[INFO] [stdout] test security::path::tests::test_command_allows_sed_safe ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_chain_and ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_chmod_sensitive ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_cat_etc_shadow ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_cp_mv_sensitive ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_dd_to_dev ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_diff_sensitive ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_chain_or ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_chain_semicolon ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_curl_pipe_bash ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_env_dump ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_eval_curl ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_fork_bomb ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_bash_c ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_find_exec_cat_shadow ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_mkfs ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_grep_sensitive_file ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_nested_subshell ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_perl_sensitive_path ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_proc_environ ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_redirect_all_to_sensitive ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_redirect_in_chain ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_node_sensitive_path ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_pipe_segment_sensitive ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_python_sensitive_path ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_redirect_with_traversal ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_redirect_stderr_to_sensitive ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_ruby_sensitive_path ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_rm_rf_root ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_redirect_to_sensitive_path ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_redirect_to_ssh_key ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_script_with_ssh_path ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_sed_sensitive ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_sensitive_path_with_traversal ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_su_doas_pkexec ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_subshell_backtick ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_subshell_dollar_paren ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_sudo ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_tee_to_sensitive_path ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_xargs_cat ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_xargs_rm ... ok
[INFO] [stdout] test security::path::tests::test_command_blocks_xargs_sudo ... ok
[INFO] [stdout] test security::path::tests::test_dot_dot_in_safe_path ... ok
[INFO] [stdout] test security::path::tests::test_normalize_path_resolves_dot_dot ... ok
[INFO] [stdout] test security::path::tests::test_normalize_path_root ... ok
[INFO] [stdout] test security::path::tests::test_path_safety_allows_etc_other ... ok
[INFO] [stdout] test security::path::tests::test_path_safety_blocks_aws ... ok
[INFO] [stdout] test security::path::tests::test_path_safety_blocks_docker_config ... ok
[INFO] [stdout] test security::path::tests::test_path_safety_blocks_dollar_home_ssh ... ok
[INFO] [stdout] test security::path::tests::test_path_safety_blocks_etc_shadow ... ok
[INFO] [stdout] test security::path::tests::test_path_safety_blocks_etc_sudoers ... ok
[INFO] [stdout] test security::path::tests::test_path_safety_blocks_gnupg ... ok
[INFO] [stdout] test security::path::tests::test_path_safety_blocks_kube_config ... ok
[INFO] [stdout] test security::path::tests::test_path_safety_blocks_ssh_dir ... ok
[INFO] [stdout] test security::path::tests::test_path_traversal_blocked ... ok
[INFO] [stdout] test security::path::tests::test_path_traversal_home_sensitive ... ok
[INFO] [stdout] test security::path::tests::test_path_safety_blocks_etc_gshadow ... ok
[INFO] [stdout] test skills::tests::test_expand_tilde ... ok
[INFO] [stdout] test security::path::tests::test_symlink_to_sensitive_path_blocked ... ok
[INFO] [stdout] test security::path::tests::test_symlink_to_ssh_dir_blocked ... ok
[INFO] [stdout] test skills::tests::test_load_skills_missing_dir ... ok
[INFO] [stdout] test skills::tests::test_load_skills_with_md_files ... ok
[INFO] [stdout] test security::path::tests::test_symlink_to_safe_path_allowed ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_anchor_not_found_errors ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_add_lines ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_blocked_path ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_append_at_end_of_file ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_context_mismatch ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_add_lines_only ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_missing_args ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_malformed_hunk_header ... ok
[INFO] [stdout] test skills::tests::test_load_skills_empty_dir ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_multi_file ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_no_hunks ... ok
[INFO] [stdout] test security::path::tests::test_path_safety_safe_paths ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_nonexistent_file ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_old_start_zero_rejected ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_multi_file_inconsistent_default ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_file_size_limit ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_no_trailing_newline_preserved ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_multi_hunk_with_gap ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_remove_lines ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_remove_lines_only ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_trailing_newline_preserved ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_preserves_original_whitespace ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_with_context ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_with_file_headers ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_simple_diff ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_parse_hunk_header_with_context_text ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_parse_hunk_header_with_count ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_multi_file_partial_writes_succeeded_skips_failed ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_parse_hunk_header_without_count ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_risk_level_is_moderate ... ok
[INFO] [stdout] test tools::edit_file::tests::test_edit_file_basic_replacement ... ok
[INFO] [stdout] test tools::edit_file::tests::test_edit_file_blocked_path ... ok
[INFO] [stdout] test tools::edit_file::tests::test_edit_file_context_output ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_with_file_headers_replace ... ok
[INFO] [stdout] test tools::edit_file::tests::test_edit_file_missing_args ... ok
[INFO] [stdout] test tools::edit_file::tests::test_edit_file_empty_replacement ... ok
[INFO] [stdout] test tools::edit_file::tests::test_edit_file_multiline_replacement ... ok
[INFO] [stdout] test tools::edit_file::tests::test_edit_file_nonexistent_file ... ok
[INFO] [stdout] test tools::edit_file::tests::test_edit_file_old_text_not_found ... ok
[INFO] [stdout] test tools::edit_file::tests::test_edit_file_preserves_rest ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_diff_wrong_line_number_fuzzy_matches ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_partial_failure_reports_per_hunk_outcomes ... ok
[INFO] [stdout] test tools::edit_file::tests::test_edit_file_unicode_content ... ok
[INFO] [stdout] test tools::apply_diff::tests::test_apply_multi_hunk_diff ... ok
[INFO] [stdout] test tools::edit_file::tests::test_fuzzy_ambiguous_match_errors ... ok
[INFO] [stdout] test tools::edit_file::tests::test_edit_file_via_symlink_to_sensitive_blocked ... ok
[INFO] [stdout] test tools::edit_file::tests::test_edit_file_multiple_matches ... ok
[INFO] [stdout] test tools::edit_file::tests::test_fuzzy_blank_old_text_does_not_match_anywhere ... ok
[INFO] [stdout] test tools::edit_file::tests::test_fuzzy_not_found_message_is_explicit ... ok
[INFO] [stdout] test tools::edit_file::tests::test_edit_file_via_symlink_to_safe_allowed ... ok
[INFO] [stdout] test tools::edit_file::tests::test_edit_file_size_limit ... ok
[INFO] [stdout] test tools::edit_file::tests::test_fuzzy_tabs_vs_spaces ... ok
[INFO] [stdout] test tools::edit_file::tests::test_get_context_beginning_of_file ... ok
[INFO] [stdout] test tools::edit_file::tests::test_get_context_end_of_file ... ok
[INFO] [stdout] test tools::edit_file::tests::test_fuzzy_falls_back_only_when_exact_misses ... ok
[INFO] [stdout] test tools::git::tests::test_git_checkout_accepted ... ok
[INFO] [stdout] test tools::git::tests::test_git_cherry_pick_accepted ... ok
[INFO] [stdout] test tools::edit_file::tests::test_fuzzy_trailing_whitespace ... ok
[INFO] [stdout] test tools::edit_file::tests::test_fuzzy_indent_depth_difference ... ok
[INFO] [stdout] test memory::store::tests::test_memory_persists_across_store_reopen ... ok
[INFO] [stdout] test tools::git::tests::test_git_clean_blocked ... ok
[INFO] [stdout] test tools::git::tests::test_git_command_risk_level_moderate ... ok
[INFO] [stdout] test tools::git::tests::test_git_commit_with_long_form_m_flag ... ok
[INFO] [stdout] test tools::git::tests::test_git_commit_without_m_false_positive_rejected ... ok
[INFO] [stdout] test tools::git::tests::test_git_commit_without_m_flag ... ok
[INFO] [stdout] test tools::git::tests::test_git_error_messages_contain_allowed_list ... ok
[INFO] [stdout] test tools::git::tests::test_git_fetch_accepted ... ok
[INFO] [stdout] test tools::git::tests::test_git_commit_with_m_flag_is_accepted ... ok
[INFO] [stdout] test tools::git::tests::test_git_branch ... ok
[INFO] [stdout] test memory::store::tests::test_file_based_store ... ok
[INFO] [stdout] test tools::git::tests::test_git_push_force_blocked ... ok
[INFO] [stdout] test tools::git::tests::test_git_push_force_f_blocked ... ok
[INFO] [stdout] test tools::git::tests::test_git_push_force_with_lease_blocked ... ok
[INFO] [stdout] test tools::git::tests::test_git_push_is_approval_required ... ok
[INFO] [stdout] test tools::git::tests::test_git_rebase_blocked ... ok
[INFO] [stdout] test tools::git::tests::test_git_rebase_interactive_blocked ... ok
[INFO] [stdout] test tools::git::tests::test_git_merge_accepted ... ok
[INFO] [stdout] test tools::git::tests::test_git_missing_command_arg ... ok
[INFO] [stdout] test tools::git::tests::test_git_remote_accepted ... ok
[INFO] [stdout] test tools::git::tests::test_git_reset_hard_blocked ... ok
[INFO] [stdout] test tools::git::tests::test_git_reset_hard_with_extra_args ... ok
[INFO] [stdout] test tools::git::tests::test_git_diff ... ok
[INFO] [stdout] test tools::git::tests::test_git_risk_level_unknown_command ... ok
[INFO] [stdout] test tools::git::tests::test_git_reset_soft_allowed ... ok
[INFO] [stdout] test tools::git::tests::test_git_switch_accepted ... ok
[INFO] [stdout] test tools::git::tests::test_git_stash_list ... ok
[INFO] [stdout] test tools::git::tests::test_git_tag_accepted ... ok
[INFO] [stdout] test tools::git::tests::test_git_status ... ok
[INFO] [stdout] test tools::git::tests::test_git_unknown_command ... ok
[INFO] [stdout] test tools::git::tests::test_shell_split_basic ... ok
[INFO] [stdout] test tools::git::tests::test_shell_split_double_quoted ... ok
[INFO] [stdout] test tools::git::tests::test_shell_split_empty ... ok
[INFO] [stdout] test tools::git::tests::test_shell_split_multiple_spaces ... ok
[INFO] [stdout] test tools::git::tests::test_shell_split_only_whitespace ... ok
[INFO] [stdout] test tools::git::tests::test_shell_split_mixed_quotes ... ok
[INFO] [stdout] test tools::git::tests::test_shell_split_quoted ... ok
[INFO] [stdout] test tools::git::tests::test_shell_split_single_arg ... ok
[INFO] [stdout] test tools::git::tests::test_shell_split_tab_separator ... ok
[INFO] [stdout] test tools::git::tests::test_shell_split_unclosed_double_quote ... ok
[INFO] [stdout] test tools::git::tests::test_shell_split_unclosed_single_quote ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_blocked_path ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_case_insensitive ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_case_sensitive_no_match ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_empty_pattern ... ok
[INFO] [stdout] test tools::git::tests::test_git_log ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_finds_pattern_in_file ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_line_numbers ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_file_exactly_at_size_limit ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_max_results_truncation ... ok
[INFO] [stdout] test tools::git::tests::test_git_show ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_missing_pattern ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_no_matches ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_single_file_search ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_skips_binary_files ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_line_numbers_start_at_one ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_nonexistent_path ... ok
[INFO] [stdout] test tools::git::tests::test_git_command_risk_level_safe ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_special_regex_chars_treated_literally ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_unicode_pattern ... ok
[INFO] [stdout] test mcp::client::tests::test_mcp_initialize_handshake ... ok
[INFO] [stdout] test mcp::client::tests::test_mcp_list_tools ... ok
[INFO] [stdout] test mcp::client::tests::test_mcp_client_drop_kills_process ... ok
[INFO] [stdout] test tools::grep::tests::test_is_binary_null_after_check_boundary ... ok
[INFO] [stdout] test tools::grep::tests::test_is_binary_nonexistent_file ... ok
[INFO] [stdout] test tools::grep::tests::test_is_binary_null_at_start ... ok
[INFO] [stdout] test mcp::client::tests::test_mcp_call_unknown_tool ... ok
[INFO] [stdout] test tools::list_dir::tests::test_list_blocked_sensitive_path ... ok
[INFO] [stdout] test tools::list_dir::tests::test_list_directories_have_trailing_slash ... ok
[INFO] [stdout] test tools::list_dir::tests::test_list_empty_directory ... ok
[INFO] [stdout] test tools::grep::tests::test_is_binary_with_null_bytes ... ok
[INFO] [stdout] test tools::grep::tests::test_is_binary_with_text_file ... ok
[INFO] [stdout] test tools::list_dir::tests::test_list_hidden_files_shown ... ok
[INFO] [stdout] test tools::list_dir::tests::test_list_file_instead_of_dir ... ok
[INFO] [stdout] test tools::list_dir::tests::test_list_missing_path_arg ... ok
[INFO] [stdout] test tools::list_dir::tests::test_list_non_recursive_default ... ok
[INFO] [stdout] test tools::list_dir::tests::test_list_nonexistent_directory ... ok
[INFO] [stdout] test tools::list_dir::tests::test_list_recursive ... ok
[INFO] [stdout] test tools::list_dir::tests::test_list_symlink_dir_not_followed_recursively ... ok
[INFO] [stdout] test tools::list_dir::tests::test_list_src_directory ... ok
[INFO] [stdout] test tools::list_dir::tests::test_non_recursive_unaffected_by_skip_dirs ... ok
[INFO] [stdout] test tools::read_file::tests::test_read_blocked_etc_shadow ... ok
[INFO] [stdout] test tools::list_dir::tests::test_list_recursive_depth_limit ... ok
[INFO] [stdout] test tools::list_dir::tests::test_recursive_skips_skip_dirs_contents ... ok
[INFO] [stdout] test tools::read_file::tests::test_read_directory_fails ... ok
[INFO] [stdout] test tools::read_file::tests::test_read_existing_file ... ok
[INFO] [stdout] test tools::read_file::tests::test_read_missing_path_arg ... ok
[INFO] [stdout] test tools::git::tests::test_git_empty_output_shows_no_output ... FAILED
[INFO] [stdout] test tools::read_file::tests::test_read_path_traversal_blocked ... ok
[INFO] [stdout] test tools::read_file::tests::test_read_blocked_sudoers ... ok
[INFO] [stdout] test tools::read_file::tests::test_read_path_traversal_deep ... ok
[INFO] [stdout] test tools::read_file::tests::test_read_ssh_via_absolute_home_path ... ok
[INFO] [stdout] test tools::read_file::tests::test_read_via_symlink_to_sensitive_blocked ... ok
[INFO] [stdout] test tools::read_file::tests::test_read_blocked_etc_gshadow ... ok
[INFO] [stdout] test tools::read_file::tests::test_read_nonexistent_file ... ok
[INFO] [stdout] test tools::remember::tests::description_warns_against_transient_use ... ok
[INFO] [stdout] test tools::remember::tests::name_is_remember ... ok
[INFO] [stdout] test tools::remember::tests::execute_returns_diagnostic_error ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_skips_large_files ... ok
[INFO] [stdout] test tools::remember::tests::schema_requires_content ... ok
[INFO] [stdout] test tools::read_file::tests::test_read_via_symlink_to_safe_allowed ... ok
[INFO] [stdout] test tools::read_file::tests::test_read_write_roundtrip ... ok
[INFO] [stdout] test tools::repo_map::tests::test_extract_go_symbols ... ok
[INFO] [stdout] test tools::repo_map::tests::test_extract_java_symbols ... ok
[INFO] [stdout] test tools::repo_map::tests::test_extract_c_symbols ... ok
[INFO] [stdout] test tools::repo_map::tests::test_extract_js_ts_symbols ... ok
[INFO] [stdout] test tools::repo_map::tests::test_extract_ruby_symbols ... ok
[INFO] [stdout] test tools::repo_map::tests::test_extract_js_ts_type_and_interface ... ok
[INFO] [stdout] test tools::repo_map::tests::test_extract_kotlin_symbols ... ok
[INFO] [stdout] test mcp::client::tests::test_mcp_call_tool ... ok
[INFO] [stdout] test tools::repo_map::tests::test_extract_rust_advanced_symbols ... ok
[INFO] [stdout] test tools::repo_map::tests::test_extract_rust_enum_and_trait ... ok
[INFO] [stdout] test tools::repo_map::tests::test_extract_rust_symbols ... ok
[INFO] [stdout] test tools::repo_map::tests::test_is_source_file_edge_cases ... ok
[INFO] [stdout] test tools::repo_map::tests::test_repo_map_blocked_path ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_finds_pattern_in_directory ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_skips_git_directory ... ok
[INFO] [stdout] test tools::repo_map::tests::test_extract_signature_no_brace ... ok
[INFO] [stdout] test tools::repo_map::tests::test_extract_signature_truncation ... ok
[INFO] [stdout] test mcp::tests::test_register_mcp_tools_with_mock_server ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_default_path ... ok
[INFO] [stdout] test tools::repo_map::tests::test_extract_python_symbols ... ok
[INFO] [stdout] test tools::repo_map::tests::test_extract_signature_with_semicolon ... ok
[INFO] [stdout] test mcp::tool_wrapper::tests::test_tool_wrapper_multiple_calls_shared_client ... ok
[INFO] [stdout] test mcp::client::tests::test_mcp_multiple_tool_calls ... ok
[INFO] [stdout] test tools::repo_map::tests::test_repo_map_file_instead_of_dir ... ok
[INFO] [stdout] test mcp::tool_wrapper::tests::test_tool_wrapper_execute ... ok
[INFO] [stdout] test tools::repo_map::tests::test_is_source_file ... ok
[INFO] [stdout] test tools::repo_map::tests::test_repo_map_no_source_files ... ok
[INFO] [stdout] test tools::repo_map::tests::test_repo_map_nonexistent_dir ... ok
[INFO] [stdout] test tools::shell::tests::test_shell_blocks_redirect_to_sensitive ... ok
[INFO] [stdout] test tools::grep::tests::test_grep_skips_target_directory ... ok
[INFO] [stdout] test tools::repo_map::tests::test_repo_map_skips_node_modules ... ok
[INFO] [stdout] test tools::shell::tests::test_shell_blocks_dangerous_command ... ok
[INFO] [stdout] test tools::repo_map::tests::test_symbols_include_line_numbers ... ok
[INFO] [stdout] test tools::shell::tests::test_shell_blocks_chmod_sensitive ... ok
[INFO] [stdout] test tools::shell::tests::test_shell_blocks_tee_to_sensitive ... ok
[INFO] [stdout] test tools::shell::tests::test_shell_missing_command_arg ... ok
[INFO] [stdout] test tools::shell::tests::test_shell_blocks_xargs_cat ... ok
[INFO] [stdout] test tools::shell::tests::test_shell_echo ... ok
[INFO] [stdout] test tools::shell::tests::test_shell_failing_command_reports_exit_code ... ok
[INFO] [stdout] test tools::subagent::tests::description_mentions_when_to_use ... ok
[INFO] [stdout] test tools::shell::tests::test_shell_stderr_output ... ok
[INFO] [stdout] test tools::shell::tests::test_shell_empty_working_dir ... ok
[INFO] [stdout] test tools::subagent::tests::name_is_subagent ... ok
[INFO] [stdout] test tools::subagent::tests::execute_returns_diagnostic_error ... ok
[INFO] [stdout] test tools::subagent::tests::schema_requires_task ... ok
[INFO] [stdout] test tools::shell::tests::test_shell_working_dir ... ok
[INFO] [stdout] test tools::tests::test_list_dir_tool_missing ... ok
[INFO] [stdout] test tools::tests::test_all_tools_have_valid_schemas ... ok
[INFO] [stdout] test tools::tests::test_all_tool_names_are_unique ... ok
[INFO] [stdout] test tools::tests::test_list_dir_tool ... ok
[INFO] [stdout] test tools::shell::tests::test_shell_invalid_working_dir ... ok
[INFO] [stdout] test tools::shell::tests::test_shell_success_no_exit_code_shown ... ok
[INFO] [stdout] test tools::shell::tests::test_shell_empty_command ... ok
[INFO] [stdout] test tools::tests::test_read_file_tool ... ok
[INFO] [stdout] test tools::tests::test_read_file_tool_missing ... ok
[INFO] [stdout] test tools::tests::test_registry_default_is_empty ... ok
[INFO] [stdout] test tools::tests::test_registry_register_and_list ... ok
[INFO] [stdout] test tools::shell::tests::test_shell_mixed_stdout_stderr ... ok
[INFO] [stdout] test tools::tests::test_registry_get_by_name ... ok
[INFO] [stdout] test tools::tests::test_safe_definitions_only_safe_tools ... ok
[INFO] [stdout] test tools::tests::test_tool_error_display_messages ... ok
[INFO] [stdout] test tools::tests::test_tool_error_is_std_error ... ok
[INFO] [stdout] test tools::shell::tests::test_shell_multiline_output ... ok
[INFO] [stdout] test tools::web_fetch::tests::test_html_to_text_apos_entity ... ok
[INFO] [stdout] test tools::web_fetch::tests::test_html_to_text_basic ... ok
[INFO] [stdout] test tools::web_fetch::tests::test_html_to_text_comment_handling ... ok
[INFO] [stdout] test tools::web_fetch::tests::test_html_to_text_empty_input ... ok
[INFO] [stdout] test tools::web_fetch::tests::test_html_to_text_multiple_blank_lines_collapsed ... ok
[INFO] [stdout] test tools::web_fetch::tests::test_html_to_text_entities ... ok
[INFO] [stdout] test tools::web_fetch::tests::test_html_to_text_strips_script ... ok
[INFO] [stdout] test tools::web_fetch::tests::test_html_to_text_line_breaks ... ok
[INFO] [stdout] test tools::tests::test_registry_definitions ... ok
[INFO] [stdout] test tools::tests::test_registry_empty ... ok
[INFO] [stdout] test tools::tests::test_tool_risk_levels ... ok
[INFO] [stdout] test tools::web_fetch::tests::test_html_to_text_nbsp_entity ... ok
[INFO] [stdout] test tools::web_fetch::tests::test_html_to_text_nested_tags ... ok
[INFO] [stdout] test tools::shell::tests::test_shell_binary_output_handled ... ok
[INFO] [stdout] test tools::web_fetch::tests::test_html_to_text_self_closing_br ... ok
[INFO] [stdout] test tools::web_fetch::tests::test_html_to_text_strips_style ... ok
[INFO] [stdout] test tools::web_fetch::tests::test_html_to_text_unicode_content ... ok
[INFO] [stdout] test tools::web_fetch::tests::test_html_to_text_unknown_entity ... ok
[INFO] [stdout] test tools::web_fetch::tests::test_web_fetch_ftp_url_rejected ... ok
[INFO] [stdout] test tools::shell::tests::test_shell_timeout_kills_slow_command ... ok
[INFO] [stdout] test tools::read_file::tests::test_read_file_size_limit ... ok
[INFO] [stdout] test tools::web_fetch::tests::test_web_fetch_invalid_url ... ok
[INFO] [stdout] test tools::web_fetch::tests::test_web_fetch_missing_url ... ok
[INFO] [stdout] test tools::web_search::tests::test_decode_entities_numeric ... ok
[INFO] [stdout] test tools::web_search::tests::test_extract_attr ... ok
[INFO] [stdout] test tools::web_search::tests::test_extract_attr_single_quotes ... ok
[INFO] [stdout] test tools::web_search::tests::test_parse_ddg_results_empty_html ... ok
[INFO] [stdout] test tools::web_search::tests::test_parse_ddg_results_extracts_fields ... ok
[INFO] [stdout] test tools::web_search::tests::test_decode_entities ... ok
[INFO] [stdout] test tools::web_search::tests::test_url_decode ... ok
[INFO] [stdout] test tools::web_search::tests::test_parse_ddg_results_respects_max ... ok
[INFO] [stdout] test tools::web_search::tests::test_url_decode_incomplete_percent ... ok
[INFO] [stdout] test tools::web_search::tests::test_url_decode_invalid_percent ... ok
[INFO] [stdout] test tools::web_fetch::tests::test_web_fetch_schemeless_url_rejected ... ok
[INFO] [stdout] test tools::web_search::tests::test_url_decode_no_encoding ... ok
[INFO] [stdout] test tools::web_search::tests::test_parse_ddg_results_no_results ... ok
[INFO] [stdout] test tools::web_search::tests::test_urlencoding ... ok
[INFO] [stdout] test tools::web_search::tests::test_strip_tags ... ok
[INFO] [stdout] test tools::web_search::tests::test_urlencoding_safe_chars_pass_through ... ok
[INFO] [stdout] test tools::web_search::tests::test_extract_attr_missing_value ... ok
[INFO] [stdout] test tools::web_search::tests::test_urlencoding_special_chars ... ok
[INFO] [stdout] test tools::web_search::tests::test_urlencoding_unicode ... ok
[INFO] [stdout] test tools::web_search::tests::test_web_search_missing_query ... ok
[INFO] [stdout] test tools::write_file::tests::test_write_blocked_sensitive_path ... ok
[INFO] [stdout] test tools::write_file::tests::test_write_allows_empty_new_file ... ok
[INFO] [stdout] test tools::write_file::tests::test_write_missing_content_arg ... ok
[INFO] [stdout] test tools::write_file::tests::test_write_ssh_key_blocked ... ok
[INFO] [stdout] test tools::web_search::tests::test_strip_tags_nested_same_type ... ok
[INFO] [stdout] test tools::write_file::tests::test_write_and_verify ... ok
[INFO] [stdout] test tools::write_file::tests::test_write_missing_path_arg ... ok
[INFO] [stdout] test tools::write_file::tests::test_write_nonexistent_parent_dir ... ok
[INFO] [stdout] test tools::write_file::tests::test_write_path_traversal_blocked ... ok
[INFO] [stdout] test tools::write_file::tests::test_write_unicode_content ... ok
[INFO] [stdout] test tools::web_fetch::tests::test_web_fetch_connection_refused ... ok
[INFO] [stdout] test tools::web_search::tests::test_strip_tags_malformed ... ok
[INFO] [stdout] test tools::write_file::tests::test_write_blocks_emptying_existing_file ... ok
[INFO] [stdout] test tools::write_file::tests::test_write_via_symlink_to_sensitive_blocked ... ok
[INFO] [stdout] test tools::shell::tests::test_shell_large_output ... ok
[INFO] [stdout] test tools::write_file::tests::test_write_overwrites_existing ... ok
[INFO] [stdout] test tools::write_file::tests::test_write_via_symlink_to_safe_allowed ... ok
[INFO] [stdout] test tools::write_file::tests::test_write_allows_overwrite_with_content ... ok
[INFO] [stdout] test tools::repo_map::tests::test_repo_map_current_dir ... ok
[INFO] [stdout] test tools::repo_map::tests::test_repo_map_src_dir ... ok
[INFO] [stdout] test tools::list_dir::tests::test_list_max_entries_truncated ... ok
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- tools::git::tests::test_git_empty_output_shows_no_output stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'tools::git::tests::test_git_empty_output_shows_no_output' (2173) panicked at src/tools/git.rs:536:9:
[INFO] [stdout] assertion `left == right` failed
[INFO] [stdout]   left: "[stderr] error: Could not access 'HEAD'\n"
[INFO] [stdout]  right: "(no output)"
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x5c53b8afdfc1 - std[70759c8f55707aa4]::backtrace_rs::backtrace::libunwind::trace
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x5c53b8afdfc1 - std[70759c8f55707aa4]::backtrace_rs::backtrace::trace_unsynchronized::<std[70759c8f55707aa4]::sys::backtrace::_print_fmt::{closure#1}>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x5c53b8afdfc1 - std[70759c8f55707aa4]::sys::backtrace::_print_fmt
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x5c53b8afdfc1 - <<std[70759c8f55707aa4]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[df12db4294e9bfd3]::fmt::Display>::fmt
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x5c53b8b166ea - <core[df12db4294e9bfd3]::fmt::rt::Argument>::fmt
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x5c53b8b166ea - core[df12db4294e9bfd3]::fmt::write
[INFO] [stdout]    6:     0x5c53b8b0304c - core[df12db4294e9bfd3]::io::write::default_write_fmt::<alloc[2182bb758b4b3781]::vec::Vec<u8>>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/core/src/io/write.rs:402:11
[INFO] [stdout]    7:     0x5c53b8b0304c - <alloc[2182bb758b4b3781]::vec::Vec<u8> as core[df12db4294e9bfd3]::io::write::Write>::write_fmt
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/core/src/io/write.rs:335:13
[INFO] [stdout]    8:     0x5c53b8ad6036 - <std[70759c8f55707aa4]::sys::backtrace::BacktraceLock>::print
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x5c53b8ad6036 - std[70759c8f55707aa4]::panicking::default_hook::{closure#0}
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panicking.rs:292:27
[INFO] [stdout]   10:     0x5c53b8af4959 - std[70759c8f55707aa4]::panicking::default_hook
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panicking.rs:316:9
[INFO] [stdout]   11:     0x5c53b88d98d0 - <alloc[2182bb758b4b3781]::boxed::Box<dyn for<'a, 'b> core[df12db4294e9bfd3]::ops::function::Fn<(&'a std[70759c8f55707aa4]::panic::PanicHookInfo<'b>,), Output = ()> + core[df12db4294e9bfd3]::marker::Send + core[df12db4294e9bfd3]::marker::Sync> as core[df12db4294e9bfd3]::ops::function::Fn<(&std[70759c8f55707aa4]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/alloc/src/boxed.rs:2334:9
[INFO] [stdout]   12:     0x5c53b88d98d0 - test[9d35eded1c95d3be]::test_main_inner::<test[9d35eded1c95d3be]::test_main_static::{closure#0}>::{closure#0}
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/test/src/lib.rs:155:21
[INFO] [stdout]   13:     0x5c53b8af4c82 - <alloc[2182bb758b4b3781]::boxed::Box<dyn for<'a, 'b> core[df12db4294e9bfd3]::ops::function::Fn<(&'a std[70759c8f55707aa4]::panic::PanicHookInfo<'b>,), Output = ()> + core[df12db4294e9bfd3]::marker::Send + core[df12db4294e9bfd3]::marker::Sync> as core[df12db4294e9bfd3]::ops::function::Fn<(&std[70759c8f55707aa4]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/alloc/src/boxed.rs:2334:9
[INFO] [stdout]   14:     0x5c53b8af4c82 - std[70759c8f55707aa4]::panicking::panic_with_hook
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panicking.rs:823:13
[INFO] [stdout]   15:     0x5c53b8ad60e2 - std[70759c8f55707aa4]::panicking::panic_handler::{closure#0}
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panicking.rs:688:13
[INFO] [stdout]   16:     0x5c53b8ace9d9 - std[70759c8f55707aa4]::sys::backtrace::__rust_end_short_backtrace::<std[70759c8f55707aa4]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x5c53b8ad6fbd - __rustc[8fa7c3cbc660c2b3]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panicking.rs:679:5
[INFO] [stdout]   18:     0x5c53b8b16f0c - core[df12db4294e9bfd3]::panicking::panic_fmt
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x5c53b8b16da3 - core[df12db4294e9bfd3]::panicking::assert_failed_inner
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/core/src/panicking.rs:452:17
[INFO] [stdout]   20:     0x5c53b8179aeb - core[df12db4294e9bfd3]::panicking::assert_failed::<alloc[2182bb758b4b3781]::string::String, &str>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/core/src/panicking.rs:407:5
[INFO] [stdout]   21:     0x5c53b81443e9 - whet[df50700232411e4a]::tools::git::tests::test_git_empty_output_shows_no_output
[INFO] [stdout]                                at /opt/rustwide/workdir/src/tools/git.rs:536:9
[INFO] [stdout]   22:     0x5c53b81385b7 - whet[df50700232411e4a]::tools::git::tests::test_git_empty_output_shows_no_output::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/workdir/src/tools/git.rs:529:47
[INFO] [stdout]   23:     0x5c53b833c766 - <whet[df50700232411e4a]::tools::git::tests::test_git_empty_output_shows_no_output::{closure#0} as core[df12db4294e9bfd3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x5c53b88ccbbb - <fn() -> core[df12db4294e9bfd3]::result::Result<(), alloc[2182bb758b4b3781]::string::String> as core[df12db4294e9bfd3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   25:     0x5c53b88ccbbb - test[9d35eded1c95d3be]::__rust_begin_short_backtrace::<core[df12db4294e9bfd3]::result::Result<(), alloc[2182bb758b4b3781]::string::String>, fn() -> core[df12db4294e9bfd3]::result::Result<(), alloc[2182bb758b4b3781]::string::String>>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/test/src/lib.rs:733:18
[INFO] [stdout]   26:     0x5c53b88da225 - test[9d35eded1c95d3be]::run_test_in_process::{closure#0}
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/test/src/lib.rs:756:74
[INFO] [stdout]   27:     0x5c53b88da225 - <core[df12db4294e9bfd3]::panic::unwind_safe::AssertUnwindSafe<test[9d35eded1c95d3be]::run_test_in_process::{closure#0}> as core[df12db4294e9bfd3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   28:     0x5c53b88da225 - std[70759c8f55707aa4]::panicking::catch_unwind::do_call::<core[df12db4294e9bfd3]::panic::unwind_safe::AssertUnwindSafe<test[9d35eded1c95d3be]::run_test_in_process::{closure#0}>, core[df12db4294e9bfd3]::result::Result<(), alloc[2182bb758b4b3781]::string::String>>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panicking.rs:576:43
[INFO] [stdout]   29:     0x5c53b88da225 - std[70759c8f55707aa4]::panicking::catch_unwind::<core[df12db4294e9bfd3]::result::Result<(), alloc[2182bb758b4b3781]::string::String>, core[df12db4294e9bfd3]::panic::unwind_safe::AssertUnwindSafe<test[9d35eded1c95d3be]::run_test_in_process::{closure#0}>>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panicking.rs:544:19
[INFO] [stdout]   30:     0x5c53b88da225 - std[70759c8f55707aa4]::panic::catch_unwind::<core[df12db4294e9bfd3]::panic::unwind_safe::AssertUnwindSafe<test[9d35eded1c95d3be]::run_test_in_process::{closure#0}>, core[df12db4294e9bfd3]::result::Result<(), alloc[2182bb758b4b3781]::string::String>>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panic.rs:359:14
[INFO] [stdout]   31:     0x5c53b88da225 - test[9d35eded1c95d3be]::run_test_in_process
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/test/src/lib.rs:756:27
[INFO] [stdout]   32:     0x5c53b88da225 - test[9d35eded1c95d3be]::run_test::{closure#0}
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/test/src/lib.rs:677:43
[INFO] [stdout]   33:     0x5c53b88d3ae4 - test[9d35eded1c95d3be]::run_test::{closure#1}
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/test/src/lib.rs:707:41
[INFO] [stdout]   34:     0x5c53b88d3ae4 - std[70759c8f55707aa4]::sys::backtrace::__rust_begin_short_backtrace::<test[9d35eded1c95d3be]::run_test::{closure#1}, ()>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   35:     0x5c53b88dd382 - std[70759c8f55707aa4]::thread::lifecycle::spawn_unchecked::<test[9d35eded1c95d3be]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/thread/lifecycle.rs:70:13
[INFO] [stdout]   36:     0x5c53b88dd382 - <core[df12db4294e9bfd3]::panic::unwind_safe::AssertUnwindSafe<std[70759c8f55707aa4]::thread::lifecycle::spawn_unchecked<test[9d35eded1c95d3be]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}> as core[df12db4294e9bfd3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   37:     0x5c53b88dd382 - std[70759c8f55707aa4]::panicking::catch_unwind::do_call::<core[df12db4294e9bfd3]::panic::unwind_safe::AssertUnwindSafe<std[70759c8f55707aa4]::thread::lifecycle::spawn_unchecked<test[9d35eded1c95d3be]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panicking.rs:576:43
[INFO] [stdout]   38:     0x5c53b88dd382 - std[70759c8f55707aa4]::panicking::catch_unwind::<(), core[df12db4294e9bfd3]::panic::unwind_safe::AssertUnwindSafe<std[70759c8f55707aa4]::thread::lifecycle::spawn_unchecked<test[9d35eded1c95d3be]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panicking.rs:544:19
[INFO] [stdout]   39:     0x5c53b88dd382 - std[70759c8f55707aa4]::panic::catch_unwind::<core[df12db4294e9bfd3]::panic::unwind_safe::AssertUnwindSafe<std[70759c8f55707aa4]::thread::lifecycle::spawn_unchecked<test[9d35eded1c95d3be]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/panic.rs:359:14
[INFO] [stdout]   40:     0x5c53b88dd382 - std[70759c8f55707aa4]::thread::lifecycle::spawn_unchecked::<test[9d35eded1c95d3be]::run_test::{closure#1}, ()>::{closure#1}
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/thread/lifecycle.rs:68:26
[INFO] [stdout]   41:     0x5c53b88dd382 - <std[70759c8f55707aa4]::thread::lifecycle::spawn_unchecked<test[9d35eded1c95d3be]::run_test::{closure#1}, ()>::{closure#1} as core[df12db4294e9bfd3]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   42:     0x5c53b8afcf89 - <alloc[2182bb758b4b3781]::boxed::Box<dyn core[df12db4294e9bfd3]::ops::function::FnOnce<(), Output = ()> + core[df12db4294e9bfd3]::marker::Send> as core[df12db4294e9bfd3]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/alloc/src/boxed.rs:2320:9
[INFO] [stdout]   43:     0x5c53b8afcf89 - <std[70759c8f55707aa4]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]                                at /rustc/dfb0accb7f508ae8be965d8629557221c889dd98/library/std/src/sys/thread/unix.rs:123:17
[INFO] [stdout]   44:     0x71fa6b713dfa - <unknown>
[INFO] [stdout]   45:     0x71fa6b7a73d4 - clone
[INFO] [stdout]   46:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     tools::git::tests::test_git_empty_output_shows_no_output
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 682 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.64s
[INFO] [stdout] 
[INFO] [stderr] error: test failed, to rerun pass `--lib`
[INFO] running `Command { std: "docker" "inspect" "bca50ba8c47d7b17d811acef68055508b3776f30da397d64a5864e62d7cd692e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "bca50ba8c47d7b17d811acef68055508b3776f30da397d64a5864e62d7cd692e", kill_on_drop: false }`
[INFO] [stdout] bca50ba8c47d7b17d811acef68055508b3776f30da397d64a5864e62d7cd692e
