[INFO] cloning repository https://github.com/tajiaoyezi/mysteries
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/tajiaoyezi/mysteries" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ftajiaoyezi%2Fmysteries", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ftajiaoyezi%2Fmysteries'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 64824bc7c857e296eac48e9feadbcc41be6bd45c
[INFO] testing tajiaoyezi/mysteries against 1.97.0-beta.6 for beta-1.98-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ftajiaoyezi%2Fmysteries" "/workspace/builds/worker-7-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc1/source'...
[INFO] [stderr] done.
[INFO] removed /workspace/builds/worker-7-tc1/source/rust-toolchain.toml
[INFO] started tweaking git repo https://github.com/tajiaoyezi/mysteries
[INFO] finished tweaking git repo https://github.com/tajiaoyezi/mysteries
[INFO] tweaked toml for git repo https://github.com/tajiaoyezi/mysteries written to /workspace/builds/worker-7-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/tajiaoyezi/mysteries on toolchain 1.97.0-beta.6
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.97.0-beta.6" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/tajiaoyezi/mysteries already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.97.0-beta.6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded fancy-regex v0.16.2
[INFO] [stderr]   Downloaded pulldown-cmark v0.13.4
[INFO] [stderr]   Downloaded ignore v0.4.26
[INFO] [stderr]   Downloaded bstr v1.12.3
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3d5ced03c013a94a2f102a4510f48a6e9184255caf5fd8244f58017bde7f5210" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 290043f625e1a3192d5dbf7a2c87d0fe32700de01d4f6da22d55b4baea3c6736
[INFO] running `Command { std: "docker" "start" "290043f625e1a3192d5dbf7a2c87d0fe32700de01d4f6da22d55b4baea3c6736", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "290043f625e1a3192d5dbf7a2c87d0fe32700de01d4f6da22d55b4baea3c6736", 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" "290043f625e1a3192d5dbf7a2c87d0fe32700de01d4f6da22d55b4baea3c6736" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "290043f625e1a3192d5dbf7a2c87d0fe32700de01d4f6da22d55b4baea3c6736", 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" "290043f625e1a3192d5dbf7a2c87d0fe32700de01d4f6da22d55b4baea3c6736" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling quote v1.0.46
[INFO] [stderr]    Compiling log v0.4.33
[INFO] [stderr]    Compiling smallvec v1.15.2
[INFO] [stderr]    Compiling bitflags v2.13.0
[INFO] [stderr]    Compiling bytes v1.12.0
[INFO] [stderr]    Compiling shlex v2.0.1
[INFO] [stderr]    Compiling zeroize v1.9.0
[INFO] [stderr]    Compiling socket2 v0.6.4
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling regex-syntax v0.8.11
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling rustls v0.23.41
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]    Compiling rustls-pki-types v1.14.1
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling mio v1.2.1
[INFO] [stderr]    Compiling cc v1.2.65
[INFO] [stderr]    Compiling time-core v0.1.9
[INFO] [stderr]    Compiling deranged v0.5.8
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling pxfm v0.1.29
[INFO] [stderr]    Compiling linux-raw-sys v0.4.15
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]    Compiling syn v2.0.118
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling bit-vec v0.8.0
[INFO] [stderr]    Compiling http v1.4.2
[INFO] [stderr]    Compiling signal-hook-mio v0.2.5
[INFO] [stderr]    Compiling webpki-roots v1.0.8
[INFO] [stderr]    Compiling bit-set v0.8.0
[INFO] [stderr]    Compiling hashbrown v0.15.5
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling png v0.18.1
[INFO] [stderr]    Compiling serde_json v1.0.150
[INFO] [stderr]    Compiling bstr v1.12.3
[INFO] [stderr]    Compiling quick-xml v0.39.4
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling time v0.3.53
[INFO] [stderr]    Compiling unicode-segmentation v1.13.3
[INFO] [stderr]    Compiling pulldown-cmark v0.13.4
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling linked-hash-map v0.5.6
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling bytemuck v1.25.0
[INFO] [stderr]    Compiling x11rb-protocol v0.13.2
[INFO] [stderr]    Compiling yaml-rust v0.4.5
[INFO] [stderr]    Compiling unicode-truncate v1.1.0
[INFO] [stderr]    Compiling compact_str v0.8.2
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling crossterm v0.28.1
[INFO] [stderr]    Compiling lru v0.12.5
[INFO] [stderr]    Compiling getopts v0.2.24
[INFO] [stderr]    Compiling cassowary v0.3.0
[INFO] [stderr]    Compiling pulldown-cmark-escape v0.11.0
[INFO] [stderr]    Compiling uuid v1.23.4
[INFO] [stderr]    Compiling secrecy v0.10.3
[INFO] [stderr]    Compiling moxcms v0.8.1
[INFO] [stderr]    Compiling gethostname v1.1.0
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling darling_core v0.23.0
[INFO] [stderr]    Compiling globset v0.4.18
[INFO] [stderr]    Compiling fancy-regex v0.16.2
[INFO] [stderr]    Compiling regex v1.12.4
[INFO] [stderr]    Compiling zerovec-derive v0.11.3
[INFO] [stderr]    Compiling displaydoc v0.2.6
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling tokio-macros v2.7.0
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling rustls-webpki v0.103.13
[INFO] [stderr]    Compiling tokio v1.52.3
[INFO] [stderr]    Compiling x11rb v0.13.2
[INFO] [stderr]    Compiling ignore v0.4.26
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling zerofrom v0.1.8
[INFO] [stderr]    Compiling yoke v0.8.3
[INFO] [stderr]    Compiling zerovec v0.11.6
[INFO] [stderr]    Compiling zerotrie v0.2.4
[INFO] [stderr]    Compiling strum v0.26.3
[INFO] [stderr]    Compiling tinystr v0.8.3
[INFO] [stderr]    Compiling potential_utf v0.1.5
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]    Compiling icu_locale_core v2.2.0
[INFO] [stderr]    Compiling icu_collections v2.2.0
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]    Compiling instability v0.3.12
[INFO] [stderr]    Compiling ratatui v0.29.0
[INFO] [stderr]    Compiling image v0.25.10
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling icu_provider v2.2.0
[INFO] [stderr]    Compiling icu_normalizer v2.2.0
[INFO] [stderr]    Compiling icu_properties v2.2.0
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling plist v1.9.0
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling bincode v1.3.3
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling syntect v5.3.0
[INFO] [stderr]    Compiling idna_adapter v1.2.2
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling arboard v3.6.1
[INFO] [stderr]    Compiling hyper v1.10.1
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling tower-http v0.6.11
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling mysteries v1.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 35s
[INFO] running `Command { std: "docker" "inspect" "290043f625e1a3192d5dbf7a2c87d0fe32700de01d4f6da22d55b4baea3c6736", 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" "290043f625e1a3192d5dbf7a2c87d0fe32700de01d4f6da22d55b4baea3c6736" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling console v0.16.3
[INFO] [stderr]    Compiling similar v2.7.0
[INFO] [stderr]    Compiling gethostname v1.1.0
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling x11rb v0.13.2
[INFO] [stderr]    Compiling insta v1.48.0
[INFO] [stderr]    Compiling arboard v3.6.1
[INFO] [stderr]    Compiling mysteries v1.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 37.21s
[INFO] running `Command { std: "docker" "inspect" "290043f625e1a3192d5dbf7a2c87d0fe32700de01d4f6da22d55b4baea3c6736", 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" "290043f625e1a3192d5dbf7a2c87d0fe32700de01d4f6da22d55b4baea3c6736" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.49s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/mysteries-4ec6c15248238c14)
[INFO] [stdout] 
[INFO] [stdout] running 817 tests
[INFO] [stdout] test agent::compacting::tests::compacting_can_compress_again_after_previous_summary ... ok
[INFO] [stdout] test agent::compacting::tests::compact_now_ignores_threshold ... ok
[INFO] [stdout] test agent::compacting::tests::compacting_keeps_tool_call_pairs_intact_in_recent_turns ... ok
[INFO] [stdout] test agent::compacting::tests::compacting_degrades_to_passthrough_when_summary_provider_fails ... ok
[INFO] [stdout] test agent::compacting::tests::compacting_passthrough_when_last_usage_is_none ... ok
[INFO] [stdout] test agent::compacting::tests::compacting_passthrough_when_under_threshold ... ok
[INFO] [stdout] test agent::compacting::tests::compacting_rewrites_history_when_over_threshold ... ok
[INFO] [stdout] test agent::compacting::tests::compacting_re_summarizes_instead_of_accumulating_old_summary_in_system ... ok
[INFO] [stdout] test agent::compacting::tests::explicit_override_beats_builtin_table ... ok
[INFO] [stdout] test agent::compacting::tests::compacting_set_provider_and_set_model_apply_to_compact_now ... ok
[INFO] [stdout] test agent::compacting::tests::run_compact_command_notices_failure_without_changing_history ... ok
[INFO] [stdout] test agent::compacting::tests::compacting_with_keep_zero_summarizes_all_non_system_messages ... ok
[INFO] [stdout] test agent::compacting::tests::run_compact_command_replaces_history_with_plain_notice ... ok
[INFO] [stdout] test agent::message::tests::assistant_deserializes_legacy_jsonl_without_thinking_key ... ok
[INFO] [stdout] test agent::compacting::tests::window_follows_current_model_via_builtin_table ... ok
[INFO] [stdout] test agent::message::tests::assistant_serde_roundtrip_without_thinking_key ... ok
[INFO] [stdout] test agent::message::tests::assistant_serde_roundtrip_with_thinking ... ok
[INFO] [stdout] test agent::tests::agent_loop_executes_tool_records_result_and_sends_accumulated_history ... ok
[INFO] [stdout] test agent::tests::agent_loop_records_denied_tool_without_executing_it ... ok
[INFO] [stdout] test agent::tests::agent_loop_forces_final_text_with_tools_disabled_after_iteration_limit ... ok
[INFO] [stdout] test agent::context::tests::passthrough_prepare_ignores_last_usage ... ok
[INFO] [stdout] test agent::context::tests::passthrough_set_provider_and_set_model_hooks_are_no_ops ... ok
[INFO] [stdout] test agent::tests::agent_loop_returns_max_iterations_when_forced_final_text_is_empty ... ok
[INFO] [stdout] test agent::tests::agent_loop_denies_write_file_without_creating_file ... ok
[INFO] [stdout] test agent::tests::agent_loop_stops_after_text_response_and_records_assistant ... ok
[INFO] [stdout] test agent::tests::agent_normal_mode_does_not_inject_plan_instruction ... ok
[INFO] [stdout] test agent::tests::agent_loop_returns_provider_error_as_fatal ... ok
[INFO] [stdout] test agent::tests::agent_loop_returns_provider_error_when_forced_final_call_fails ... ok
[INFO] [stdout] test agent::tests::agent_normal_mode_rejects_plan_only_tools_without_executing ... ok
[INFO] [stdout] test agent::tests::agent_loop_continues_after_tool_error_result ... ok
[INFO] [stdout] test agent::tests::agent_passes_previous_response_usage_as_last_usage_on_next_prepare ... ok
[INFO] [stdout] test agent::tests::set_model_strips_assistant_thinking_from_history ... ok
[INFO] [stdout] test agent::tests::agent_plan_mode_exposes_readonly_and_plan_only_schemas_only ... ok
[INFO] [stdout] test agent::tests::run_observed_round_trips_assistant_thinking_in_history ... ok
[INFO] [stdout] test agent::tests::set_model_updates_next_model_request ... ok
[INFO] [stdout] test agent::tests::run_observed_emits_on_usage_when_model_response_has_usage ... ok
[INFO] [stdout] test agent::tests::run_single_turn_builds_request_returns_text_and_streams_delta ... ok
[INFO] [stdout] test agent::tests::set_provider_and_set_model_propagate_to_context_strategy ... ok
[INFO] [stdout] test agent::tests::agent_plan_mode_snapshot_blocks_edit_after_submit_plan_flips_mode ... ok
[INFO] [stdout] test agent::tests::set_provider_routes_next_run_to_new_provider ... ok
[INFO] [stdout] test agent::tests::run_observed_emits_denied_permission_sequence ... ok
[INFO] [stdout] test agent::tests::agent_plan_mode_injects_transient_instruction_not_history ... ok
[INFO] [stdout] test agent::tests::run_observed_emits_tool_call_sequence ... ok
[INFO] [stdout] test agent::tests::run_observed_forced_final_request_carries_current_thinking_depth ... ok
[INFO] [stdout] test app::tests::assemble_agent_compacts_by_default_and_respects_explicit_window ... ok
[INFO] [stdout] test agent::tests::default_system_prompt_constrains_model_identity_claims ... ok
[INFO] [stdout] test agent::tests::set_provider_on_passthrough_strategy_is_no_op ... ok
[INFO] [stdout] test app::tests::assemble_agent_some_registers_update_plan_with_twelve_schemas ... ok
[INFO] [stdout] test app::tests::select_provider_returns_anthropic_provider_without_network ... ok
[INFO] [stdout] test app::tests::select_provider_returns_mock_provider_that_can_complete_offline ... ok
[INFO] [stdout] test app::tests::load_config_returns_error_when_required_fields_are_missing ... ok
[INFO] [stdout] test app::tests::select_provider_injects_provider_id_as_credential_name ... ok
[INFO] [stdout] test app::tests::load_config_merges_user_and_project_with_project_overrides ... ok
[INFO] [stdout] test app::tests::load_config_returns_error_for_invalid_toml ... ok
[INFO] [stdout] test app::tests::load_config_tolerates_missing_user_file_and_resolves_project_only ... ok
[INFO] [stdout] test cli::tests::apply_select_key_confirm_and_cancel ... ok
[INFO] [stdout] test app::tests::select_provider_returns_openai_provider_without_network ... ok
[INFO] [stdout] test app::tests::default_registry_contains_all_builtin_tools ... ok
[INFO] [stdout] test cli::tests::apply_secret_key_ignores_non_press_so_leftover_release_does_not_submit_or_duplicate ... ok
[INFO] [stdout] test app::tests::assemble_agent_uses_config_model_and_dispatches_default_tools ... ok
[INFO] [stdout] test app::tests::select_provider_injects_configured_attempt_timeout_without_network ... ok
[INFO] [stdout] test cli::tests::apply_secret_key_maps_press_events ... ok
[INFO] [stdout] test app::tests::assemble_agent_some_drives_eleven_tools_in_normal_mode ... ok
[INFO] [stdout] test agent::compacting::tests::compacting_passthrough_when_keep_covers_all_user_turns ... ok
[INFO] [stdout] test agent::tests::agent_loop_continues_after_unknown_tool ... ok
[INFO] [stdout] test cli::tests::apply_select_key_wraps_highlight_at_bounds ... ok
[INFO] [stdout] test agent::compacting::tests::compacting_puts_summary_in_system_not_new_message ... ok
[INFO] [stdout] test cli::tests::cli_error_assembly_transparent_passthrough_missing_field ... ok
[INFO] [stdout] test cli::tests::cli_error_not_configured_display_contains_auth_login_command ... ok
[INFO] [stdout] test cli::tests::apply_select_key_ignores_unrelated_keys ... ok
[INFO] [stdout] test agent::context::tests::passthrough_prepare_returns_history_unchanged ... ok
[INFO] [stdout] test cli::tests::login_wps_codingplan_anthropic_protocol_uses_anthropic_endpoint ... ok
[INFO] [stdout] test cli::tests::config_error_missing_field_display_is_readable ... ok
[INFO] [stdout] test cli::tests::login_wps_codingplan_cancelled_at_key_returns_cancelled ... ok
[INFO] [stdout] test cli::tests::parse_decision_allows_y_yes_case_insensitive_and_trimmed ... ok
[INFO] [stdout] test cli::tests::load_config_or_onboard_cancelled_on_first_run_writes_nothing ... ok
[INFO] [stdout] test cli::tests::load_config_or_onboard_skips_onboarding_when_config_exists ... ok
[INFO] [stdout] test cli::tests::help_text_covers_key_usage ... ok
[INFO] [stdout] test cli::tests::initial_history_seeds_system_then_user_prompt ... ok
[INFO] [stdout] test cli::tests::load_config_or_onboard_first_run_openai_preset_writes_config_and_returns_ok ... ok
[INFO] [stdout] test cli::tests::login_wps_codingplan_openai_protocol_returns_expected_patch ... ok
[INFO] [stdout] test cli::tests::parse_decision_denies_non_confirmation_empty_and_eof_equivalent ... ok
[INFO] [stdout] test cli::tests::load_config_or_onboard_broken_config_skips_onboarding_and_returns_load_error ... ok
[INFO] [stdout] test cli::tests::login_wps_codingplan_cancelled_at_protocol_returns_cancelled ... ok
[INFO] [stdout] test cli::tests::run_auth_login_wps_oauth2_placeholder_writes_nothing ... ok
[INFO] [stdout] test cli::tests::run_auth_login_wps_codingplan_writes_config_and_credential ... ok
[INFO] [stdout] test cli::tests::run_auth_logout_cancelled_select_keeps_all ... ok
[INFO] [stdout] test cli::tests::preset_patch_maps_each_preset_to_config_and_credential_key ... ok
[INFO] [stdout] test cli::tests::run_auth_login_cancelled_select_writes_nothing ... ok
[INFO] [stdout] test cli::tests::run_auth_login_preset_deepseek_writes_config_and_credential ... ok
[INFO] [stdout] test cli::tests::run_auth_login_provider_menu_lists_wps_ai_before_custom ... ok
[INFO] [stdout] test cli::tests::scripted_auth_prompter_select_returns_scripted_indices ... ok
[INFO] [stdout] test cli::tests::version_text_embeds_crate_version ... ok
[INFO] [stdout] test cli::tests::wants_help_rejects_non_help_flags ... ok
[INFO] [stdout] test cli::tests::run_auth_logout_without_credentials_returns_ok ... ok
[INFO] [stdout] test cli::tests::wants_version_matches_only_version_flag ... ok
[INFO] [stdout] test config::tests::merge_allowed_commands_uses_union_dedup_in_sorted_order ... ok
[INFO] [stdout] test config::tests::merge_project_overrides_scalars_and_inherits_missing_user_values ... ok
[INFO] [stdout] test config::tests::merge_provider_id_field_level ... ok
[INFO] [stdout] test cli::tests::run_cli_headless_first_run_returns_not_configured ... ok
[INFO] [stdout] test config::tests::merge_leaves_fields_none_when_both_layers_omit_them ... ok
[INFO] [stdout] test config::tests::merge_active_project_overrides_user ... ok
[INFO] [stdout] test config::tests::merge_thinking_project_overrides_user_and_defaults_to_low ... ok
[INFO] [stdout] test config::tests::merge_provider_nested_fields_recursively ... ok
[INFO] [stdout] test cli::tests::wants_help_matches_exact_help_flags ... ok
[INFO] [stdout] test config::tests::parse_provider_id_when_present ... ok
[INFO] [stdout] test config::tests::parse_new_multi_provider_schema ... ok
[INFO] [stdout] test config::tests::parse_allowed_commands_from_toml ... ok
[INFO] [stdout] test config::tests::merge_overrides_compaction_fields_from_project_layer ... ok
[INFO] [stdout] test config::tests::parse_legacy_schema_leaves_active_and_providers_none ... ok
[INFO] [stdout] test config::tests::merge_providers_union_with_field_level_override ... ok
[INFO] [stdout] test cli::tests::run_auth_login_custom_writes_config_and_credential ... ok
[INFO] [stdout] test cli::tests::run_auth_logout_removes_selected_keeps_others ... ok
[INFO] [stdout] test config::tests::parse_invalid_toml_returns_config_error ... ok
[INFO] [stdout] test config::tests::resolve_applies_compaction_defaults_when_unset ... ok
[INFO] [stdout] test config::tests::resolve_multi_provider_selected_profile_missing_kind ... ok
[INFO] [stdout] test config::tests::resolve_multi_provider_multiple_without_active_requires_active_field ... ok
[INFO] [stdout] test config::tests::resolve_complete_raw_config_applies_defaults ... ok
[INFO] [stdout] test config::tests::resolve_defaults_allowed_commands_to_empty_vec ... ok
[INFO] [stdout] test config::tests::parse_old_config_without_provider_id ... ok
[INFO] [stdout] test config::tests::parse_partial_toml_sets_some_and_missing_fields_to_none ... ok
[INFO] [stdout] test config::tests::resolve_multi_provider_active_hit_selects_profile ... ok
[INFO] [stdout] test config::tests::resolve_defaults_timeout_when_missing ... ok
[INFO] [stdout] test config::tests::append_allowed_command_adds_field_when_missing ... ok
[INFO] [stdout] test config::tests::resolve_provider_id_uses_explicit_id_when_set ... ok
[INFO] [stdout] test config::tests::resolve_returns_missing_field_for_required_model ... ok
[INFO] [stdout] test config::tests::resolve_without_providers_map_falls_back_to_legacy_single_provider ... ok
[INFO] [stdout] test config::tests::resolve_provider_profiles_falls_back_to_legacy_single_provider ... ok
[INFO] [stdout] test config::tests::append_allowed_command_dedups_and_writes_readable_toml ... ok
[INFO] [stdout] test config::tests::resolve_returns_missing_field_for_required_provider_kind ... ok
[INFO] [stdout] test config::tests::resolve_provider_id_falls_back_to_kind_default_name ... ok
[INFO] [stdout] test config::tests::write_config_creates_file_when_missing ... ok
[INFO] [stdout] test config::tests::write_config_merges_provider_kind_and_base_url ... ok
[INFO] [stdout] test config::tests::write_config_merges_model_and_preserves_other_fields ... ok
[INFO] [stdout] test credential::tests::collect_credential_sources_lists_env_only_when_file_missing ... ok
[INFO] [stdout] test config::tests::resolve_provider_profiles_returns_empty_without_any_provider ... ok
[INFO] [stdout] test config::tests::resolve_provider_profiles_skips_incomplete_entries ... ok
[INFO] [stdout] test config::tests::write_config_persists_provider_id ... ok
[INFO] [stdout] test config::tests::resolve_multi_provider_selected_profile_missing_model ... ok
[INFO] [stdout] test config::tests::resolve_multi_provider_single_entry_without_active ... ok
[INFO] [stdout] test config::tests::write_config_migrates_legacy_provider_before_upsert ... ok
[INFO] [stdout] test credential::tests::collect_credential_sources_custom_name_does_not_use_env ... ok
[INFO] [stdout] test config::tests::resolve_multi_provider_unknown_active_is_invalid_value ... ok
[INFO] [stdout] test credential::tests::credential_chain_falls_back_to_file_when_env_is_missing ... ok
[INFO] [stdout] test credential::tests::credential_chain_returns_none_when_all_sources_are_missing ... ok
[INFO] [stdout] test credential::tests::credential_source_trait_object_returns_secret_when_provider_matches ... ok
[INFO] [stdout] test credential::tests::collect_credential_sources_lists_file_only_entries_preserving_order ... ok
[INFO] [stdout] test credential::tests::credential_chain_returns_env_value_first_and_short_circuits_file ... ok
[INFO] [stdout] test config::tests::resolve_rejects_compact_trigger_ratio_out_of_range ... ok
[INFO] [stdout] test config::tests::resolve_provider_profiles_returns_all_new_schema_entries ... ok
[INFO] [stdout] test credential::tests::env_credential_source_custom_name_does_not_use_env_even_when_present ... ok
[INFO] [stdout] test credential::tests::env_credential_source_resolves_openai_from_injected_lookup ... ok
[INFO] [stdout] test credential::tests::env_credential_source_returns_none_when_variable_is_missing ... ok
[INFO] [stdout] test credential::tests::env_credential_source_resolves_anthropic_from_injected_lookup ... ok
[INFO] [stdout] test credential::tests::env_credential_source_resolves_deepseek_from_injected_lookup ... ok
[INFO] [stdout] test credential::tests::secret_string_debug_output_does_not_expose_plaintext ... ok
[INFO] [stdout] test credential::tests::remove_credential_idempotent_when_no_match_or_missing_file ... ok
[INFO] [stdout] test config::tests::write_config_upsert_preserves_other_providers_and_sets_active ... ok
[INFO] [stdout] test permission::tests::auto_allows_accept_edits_mode_allows_edit_not_execute ... ok
[INFO] [stdout] test permission::tests::auto_allows_normal_mode_never_auto_allows_edit_or_execute ... ok
[INFO] [stdout] test permission::tests::auto_allows_plan_mode_never_auto_allows_edit_or_execute ... ok
[INFO] [stdout] test permission::tests::auto_allows_yolo_mode_allows_edit_and_execute ... ok
[INFO] [stdout] test credential::tests::remove_credential_rewrites_with_owner_only_permissions_on_unix ... ok
[INFO] [stdout] test credential::tests::write_credential_error_does_not_leak_plaintext ... ok
[INFO] [stdout] test credential::tests::credential_source_trait_object_returns_none_when_provider_is_missing ... ok
[INFO] [stdout] test credential::tests::collect_credential_sources_merges_same_name_with_env_before_file ... ok
[INFO] [stdout] test credential::tests::write_credential_tightens_permissions_when_overwriting_world_readable_file ... ok
[INFO] [stdout] test permission::tests::cycle_permission_mode_rotates_normal_accept_edits_yolo_plan ... ok
[INFO] [stdout] test permission::tests::policy_from_commands_normalizes_and_dedups ... ok
[INFO] [stdout] test permission::tests::policy_is_allowed_matches_only_normalized_allowed_commands ... ok
[INFO] [stdout] test provider::anthropic::tests::anthropic_live_smoke_streams_text ... ignored, requires ANTHROPIC_API_KEY and network access
[INFO] [stdout] test permission::tests::gate_uses_decider_for_edit_and_execute_tools ... ok
[INFO] [stdout] test permission::tests::gate_allows_read_only_tools_without_asking_decider ... ok
[INFO] [stdout] test permission::tests::permission_mode_label_plan ... ok
[INFO] [stdout] test permission::tests::policy_normalize_trims_and_compresses_internal_whitespace ... ok
[INFO] [stdout] test permission::tests::policy_remember_adds_command_for_later_checks ... ok
[INFO] [stdout] test permission::tests::policy_permission_key_returns_normalized_command_for_execute_tools ... ok
[INFO] [stdout] test provider::anthropic::tests::anthropic_provider_builds_messages_request_url_headers_and_body_offline ... ok
[INFO] [stdout] test permission::tests::policy_permission_key_ignores_non_execute_or_missing_command ... ok
[INFO] [stdout] test credential::tests::write_credential_upserts_new_and_replaces_existing_preserving_other_lines ... ok
[INFO] [stdout] test credential::tests::file_credential_source_resolves_matching_provider_line ... ok
[INFO] [stdout] test credential::tests::write_credential_sets_owner_only_permissions_on_unix ... ok
[INFO] [stdout] test credential::tests::remove_credential_error_does_not_leak_plaintext ... ok
[INFO] [stdout] test credential::tests::file_credential_source_returns_none_for_missing_provider_or_file ... ok
[INFO] [stdout] test provider::anthropic::tests::anthropic_provider_default_uses_official_base_url ... ok
[INFO] [stdout] test provider::anthropic::tests::anthropic_provider_injected_name_rejects_mismatched_chain_key ... ok
[INFO] [stdout] test provider::anthropic::tests::anthropic_provider_returns_auth_when_credentials_are_missing ... ok
[INFO] [stdout] test provider::anthropic_stream::tests::anthropic_sse_redacted_thinking_block_is_marked_redacted ... ok
[INFO] [stdout] test provider::anthropic_stream::tests::anthropic_sse_thinking_and_signature_accumulate_into_model_response ... ok
[INFO] [stdout] test provider::anthropic_stream::tests::anthropic_sse_stitches_events_across_chunk_boundaries ... ok
[INFO] [stdout] test provider::anthropic_stream::tests::anthropic_sse_invalid_tool_input_returns_decode ... ok
[INFO] [stdout] test credential::tests::collect_credential_sources_returns_empty_when_no_file_or_env ... ok
[INFO] [stdout] test provider::anthropic::tests::anthropic_provider_maps_http_403_to_fatal_forbidden_transport ... ok
[INFO] [stdout] test provider::anthropic::tests::anthropic_provider_complete_accumulates_successful_sse_stream ... ok
[INFO] [stdout] test provider::anthropic_stream::tests::anthropic_sse_message_start_usage_without_delta_uses_zero_output_tokens ... ok
[INFO] [stdout] test provider::anthropic_wire::tests::adaptive_model_medium_emits_adaptive_and_output_config ... ok
[INFO] [stdout] test provider::anthropic::tests::anthropic_provider_maps_http_400_to_fatal_transport ... ok
[INFO] [stdout] test provider::anthropic_stream::tests::anthropic_sse_text_and_tool_use_normalize_to_model_response ... ok
[INFO] [stdout] test credential::tests::remove_credential_removes_matching_line_preserving_others ... ok
[INFO] [stdout] test provider::anthropic_stream::tests::anthropic_sse_without_usage_returns_none ... ok
[INFO] [stdout] test provider::anthropic_wire::tests::dump_thinking_wire_samples ... ignored, manual: cargo test dump_thinking_wire_samples --lib -- --ignored --nocapture
[INFO] [stdout] test provider::anthropic_wire::tests::budget_guard_omits_thinking_when_max_tokens_too_small_or_none ... ok
[INFO] [stdout] test provider::anthropic_wire::tests::assistant_thinking_blocks_precede_text_and_tool_use ... ok
[INFO] [stdout] test provider::anthropic_wire::tests::off_can_disable_emits_disabled ... ok
[INFO] [stdout] test provider::anthropic_wire::tests::none_capability_model_omits_thinking_and_output_config ... ok
[INFO] [stdout] test provider::anthropic_wire::tests::off_always_on_emits_low_effort_without_thinking ... ok
[INFO] [stdout] test provider::anthropic_wire::tests::assistant_tool_calls_without_text_omit_text_block ... ok
[INFO] [stdout] test provider::anthropic_wire::tests::budget_model_high_emits_enabled_budget_tokens ... ok
[INFO] [stdout] test provider::anthropic_wire::tests::serialize_request_uses_explicit_max_tokens_when_present ... ok
[INFO] [stdout] test provider::mock::tests::mock_provider_preserves_scripted_usage ... ok
[INFO] [stdout] test provider::model_meta::tests::anthropic_thinking_capability_matches_known_models ... ok
[INFO] [stdout] test provider::mock::tests::mock_provider_returns_error_when_script_is_exhausted ... ok
[INFO] [stdout] test provider::mock::tests::mock_provider_returns_scripted_responses_in_order_and_records_requests ... ok
[INFO] [stdout] test provider::anthropic_wire::tests::budget_model_off_depth_omits_thinking_fields ... ok
[INFO] [stdout] test provider::anthropic_wire::tests::serialize_request_maps_anthropic_messages_tools_and_default_max_tokens ... ok
[INFO] [stdout] test provider::anthropic_wire::tests::serialize_request_wires_adaptive_thinking_from_model_request ... ok
[INFO] [stdout] test provider::anthropic_wire::tests::thinking_block_without_signature_omits_signature_key ... ok
[INFO] [stdout] test provider::model_meta::tests::gateway_prefixed_names_match_by_substring ... ok
[INFO] [stdout] test provider::model_meta::tests::more_specific_entries_shadow_generic_gpt4 ... ok
[INFO] [stdout] test provider::model_meta::tests::openai_thinking_capability_matches_known_models ... ok
[INFO] [stdout] test provider::model_meta::tests::resolve_prefers_explicit_over_table_over_default ... ok
[INFO] [stdout] test provider::model_meta::tests::short_o_series_patterns_match_on_boundaries_only ... ok
[INFO] [stdout] test provider::model_meta::tests::table_lookup_is_case_insensitive ... ok
[INFO] [stdout] test provider::model_meta::tests::unknown_model_returns_none_from_table ... ok
[INFO] [stdout] test provider::openai::tests::classify_401_as_fatal_auth_and_403_as_forbidden_transport ... ok
[INFO] [stdout] test provider::openai::tests::classify_non_retryable_client_statuses_as_fatal_transport ... ok
[INFO] [stdout] test provider::openai::tests::openai_live_smoke_streams_text ... ignored, requires OPENAI_API_KEY and network access
[INFO] [stdout] test provider::openai::tests::classify_transport_error_kinds ... ok
[INFO] [stdout] test provider::openai::tests::classify_retryable_statuses_as_rate_limited ... ok
[INFO] [stdout] test provider::openai::tests::accumulate_stream_returns_stream_error_without_reemitting_text ... ok
[INFO] [stdout] test provider::openai::tests::openai_provider_builds_chat_completions_request_body_and_url ... ok
[INFO] [stdout] test provider::openai::tests::with_retry_does_not_retry_fatal_auth ... ok
[INFO] [stdout] test provider::registry::tests::models_for_unknown_id_returns_none ... ok
[INFO] [stdout] test provider::registry::tests::models_for_wps_includes_zhipu_glm_5_2 ... ok
[INFO] [stdout] test provider::openai::tests::with_retry_retries_retryable_errors_then_succeeds ... ok
[INFO] [stdout] test provider::openai::tests::openai_provider_returns_auth_when_credentials_are_missing ... ok
[INFO] [stdout] test provider::openai::tests::with_retry_returns_last_error_after_exhausting_retries ... ok
[INFO] [stdout] test provider::registry::tests::models_for_wps_and_deepseek_return_distinct_openai_kind_catalogs ... ok
[INFO] [stdout] test provider::openai::tests::openai_provider_injected_name_rejects_mismatched_chain_key ... ok
[INFO] [stdout] test provider::stream::tests::invalid_tool_call_arguments_returns_decode_error ... ok
[INFO] [stdout] test provider::stream::tests::event_split_across_chunk_boundary_is_stitched ... ok
[INFO] [stdout] test provider::openai::tests::with_retry_times_out_single_attempt_and_retries ... ok
[INFO] [stdout] test provider::stream::tests::tool_call_deltas_are_accumulated_by_index ... ok
[INFO] [stdout] test provider::stream::tests::text_deltas_are_pushed_immediately_and_done_returns_response ... ok
[INFO] [stdout] test provider::registry::tests::models_for_preset_providers_return_expected_singletons ... ok
[INFO] [stdout] test provider::stream::tests::reasoning_content_delta_calls_on_thinking ... ok
[INFO] [stdout] test provider::stream::tests::usage_chunk_with_missing_fields_degrades_to_none ... ok
[INFO] [stdout] test provider::stream::tests::usage_only_chunk_sets_usage_without_affecting_stream_content ... ok
[INFO] [stdout] test provider::tests::delta_sink_captures_text_and_noop_sink_drops_it ... ok
[INFO] [stdout] test provider::tests::depth_as_effort_caps_xhigh_to_model_max ... ok
[INFO] [stdout] test provider::tests::model_response_without_usage_represents_unknown_usage ... ok
[INFO] [stdout] test provider::tests::model_request_default_leaves_thinking_empty ... ok
[INFO] [stdout] test provider::tests::usage_total_adds_input_and_output_tokens ... ok
[INFO] [stdout] test provider::wire::tests::dump_openai_wire_samples ... ignored, manual: cargo test dump_openai_wire_samples --lib -- --ignored --nocapture
[INFO] [stdout] test provider::wire::tests::parse_response_maps_length_and_unknown_finish_reasons ... ok
[INFO] [stdout] test provider::wire::tests::non_reasoning_model_keeps_max_tokens_without_reasoning_effort ... ok
[INFO] [stdout] test provider::wire::tests::parse_response_maps_text_response_to_model_response ... ok
[INFO] [stdout] test provider::wire::tests::parse_response_normalizes_tool_calls_arguments_json ... ok
[INFO] [stdout] test provider::wire::tests::parse_response_rejects_invalid_tool_arguments_json ... ok
[INFO] [stdout] test provider::tests::depth_serde_roundtrip ... ok
[INFO] [stdout] test provider::tests::model_response_default_leaves_thinking_empty ... ok
[INFO] [stdout] test provider::tests::provider_can_be_called_through_trait_object ... ok
[INFO] [stdout] test provider::wire::tests::parse_response_rejects_non_array_tool_calls ... ok
[INFO] [stdout] test provider::wire::tests::parse_response_rejects_non_string_message_content ... ok
[INFO] [stdout] test provider::wire::tests::parse_response_returns_decode_error_for_invalid_body ... ok
[INFO] [stdout] test provider::wire::tests::reasoning_model_off_uses_max_completion_tokens_without_reasoning_effort ... ok
[INFO] [stdout] test provider::wire::tests::reasoning_model_medium_emits_max_completion_tokens_and_reasoning_effort ... ok
[INFO] [stdout] test provider::wire::tests::serialize_assistant_with_text_and_tool_calls_keeps_string_content ... ok
[INFO] [stdout] test provider::wire::tests::serialize_request_maps_messages_to_openai_roles_and_fields ... ok
[INFO] [stdout] test provider::wire::tests::serialize_request_includes_tools_only_when_present ... ok
[INFO] [stdout] test session::tests::latest_returns_none_for_empty_directory ... ok
[INFO] [stdout] test session::tests::list_sessions_returns_empty_vec_for_empty_directory ... ok
[INFO] [stdout] test session::tests::list_sessions_uses_none_when_session_has_no_user_message ... ok
[INFO] [stdout] test session::tests::empty_history_and_transcript_round_trip_as_meta_only ... ok
[INFO] [stdout] test session::tests::load_legacy_assistant_without_thinking_key_succeeds ... ok
[INFO] [stdout] test session::tests::list_sessions_ignores_non_jsonl_files ... ok
[INFO] [stdout] test provider::wire::tests::reasoning_model_without_thinking_config_omits_reasoning_effort ... ok
[INFO] [stdout] test session::tests::load_returns_err_when_meta_line_is_missing ... ok
[INFO] [stdout] test session::tests::load_returns_err_when_meta_line_is_duplicated ... ok
[INFO] [stdout] test session::tests::list_sessions_skips_damaged_files_without_failing_all ... ok
[INFO] [stdout] test session::tests::list_sessions_truncates_first_user_to_sixty_chars ... ok
[INFO] [stdout] test session::tests::load_returns_err_for_unknown_tag ... ok
[INFO] [stdout] test session::tests::load_returns_err_for_invalid_json_line ... ok
[INFO] [stdout] test session::tests::replace_system_head_leaves_empty_history_unchanged ... ok
[INFO] [stdout] test session::tests::new_session_id_is_uuid_v4_and_unique ... ok
[INFO] [stdout] test session::tests::replace_system_head_leaves_non_system_head_unchanged ... ok
[INFO] [stdout] test tool::ask::tests::ask_user_returns_selected_labels_and_supplement ... ok
[INFO] [stdout] test tool::ask::tests::ask_user_missing_question_returns_error ... ok
[INFO] [stdout] test session::tests::write_uses_meta_id_as_file_name_and_load_preserves_it ... ok
[INFO] [stdout] test session::tests::load_dispatches_lines_without_requiring_order ... ok
[INFO] [stdout] test provider::wire::tests::parse_response_treats_missing_finish_reason_as_other_empty ... ok
[INFO] [stdout] test session::tests::replace_system_head_replaces_only_existing_system_head ... ok
[INFO] [stdout] test session::tests::session_line_uses_external_tags ... ok
[INFO] [stdout] test session::tests::write_then_load_round_trips_meta_history_and_transcript ... ok
[INFO] [stdout] test tool::edit::tests::write_file_returns_error_when_parent_directory_is_missing ... ok
[INFO] [stdout] test tool::fs::tests::glob_returns_error_for_invalid_pattern ... ok
[INFO] [stdout] test tool::edit::tests::write_file_returns_error_when_target_cannot_be_written ... ok
[INFO] [stdout] test tool::fs::tests::grep_returns_error_for_invalid_regex ... ok
[INFO] [stdout] test tool::fs::tests::grep_matches_regex_with_locations_and_respects_gitignore ... ok
[INFO] [stdout] test tool::fs::tests::grep_skips_non_utf8_files_and_returns_text_matches ... ok
[INFO] [stdout] test tool::fs::tests::list_dir_returns_error_for_missing_path ... ok
[INFO] [stdout] test tool::fs::tests::grep_truncates_on_utf8_character_boundary ... ok
[INFO] [stdout] test tool::fs::tests::read_file_pages_by_line_offset_and_limit ... ok
[INFO] [stdout] test tool::fs::tests::read_file_reads_content_from_context_cwd ... ok
[INFO] [stdout] test tool::fs::tests::list_dir_lists_entries_and_respects_gitignore ... ok
[INFO] [stdout] test tool::edit::tests::edit_file_replaces_unique_match ... ok
[INFO] [stdout] test tool::edit::tests::edit_file_returns_error_and_preserves_file_when_match_is_missing ... ok
[INFO] [stdout] test tool::fs::tests::read_file_returns_error_for_missing_path ... ok
[INFO] [stdout] test session::tests::second_write_rewrites_file_without_stale_messages ... ok
[INFO] [stdout] test tool::edit::tests::write_file_creates_new_file ... ok
[INFO] [stdout] test tool::edit::tests::edit_file_returns_error_and_preserves_file_when_match_is_not_unique ... ok
[INFO] [stdout] test tool::fs::tests::glob_matches_files_from_context_cwd_and_respects_gitignore ... ok
[INFO] [stdout] test tool::plan::tests::update_plan_is_not_plan_only ... ok
[INFO] [stdout] test tool::plan::tests::update_plan_is_read_only ... ok
[INFO] [stdout] test tool::plan::tests::submit_plan_missing_steps_returns_error ... ok
[INFO] [stdout] test tool::plan::tests::update_plan_done_records_progress_with_validation ... ok
[INFO] [stdout] test tool::plan::tests::update_plan_in_progress_without_validation ... ok
[INFO] [stdout] test tool::plan::tests::update_plan_rejects_bogus_status ... ok
[INFO] [stdout] test tool::plan::tests::submit_plan_approve_returns_success ... ok
[INFO] [stdout] test tool::edit::tests::write_file_overwrites_existing_file ... ok
[INFO] [stdout] test tool::plan::tests::submit_plan_reject_returns_error_with_reason ... ok
[INFO] [stdout] test tool::fs::tests::read_file_truncates_on_utf8_character_boundary ... ok
[INFO] [stdout] test tool::plan::tests::update_plan_rejects_missing_step ... ok
[INFO] [stdout] test tool::plan::tests::update_plan_rejects_pending_status ... ok
[INFO] [stdout] test tool::plan::tests::update_plan_rejects_step_zero ... ok
[INFO] [stdout] test tool::tests::registry_accepts_unique_tool_name ... ok
[INFO] [stdout] test tool::tests::registry_exposes_tool_schemas_for_model_requests ... ok
[INFO] [stdout] test tool::tests::registry_rejects_duplicate_tool_name_without_overwriting_original ... ok
[INFO] [stdout] test tool::tests::schemas_for_non_plan_excludes_plan_only_preserving_order ... ok
[INFO] [stdout] test tool::tests::schemas_unchanged_when_not_filtering_by_mode ... ok
[INFO] [stdout] test tool::tests::registry_registers_finds_and_executes_tools_by_name ... ok
[INFO] [stdout] test tool::tests::schemas_for_plan_includes_readonly_and_plan_only_preserving_order ... ok
[INFO] [stdout] test tool::web::tests::bytes_to_text_recovers_valid_prefix_from_invalid_utf8_tail ... ok
[INFO] [stdout] test tool::web::tests::check_resolved_allows_all_public ... ok
[INFO] [stdout] test tool::web::tests::check_resolved_rejects_blocked_and_empty ... ok
[INFO] [stdout] test tool::web::tests::decode_uddg_extracts_real_url_and_does_not_swallow_rut_tail ... ok
[INFO] [stdout] test tool::web::tests::decode_uddg_handles_https_href_without_leading_slashes ... ok
[INFO] [stdout] test tool::web::tests::ddg_search_url_encodes_chinese_and_ampersand ... ok
[INFO] [stdout] test tool::web::tests::decode_uddg_returns_none_for_ad_or_missing_uddg ... ok
[INFO] [stdout] test tool::web::tests::ddg_search_url_encodes_spaces_as_plus ... ok
[INFO] [stdout] test tool::tests::plan_only_defaults_false_for_unoverridden_tools ... ok
[INFO] [stdout] test tool::web::tests::is_blocked_ip_allows_public_addresses ... ok
[INFO] [stdout] test tool::web::tests::is_blocked_ip_blocks_private_and_reserved_ranges ... ok
[INFO] [stdout] test tool::shell::tests::run_shell_returns_error_for_nonzero_exit ... ok
[INFO] [stdout] test tool::web::tests::is_readable_content_type_allows_text_and_missing_header ... ok
[INFO] [stdout] test tool::shell::tests::run_shell_captures_stdout_stderr_and_exit_code ... ok
[INFO] [stdout] test tool::shell::tests::run_shell_truncates_output_on_utf8_character_boundary ... ok
[INFO] [stdout] test tool::web::tests::precheck_url_allows_hostnames_and_public_ips ... ok
[INFO] [stdout] test tool::web::tests::precheck_url_normalizes_encoded_ipv4_literals ... ok
[INFO] [stdout] test tool::web::tests::precheck_url_rejects_non_http_schemes_and_blocked_ips ... ok
[INFO] [stdout] test tool::web::tests::precheck_url_rejects_redirect_target_to_loopback ... ok
[INFO] [stdout] test tool::web::tests::precheck_url_strips_ipv6_brackets_from_host_str ... ok
[INFO] [stdout] test tool::web::tests::process_http_response_rejects_redirect_target_to_internal ... ok
[INFO] [stdout] test tool::web::tests::process_http_response_rejects_unsupported_content_type ... ok
[INFO] [stdout] test tool::web::tests::process_http_response_rejects_non_success_http_status ... ok
[INFO] [stdout] test tool::web::tests::web_fetch_returns_error_for_missing_url_argument ... ok
[INFO] [stdout] test tool::web::tests::web_fetch_returns_error_when_fetcher_fails ... ok
[INFO] [stdout] test tool::web::tests::parse_ddg_results_returns_empty_for_no_results ... ok
[INFO] [stdout] test tool::web::tests::reqwest_fetcher_rejects_localhost_via_dns_resolution ... ok
[INFO] [stdout] test tool::web::tests::web_search_returns_error_for_missing_query_argument ... ok
[INFO] [stdout] test tool::web::tests::web_search_returns_error_when_fetcher_fails ... ok
[INFO] [stdout] test session::tests::list_sessions_returns_summaries_in_mtime_descending_order ... ok
[INFO] [stdout] test tool::web::tests::web_search_returns_error_when_no_results_parsed ... ok
[INFO] [stdout] test tui::app::tests::advance_spinner_cycles_frame_index ... ok
[INFO] [stdout] test tui::app::tests::app_state_selection_helpers_apply_and_clear_selection ... ok
[INFO] [stdout] test tui::app::tests::app_state_tracks_session_snapshot_and_iteration_counter ... ok
[INFO] [stdout] test tui::app::tests::apply_compact_done_returns_ready ... ok
[INFO] [stdout] test tui::app::tests::apply_permission_request_sets_pending_and_waiting_phase ... ok
[INFO] [stdout] test tui::app::tests::apply_status_changed_idle_does_not_set_ready ... ok
[INFO] [stdout] test tui::app::tests::apply_status_changed_updates_full_phase ... ok
[INFO] [stdout] test tui::app::tests::apply_text_delta_accumulates_current_assistant_block ... ok
[INFO] [stdout] test tui::app::tests::apply_tool_call_finished_updates_tool_block_to_done_or_error ... ok
[INFO] [stdout] test tool::web::tests::web_fetch_truncates_when_exceeding_max_output_bytes ... ok
[INFO] [stdout] test tui::app::tests::apply_tool_call_finished_without_matching_started_tool_is_ignored ... ok
[INFO] [stdout] test tui::app::tests::approve_activates_current_plan_with_all_pending_steps ... ok
[INFO] [stdout] test tui::app::tests::assistant_completion_does_not_increment_when_following_bottom ... ok
[INFO] [stdout] test tui::app::tests::assistant_completion_increments_new_message_count_when_not_following_bottom ... ok
[INFO] [stdout] test tui::app::tests::backspace_exits_history_in_on_key ... ok
[INFO] [stdout] test tui::app::tests::backtab_cycles_during_pending_permission_without_answering ... ok
[INFO] [stdout] test tui::app::tests::backtab_cycles_permission_mode_normal_accept_edits_yolo_plan ... ok
[INFO] [stdout] test tui::app::tests::batch_char_burst_with_internal_newline_inserts_without_submit ... ok
[INFO] [stdout] test tui::app::tests::batch_lone_enter_submits_prompt_via_batch_path ... ok
[INFO] [stdout] test tui::app::tests::batch_models_picker_keeps_all_filter_chars ... ok
[INFO] [stdout] test tui::app::tests::batch_newline_apply_closes_command_completion ... ok
[INFO] [stdout] test tui::app::tests::batch_pending_permission_answers_once_and_drops_rest ... ok
[INFO] [stdout] test tui::app::tests::apply_tool_call_started_adds_running_tool_block ... ok
[INFO] [stdout] test tui::app::tests::batch_pending_question_other_row_keeps_all_chars_in_supplement ... ok
[INFO] [stdout] test tui::app::tests::batch_pending_question_submit_breaks_batch_and_drops_rest ... ok
[INFO] [stdout] test tui::app::tests::batch_trailing_enter_after_picker_close_is_discarded ... ok
[INFO] [stdout] test tui::app::tests::build_rows_custom_provider_lists_configured_model_only ... ok
[INFO] [stdout] test tui::app::tests::build_rows_groups_providers_marks_current_and_headers_not_selectable ... ok
[INFO] [stdout] test tui::app::tests::clear_command_clears_selection ... ok
[INFO] [stdout] test tui::app::tests::clear_queue_empties_pending_and_has_queue_returns_false ... ok
[INFO] [stdout] test tui::app::tests::command_completion_keeps_char_and_backspace_editing_soft ... ok
[INFO] [stdout] test tui::app::tests::compact_command_rejected_while_running_or_queued ... ok
[INFO] [stdout] test tui::app::tests::compact_command_starts_compacting_phase_when_ready ... ok
[INFO] [stdout] test tui::app::tests::compute_diff_derives_write_edit_and_shell_from_args_without_reading_files ... ok
[INFO] [stdout] test tui::app::tests::copy_hint_active_within_ttl_and_expires_after ... ok
[INFO] [stdout] test tui::app::tests::boundary_scroll_jumps_to_top_and_returns_to_followed_bottom ... ok
[INFO] [stdout] test tui::app::tests::copy_hint_overwrite_replaces_previous_text ... ok
[INFO] [stdout] test tool::web::tests::html_to_text_strips_script_style_tags_and_decodes_entities ... ok
[INFO] [stdout] test tui::app::tests::ctrl_chars_are_filtered_except_newline_and_altgr ... ok
[INFO] [stdout] test tui::app::tests::ctrl_o_is_reserved_for_tool_expansion_and_never_enters_input ... ok
[INFO] [stdout] test tui::app::tests::ctrl_o_toggles_during_pending_permission_without_answering_it ... ok
[INFO] [stdout] test tui::app::tests::cursor_keys_edit_at_cursor_and_line_boundaries ... ok
[INFO] [stdout] test tui::app::tests::ctrl_o_toggles_during_running_phase_without_interrupting_escape ... ok
[INFO] [stdout] test tui::app::tests::dequeue_next_on_empty_queue_returns_none_without_side_effects ... ok
[INFO] [stdout] test tui::app::tests::dequeue_next_clears_current_plan ... ok
[INFO] [stdout] test tui::app::tests::dequeue_next_pops_front_sets_busy_and_appends_user_transcript ... ok
[INFO] [stdout] test tui::app::tests::dequeue_next_resets_turn_token_usage ... ok
[INFO] [stdout] test tui::app::tests::enqueue_does_not_clear_current_plan ... ok
[INFO] [stdout] test tui::app::tests::enqueue_prompt_appends_to_queue_tail_in_fifo_order ... ok
[INFO] [stdout] test tui::app::tests::enter_submits_mixed_text_and_paste_fold_in_order ... ok
[INFO] [stdout] test tui::app::tests::error_bumps_new_message_count_when_not_following_bottom ... ok
[INFO] [stdout] test tui::app::tests::error_does_not_clear_current_plan ... ok
[INFO] [stdout] test tui::app::tests::estimate_streaming_rate_tps_uses_chars_per_token_ratio ... ok
[INFO] [stdout] test tui::app::tests::estimate_streaming_rate_tps_zero_elapsed_returns_none ... ok
[INFO] [stdout] test tui::app::tests::enter_submission_clears_selection ... ok
[INFO] [stdout] test tui::app::tests::estimate_tokens_from_chars_uses_quarter_char_ratio ... ok
[INFO] [stdout] test tui::app::tests::enter_submits_expanded_paste_fold_text ... ok
[INFO] [stdout] test tui::app::tests::filter_no_match_shows_empty_hint_and_enter_is_no_op ... ok
[INFO] [stdout] test tui::app::tests::filter_substring_resets_highlight_to_first_visible_model ... ok
[INFO] [stdout] test tui::app::tests::history_arrows_do_not_apply_when_models_picker_open ... ok
[INFO] [stdout] test tui::app::tests::history_arrows_do_not_apply_while_pending_permission ... ok
[INFO] [stdout] test tui::app::tests::history_arrows_do_not_apply_when_command_completion_open ... ok
[INFO] [stdout] test tui::app::tests::interrupted_bumps_new_message_count_when_not_following_bottom ... ok
[INFO] [stdout] test tui::app::tests::input_history_up_down_in_main_input_state ... ok
[INFO] [stdout] test tui::app::tests::interrupted_does_not_clear_current_plan ... ok
[INFO] [stdout] test tui::app::tests::last_exit_intent_at_round_trips_through_app_state ... ok
[INFO] [stdout] test tui::app::tests::line_scroll_moves_in_small_steps_and_refollows_at_bottom ... ok
[INFO] [stdout] test tui::app::tests::model_command_shows_current_model_or_sends_set_model ... ok
[INFO] [stdout] test tui::app::tests::models_picker_blocks_newline_cursor_and_editing_keys_from_input_buffer ... ok
[INFO] [stdout] test tui::app::tests::models_picker_escape_closes_without_set_provider ... ok
[INFO] [stdout] test tui::app::tests::move_highlight_skips_headers_wraps_on_model_rows_only ... ok
[INFO] [stdout] test tool::web::tests::html_to_text_decodes_hex_apostrophe_from_ddg ... ok
[INFO] [stdout] test tui::app::tests::newline_keys_insert_newline_without_submitting ... ok
[INFO] [stdout] test tui::app::tests::on_key_answers_pending_permission_with_allow_always_only_when_key_exists ... ok
[INFO] [stdout] test tui::app::tests::new_prompt_resets_output_token_accumulation ... ok
[INFO] [stdout] test tui::app::tests::multiline_slash_text_submits_as_prompt_not_command ... ok
[INFO] [stdout] test tool::web::tests::web_fetch_returns_html_to_text_on_success ... ok
[INFO] [stdout] test tui::app::tests::on_key_answers_pending_permission_with_y_or_n ... ok
[INFO] [stdout] test tool::web::tests::html_to_text_preserves_invalid_decimal_entity_literal ... ok
[INFO] [stdout] test tui::app::tests::models_command_opens_picker_and_enter_sends_set_provider ... ok
[INFO] [stdout] test tui::app::tests::on_key_escape_interrupts_running_turn_on_dedicated_channel_only_for_press ... ok
[INFO] [stdout] test tui::app::tests::on_key_ignores_non_press_events_to_avoid_duplicate_input ... ok
[INFO] [stdout] test tui::app::tests::on_key_edits_text_and_enter_submits_prompt ... ok
[INFO] [stdout] test tui::app::tests::on_key_answers_pending_permission_with_enter_or_escape ... ok
[INFO] [stdout] test tui::app::tests::paste_tail_expires_after_quiet_fallback_and_only_drop_refreshes_key_time ... ok
[INFO] [stdout] test tui::app::tests::paste_tail_set_clear_and_active_query ... ok
[INFO] [stdout] test tui::app::tests::placeholder_and_unknown_commands_append_notice_without_agent_input ... ok
[INFO] [stdout] test tui::app::tests::pending_permission_blocks_newline_char_and_editing_keys ... ok
[INFO] [stdout] test tui::app::tests::plan_progress_out_of_bounds_step_is_ignored ... ok
[INFO] [stdout] test tui::app::tests::plan_progress_step_zero_is_ignored_without_panic ... ok
[INFO] [stdout] test tui::app::tests::ready_with_nonempty_queue_submits_enqueue_not_direct_send ... ok
[INFO] [stdout] test tui::app::tests::plan_progress_done_updates_step_and_validation_result ... ok
[INFO] [stdout] test tui::app::tests::ready_direct_prompt_clears_current_plan ... ok
[INFO] [stdout] test tui::app::tests::ready_with_empty_queue_submits_directly ... ok
[INFO] [stdout] test tui::app::tests::record_streaming_chars_sets_approximate_rate_before_real_usage_corrects ... ok
[INFO] [stdout] test tui::app::tests::plan_progress_without_active_plan_is_ignored ... ok
[INFO] [stdout] test tui::app::tests::reject_does_not_activate_current_plan ... ok
[INFO] [stdout] test tui::app::tests::running_submit_enqueues_without_polluting_current_turn ... ok
[INFO] [stdout] test tui::app::tests::record_usage_accumulates_output_tokens_and_computes_rate ... ok
[INFO] [stdout] test tui::app::tests::record_usage_zero_elapsed_has_no_rate_without_panic ... ok
[INFO] [stdout] test tui::app::tests::session_picker_catch_all_consumes_character_without_input_or_switch ... ok
[INFO] [stdout] test tui::app::tests::selected_returns_highlighted_provider_and_model_on_enter ... ok
[INFO] [stdout] test tui::app::tests::session_picker_escape_closes_without_pending_switch ... ok
[INFO] [stdout] test tui::app::tests::session_picker_move_highlight_clamps_to_bounds ... ok
[INFO] [stdout] test tui::app::tests::running_ctrl_c_sends_interrupt_without_exiting ... ok
[INFO] [stdout] test tui::app::tests::session_picker_new_builds_labels_from_summary_fields ... ok
[INFO] [stdout] test tui::app::tests::session_picker_new_handles_missing_first_user ... ok
[INFO] [stdout] test tui::app::tests::slash_commands_clear_help_status_exit_and_do_not_submit_prompt ... ok
[INFO] [stdout] test tui::app::tests::scroll_offset_follows_bottom_preserves_manual_position_and_clamps ... ok
[INFO] [stdout] test tui::app::tests::scroll_to_bottom_clears_new_message_count ... ok
[INFO] [stdout] test tui::app::tests::session_picker_enter_sets_pending_switch_and_closes_picker ... ok
[INFO] [stdout] test tui::app::tests::status_snapshot_counts_only_user_and_assistant_dialog_messages ... ok
[INFO] [stdout] test tui::app::tests::slash_completion_filters_candidates_and_completes_selection ... ok
[INFO] [stdout] test tui::app::tests::slash_completion_hides_for_arguments_plain_prompt_and_escape ... ok
[INFO] [stdout] test tui::app::tests::tool_card_status_round_trips_all_variants ... ok
[INFO] [stdout] test tui::app::tests::tool_card_round_trips_args_exit_and_statuses ... ok
[INFO] [stdout] test tui::app::tests::tool_events_are_inserted_into_transcript_timeline ... ok
[INFO] [stdout] test tui::app::tests::turn_complete_resets_output_token_accumulation ... ok
[INFO] [stdout] test tui::app::tests::up_down_move_inside_multiline_before_history_in_app ... ok
[INFO] [stdout] test tui::app::tests::user_notice_and_tool_events_do_not_increment_new_message_count ... ok
[INFO] [stdout] test tui::channel::tests::channel_decider_accept_edits_auto_allows_edit_without_channel ... ok
[INFO] [stdout] test tui::channel::tests::channel_decider_allow_always_notice_on_persist_failure_but_remembers ... ok
[INFO] [stdout] test tui::channel::tests::channel_decider_allow_always_persists_and_remembers_command ... ok
[INFO] [stdout] test tui::channel::tests::channel_decider_accept_edits_still_asks_for_execute_via_channel ... ok
[INFO] [stdout] test tool::web::tests::process_http_response_caps_response_body_bytes ... ok
[INFO] [stdout] test tui::app::tests::transcript_block_round_trips_all_variants ... ok
[INFO] [stdout] test tui::channel::tests::channel_decider_allow_always_without_key_does_not_persist ... ok
[INFO] [stdout] test tui::app::tests::session_picker_key_navigation_moves_highlight_with_clamping ... ok
[INFO] [stdout] test tui::channel::tests::channel_decider_allowlist_hit_returns_allow_without_channel ... ok
[INFO] [stdout] test tui::channel::tests::channel_decider_denies_when_permission_responder_is_dropped ... ok
[INFO] [stdout] test tui::app::tests::turn_complete_does_not_clear_current_plan ... ok
[INFO] [stdout] test tui::channel::tests::channel_decider_normal_miss_sends_permission_request_with_allow_always_key ... ok
[INFO] [stdout] test tui::channel::tests::channel_observer_sends_tool_call_started ... ok
[INFO] [stdout] test tui::channel::tests::channel_decider_returns_allow_from_permission_responder ... ok
[INFO] [stdout] test tui::channel::tests::channel_observer_sends_tool_call_finished ... ok
[INFO] [stdout] test tui::channel::tests::channel_plan_approver_flips_mode_after_approve ... ok
[INFO] [stdout] test tui::channel::tests::channel_plan_approver_rejects_when_responder_is_dropped ... ok
[INFO] [stdout] test session::tests::latest_returns_newest_jsonl_and_ignores_other_files ... ok
[INFO] [stdout] test tui::channel::tests::channel_observer_sends_status_changed ... ok
[INFO] [stdout] test tui::channel::tests::channel_progress_reporter_does_not_panic_when_sender_dropped ... ok
[INFO] [stdout] test tui::channel::tests::channel_decider_yolo_auto_allows_execute_without_channel ... ok
[INFO] [stdout] test tui::channel::tests::channel_progress_reporter_sends_plan_progress_event ... ok
[INFO] [stdout] test tui::clipboard::tests::arboard_clipboard_get_text_reports_unavailable_when_inner_missing ... ok
[INFO] [stdout] test tui::channel::tests::channel_prompter_returns_empty_answer_when_responder_is_dropped ... ok
[INFO] [stdout] test tui::clipboard::tests::copy_selection_sets_clipboard_text_and_keeps_selection ... ok
[INFO] [stdout] test tui::clipboard::tests::copy_selection_success_hint_counts_chars_not_bytes_for_cjk ... ok
[INFO] [stdout] test tui::clipboard::tests::mock_clipboard_get_text_returns_configured_error ... ok
[INFO] [stdout] test tui::clipboard::tests::copy_selection_skips_empty_or_blank_text_without_touching_clipboard ... ok
[INFO] [stdout] test tui::clipboard::tests::mock_clipboard_get_text_returns_configured_text ... ok
[INFO] [stdout] test tui::clipboard::tests::copy_selection_failure_adds_notice_and_keeps_selection ... ok
[INFO] [stdout] test tui::clipboard::tests::copy_selection_skips_when_last_frame_is_missing_without_touching_clipboard ... ok
[INFO] [stdout] test tui::command::tests::command_metadata_covers_all_builtin_commands_and_matches_parser ... ok
[INFO] [stdout] test tui::command::tests::parse_command_recognizes_builtin_slash_commands ... ok
[INFO] [stdout] test tui::input_batch::tests::altgr_char_counts_as_text_so_enter_becomes_newline ... ok
[INFO] [stdout] test tui::input_batch::tests::bare_enter_inside_char_burst_classifies_as_newline ... ok
[INFO] [stdout] test tui::input_batch::tests::bare_enter_only_burst_classifies_all_as_newline ... ok
[INFO] [stdout] test tui::input_batch::tests::empty_batch_yields_empty_outputs ... ok
[INFO] [stdout] test tui::input_batch::tests::ctrl_enter_passes_through_and_does_not_count_toward_burst ... ok
[INFO] [stdout] test tui::command::tests::parse_models_does_not_collide_with_model_prefix ... ok
[INFO] [stdout] test tui::input_batch::tests::fold_candidate_rebuilds_cjk_lines_with_bare_enter_as_newline ... ok
[INFO] [stdout] test tui::input_batch::tests::fold_candidate_returns_none_for_empty_batch ... ok
[INFO] [stdout] test tui::input_batch::tests::fold_candidate_rejects_tab_even_when_thresholds_are_met ... ok
[INFO] [stdout] test tui::channel::tests::channel_sink_sends_text_delta_on_text ... ok
[INFO] [stdout] test tui::input_batch::tests::fold_candidate_returns_none_when_batch_contains_non_text_key ... ok
[INFO] [stdout] test tui::input_batch::tests::fold_candidate_returns_none_for_single_line_below_char_threshold ... ok
[INFO] [stdout] test tui::input_batch::tests::fold_candidate_returns_none_when_line_count_below_threshold ... ok
[INFO] [stdout] test tui::input_batch::tests::fold_candidate_returns_some_for_multiline_below_line_threshold_above_char_threshold ... ok
[INFO] [stdout] test tui::input_batch::tests::lone_bare_enter_classifies_as_submit ... ok
[INFO] [stdout] test tui::input_batch::tests::fold_candidate_returns_some_for_single_line_above_char_threshold ... ok
[INFO] [stdout] test tui::input_batch::tests::fold_candidate_returns_some_for_single_line_at_char_threshold ... ok
[INFO] [stdout] test tui::input_batch::tests::matcher_drops_empty_line_run_single_enter_shape ... ok
[INFO] [stdout] test tui::input_batch::tests::fold_candidate_returns_some_when_line_count_meets_threshold ... ok
[INFO] [stdout] test tui::input_batch::tests::matcher_aborts_after_sixteen_consecutive_mismatches ... ok
[INFO] [stdout] test tui::input_batch::tests::matcher_controls_and_non_key_events_forward_without_touching_state ... ok
[INFO] [stdout] test tui::input_batch::tests::matcher_matching_event_resets_forwarded_streak ... ok
[INFO] [stdout] test tui::input_batch::tests::matcher_drops_matching_chars_and_reports_done ... ok
[INFO] [stdout] test tui::input_batch::tests::matcher_drops_empty_line_runs_and_tab_matches ... ok
[INFO] [stdout] test tui::input_batch::tests::matcher_drops_newline_runs_for_single_and_double_enter_shapes ... ok
[INFO] [stdout] test tui::input_batch::tests::matcher_mismatch_forwards_without_advancing_and_resyncs ... ok
[INFO] [stdout] test tui::input_batch::tests::matcher_release_is_always_dropped_without_state_change ... ok
[INFO] [stdout] test tui::input_batch::tests::matcher_tail_newline_run_absorbs_residual_enter_before_done ... ok
[INFO] [stdout] test tui::input_batch::tests::non_text_key_does_not_count_so_enter_after_pageup_stays_submit ... ok
[INFO] [stdout] test tui::input_batch::tests::normalize_newlines_converts_crlf_cr_mixed_and_trailing_breaks ... ok
[INFO] [stdout] test tui::input_batch::tests::rebuild_fast_text_accepts_tab_as_rebuildable_key ... ok
[INFO] [stdout] test tui::input_batch::tests::try_fast_paste_ignores_non_key_events_while_matching_prefix ... ok
[INFO] [stdout] test tui::input_batch::tests::try_fast_paste_matches_crlf_double_enter_shape ... ok
[INFO] [stdout] test tui::input_batch::tests::try_fast_paste_decision_reports_decline_reasons_without_content ... ok
[INFO] [stdout] test tui::input_batch::tests::try_fast_paste_rejects_non_rebuildable_and_short_batch_without_reading_clipboard ... ok
[INFO] [stdout] test tui::input_batch::tests::rebuild_text_rejects_page_up_boundary ... ok
[INFO] [stdout] test tui::app::tests::status_snapshot_round_trips ... ok
[INFO] [stdout] test tui::input_batch::tests::matcher_done_forwards_remaining_events_after_content_end ... ok
[INFO] [stdout] test tui::input_batch::tests::press_key_events_drops_release_so_lone_enter_stays_submit ... ok
[INFO] [stdout] test tui::input_batch::tests::unreliable_astral_at_tail_marks_done_when_next_event_arrives ... ok
[INFO] [stdout] test tui::input_batch::tests::try_fast_paste_returns_normalized_fold_text_for_crlf_single_enter_shape ... ok
[INFO] [stdout] test tui::input_batch::tests::try_fast_paste_rejects_clipboard_error_blank_mismatch_and_below_threshold ... ok
[INFO] [stdout] test tui::input_batch::tests::unreliable_astral_flag_can_be_swallowed_without_tail_leak ... ok
[INFO] [stdout] test tui::input_batch::tests::unreliable_real_astral_event_uses_normal_match_path_boundary ... ok
[INFO] [stdout] test tui::input_batch::tests::unreliable_consecutive_emoji_are_skipped_as_one_expected_run ... ok
[INFO] [stdout] test tui::input_batch::tests::unreliable_skip_then_retry_mismatch_forwards_and_can_resync ... ok
[INFO] [stdout] test tui::input_batch::tests::try_fast_paste_transfers_absorbing_tail_when_batch_ends_on_newline_run ... ok
[INFO] [stdout] test tui::input_batch::tests::unreliable_astral_before_newline_run_keeps_single_and_double_enter_matching ... ok
[INFO] [stdout] test tui::input_batch::tests::pure_ctrl_char_does_not_count_so_enter_stays_submit ... ok
[INFO] [stdout] test tui::input_batch::tests::shift_enter_passes_through_and_does_not_count_toward_burst ... ok
[INFO] [stdout] test tui::input_batch::tests::unreliable_variation_selector_and_zwj_are_skipped_like_astral_chars ... ok
[INFO] [stdout] test tui::input_batch::tests::unreliable_try_fast_paste_matches_swallowed_emoji_prefix_and_preserves_fold_text ... ok
[INFO] [stdout] test tui::input_batch::tests::would_submit_lone_enter_returns_false_after_continuation_char_is_merged ... ok
[INFO] [stdout] test tui::input_batch::tests::would_submit_lone_enter_returns_false_for_char_then_enter ... ok
[INFO] [stdout] test tui::input_batch::tests::would_submit_lone_enter_returns_false_for_empty_batch ... ok
[INFO] [stdout] test tui::input_batch::tests::would_submit_lone_enter_returns_true_for_enter_press ... ok
[INFO] [stdout] test tui::input_batch::tests::would_submit_lone_enter_ignores_enter_release ... ok
[INFO] [stdout] test tui::input_buffer::tests::cjk_vertical_alignment_uses_display_width_and_ties_left ... ok
[INFO] [stdout] test tui::input_buffer::tests::deleting_only_fold_resets_sequence_and_next_fold_reuses_first_sentinel ... ok
[INFO] [stdout] test tui::input_buffer::tests::expand_folds_expands_mixed_text_and_single_fold ... ok
[INFO] [stdout] test tui::input_buffer::tests::backspace_deleting_sentinel_prunes_pasted_map ... ok
[INFO] [stdout] test tui::input_buffer::tests::expand_folds_preserves_order_with_multiple_folds_and_text_between ... ok
[INFO] [stdout] test tui::input_buffer::tests::history_down_restore_consumes_draft_but_keeps_restored_fold ... ok
[INFO] [stdout] test tui::input_buffer::tests::history_down_after_deleted_draft_restores_empty_buffer ... ok
[INFO] [stdout] test tui::input_buffer::tests::history_up_down_roundtrip_preserves_fold_chunk ... ok
[INFO] [stdout] test tui::input_buffer::tests::history_up_prunes_orphans_but_keeps_draft_referenced_fold ... ok
[INFO] [stdout] test tui::input_buffer::tests::insert_paste_fold_in_middle_of_existing_text ... ok
[INFO] [stdout] test tui::input_batch::tests::would_submit_lone_enter_returns_false_for_char_only ... ok
[INFO] [stdout] test tui::input_buffer::tests::insert_str_at_middle_of_text_inserts_at_cursor ... ok
[INFO] [stdout] test tui::input_buffer::tests::insert_str_empty_keeps_text_and_cursor_and_resets_history_cursor ... ok
[INFO] [stdout] test tui::input_buffer::tests::insert_str_equals_folding_insert_char ... ok
[INFO] [stdout] test tui::input_buffer::tests::insert_paste_fold_twice_assigns_distinct_sentinels_and_seqs ... ok
[INFO] [stdout] test tui::input_buffer::tests::left_right_and_home_end_move_by_char_and_current_line ... ok
[INFO] [stdout] test tui::input_buffer::tests::insert_str_with_cjk_moves_cursor_to_end_of_inserted_text ... ok
[INFO] [stdout] test tui::input_buffer::tests::prune_pasted_drops_orphan_entries_not_present_in_text ... ok
[INFO] [stdout] test tui::input_buffer::tests::insert_str_exits_history_like_insert_char ... ok
[INFO] [stdout] test tui::input_buffer::tests::prune_pasted_keeps_draft_only_sentinel_and_drops_true_orphan ... ok
[INFO] [stdout] test tui::input_buffer::tests::push_submitted_clears_pasted_and_resets_next_paste_seq ... ok
[INFO] [stdout] test tui::input_buffer::tests::push_submitted_trims_dedupes_clears_text_and_resets_history_cursor ... ok
[INFO] [stdout] test tui::input_buffer::tests::single_line_up_uses_history_and_typing_exits_history_at_cursor ... ok
[INFO] [stdout] test tui::input_buffer::tests::typing_after_history_recall_discards_draft_and_prunes_draft_only_fold ... ok
[INFO] [stdout] test tui::input_buffer::tests::set_text_discards_draft_prunes_pasted_and_resets_sequence_when_empty ... ok
[INFO] [stdout] test tui::input_layout::tests::input_height_cap_reserves_fixed_rows_transcript_floor_and_limits ... ok
[INFO] [stdout] test tui::input_buffer::tests::up_down_move_inside_multiline_before_using_history ... ok
[INFO] [stdout] test tui::input_layout::tests::input_height_cap_min_screen_with_max_queue_preserves_transcript_floor ... ok
[INFO] [stdout] test tui::input_layout::tests::input_height_cap_shrinks_when_permission_box_is_visible ... ok
[INFO] [stdout] test tui::input_layout::tests::input_height_cap_subtracts_queue_height ... ok
[INFO] [stdout] test tui::input_layout::tests::input_scroll_offset_keeps_cursor_visual_row_visible ... ok
[INFO] [stdout] test tui::input_layout::tests::visual_layout_line_starts_match_each_visual_line ... ok
[INFO] [stdout] test tui::input_layout::tests::visual_layout_only_adds_boundary_row_for_cursor_at_full_width_boundary ... ok
[INFO] [stdout] test tui::jump_to_bottom::tests::bump_increments_when_not_following_bottom ... ok
[INFO] [stdout] test tui::input_buffer::tests::insert_newline_backspace_delete_and_set_text_update_text_and_cursor ... ok
[INFO] [stdout] test tui::jump_to_bottom::tests::bump_is_noop_when_following_bottom ... ok
[INFO] [stdout] test tui::jump_to_bottom::tests::follow_bottom_clears_count ... ok
[INFO] [stdout] test tui::jump_to_bottom::tests::pill_text_idle_and_with_new_messages ... ok
[INFO] [stdout] test tui::markdown::tests::gfm_table_aligns_cjk_columns_and_styles_header_separator ... ok
[INFO] [stdout] test tui::input_layout::tests::visual_layout_maps_logical_lines_soft_wraps_and_places_cursor ... ok
[INFO] [stdout] test tui::input_buffer::tests::restored_fold_deleted_by_backspace_clears_pasted_and_resets_sequence ... ok
[INFO] [stdout] test tui::markdown::tests::gfm_table_truncates_cjk_cell_to_column_width_without_half_char ... ok
[INFO] [stdout] test tui::markdown::tests::softbreak_and_hardbreak_keep_physical_line_structure ... ok
[INFO] [stdout] test tui::markdown::tests::wrap_spans_preserves_styles_across_cjk_width_breaks ... ok
[INFO] [stdout] test tui::markdown::tests::inline_markdown_maps_to_expected_span_styles ... ok
[INFO] [stdout] test tui::input_buffer::tests::insert_paste_fold_inserts_sentinel_at_cursor_and_records_chunk ... ok
[INFO] [stdout] test tui::markdown::tests::headings_hr_lists_and_quotes_use_block_styles_and_prefixes ... ok
[INFO] [stdout] test tool::web::tests::parse_ddg_results_extracts_title_url_snippet_from_real_fixture ... ok
[INFO] [stdout] test tool::web::tests::html_to_text_handles_malformed_and_empty_without_panic ... ok
[INFO] [stdout] test tui::render::tests::active_plan_in_progress_snapshot ... ok
[INFO] [stdout] test tui::render::tests::active_plan_long_text_truncates_single_line_snapshot ... ok
[INFO] [stdout] test tui::render::tests::active_plan_folded_when_all_done_and_ready_snapshot ... ok
[INFO] [stdout] test tui::render::tests::activity_line_spans_copy_hint_takes_priority_over_paste_tail ... ok
[INFO] [stdout] test tui::render::tests::active_plan_all_done_busy_renders_full_panel_snapshot ... ok
[INFO] [stdout] test tui::render::tests::activity_compacting_snapshot ... ok
[INFO] [stdout] test tui::render::tests::activity_line_spans_hint_fills_width_then_expires_and_yields_when_narrow ... ok
[INFO] [stdout] test tui::render::tests::active_plan_overflow_snapshot ... ok
[INFO] [stdout] test tui::render::tests::activity_copy_hint_snapshot ... ok
[INFO] [stdout] test tui::render::tests::collapsed_diff_body_uses_collapsed_row_budget ... ok
[INFO] [stdout] test tui::render::tests::collapsed_diff_summary_counts_done_only_and_omits_zero_sides ... ok
[INFO] [stdout] test tui::render::tests::assistant_transcript_uses_diamond_marker_hanging_indent_and_emoji_width ... ok
[INFO] [stdout] test tui::render::tests::collapsed_non_diff_and_empty_diff_cards_remain_single_line ... ok
[INFO] [stdout] test tui::render::tests::collapsed_running_and_error_cards_still_render_diff_body ... ok
[INFO] [stdout] test tui::render::tests::collapsed_group_first_tool_shows_ctrl_o_expand_hint_on_summary_only ... ok
[INFO] [stdout] test tui::render::tests::diff_body_lines_caps_by_screen_rows ... ok
[INFO] [stdout] test tui::render::tests::diff_body_lines_empty_diff_returns_no_lines ... ok
[INFO] [stdout] test tui::render::tests::diff_body_lines_truncates_single_long_line_mid_wrap ... ok
[INFO] [stdout] test tui::render::tests::diff_body_lines_wraps_continuations_without_repeating_marker ... ok
[INFO] [stdout] test tui::render::tests::display_cursor_maps_after_fold_and_matches_raw_cursor_when_fold_free ... ok
[INFO] [stdout] test tui::render::tests::display_expansion_has_no_label_ranges_without_folds ... ok
[INFO] [stdout] test tui::render::tests::display_expansion_records_multiple_fold_label_ranges_in_order ... ok
[INFO] [stdout] test tui::render::tests::activity_paste_receiving_snapshot ... ok
[INFO] [stdout] test tui::render::tests::display_expansion_records_single_fold_label_range ... ok
[INFO] [stdout] test tui::render::tests::empty_diff_tool_card_preserves_collapsed_output_summary ... ok
[INFO] [stdout] test tui::render::tests::always_on_off_notice_snapshot ... ok
[INFO] [stdout] test tui::render::tests::error_border_adapts_to_width_and_occupies_one_screen_line ... ok
[INFO] [stdout] test tool::web::tests::web_search_returns_parsed_results_on_success ... ok
[INFO] [stdout] test tui::render::tests::expand_for_display_numbers_multiple_folds_in_order ... ok
[INFO] [stdout] test tui::render::tests::expand_for_display_replaces_fold_with_label_and_preserves_surrounding_text ... ok
[INFO] [stdout] test tui::render::tests::expanded_tool_output_wraps_long_lines_before_viewport_slice ... ok
[INFO] [stdout] test tui::render::tests::display_width_treats_common_emoji_as_wide ... ok
[INFO] [stdout] test tui::render::tests::fold_label_uses_line_count_for_multiline_and_char_count_for_single_line ... ok
[INFO] [stdout] test tui::render::tests::command_completion_snapshot ... ok
[INFO] [stdout] test tui::render::tests::empty_queue_layout_matches_baseline_snapshot ... ok
[INFO] [stdout] test tui::render::tests::fatal_error_snapshot ... ok
[INFO] [stdout] test tui::render::tests::input_content_spans_clamps_label_range_end_to_line_end ... ok
[INFO] [stdout] test tui::render::tests::activity_exit_intent_takes_priority_over_copy_hint_snapshot ... ok
[INFO] [stdout] test tui::render::tests::input_content_spans_handles_label_at_line_edges ... ok
[INFO] [stdout] test tui::render::tests::input_content_spans_marks_whole_label_line ... ok
[INFO] [stdout] test tui::render::tests::input_content_spans_splits_label_in_middle ... ok
[INFO] [stdout] test tui::render::tests::input_content_spans_splits_two_labels_on_same_line ... ok
[INFO] [stdout] test tui::render::tests::input_content_spans_without_label_range_returns_single_body_span ... ok
[INFO] [stdout] test tui::render::tests::input_content_spans_marks_cross_wrap_label_segment ... ok
[INFO] [stdout] test tui::render::tests::activity_token_rate_snapshots ... ok
[INFO] [stdout] test tui::render::tests::fatal_error_daylight_snapshot ... ok
[INFO] [stdout] test tui::render::tests::folding_only_affects_tool_blocks_snapshot ... ok
[INFO] [stdout] test tui::render::tests::follows_bottom_shows_latest_content_despite_wide_error_border ... ok
[INFO] [stdout] test tui::render::tests::input_render_sets_cursor_at_multiline_cursor_position ... ok
[INFO] [stdout] test tui::render::tests::jump_to_bottom_pill_idle_snapshot ... ok
[INFO] [stdout] test tui::render::tests::jump_to_bottom_pill_hidden_when_following ... ok
[INFO] [stdout] test tui::render::tests::input_render_sets_cursor_at_input_end ... ok
[INFO] [stdout] test tui::render::tests::help_block_snapshot ... ok
[INFO] [stdout] test tui::render::tests::interrupted_notice_daylight_snapshot ... ok
[INFO] [stdout] test tui::render::tests::mode_line_normal_snapshot ... ok
[INFO] [stdout] test tui::render::tests::interrupted_notice_snapshot ... ok
[INFO] [stdout] test tui::render::tests::mode_line_think_high_daylight_snapshot ... ok
[INFO] [stdout] test tui::render::tests::mode_line_think_high_midnight_snapshot ... ok
[INFO] [stdout] test tui::render::tests::mode_line_plan_snapshot ... ok
[INFO] [stdout] test tui::render::tests::mode_line_accept_edits_snapshot ... ok
[INFO] [stdout] test tui::render::tests::mode_line_yolo_snapshot ... ok
[INFO] [stdout] test tui::render::tests::jump_to_bottom_pill_with_new_messages_snapshot ... ok
[INFO] [stdout] test tui::render::tests::models_picker_open_snapshot ... ok
[INFO] [stdout] test tui::render::tests::paste_fold_input_styles_label_muted_and_body_primary ... ok
[INFO] [stdout] test tui::render::tests::paste_fold_input_styles_scrolled_label_with_global_line_start ... ok
[INFO] [stdout] test tui::render::tests::paste_fold_input_styles_wrapped_label_segments_muted ... ok
[INFO] [stdout] test tool::web::tests::parse_ddg_results_caps_at_max_search_results ... ok
[INFO] [stdout] test tui::markdown::tests::code_block_lines_truncate_by_display_width_without_splitting_cjk ... ok
[INFO] [stdout] test tui::markdown::tests::unknown_code_language_falls_back_to_plain_sunken_block ... ok
[INFO] [stdout] test tui::render::tests::multiline_input_dynamic_height_soft_wrap_snapshot ... ok
[INFO] [stdout] test tui::render::tests::models_picker_filtered_snapshot ... ok
[INFO] [stdout] test tui::render::tests::permission_state_allow_always_snapshot ... ok
[INFO] [stdout] test tui::render::tests::permission_state_snapshot ... ok
[INFO] [stdout] test tui::render::tests::paste_fold_input_renders_label_between_prefix_and_suffix ... ok
[INFO] [stdout] test tui::render::tests::permission_state_long_diff_truncates_before_actions_snapshot ... ok
[INFO] [stdout] test tui::render::tests::plan_progress_height_folds_only_when_all_done_and_ready ... ok
[INFO] [stdout] test tui::render::tests::paste_fold_single_line_input_renders_char_count_label ... ok
[INFO] [stdout] test tui::render::tests::selection_text_out_of_bounds_selection_does_not_panic ... ok
[INFO] [stdout] test tui::render::tests::queue_area_snapshot_with_multiline_entry ... ok
[INFO] [stdout] test tui::render::tests::selection_text_single_line_uses_inclusive_end_col ... ok
[INFO] [stdout] test tui::render::tests::selection_text_skips_cjk_continuation_cells ... ok
[INFO] [stdout] test tui::render::tests::selection_text_trims_lines_and_joins_cross_line ... ok
[INFO] [stdout] test tui::render::tests::run_shell_exit_foot_snapshot ... ok
[INFO] [stdout] test tui::render::tests::selection_highlight_snapshot ... ok
[INFO] [stdout] test tui::render::tests::session_picker_open_snapshot ... ok
[INFO] [stdout] test tui::render::tests::queue_reduces_input_content_cap_when_input_is_full ... ok
[INFO] [stdout] test tui::render::tests::status_block_snapshot ... ok
[INFO] [stdout] test tui::render::tests::phase_status_lines_snapshot ... ok
[INFO] [stdout] test tui::render::tests::tool_args_preview_ask_user_truncates_question_without_options ... ok
[INFO] [stdout] test tui::render::tests::tool_args_preview_interactive_tools_fallback_on_missing_fields ... ok
[INFO] [stdout] test tui::render::tests::tool_args_preview_submit_plan_shows_step_count ... ok
[INFO] [stdout] test tui::render::tests::tool_args_preview_update_plan_done_omits_validation_result ... ok
[INFO] [stdout] test tui::render::tests::thinking_folded_daylight_snapshot ... ok
[INFO] [stdout] test tui::render::tests::tool_args_preview_update_plan_in_progress ... ok
[INFO] [stdout] test tui::render::tests::timeline_tool_then_final_answer_snapshot ... ok
[INFO] [stdout] test tui::render::tests::permission_state_daylight_snapshot ... ok
[INFO] [stdout] test tui::render::tests::thinking_short_shown_midnight_snapshot ... ok
[INFO] [stdout] test app::tests::select_provider_uses_resolved_id_so_matching_key_passes_auth ... ok
[INFO] [stdout] test tui::render::tests::tool_card_diff_long_line_truncated_snapshot ... ok
[INFO] [stdout] test tui::render::tests::plan_approval_state_snapshot ... ok
[INFO] [stdout] test tui::render::tests::tool_card_diff_cjk_wrap_narrow_snapshot ... ok
[INFO] [stdout] test tui::render::tests::thinking_folded_midnight_snapshot ... ok
[INFO] [stdout] test tui::render::tests::tool_card_diff_running_error_expanded_snapshot ... ok
[INFO] [stdout] test tui::render::tests::tool_card_collapsed_diff_counts_snapshot ... ok
[INFO] [stdout] test provider::anthropic::tests::anthropic_provider_injected_name_resolves_matching_chain_key_before_http ... ok
[INFO] [stdout] test provider::openai::tests::openai_provider_injected_name_resolves_matching_chain_key_before_http ... ok
[INFO] [stdout] test tui::render::tests::typed_literal_paste_label_text_stays_primary ... ok
[INFO] [stdout] test tui::render::tests::thinking_expanded_midnight_snapshot ... ok
[INFO] [stdout] test tui::render::tests::tool_card_error_snapshot ... ok
[INFO] [stdout] test tui::render::tests::tool_card_expanded_done_snapshot ... ok
[INFO] [stdout] test tui::render::tests::tool_card_diff_short_rows_truncated_snapshot ... ok
[INFO] [stdout] test tui::render::tests::tool_group_ctrl_o_hints_snapshot ... ok
[INFO] [stdout] test tui::selection::tests::clear_action_removes_selection_and_dragging ... ok
[INFO] [stdout] test tui::selection::tests::col_range_for_row_handles_single_and_multiline_selection ... ok
[INFO] [stdout] test tui::selection::tests::drag_without_active_drag_is_no_op ... ok
[INFO] [stdout] test tui::selection::tests::normalized_orders_points_in_reading_order ... ok
[INFO] [stdout] test tui::render::tests::tool_card_write_diff_body_snapshot ... ok
[INFO] [stdout] test tui::selection::tests::reduce_selection_starts_drags_releases_and_click_clears ... ok
[INFO] [stdout] test tui::render::tests::tool_card_done_snapshot ... ok
[INFO] [stdout] test tui::selection::tests::press_replaces_existing_selection ... ok
[INFO] [stdout] test tui::tests::bare_home_end_do_not_clear_or_intercept_selection ... ok
[INFO] [stdout] test tui::selection::tests::release_without_active_drag_is_no_op ... ok
[INFO] [stdout] test tui::tests::arrows_route_to_completion_when_popup_active ... ok
[INFO] [stdout] test tui::tests::cancel_action_boundary_gap_equals_threshold_interrupts_and_advances ... ok
[INFO] [stdout] test tui::tests::cancel_action_narrow_gap_clears_all ... ok
[INFO] [stdout] test tui::tests::cancel_action_wide_gap_interrupts_and_advances ... ok
[INFO] [stdout] test tui::tests::compact_done_advances_exactly_one_queued_prompt ... ok
[INFO] [stdout] test tui::tests::end_and_ctrl_end_map_to_scroll_to_bottom_and_clear_new_message_count ... ok
[INFO] [stdout] test tui::tests::debug_event_line_formats_known_events_and_redacts_char_payloads ... ok
[INFO] [stdout] test tui::tests::error_terminal_event_still_advances_queue ... ok
[INFO] [stdout] test tui::render::tests::transcript_scroll_window_snapshot ... ok
[INFO] [stdout] test tui::tests::handle_queue_cancel_key_first_press_interrupts_and_records_time ... ok
[INFO] [stdout] test tui::tests::handle_queue_cancel_key_quick_second_press_clears_queue ... ok
[INFO] [stdout] test tui::tests::handle_queue_cancel_key_skips_when_pending_permission ... ok
[INFO] [stdout] test tui::tests::handle_queue_cancel_key_yields_to_command_completion ... ok
[INFO] [stdout] test tui::tests::handle_queue_cancel_key_yields_to_models_picker ... ok
[INFO] [stdout] test tui::tests::handle_selection_key_copies_or_clears_selection ... ok
[INFO] [stdout] test tui::tests::idle_does_not_advance_and_idle_window_submit_enqueues ... ok
[INFO] [stdout] test tui::tests::idle_exit_intent_ctrl_c_after_timeout_rearms ... ok
[INFO] [stdout] test tui::tests::idle_exit_intent_first_ctrl_c_consumes_and_records_time ... ok
[INFO] [stdout] test tui::tests::idle_exit_intent_second_ctrl_c_within_threshold_exits ... ok
[INFO] [stdout] test tui::tests::interrupted_terminal_event_still_advances_queue ... ok
[INFO] [stdout] test tui::tests::keyboard_boundary_navigation_reaches_top_and_bottom_without_mouse_events ... ok
[INFO] [stdout] test tui::tests::keyboard_scroll_and_resize_clear_selection ... ok
[INFO] [stdout] test tui::tests::mouse_selection_events_copy_on_release_and_wheel_scroll_clears_selection ... ok
[INFO] [stdout] test tui::tests::mouse_wheel_scroll_action_maps_scroll_kinds_and_ignores_others ... ok
[INFO] [stdout] test tui::tests::exit_intent_action_wide_gap_is_consumed ... ok
[INFO] [stdout] test tui::tests::prepare_session_startup_continue_replaces_system_and_returns_provider_restore ... ok
[INFO] [stdout] test tui::tests::prepare_session_startup_resume_starts_fresh_for_picker ... ok
[INFO] [stdout] test tui::tests::exit_intent_action_boundary_gap_equals_threshold_is_consumed ... ok
[INFO] [stdout] test tui::render::tests::tool_card_edit_diff_body_snapshot ... ok
[INFO] [stdout] test tui::tests::exit_intent_action_narrow_gap_exits ... ok
[INFO] [stdout] test tui::tests::run_agent_task_applies_set_model_to_next_prompt_without_terminal ... ok
[INFO] [stdout] test tui::tests::run_agent_task_forwards_observed_tool_events_without_terminal ... ok
[INFO] [stdout] test tui::tests::run_agent_task_applies_set_provider_to_next_prompt_without_terminal ... ok
[INFO] [stdout] test tui::tests::run_agent_task_handles_prompt_permission_and_turn_complete_without_terminal ... ok
[INFO] [stdout] test tui::tests::run_agent_task_interrupt_does_not_consume_queued_prompt ... ok
[INFO] [stdout] test tui::tests::run_agent_task_set_provider_unknown_id_emits_notice_and_keeps_provider ... ok
[INFO] [stdout] test tui::tests::scroll_key_routing_maps_page_and_boundary_keys_only_for_press ... ok
[INFO] [stdout] test tui::tests::selection_keys_intercept_copy_and_clear_before_exit ... ok
[INFO] [stdout] test tui::render::tests::yolo_mode_shows_mode_line_without_permission_box ... ok
[INFO] [stdout] test tui::tests::selection_keys_respect_modal_priority_before_selection ... ok
[INFO] [stdout] test tui::tests::session_save_failure_appends_notice_without_touching_history ... ok
[INFO] [stdout] test tui::tests::run_agent_task_accumulates_history_across_prompts_without_terminal ... ok
[INFO] [stdout] test tui::tests::run_agent_task_set_provider_missing_credentials_emits_notice_and_keeps_provider ... ok
[INFO] [stdout] test tui::tests::run_agent_task_hotswap_smoke_anthropic_to_wps_from_config_profiles ... ok
[INFO] [stdout] test tui::tests::should_exit_does_not_exit_when_queue_nonempty ... ok
[INFO] [stdout] test tui::render::tests::user_question_state_snapshot ... ok
[INFO] [stdout] test tui::tests::should_exit_routes_escape_by_pending_running_or_ready_state ... ok
[INFO] [stdout] test tui::tests::startup_mode_prefers_resume_over_continue ... ok
[INFO] [stdout] test tui::tests::terminal_session_event_matches_only_persisted_turn_boundaries ... ok
[INFO] [stdout] test tui::theme::tests::midnight_tokens_match_design_spec_01 ... ok
[INFO] [stdout] test tui::theme::tests::selection_bg_token_is_exposed_for_both_palettes ... ok
[INFO] [stdout] test tui::tests::turn_complete_advances_exactly_one_queued_prompt ... ok
[INFO] [stdout] test tui::theme::tests::daylight_tokens_match_design_spec_01 ... ok
[INFO] [stdout] test tui::width::tests::char_width_halfwidth_boundary ... ok
[INFO] [stdout] test tui::width::tests::char_width_zero_width_marks_are_zero ... ok
[INFO] [stdout] test tui::tests::thinking_depth_injection_matches_config ... ok
[INFO] [stdout] test tui::width::tests::char_width_cjk_and_wide_is_two ... ok
[INFO] [stdout] test tui::render::tests::tool_card_running_snapshot ... ok
[INFO] [stdout] test tui::width::tests::char_width_ascii_and_narrow_latin_is_one ... ok
[INFO] [stdout] test tui::width::tests::truncate_appends_ellipsis_when_over_width ... ok
[INFO] [stdout] test tui::width::tests::truncate_clamps_zero_max_width_to_one ... ok
[INFO] [stdout] test tui::width::tests::display_width_sums_mixed_text ... ok
[INFO] [stdout] test tui::tests::should_exit_ignores_non_press_escape_events ... ok
[INFO] [stdout] test tui::width::tests::truncate_returns_text_when_within_width ... ok
[INFO] [stdout] test tui::render::tests::user_question_other_row_sets_cursor_at_supplement_caret ... ok
[INFO] [stdout] test tui::render::tests::welcome_state_snapshot ... ok
[INFO] [stdout] test tui::render::tests::welcome_state_daylight_snapshot ... ok
[INFO] [stdout] test tui::tests::run_agent_task_interrupts_running_prompt_without_terminal ... ok
[INFO] [stdout] test tool::shell::tests::run_shell_returns_error_when_timeout_is_hit ... ok
[INFO] [stdout] test tui::markdown::tests::rust_code_block_uses_syntect_highlight_spans_and_sunken_background ... ok
[INFO] [stdout] test tui::markdown::tests::highlighted_code_line_truncates_render_but_feeds_full_line_to_highlighter ... ok
[INFO] [stdout] test tui::render::tests::markdown_rich_assistant_daylight_snapshot ... ok
[INFO] [stdout] test tui::render::tests::markdown_rich_assistant_midnight_snapshot ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 813 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 1.31s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/mysteries-f039912d1c7373b4)
[INFO] [stdout] 
[INFO] [stderr]      Running tests/e2e.rs (/opt/rustwide/target/debug/deps/e2e-22b7c2702d5bcc6d)
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 8 tests
[INFO] [stdout] test assembled_agent_plan_approval_flips_mode_and_executes ... ok
[INFO] [stdout] test assembled_agent_runs_multiturn_tool_flow_offline ... ok
[INFO] [stdout] test assembled_agent_permission_denial_records_error_and_continues ... ok
[INFO] [stdout] test assembled_agent_propagates_tool_error_to_next_model_request ... ok
[INFO] [stdout] test assembled_agent_set_model_strips_thinking_from_history ... ok
[INFO] [stdout] test assembled_agent_max_iterations_errors_when_forced_final_is_empty ... ok
[INFO] [stdout] test assembled_agent_max_iterations_forces_final_with_tools_disabled ... ok
[INFO] [stdout] test assembled_agent_propagates_thinking_depth_and_round_trips_blocks ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests mysteries
[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" "290043f625e1a3192d5dbf7a2c87d0fe32700de01d4f6da22d55b4baea3c6736", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "290043f625e1a3192d5dbf7a2c87d0fe32700de01d4f6da22d55b4baea3c6736", kill_on_drop: false }`
[INFO] [stdout] 290043f625e1a3192d5dbf7a2c87d0fe32700de01d4f6da22d55b4baea3c6736
