[INFO] cloning repository https://github.com/lipoe/mr-nope
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/lipoe/mr-nope" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Flipoe%2Fmr-nope", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Flipoe%2Fmr-nope'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] e560dadd103a31105fe6cd02d540e31eedc5a50e
[INFO] testing lipoe/mr-nope against 1.99.0-beta.8+cargoflags=--release for beta-release-1.100-3
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Flipoe%2Fmr-nope" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/lipoe/mr-nope
[INFO] removed 0 missing tests
[INFO] finished tweaking git repo https://github.com/lipoe/mr-nope
[INFO] tweaked toml for git repo https://github.com/lipoe/mr-nope written to /workspace/builds/worker-5-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/lipoe/mr-nope on toolchain 1.99.0-beta.8
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/lipoe/mr-nope already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.8" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded windows-link v0.2.1
[INFO] [stderr]   Downloaded rand_xorshift v0.4.0
[INFO] [stderr]   Downloaded wait-timeout v0.2.1
[INFO] [stderr]   Downloaded anstyle-wincon v3.0.11
[INFO] [stderr]   Downloaded unarray v0.1.4
[INFO] [stderr]   Downloaded quick-error v1.2.3
[INFO] [stderr]   Downloaded bit-set v0.8.0
[INFO] [stderr]   Downloaded equivalent v1.0.2
[INFO] [stderr]   Downloaded once_cell_polyfill v1.70.2
[INFO] [stderr]   Downloaded rand_chacha v0.9.0
[INFO] [stderr]   Downloaded bit-vec v0.8.0
[INFO] [stderr]   Downloaded clap_lex v1.1.0
[INFO] [stderr]   Downloaded bitflags v2.13.1
[INFO] [stderr]   Downloaded zmij v1.0.23
[INFO] [stderr]   Downloaded rusty-fork v0.3.1
[INFO] [stderr]   Downloaded rand_core v0.9.5
[INFO] [stderr]   Downloaded autocfg v1.5.1
[INFO] [stderr]   Downloaded clap_derive v4.6.4
[INFO] [stderr]   Downloaded unicode-ident v1.0.24
[INFO] [stderr]   Downloaded r-efi v5.3.0
[INFO] [stderr]   Downloaded ryu v1.0.23
[INFO] [stderr]   Downloaded serde_yaml v0.9.34+deprecated
[INFO] [stderr]   Downloaded serde_derive v1.0.229
[INFO] [stderr]   Downloaded getrandom v0.3.4
[INFO] [stderr]   Downloaded clap v4.6.6
[INFO] [stderr]   Downloaded wit-bindgen v0.57.1
[INFO] [stderr]   Downloaded unsafe-libyaml v0.2.11
[INFO] [stderr]   Downloaded r-efi v6.0.0
[INFO] [stderr]   Downloaded zerocopy-derive v0.8.56
[INFO] [stderr]   Downloaded rand v0.9.5
[INFO] [stderr]   Downloaded indexmap v2.14.0
[INFO] [stderr]   Downloaded serde_json v1.0.151
[INFO] [stderr]   Downloaded wasip2 v1.0.4+wasi-0.2.12
[INFO] [stderr]   Downloaded clap_builder v4.6.6
[INFO] [stderr]   Downloaded rustix v1.1.4
[INFO] [stderr]   Downloaded proptest v1.11.0
[INFO] [stderr]   Downloaded zerocopy v0.8.56
[INFO] [stderr]   Downloaded regex-syntax v0.8.11
[INFO] [stderr]   Downloaded syn v2.0.119
[INFO] [stderr]   Downloaded syn v3.0.3
[INFO] [stderr]   Downloaded libc v0.2.189
[INFO] [stderr]   Downloaded windows-sys v0.61.2
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] ab62af2ab22900000a250230ed81faf4b13b8f2ff95ceb9e354e9222e7476555
[INFO] running `Command { std: "docker" "start" "ab62af2ab22900000a250230ed81faf4b13b8f2ff95ceb9e354e9222e7476555", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "ab62af2ab22900000a250230ed81faf4b13b8f2ff95ceb9e354e9222e7476555", 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" "ab62af2ab22900000a250230ed81faf4b13b8f2ff95ceb9e354e9222e7476555" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "ab62af2ab22900000a250230ed81faf4b13b8f2ff95ceb9e354e9222e7476555", 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" "ab62af2ab22900000a250230ed81faf4b13b8f2ff95ceb9e354e9222e7476555" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.107
[INFO] [stderr]    Compiling unicode-ident v1.0.24
[INFO] [stderr]    Compiling quote v1.0.47
[INFO] [stderr]    Compiling serde_core v1.0.229
[INFO] [stderr]    Compiling utf8parse v0.2.2
[INFO] [stderr]    Compiling anstyle v1.0.14
[INFO] [stderr]    Compiling zmij v1.0.23
[INFO] [stderr]    Compiling is_terminal_polyfill v1.70.2
[INFO] [stderr]    Compiling anstyle-parse v1.0.0
[INFO] [stderr]    Compiling colorchoice v1.0.5
[INFO] [stderr]    Compiling anstyle-query v1.1.5
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]    Compiling hashbrown v0.17.1
[INFO] [stderr]    Compiling equivalent v1.0.2
[INFO] [stderr]    Compiling strsim v0.11.1
[INFO] [stderr]    Compiling clap_lex v1.1.0
[INFO] [stderr]    Compiling itoa v1.0.18
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling anstream v1.0.0
[INFO] [stderr]    Compiling heck v0.5.0
[INFO] [stderr]    Compiling ryu v1.0.23
[INFO] [stderr]    Compiling clap_builder v4.6.6
[INFO] [stderr]    Compiling memchr v2.8.3
[INFO] [stderr]    Compiling unsafe-libyaml v0.2.11
[INFO] [stderr]    Compiling percent-encoding v2.3.2
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]    Compiling syn v3.0.3
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling clap_derive v4.6.4
[INFO] [stderr]    Compiling clap v4.6.6
[INFO] [stderr]    Compiling serde_yaml v0.9.34+deprecated
[INFO] [stderr]    Compiling mr-nope v0.2.1 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 42.68s
[INFO] running `Command { std: "docker" "inspect" "ab62af2ab22900000a250230ed81faf4b13b8f2ff95ceb9e354e9222e7476555", 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" "ab62af2ab22900000a250230ed81faf4b13b8f2ff95ceb9e354e9222e7476555" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen" "--no-run" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.189
[INFO] [stderr]    Compiling cfg-if v1.0.4
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]    Compiling zerocopy v0.8.56
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling bitflags v2.13.1
[INFO] [stderr]    Compiling autocfg v1.5.1
[INFO] [stderr]    Compiling once_cell v1.21.4
[INFO] [stderr]    Compiling fastrand v2.5.0
[INFO] [stderr]    Compiling quick-error v1.2.3
[INFO] [stderr]    Compiling bit-vec v0.8.0
[INFO] [stderr]    Compiling fnv v1.0.7
[INFO] [stderr]    Compiling unarray v0.1.4
[INFO] [stderr]    Compiling regex-syntax v0.8.11
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling bit-set v0.8.0
[INFO] [stderr]    Compiling wait-timeout v0.2.1
[INFO] [stderr]    Compiling rand_core v0.9.5
[INFO] [stderr]    Compiling rand v0.9.5
[INFO] [stderr]    Compiling rand_xorshift v0.4.0
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling rusty-fork v0.3.1
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling proptest v1.11.0
[INFO] [stderr]    Compiling mr-nope v0.2.1 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 1m 45s
[INFO] running `Command { std: "docker" "inspect" "ab62af2ab22900000a250230ed81faf4b13b8f2ff95ceb9e354e9222e7476555", 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" "ab62af2ab22900000a250230ed81faf4b13b8f2ff95ceb9e354e9222e7476555" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen" "--release", kill_on_drop: false }`
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 0.14s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/deps/mr_nope-ce6ec161fe49c57f)
[INFO] [stdout] 
[INFO] [stdout] running 329 tests
[INFO] [stdout] test adapter::cursor::tests::test_extract_strings_arrays ... ok
[INFO] [stdout] test adapter::cursor::tests::test_extract_strings_deeply_nested ... ok
[INFO] [stdout] test adapter::cursor::tests::test_extract_strings_empty_array ... ok
[INFO] [stdout] test adapter::cursor::tests::test_extract_strings_empty_object ... ok
[INFO] [stdout] test adapter::cursor::tests::test_extract_strings_from_simple_object ... ok
[INFO] [stdout] test adapter::cursor::tests::test_handle_hook_unknown_event_denies ... ok
[INFO] [stdout] test adapter::cursor::tests::test_mcp_deeply_nested_array_denies ... ok
[INFO] [stdout] test adapter::cursor::tests::test_extract_strings_skips_non_string_types ... ok
[INFO] [stdout] test adapter::cursor::tests::test_handle_hook_mcp_no_tool_input_allows ... ok
[INFO] [stdout] test adapter::cursor::tests::test_handle_hook_routes_mcp_execution ... ok
[INFO] [stdout] test adapter::cursor::tests::test_handle_hook_shell_execution_deny ... ok
[INFO] [stdout] test adapter::cursor::tests::test_mcp_forbidden_command_in_array_denies ... ok
[INFO] [stdout] test adapter::cursor::tests::test_handle_hook_shell_no_command_allows ... ok
[INFO] [stdout] test adapter::cursor::tests::test_handle_hook_shell_execution_allow ... ok
[INFO] [stdout] test adapter::cursor::tests::test_mcp_invalid_json_denies ... ok
[INFO] [stdout] test adapter::cursor::tests::test_mcp_mixed_types_only_checks_strings ... ok
[INFO] [stdout] test adapter::cursor::tests::test_mcp_no_string_values_allows ... ok
[INFO] [stdout] test adapter::cursor::tests::test_mcp_safe_nested_structure_allows ... ok
[INFO] [stdout] test adapter::cursor::tests::test_extract_strings_nested_objects ... ok
[INFO] [stdout] test adapter::cursor::tests::test_mcp_safe_string_values_allows ... ok
[INFO] [stdout] test adapter::cursor::tests::test_mcp_empty_tool_input_allows ... ok
[INFO] [stdout] test adapter::cursor::tests::test_mcp_forbidden_command_in_nested_object_denies ... ok
[INFO] [stdout] test adapter::cursor::tests::test_mcp_unparsed_file_text_allows_by_default ... ok
[INFO] [stdout] test adapter::cursor::tests::test_mcp_git_status_in_string_allows ... ok
[INFO] [stdout] test adapter::cursor::tests::test_mcp_forbidden_command_in_string_denies ... ok
[INFO] [stdout] test adapter::integration::tests::test_cursor_remove_hook_entry_preserves_others ... ok
[INFO] [stdout] test adapter::cursor::tests::test_mcp_whitespace_only_string_values_allows ... ok
[INFO] [stdout] test adapter::cursor::tests::test_mcp_whitespace_only_tool_input_allows ... ok
[INFO] [stdout] test adapter::cursor::tests::test_mcp_first_deny_short_circuits ... ok
[INFO] [stdout] test adapter::integration::tests::test_cursor_add_hook_entry_preserves_existing_and_no_duplicate ... ok
[INFO] [stdout] test adapter::integration::tests::test_hook_response_json_omits_notices ... ok
[INFO] [stdout] test adapter::integration::tests::test_cursor_add_hook_entry_to_empty ... ok
[INFO] [stdout] test adapter::integration::tests::test_integration_lookup_known ... ok
[INFO] [stdout] test adapter::integration::tests::test_integration_lookup_unknown ... ok
[INFO] [stderr] blocked
[INFO] [stdout] test adapter::integration::tests::test_kiro_command_includes_adapter_flag ... ok
[INFO] [stdout] test adapter::integration::tests::test_kiro_emit_uses_exit_codes ... ok
[INFO] [stdout] test adapter::integration::tests::test_kiro_hook_file_structure ... ok
[INFO] [stdout] test adapter::integration::tests::test_kiro_parse_stdin_reads_payload ... ok
[INFO] [stdout] test adapter::integration::tests::test_is_installed_at_absent_or_no_marker ... ok
[INFO] [stdout] test adapter::integration::tests::test_scope_display ... ok
[INFO] [stdout] test adapter::integration::tests::test_supported_names ... ok
[INFO] [stdout] test adapter::integration::tests::test_is_installed_at_detects_marker ... ok
[INFO] [stdout] test adapter::kiro::tests::test_extract_strings_nested ... ok
[INFO] [stdout] test adapter::kiro::tests::test_handle_hook_no_tool_input_allows ... ok
[INFO] [stdout] test adapter::kiro::tests::test_handle_hook_non_shell_tool_safe_allows ... ok
[INFO] [stdout] test adapter::kiro::tests::test_handle_hook_non_shell_tool_scans_input ... ok
[INFO] [stdout] test adapter::kiro::tests::test_handle_hook_shell_allow ... ok
[INFO] [stdout] test adapter::kiro::tests::test_handle_hook_shell_no_command_allows ... ok
[INFO] [stdout] test adapter::kiro::tests::test_payload_defaults_hook_event_name ... ok
[INFO] [stdout] test adapter::kiro::tests::test_payload_execute_cmd_alias_extracts_command ... ok
[INFO] [stdout] test adapter::kiro::tests::test_payload_fs_append_is_scanned_not_treated_as_shell ... ok
[INFO] [stdout] test adapter::integration::tests::test_cursor_emit_always_allows_exit_code ... ok
[INFO] [stdout] test adapter::integration::tests::test_cursor_parse_stdin_reads_hookinput ... ok
[INFO] [stdout] test adapter::integration::tests::test_parse_stdin_malformed_is_err ... ok
[INFO] [stdout] test adapter::kiro::tests::test_handle_hook_shell_deny ... ok
[INFO] [stdout] test adapter::kiro::tests::test_payload_shell_alias_tool_extracts_command ... ok
[INFO] [stdout] test adapter::kiro::tests::test_payload_non_shell_tool_serializes_input ... ok
[INFO] [stdout] test adapter::kiro::tests::test_payload_shell_tool_extracts_command ... ok
[INFO] [stdout] test adapter::kiro::tests::test_tool_input_empty_allows ... ok
[INFO] [stdout] test adapter::kiro::tests::test_shell_allowed_command ... ok
[INFO] [stdout] test adapter::kiro::tests::test_shell_denied_command ... ok
[INFO] [stdout] test adapter::kiro::tests::test_shell_empty_command_allows ... ok
[INFO] [stdout] test adapter::kiro::tests::test_shell_unclosed_quote_denies_by_default ... ok
[INFO] [stdout] test adapter::kiro::tests::test_tool_input_unparsed_text_allows_by_default ... ok
[INFO] [stdout] test adapter::kiro::tests::test_tool_matcher_is_shell_tools_plus_scanned_tools ... ok
[INFO] [stdout] test adapter::kiro::tests::test_tool_input_forbidden_string_denies ... ok
[INFO] [stdout] test adapter::kiro::tests::test_tool_input_invalid_json_denies ... ok
[INFO] [stdout] test adapter::kiro::tests::test_tool_input_nested_forbidden_denies ... ok
[INFO] [stdout] test cli::evaluate::tests::test_discover_policy_custom_replaces_default_fully ... ok
[INFO] [stdout] test adapter::kiro::tests::test_tool_input_safe_values_allow ... ok
[INFO] [stdout] test adapter::kiro::tests::test_tool_input_unparsed_text_does_not_hide_another_deny ... ok
[INFO] [stdout] test cli::evaluate::tests::test_discover_policy_extend_mode_merges_with_default ... ok
[INFO] [stdout] test cli::evaluate::tests::test_discover_policy_extend_mode_replaces_subcommands_for_same_command ... ok
[INFO] [stdout] test cli::evaluate::tests::test_discover_policy_finds_custom_policy ... ok
[INFO] [stdout] test cli::evaluate::tests::test_discover_policy_no_mode_field_defaults_to_replace ... ok
[INFO] [stdout] test cli::evaluate::tests::test_discover_policy_no_roots_returns_default ... ok
[INFO] [stdout] test cli::evaluate::tests::test_discover_policy_nonexistent_root_returns_default ... ok
[INFO] [stdout] test cli::evaluate::tests::test_discover_policy_root_without_policy_file_returns_default ... ok
[INFO] [stdout] test cli::evaluate::tests::test_discover_policy_skips_root_without_policy_uses_next ... ok
[INFO] [stdout] test cli::evaluate::tests::test_discover_policy_uses_first_root_with_policy ... ok
[INFO] [stdout] test cli::evaluate::tests::test_strip_utf8_bom_noop_without_bom ... ok
[INFO] [stdout] test cli::evaluate::tests::test_strip_utf8_bom_removes_prefix ... ok
[INFO] [stdout] test cli::install::tests::test_get_hooks_path_delegates_to_integration ... ok
[INFO] [stdout] test cli::install::tests::test_uninstall_unsupported_adapter_errors ... ok
[INFO] [stdout] test cli::policy::tests::test_custom_policy_displays_correct_rules ... ok
[INFO] [stdout] test cli::policy::tests::test_display_policy_custom_header ... ok
[INFO] [stdout] test cli::policy::tests::test_default_policy_displays_correct_rules ... ok
[INFO] [stdout] test cli::policy::tests::test_display_policy_default_header ... ok
[INFO] [stdout] test cli::policy::tests::test_policy_from_yaml_displays_correctly ... ok
[INFO] [stdout] test cli::policy::tests::test_policy_rule_subcommands_formatting ... ok
[INFO] [stdout] test cli::status::tests::test_install_state_display ... ok
[INFO] [stdout] test cli::test_cmd::tests::test_custom_engine_denies_synthesized_commands ... ok
[INFO] [stdout] test cli::test_cmd::tests::test_custom_engine_multiple_rules_all_pass ... ok
[INFO] [stdout] test cli::policy::tests::test_empty_policy_displays_no_rules ... ok
[INFO] [stdout] test cli::status::tests::test_adapter_status_struct ... ok
[INFO] [stdout] test cli::status::tests::test_get_all_statuses_covers_registered_adapters ... ok
[INFO] [stdout] test cli::test_cmd::tests::test_default_policy_denies_git_commit ... ok
[INFO] [stdout] test cli::install::tests::test_install_unsupported_adapter_errors ... ok
[INFO] [stdout] test cli::test_cmd::tests::test_default_policy_denies_git_push ... ok
[INFO] [stdout] test cli::install::tests::test_supported_adapters_lists_cursor_and_kiro ... ok
[INFO] [stdout] test cli::test_cmd::tests::test_default_policy_test_passes ... ok
[INFO] [stdout] test cli::test_cmd::tests::test_empty_rules_produces_zero_exit_code ... ok
[INFO] [stdout] test cli::test_cmd::tests::test_synthesized_command_format ... ok
[INFO] [stdout] test engine::tests::test_default_on_parse_error_is_shell_deny_tool_input_allow ... ok
[INFO] [stdout] test engine::tests::test_evaluate_compound_all_allowed ... ok
[INFO] [stdout] test engine::tests::test_evaluate_compound_command_any_deny ... ok
[INFO] [stdout] test engine::tests::test_evaluate_deterministic ... ok
[INFO] [stdout] test engine::tests::test_evaluate_denied_git_commit ... ok
[INFO] [stdout] test engine::tests::test_default_policy_yaml_is_valid ... ok
[INFO] [stdout] test engine::tests::test_evaluate_env_prefix_stripped ... ok
[INFO] [stdout] test engine::tests::test_evaluate_allowed_git_operations ... ok
[INFO] [stdout] test engine::tests::test_evaluate_nested_shell_denied ... ok
[INFO] [stdout] test engine::tests::test_evaluate_backtick_substitution_denied ... ok
[INFO] [stdout] test engine::tests::test_evaluate_double_encoded_url ... ok
[INFO] [stdout] test engine::tests::test_evaluate_empty_string_allows ... ok
[INFO] [stdout] test engine::tests::test_evaluate_or_operator_deny ... ok
[INFO] [stdout] test engine::tests::test_evaluate_builtin_prefix_stripped ... ok
[INFO] [stdout] test engine::tests::test_evaluate_comment_stripped_allows ... ok
[INFO] [stdout] test engine::tests::test_evaluate_normalizes_path ... ok
[INFO] [stdout] test engine::tests::test_evaluate_normalizes_url_encoded ... ok
[INFO] [stdout] test engine::tests::test_evaluate_semicolons_deny ... ok
[INFO] [stdout] test engine::tests::test_evaluate_simple_denied_command ... ok
[INFO] [stdout] test engine::tests::test_evaluate_substitution_denied ... ok
[INFO] [stdout] test engine::tests::test_evaluate_whitespace_only_allows ... ok
[INFO] [stdout] test engine::tests::test_evaluate_parse_error_unclosed_quote_denies ... ok
[INFO] [stdout] test engine::tests::test_evaluate_returns_raw_input_unchanged ... ok
[INFO] [stdout] test engine::tests::test_evaluate_pipe_any_deny ... ok
[INFO] [stdout] test engine::tests::test_evaluate_simple_allowed_command ... ok
[INFO] [stdout] test engine::tests::test_evaluate_quoted_forbidden_not_denied ... ok
[INFO] [stdout] test engine::tests::test_evaluate_returns_normalized_form ... ok
[INFO] [stdout] test engine::tests::test_load_from_str_extend_mode ... ok
[INFO] [stdout] test engine::tests::test_load_from_str_unknown_mode_defaults_to_replace ... ok
[INFO] [stdout] test engine::tests::test_load_none_returns_default_policy ... ok
[INFO] [stdout] test engine::tests::test_load_existing_file_sets_is_default_false ... ok
[INFO] [stdout] test engine::tests::test_load_nonexistent_path_returns_default_policy ... ok
[INFO] [stdout] test engine::tests::test_match_command_allows_when_no_subcommand ... ok
[INFO] [stdout] test engine::tests::test_load_on_parse_error_explicit_values ... ok
[INFO] [stdout] test engine::tests::test_load_on_parse_error_partial_keeps_other_default ... ok
[INFO] [stdout] test engine::tests::test_match_command_case_sensitive_command ... ok
[INFO] [stdout] test engine::tests::test_load_from_str_default_mode_is_replace ... ok
[INFO] [stdout] test engine::tests::test_match_command_denies_git_commit ... ok
[INFO] [stdout] test engine::tests::test_load_from_str_explicit_replace_mode ... ok
[INFO] [stdout] test engine::tests::test_load_on_parse_error_rejects_unknown_action ... ok
[INFO] [stdout] test engine::tests::test_match_command_allows_non_matching_command ... ok
[INFO] [stdout] test engine::tests::test_match_command_allows_non_matching_subcommand ... ok
[INFO] [stdout] test engine::tests::test_match_command_case_sensitive_subcommand ... ok
[INFO] [stdout] test engine::tests::test_match_command_empty_rules_allows_all ... ok
[INFO] [stdout] test engine::tests::test_match_command_first_matching_rule_wins ... ok
[INFO] [stdout] test engine::tests::test_match_command_multiple_rules ... ok
[INFO] [stdout] test engine::tests::test_merge_empty_extension_preserves_base ... ok
[INFO] [stdout] test engine::tests::test_merge_on_parse_error_overlay_and_inherit ... ok
[INFO] [stdout] test engine::tests::test_merge_preserves_base_rules_not_in_extension ... ok
[INFO] [stdout] test engine::tests::test_merge_replaces_subcommands_for_same_command ... ok
[INFO] [stdout] test engine::tests::test_parse_error_log_line_names_kind_context_and_action ... ok
[INFO] [stdout] test engine::tests::test_merge_combined_replace_and_add ... ok
[INFO] [stdout] test engine::tests::test_match_command_denies_matching_command_and_subcommand ... ok
[INFO] [stdout] test engine::tests::test_merge_empty_base_uses_extension_only ... ok
[INFO] [stdout] test engine::tests::test_merge_adds_new_commands_from_extension ... ok
[INFO] [stdout] test engine::tests::test_merged_engine_evaluates_correctly ... ok
[INFO] [stdout] test engine::tests::test_tool_input_parse_error_allows_by_default ... ok
[INFO] [stdout] test normalizer::tests::test_collapse_mixed_spaces_and_tabs ... ok
[INFO] [stdout] test engine::tests::test_tool_input_parse_error_denies_when_configured ... ok
[INFO] [stdout] test normalizer::tests::test_collapse_multiple_spaces ... ok
[INFO] [stdout] test engine::tests::test_tool_input_still_denies_parsed_forbidden_command ... ok
[INFO] [stdout] test normalizer::tests::test_collapse_empty_input ... ok
[INFO] [stdout] test normalizer::tests::test_collapse_single_word ... ok
[INFO] [stdout] test engine::tests::test_self_protection_ignores_parse_error_allow ... ok
[INFO] [stdout] test engine::tests::test_shell_parse_error_allows_when_configured ... ok
[INFO] [stdout] test normalizer::tests::test_case_insensitive_hex ... ok
[INFO] [stdout] test normalizer::tests::test_collapse_preserves_other_chars ... ok
[INFO] [stdout] test normalizer::tests::test_collapse_no_extra_whitespace ... ok
[INFO] [stdout] test normalizer::tests::test_collapse_tabs ... ok
[INFO] [stdout] test normalizer::tests::test_collapse_trims_both_ends ... ok
[INFO] [stdout] test normalizer::tests::test_collapse_trims_leading_whitespace ... ok
[INFO] [stdout] test normalizer::tests::test_double_encoded ... ok
[INFO] [stdout] test normalizer::tests::test_extract_path_absolute_unix_deep ... ok
[INFO] [stdout] test normalizer::tests::test_extract_path_no_separator ... ok
[INFO] [stdout] test normalizer::tests::test_extract_path_only_affects_first_token ... ok
[INFO] [stdout] test normalizer::tests::test_extract_path_preserves_rest_of_command ... ok
[INFO] [stdout] test normalizer::tests::test_extract_path_relative_dot_slash ... ok
[INFO] [stdout] test normalizer::tests::test_empty_input ... ok
[INFO] [stdout] test normalizer::tests::test_extract_path_absolute_unix ... ok
[INFO] [stdout] test normalizer::tests::test_extract_path_relative_parent ... ok
[INFO] [stdout] test normalizer::tests::test_extract_path_single_word_no_separator ... ok
[INFO] [stdout] test normalizer::tests::test_extract_path_windows_full ... ok
[INFO] [stdout] test normalizer::tests::test_invalid_percent_encoding_passes_through ... ok
[INFO] [stdout] test normalizer::tests::test_mixed_valid_and_invalid ... ok
[INFO] [stdout] test normalizer::tests::test_multiple_encoded_chars ... ok
[INFO] [stdout] test normalizer::tests::test_no_encoding ... ok
[INFO] [stdout] test normalizer::tests::test_normalize_double_encoded ... ok
[INFO] [stdout] test normalizer::tests::test_normalize_empty_input ... ok
[INFO] [stdout] test normalizer::tests::test_collapse_trims_trailing_whitespace ... ok
[INFO] [stdout] test normalizer::tests::test_collapse_whitespace_only ... ok
[INFO] [stdout] test normalizer::tests::test_extract_path_no_arguments ... ok
[INFO] [stdout] test normalizer::tests::test_normalize_encoded_backslash_path ... ok
[INFO] [stdout] test normalizer::tests::test_normalize_encoded_whitespace_then_collapse ... ok
[INFO] [stdout] test normalizer::tests::test_normalize_pipeline_order_matters ... ok
[INFO] [stdout] test normalizer::tests::test_normalize_url_encoded_path ... ok
[INFO] [stdout] test normalizer::tests::test_normalize_url_encoded_space ... ok
[INFO] [stdout] test normalizer::tests::test_normalize_whitespace_only ... ok
[INFO] [stdout] test normalizer::tests::test_extract_path_trailing_slash ... ok
[INFO] [stdout] test normalizer::tests::test_extract_path_windows_backslash ... ok
[INFO] [stdout] test normalizer::tests::test_truncated_percent_at_end ... ok
[INFO] [stdout] test normalizer::tests::test_quadruple_encoded_stops_at_3 ... ok
[INFO] [stdout] test normalizer::tests::test_normalize_pipeline_whitespace_before_path ... ok
[INFO] [stdout] test normalizer::tests::test_extract_path_empty_input ... ok
[INFO] [stdout] test normalizer::tests::test_extract_path_mixed_separators ... ok
[INFO] [stdout] test normalizer::tests::test_simple_percent_decode ... ok
[INFO] [stdout] test normalizer::tests::test_normalize_simple_command ... ok
[INFO] [stdout] test parser::tests::extract_nested_shell::does_not_match_sh_without_c_flag ... ok
[INFO] [stdout] test parser::tests::extract_nested_shell::extracts_complex_inner_command ... ok
[INFO] [stdout] test parser::tests::extract_nested_shell::does_not_match_unknown_shell ... ok
[INFO] [stdout] test parser::tests::extract_nested_shell::depth_exceeds_max_returns_error ... ok
[INFO] [stdout] test parser::tests::extract_nested_shell::empty_input_returns_empty_vec ... ok
[INFO] [stdout] test parser::tests::extract_nested_shell::extracts_from_sh_c_double_quoted ... ok
[INFO] [stdout] test parser::tests::extract_nested_shell::extracts_from_bash_c ... ok
[INFO] [stdout] test normalizer::tests::test_triple_encoded ... ok
[INFO] [stdout] test parser::tests::extract_nested_shell::extracts_unquoted_argument ... ok
[INFO] [stdout] test parser::tests::extract_nested_shell::handles_two_levels_of_nesting ... ok
[INFO] [stdout] test parser::tests::extract_nested_shell::leading_trailing_whitespace_trimmed ... ok
[INFO] [stdout] test parser::tests::extract_nested_shell::handles_three_levels_of_nesting ... ok
[INFO] [stdout] test parser::tests::extract_nested_shell::rejects_four_levels_of_nesting ... ok
[INFO] [stdout] test parser::tests::extract_nested_shell::handles_path_qualified_shell ... ok
[INFO] [stdout] test parser::tests::extract_nested_shell::three_levels_mixed_shells ... ok
[INFO] [stdout] test parser::tests::extract_substitutions::does_not_extract_backticks_from_single_quotes ... ok
[INFO] [stdout] test parser::tests::extract_nested_shell::non_shell_command_returned_as_is ... ok
[INFO] [stdout] test parser::tests::extract_substitutions::empty_backtick_substitution_is_skipped ... ok
[INFO] [stdout] test parser::tests::extract_nested_shell::whitespace_only_returns_empty_vec ... ok
[INFO] [stdout] test parser::tests::extract_nested_shell::unclosed_quote_returns_error ... ok
[INFO] [stdout] test parser::tests::extract_substitutions::does_not_extract_from_single_quotes ... ok
[INFO] [stdout] test parser::tests::extract_substitutions::empty_input_returns_empty_vec ... ok
[INFO] [stdout] test parser::tests::extract_substitutions::extracts_from_double_quotes ... ok
[INFO] [stdout] test parser::tests::extract_substitutions::extracts_multiple_substitutions ... ok
[INFO] [stdout] test parser::tests::extract_substitutions::handles_deeply_nested_parens ... ok
[INFO] [stdout] test parser::tests::extract_substitutions::handles_dollar_sign_without_paren ... ok
[INFO] [stdout] test parser::tests::extract_substitutions::extracts_backticks_from_double_quotes ... ok
[INFO] [stdout] test parser::tests::extract_substitutions::handles_nested_parentheses_in_dollar_paren ... ok
[INFO] [stdout] test parser::tests::extract_substitutions::empty_substitution_is_skipped ... ok
[INFO] [stdout] test parser::tests::extract_nested_shell::extracts_from_zsh_c ... ok
[INFO] [stdout] test parser::tests::extract_substitutions::extracts_backtick_substitution ... ok
[INFO] [stdout] test parser::tests::extract_nested_shell::handles_backslash_path_qualified_shell ... ok
[INFO] [stdout] test parser::tests::extract_nested_shell::extracts_from_sh_c_single_quoted ... ok
[INFO] [stdout] test parser::tests::extract_substitutions::mixed_dollar_paren_and_backtick ... ok
[INFO] [stdout] test parser::tests::extract_substitutions::returns_error_for_unmatched_backtick ... ok
[INFO] [stdout] test parser::tests::extract_substitutions::extracts_dollar_paren_substitution ... ok
[INFO] [stdout] test parser::tests::identify_command::command_with_flag_argument_then_subcommand ... ok
[INFO] [stdout] test parser::tests::identify_command::command_with_flags_only ... ok
[INFO] [stdout] test parser::tests::identify_command::concatenated_name_not_split ... ok
[INFO] [stdout] test parser::tests::extract_substitutions::no_substitutions_returns_empty_vec ... ok
[INFO] [stdout] test parser::tests::extract_substitutions::returns_error_for_unclosed_dollar_paren ... ok
[INFO] [stdout] test parser::tests::identify_command::command_only_no_subcommand ... ok
[INFO] [stdout] test parser::tests::identify_command::hyphenated_binary_not_split_into_command_and_subcommand ... ok
[INFO] [stdout] test parser::tests::identify_command::preserves_full_segment ... ok
[INFO] [stdout] test parser::tests::identify_command::simple_command_with_subcommand ... ok
[INFO] [stdout] test parser::tests::identify_command::single_quoted_token ... ok
[INFO] [stdout] test parser::tests::identify_command::subcommand_followed_by_args ... ok
[INFO] [stdout] test parser::tests::identify_command::subcommand_followed_by_flags ... ok
[INFO] [stdout] test parser::tests::identify_command::multiple_flags_before_subcommand ... ok
[INFO] [stdout] test parser::tests::identify_command::quoted_subcommand ... ok
[INFO] [stdout] test parser::tests::identify_command::quoted_token_with_spaces ... ok
[INFO] [stdout] test parser::tests::identify_command::underscore_joined_name_not_split ... ok
[INFO] [stdout] test parser::tests::identify_command::variable_containing_forbidden_command_not_matched_as_command ... ok
[INFO] [stdout] test parser::tests::identify_command::whitespace_only_segment ... ok
[INFO] [stdout] test parser::tests::quote_awareness::command_substitution_in_single_quotes_not_extracted ... ok
[INFO] [stdout] test parser::tests::quote_awareness::comment_after_hash_makes_forbidden_command_invisible ... ok
[INFO] [stdout] test parser::tests::quote_awareness::forbidden_command_only_in_comment_not_matched ... ok
[INFO] [stdout] test parser::tests::identify_command::empty_segment ... ok
[INFO] [stdout] test parser::tests::identify_command::filename_as_first_token_not_matched_as_forbidden_command ... ok
[INFO] [stdout] test parser::tests::quote_awareness::quoted_forbidden_command_is_not_identified_as_command ... ok
[INFO] [stdout] test parser::tests::quote_awareness::single_quoted_forbidden_command_is_not_identified_as_command ... ok
[INFO] [stdout] test parser::tests::quote_awareness::hash_in_quotes_preserves_content_for_parsing ... ok
[INFO] [stdout] test parser::tests::quote_awareness::split_compound_does_not_split_on_quoted_operators ... ok
[INFO] [stdout] test parser::tests::strip_builtin_prefix::env_assignment_with_underscore_var ... ok
[INFO] [stdout] test parser::tests::strip_builtin_prefix::env_assignment_with_empty_value ... ok
[INFO] [stdout] test parser::tests::strip_builtin_prefix::handles_env_with_only_assignments ... ok
[INFO] [stdout] test parser::tests::strip_builtin_prefix::does_not_strip_prefix_as_substring ... ok
[INFO] [stdout] test parser::tests::identify_command::flags_before_subcommand ... ok
[INFO] [stdout] test parser::tests::identify_command::filename_containing_forbidden_command_not_matched_as_command ... ok
[INFO] [stdout] test parser::tests::strip_builtin_prefix::handles_prefix_only_no_command ... ok
[INFO] [stdout] test parser::tests::strip_builtin_prefix::no_prefix_returns_unchanged ... ok
[INFO] [stdout] test parser::tests::strip_builtin_prefix::preserves_arguments_after_command ... ok
[INFO] [stdout] test parser::tests::strip_builtin_prefix::strips_chained_prefixes ... ok
[INFO] [stdout] test parser::tests::strip_builtin_prefix::strips_command_prefix ... ok
[INFO] [stdout] test parser::tests::strip_builtin_prefix::handles_extra_whitespace ... ok
[INFO] [stdout] test parser::tests::strip_builtin_prefix::strips_env_with_vars_and_chained_prefix ... ok
[INFO] [stdout] test parser::tests::strip_builtin_prefix::strips_exec_prefix ... ok
[INFO] [stdout] test parser::tests::strip_comments::empty_input_returns_empty ... ok
[INFO] [stdout] test parser::tests::strip_builtin_prefix::strips_env_prefix ... ok
[INFO] [stdout] test parser::tests::strip_comments::hash_after_quoted_region_is_comment ... ok
[INFO] [stdout] test parser::tests::strip_builtin_prefix::strips_env_with_var_assignments ... ok
[INFO] [stdout] test parser::tests::strip_comments::forbidden_command_in_quoted_hash_region_not_matched ... ok
[INFO] [stdout] test parser::tests::strip_comments::hash_at_beginning_removes_everything ... ok
[INFO] [stdout] test parser::tests::strip_comments::hash_immediately_after_command_no_space ... ok
[INFO] [stdout] test parser::tests::strip_comments::hash_inside_double_quotes_not_treated_as_comment ... ok
[INFO] [stdout] test parser::tests::strip_comments::no_hash_returns_input_unchanged ... ok
[INFO] [stdout] test parser::tests::strip_builtin_prefix::env_does_not_treat_flags_as_assignments ... ok
[INFO] [stdout] test parser::tests::strip_comments::removes_comment_with_forbidden_command ... ok
[INFO] [stdout] test parser::tests::strip_builtin_prefix::handles_empty_input ... ok
[INFO] [stdout] test parser::tests::strip_comments::removes_trailing_comment ... ok
[INFO] [stdout] test self_protection::tests::test_allows_mr_nope_in_filename_context ... ok
[INFO] [stdout] test parser::tests::strip_comments::whitespace_only_input ... ok
[INFO] [stdout] test self_protection::tests::test_allows_mr_nope_evaluate ... ok
[INFO] [stdout] test parser::tests::strip_comments::hash_inside_single_quotes_not_treated_as_comment ... ok
[INFO] [stdout] test self_protection::tests::test_allows_mr_nope_exe_policy ... ok
[INFO] [stdout] test parser::tests::strip_comments::mixed_quotes_with_hash ... ok
[INFO] [stdout] test self_protection::tests::test_allows_mr_nope_policy ... ok
[INFO] [stdout] test parser::tests::strip_comments::multiple_hashes_only_first_unquoted_matters ... ok
[INFO] [stdout] test self_protection::tests::test_blocks_any_mention_of_global_policy ... ok
[INFO] [stdout] test self_protection::tests::test_allows_mr_nope_status ... ok
[INFO] [stdout] test self_protection::tests::test_allows_unrelated_commands ... ok
[INFO] [stdout] test self_protection::tests::test_blocks_any_mention_of_hooks_json ... ok
[INFO] [stdout] test self_protection::tests::test_blocks_mr_nope_install ... ok
[INFO] [stdout] test self_protection::tests::test_blocks_mr_nope_with_full_path ... ok
[INFO] [stdout] test self_protection::tests::test_allows_mr_nope_test ... ok
[INFO] [stdout] test self_protection::tests::test_blocks_mr_nope_with_exe_suffix ... ok
[INFO] [stdout] test self_protection::tests::test_case_insensitive ... ok
[INFO] [stdout] test self_protection::tests::test_blocks_mr_nope_uninstall ... ok
[INFO] [stdout] test self_protection::tests::test_blocks_any_mention_of_policy_yml ... ok
[INFO] [stdout] test self_protection::tests::test_hex_escape_bypasses ... ok
[INFO] [stdout] test self_protection::tests::test_catches_path_inside_python_string ... ok
[INFO] [stdout] test self_protection::tests::test_char_code_with_mr_nope_literal_still_caught ... ok
[INFO] [stdout] test self_protection::tests::test_no_mention_at_all_bypasses ... ok
[INFO] [stdout] test self_protection::tests::test_catches_path_in_pipe_chain ... ok
[INFO] [stdout] test self_protection::tests::test_catches_path_inside_nested_shell ... ok
[INFO] [stdout] test self_protection::tests::test_catches_path_inside_command_substitution ... ok
[INFO] [stdout] test self_protection::tests::test_variable_indirection_still_caught ... ok
[INFO] [stdout] test self_protection::tests::test_catches_hooks_json_in_any_context ... ok
[INFO] [stdout] test self_protection::tests::test_catches_path_as_redirect_target ... ok
[INFO] [stdout] test self_protection::tests::test_split_across_two_commands_bypasses ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 329 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/release/deps/mr_nope-5cd0e772c36fbaae)
[INFO] [stderr]      Running tests/integration/mod.rs (/opt/rustwide/target/release/deps/integration-1229456b4f1556d0)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 29 tests
[INFO] [stdout] test cli::test_uninstall_with_no_hooks_json_is_graceful ... ok
[INFO] [stdout] test cli::test_install_with_unsupported_adapter_fails ... ok
[INFO] [stdout] test cli::test_install_preserves_existing_hooks ... ok
[INFO] [stdout] test hook_flow::test_deny_response_format ... ok
[INFO] [stdout] test hook_flow::test_allow_response_format ... ok
[INFO] [stdout] test cli::test_install_with_project_creates_hooks_json ... ok
[INFO] [stdout] test hook_flow::test_kiro_shell_allow_git_status_exits_0 ... ok
[INFO] [stdout] test cli::test_uninstall_removes_only_mr_nope_entries ... ok
[INFO] [stdout] test hook_flow::test_kiro_tool_input_deny_nested_forbidden_exits_2 ... ok
[INFO] [stdout] test hook_flow::test_malformed_json_input_denies ... ok
[INFO] [stdout] test hook_flow::test_kiro_tool_input_unparsed_text_allows_and_logs ... ok
[INFO] [stdout] test hook_flow::test_empty_input_denies ... ok
[INFO] [stdout] test hook_flow::test_kiro_malformed_input_denies_exits_2 ... ok
[INFO] [stdout] test hook_flow::test_mcp_allow_no_tool_input ... ok
[INFO] [stdout] test hook_flow::test_kiro_shell_deny_git_push_exits_2 ... ok
[INFO] [stdout] test hook_flow::test_kiro_shell_unclosed_quote_denies_and_logs ... ok
[INFO] [stdout] test hook_flow::test_mcp_allow_git_status_in_tool_input ... ok
[INFO] [stdout] test hook_flow::test_kiro_tool_input_allow_safe_exits_0 ... ok
[INFO] [stdout] test hook_flow::test_partial_json_denies ... ok
[INFO] [stdout] test hook_flow::test_mcp_deny_forbidden_command_in_tool_input ... ok
[INFO] [stdout] test hook_flow::test_mcp_deny_git_commit_in_tool_input ... ok
[INFO] [stdout] test hook_flow::test_shell_deny_git_push ... ok
[INFO] [stdout] test hook_flow::test_shell_allow_git_diff ... ok
[INFO] [stdout] test hook_flow::test_mcp_allow_safe_tool_input ... ok
[INFO] [stdout] test hook_flow::test_shell_deny_git_commit ... ok
[INFO] [stdout] test hook_flow::test_shell_allow_safe_command ... ok
[INFO] [stdout] test hook_flow::test_shell_allow_git_status ... ok
[INFO] [stdout] test hook_flow::test_unknown_hook_event_after_execution_denies ... ok
[INFO] [stderr]      Running tests/properties/mod.rs (/opt/rustwide/target/release/deps/properties-14936ee250e6d054)
[INFO] [stdout] test hook_flow::test_unknown_hook_event_denies ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 29 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 49 tests
[INFO] [stdout] test adapter::prop15_adapter_deny_matches_engine_deny ... ok
[INFO] [stdout] test adapter::prop16_malformed_substitution_denies ... ok
[INFO] [stdout] test adapter::prop15_adapter_allow_matches_engine_allow ... ok
[INFO] [stdout] test adapter::prop17_mcp_denies_when_any_string_matches_deny_rule ... ok
[INFO] [stdout] test engine::prop12_policy_matching_allows_non_matching_command ... ok
[INFO] [stdout] test engine::prop12_policy_matching_allows_non_matching_subcommand ... ok
[INFO] [stdout] test engine::prop12_policy_matching_denies_exact_match ... ok
[INFO] [stdout] test engine::prop13_empty_command_field_returns_error ... ok
[INFO] [stdout] test engine::prop13_empty_subcommands_array_returns_error ... ok
[INFO] [stdout] test engine::prop12_policy_matching_allows_no_subcommand ... ok
[INFO] [stdout] test engine::prop13_missing_rules_array_returns_error ... ok
[INFO] [stdout] test engine::prop13_whitespace_only_subcommand_entry_returns_error ... ok
[INFO] [stdout] test adapter::prop16_unclosed_double_quote_denies ... ok
[INFO] [stdout] test adapter::prop16_unclosed_single_quote_denies ... ok
[INFO] [stdout] test engine::prop14_valid_policy_schema_acceptance ... ok
[INFO] [stdout] test engine::prop14_valid_policy_rules_preserved ... ok
[INFO] [stdout] test engine::prop21_custom_policy_enforces_own_rules ... ok
[INFO] [stdout] test engine::prop21_custom_policy_fully_replaces_default ... ok
[INFO] [stdout] test engine::prop2_empty_and_whitespace_only_inputs_allowed ... ok
[INFO] [stdout] test adapter::prop17_mcp_scans_all_string_values_in_nested_json ... ok
[INFO] [stdout] test adapter::prop17_mcp_scans_strings_in_arrays ... ok
[INFO] [stdout] test adapter::prop17_mcp_allows_when_no_string_matches_deny_rule ... ok
[INFO] [stdout] test normalizer::property_4_url_decoding_single_encode ... ok
[INFO] [stdout] test engine::prop2_empty_and_whitespace_with_custom_policy ... ok
[INFO] [stdout] test engine::prop1_evaluation_determinism ... ok
[INFO] [stdout] test adapter::prop15_adapter_response_agrees_with_engine ... ok
[INFO] [stdout] test normalizer::property_6_normalization_order_encoded_backslash_path ... ok
[INFO] [stdout] test normalizer::property_4_url_decoding_triple_encode ... ok
[INFO] [stdout] test engine::prop1_evaluation_determinism_with_custom_policy ... ok
[INFO] [stdout] test normalizer::property_5_path_extraction_forward_slash ... ok
[INFO] [stdout] test parser::prop10_command_and_subcommand_identification ... ok
[INFO] [stdout] test parser::prop11_dollar_paren_substitution_extraction ... ok
[INFO] [stdout] test normalizer::property_5_path_extraction_mixed_separators ... ok
[INFO] [stdout] test normalizer::property_5_path_extraction_backslash ... ok
[INFO] [stdout] test parser::prop11_backtick_substitution_extraction ... ok
[INFO] [stdout] test parser::prop18_double_quoted_forbidden_not_treated_as_command ... ok
[INFO] [stdout] test normalizer::property_6_normalization_order_encoded_path ... ok
[INFO] [stdout] test parser::prop18_single_quoted_forbidden_not_treated_as_command ... ok
[INFO] [stdout] test normalizer::property_4_url_decoding_double_encode ... ok
[INFO] [stdout] test parser::prop18_quoted_forbidden_with_policy_engine ... ok
[INFO] [stdout] test parser::prop19_substring_in_subcommand_not_matched ... ok
[INFO] [stdout] test parser::prop8_nested_shell_extraction ... ok
[INFO] [stdout] test parser::prop20_strip_comments_preserves_pre_comment_content ... ok
[INFO] [stdout] test normalizer::property_6_normalization_order_encoded_whitespace ... ok
[INFO] [stdout] test parser::prop20_comments_stripped_before_evaluation ... ok
[INFO] [stdout] test parser::prop9_builtin_prefix_stripping ... ok
[INFO] [stdout] test parser::prop7_compound_command_splitting ... ok
[INFO] [stdout] test parser::prop19_substring_not_matched_as_command ... ok
[INFO] [stdout] test normalizer::property_3_whitespace_normalization ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 49 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.23s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/unit/mod.rs (/opt/rustwide/target/release/deps/unit-b5ef9ad236d782b3)
[INFO] [stdout] 
[INFO] [stdout] running 122 tests
[INFO] [stdout] test adapter::test_deny_message_always_contains_transparency_notice ... ok
[INFO] [stdout] test adapter::test_deny_message_custom_policy_shows_specific_subcommand ... ok
[INFO] [stdout] test adapter::test_deny_message_mcp_execution_format ... ok
[INFO] [stdout] test adapter::test_deny_message_unknown_event_includes_transparency_notice ... ok
[INFO] [stdout] test adapter::test_deny_message_agent_format_git_push ... ok
[INFO] [stdout] test engine::test_custom_policy_denies_npm_publish ... ok
[INFO] [stdout] test adapter::test_deny_message_user_format_git_commit ... ok
[INFO] [stdout] test engine::test_evaluate_git_branch_allows ... ok
[INFO] [stdout] test engine::test_evaluate_git_commit_denies ... ok
[INFO] [stdout] test adapter::test_deny_message_agent_format_git_commit ... ok
[INFO] [stdout] test engine::test_evaluate_git_fetch_allows ... ok
[INFO] [stdout] test engine::test_evaluate_git_log_allows ... ok
[INFO] [stdout] test engine::test_evaluate_git_push_with_args_denies ... ok
[INFO] [stdout] test engine::test_evaluate_git_commit_with_message_denies ... ok
[INFO] [stdout] test engine::test_evaluate_git_diff_allows ... ok
[INFO] [stdout] test engine::test_large_policy_100_rules_evaluates_correctly ... ok
[INFO] [stdout] test engine::test_evaluate_git_push_denies ... ok
[INFO] [stdout] test engine::test_load_command_exactly_128_chars ... ok
[INFO] [stdout] test engine::test_load_command_too_long ... ok
[INFO] [stdout] test engine::test_load_empty_command ... ok
[INFO] [stdout] test engine::test_load_empty_subcommands_array ... ok
[INFO] [stdout] test engine::test_load_from_file ... ok
[INFO] [stdout] test engine::test_custom_policy_replaces_default_allows_git_push ... ok
[INFO] [stdout] test engine::test_load_invalid_yaml ... ok
[INFO] [stdout] test adapter::test_deny_message_user_format_git_push ... ok
[INFO] [stdout] test engine::test_load_missing_subcommands ... ok
[INFO] [stdout] test engine::test_load_multiple_rules ... ok
[INFO] [stdout] test engine::test_load_nonexistent_file_returns_default_policy ... ok
[INFO] [stdout] test engine::test_evaluate_git_status_allows ... ok
[INFO] [stdout] test engine::test_load_none_path_returns_default_policy ... ok
[INFO] [stdout] test engine::test_load_subcommand_exactly_128_chars ... ok
[INFO] [stdout] test engine::test_load_subcommand_too_long ... ok
[INFO] [stdout] test engine::test_load_empty_rules_array ... ok
[INFO] [stdout] test engine::test_load_missing_command_field ... ok
[INFO] [stdout] test engine::test_load_whitespace_only_command ... ok
[INFO] [stdout] test engine::test_load_whitespace_only_subcommand ... ok
[INFO] [stdout] test engine::test_malformed_yaml_empty_command_field ... ok
[INFO] [stdout] test engine::test_load_valid_policy ... ok
[INFO] [stdout] test engine::test_malformed_yaml_empty_subcommands_array ... ok
[INFO] [stdout] test engine::test_malformed_yaml_invalid_syntax ... ok
[INFO] [stdout] test engine::test_malformed_yaml_missing_rules_key ... ok
[INFO] [stdout] test normalizer::full_pipeline_url_encoded_path ... ok
[INFO] [stdout] test engine::test_malformed_yaml_whitespace_only_subcommand ... ok
[INFO] [stdout] test normalizer::double_encoded_path_separator_decodes_in_two_passes ... ok
[INFO] [stdout] test normalizer::empty_input_returns_empty ... ok
[INFO] [stdout] test normalizer::path_extraction_mixed_separators ... ok
[INFO] [stdout] test normalizer::path_extraction_relative_backslash ... ok
[INFO] [stdout] test normalizer::invalid_percent_encoding_passes_through_unchanged ... ok
[INFO] [stdout] test engine::test_load_missing_deny_object ... ok
[INFO] [stdout] test engine::test_load_is_default_flag ... ok
[INFO] [stdout] test normalizer::leading_and_trailing_whitespace_trimmed ... ok
[INFO] [stdout] test engine::test_load_missing_rules_array ... ok
[INFO] [stdout] test normalizer::truncated_percent_at_end_passes_through ... ok
[INFO] [stdout] test normalizer::mixed_valid_and_invalid_encoding ... ok
[INFO] [stdout] test normalizer::path_extraction_unix_absolute ... ok
[INFO] [stdout] test normalizer::quadruple_encoded_stops_at_three_passes ... ok
[INFO] [stdout] test parser::command_identification_tests::command_with_multiple_flags_then_subcommand ... ok
[INFO] [stdout] test normalizer::whitespace_collapsing_tabs ... ok
[INFO] [stdout] test parser::command_identification_tests::flag_before_subcommand_skipped ... ok
[INFO] [stdout] test parser::command_identification_tests::git_commit_with_flag_message ... ok
[INFO] [stdout] test parser::command_identification_tests::git_push_identified ... ok
[INFO] [stdout] test parser::command_identification_tests::single_command_no_args ... ok
[INFO] [stdout] test parser::comment_handling_tests::hash_in_single_quotes_preserved ... ok
[INFO] [stdout] test normalizer::url_encoded_git_push_decodes_correctly ... ok
[INFO] [stdout] test normalizer::whitespace_collapsing_multiple_spaces ... ok
[INFO] [stdout] test parser::comment_handling_tests::strips_comment_forbidden_command_not_seen ... ok
[INFO] [stdout] test parser::comment_handling_tests::no_comment_returns_unchanged ... ok
[INFO] [stdout] test parser::compound_mixed_operator_tests::deeply_nested_quotes_with_operators ... ok
[INFO] [stdout] test parser::compound_mixed_operator_tests::empty_segments_filtered_out ... ok
[INFO] [stdout] test parser::nested_shell_tests::bash_c_extracts_inner_command ... ok
[INFO] [stdout] test parser::nested_shell_tests::depth_4_immediately_rejected ... ok
[INFO] [stdout] test parser::nested_shell_tests::four_levels_of_nesting_returns_nesting_too_deep ... ok
[INFO] [stdout] test parser::nested_shell_tests::three_levels_of_nesting_succeeds ... ok
[INFO] [stdout] test normalizer::whitespace_only_input_returns_empty ... ok
[INFO] [stdout] test parser::command_identification_tests::all_flags_no_subcommand ... ok
[INFO] [stdout] test normalizer::triple_encoded_space_needs_three_passes ... ok
[INFO] [stdout] test parser::nested_shell_tests::unclosed_quotes_in_nested_shell ... ok
[INFO] [stdout] test parser::compound_mixed_operator_tests::pipe_and_logical_and_semicolon_combined ... ok
[INFO] [stdout] test parser::compound_mixed_operator_tests::unclosed_quote_in_compound ... ok
[INFO] [stdout] test parser::nested_shell_tests::sh_c_extracts_inner_command ... ok
[INFO] [stdout] test parser::prefix_stripping_tests::command_prefix_stripped ... ok
[INFO] [stdout] test parser::quote_awareness_tests::echo_git_push_in_double_quotes_not_treated_as_command ... ok
[INFO] [stdout] test parser::comment_handling_tests::hash_inside_quotes_preserved ... ok
[INFO] [stdout] test parser::quote_awareness_tests::echo_git_push_in_single_quotes_not_treated_as_command ... ok
[INFO] [stdout] test parser::quote_awareness_tests::forbidden_command_inside_quotes_not_treated_as_command ... ok
[INFO] [stdout] test parser::split_compound_tests::double_quote_inside_single_quotes_not_special ... ok
[INFO] [stdout] test parser::split_compound_tests::empty_input_returns_empty_vec ... ok
[INFO] [stdout] test parser::split_compound_tests::leading_operator_produces_no_empty_segment ... ok
[INFO] [stdout] test parser::split_compound_tests::multiple_pipes ... ok
[INFO] [stdout] test parser::split_compound_tests::preserves_double_quoted_operators ... ok
[INFO] [stdout] test parser::split_compound_tests::preserves_double_quoted_semicolon ... ok
[INFO] [stdout] test parser::split_compound_tests::preserves_single_quoted_operators ... ok
[INFO] [stdout] test parser::split_compound_tests::preserves_single_quoted_pipe ... ok
[INFO] [stdout] test parser::split_compound_tests::single_command_no_operators ... ok
[INFO] [stdout] test parser::prefix_stripping_tests::env_with_var_assignment_stripped ... ok
[INFO] [stdout] test parser::prefix_stripping_tests::exec_prefix_stripped ... ok
[INFO] [stdout] test parser::split_compound_tests::single_quote_inside_double_quotes_not_special ... ok
[INFO] [stdout] test parser::split_compound_tests::split_mixed_operators ... ok
[INFO] [stdout] test parser::split_compound_tests::split_on_and_operator ... ok
[INFO] [stdout] test parser::split_compound_tests::split_on_pipe ... ok
[INFO] [stdout] test parser::split_compound_tests::split_on_semicolon ... ok
[INFO] [stdout] test parser::split_compound_tests::trailing_operator_produces_no_empty_segment ... ok
[INFO] [stdout] test parser::split_compound_tests::unclosed_double_quote_returns_error ... ok
[INFO] [stdout] test parser::split_compound_tests::unclosed_single_quote_returns_error ... ok
[INFO] [stdout] test parser::split_compound_tests::whitespace_only_returns_empty_vec ... ok
[INFO] [stdout] test parser::prefix_stripping_tests::env_command_exec_chained_all_stripped ... ok
[INFO] [stdout] test parser::substitution_extraction_tests::backtick_extracts_git_push ... ok
[INFO] [stdout] test parser::prefix_stripping_tests::env_with_multiple_vars_stripped ... ok
[INFO] [stdout] test parser::substitution_extraction_tests::substitution_inside_double_quotes_is_extracted ... ok
[INFO] [stdout] test parser::substitution_extraction_tests::dollar_paren_extracts_git_push ... ok
[INFO] [stdout] test parser::prefix_stripping_tests::no_prefix_unchanged ... ok
[INFO] [stdout] test parser::substitution_extraction_tests::unclosed_dollar_paren_returns_malformed_substitution ... ok
[INFO] [stdout] test parser::quote_awareness_tests::split_compound_preserves_quoted_operators ... ok
[INFO] [stdout] test parser::substitution_extraction_tests::substitution_inside_single_quotes_not_extracted ... ok
[INFO] [stdout] test parser::split_compound_tests::complex_compound_command ... ok
[INFO] [stdout] test parser::substitution_extraction_tests::unclosed_backtick_returns_malformed_substitution ... ok
[INFO] [stdout] test parser::split_compound_tests::split_on_or_operator ... ok
[INFO] [stdout] test parser::substring_avoidance_tests::hyphenated_binary_treated_as_single_command ... ok
[INFO] [stdout] test parser::substring_avoidance_tests::variable_containing_forbidden_name_not_matched ... ok
[INFO] [stderr]    Doc-tests mr_nope
[INFO] [stdout] test parser::substring_avoidance_tests::concatenated_name_not_split ... ok
[INFO] [stdout] test parser::substring_avoidance_tests::filename_containing_forbidden_name_not_matched ... ok
[INFO] [stdout] test parser::substring_avoidance_tests::filename_with_dot_extension_not_split ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 122 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 1 test
[INFO] [stdout] test src/parser.rs - parser::Parser::strip_comments (line 479) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stdout] all doctests ran in 4.75s; merged doctests compilation took 4.74s
[INFO] running `Command { std: "docker" "inspect" "ab62af2ab22900000a250230ed81faf4b13b8f2ff95ceb9e354e9222e7476555", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "ab62af2ab22900000a250230ed81faf4b13b8f2ff95ceb9e354e9222e7476555", kill_on_drop: false }`
[INFO] [stdout] ab62af2ab22900000a250230ed81faf4b13b8f2ff95ceb9e354e9222e7476555
