[INFO] fetching crate runok 0.2.3... [INFO] testing runok-0.2.3 against master#562dee4820c458d823175268e41601d4c060588a for pr-154210-2 [INFO] extracting crate runok 0.2.3 into /workspace/builds/worker-5-tc1/source [INFO] removed /workspace/builds/worker-5-tc1/source/rust-toolchain.toml [INFO] started tweaking crates.io crate runok 0.2.3 [INFO] removed 0 missing tests [INFO] finished tweaking crates.io crate runok 0.2.3 [INFO] tweaked toml for crates.io crate runok 0.2.3 written to /workspace/builds/worker-5-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate runok 0.2.3 on toolchain 562dee4820c458d823175268e41601d4c060588a [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate runok 0.2.3 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" "+562dee4820c458d823175268e41601d4c060588a" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded terminal_size v0.4.4 [INFO] [stderr] Downloaded crypto-common v0.2.1 [INFO] [stderr] Downloaded block-buffer v0.12.0 [INFO] [stderr] Downloaded tree-sitter-language v0.1.7 [INFO] [stderr] Downloaded murmur3 v0.4.1 [INFO] [stderr] Downloaded digest v0.11.2 [INFO] [stderr] Downloaded assert_cmd v2.2.0 [INFO] [stderr] Downloaded landlock v0.4.4 [INFO] [stderr] Downloaded cc v1.2.59 [INFO] [stderr] Downloaded cel-interpreter v0.10.0 [INFO] [stderr] Downloaded cel-parser v0.10.1 [INFO] [stderr] Downloaded toml_edit v0.25.10+spec-1.1.0 [INFO] [stderr] Downloaded js-sys v0.3.94 [INFO] [stderr] Downloaded saphyr-parser-bw v0.0.611 [INFO] [stderr] Downloaded antlr4rust v0.3.0-rc2 [INFO] [stderr] Downloaded seccompiler v0.5.0 [INFO] [stderr] Downloaded wasm-bindgen-macro-support v0.2.117 [INFO] [stderr] Downloaded tree-sitter v0.26.8 [INFO] [stderr] Downloaded wasm-bindgen v0.2.117 [INFO] [stderr] Downloaded annotate-snippets v0.12.13 [INFO] [stderr] Downloaded const-oid v0.10.2 [INFO] [stderr] Downloaded hybrid-array v0.4.10 [INFO] [stderr] Downloaded sha2 v0.11.0 [INFO] [stderr] Downloaded better_any v0.2.1 [INFO] [stderr] Downloaded supports-color v2.1.0 [INFO] [stderr] Downloaded predicates v3.1.4 [INFO] [stderr] Downloaded wasm-bindgen-macro v0.2.117 [INFO] [stderr] Downloaded tree-sitter-bash v0.25.1 [INFO] [stderr] Downloaded wasm-bindgen-shared v0.2.117 [INFO] [stderr] Downloaded serde-saphyr v0.0.23 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 82098b4d243a706afd59c1237a4edb6e50ee1c39fbf09aa57fbe27e10e582bd1 [INFO] running `Command { std: "docker" "start" "-a" "82098b4d243a706afd59c1237a4edb6e50ee1c39fbf09aa57fbe27e10e582bd1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "82098b4d243a706afd59c1237a4edb6e50ee1c39fbf09aa57fbe27e10e582bd1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "82098b4d243a706afd59c1237a4edb6e50ee1c39fbf09aa57fbe27e10e582bd1", kill_on_drop: false }` [INFO] [stdout] 82098b4d243a706afd59c1237a4edb6e50ee1c39fbf09aa57fbe27e10e582bd1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 0bcd3f1c8f61b423fe7157f386205146e7420f1bddb31381264b80a25e549265 [INFO] running `Command { std: "docker" "start" "-a" "0bcd3f1c8f61b423fe7157f386205146e7420f1bddb31381264b80a25e549265", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.184 [INFO] [stderr] Compiling shlex v1.3.0 [INFO] [stderr] Compiling serde_core v1.0.228 [INFO] [stderr] Compiling typenum v1.19.0 [INFO] [stderr] Compiling tree-sitter-language v0.1.7 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling hashbrown v0.16.1 [INFO] [stderr] Compiling aho-corasick v1.1.4 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling anstyle v1.0.14 [INFO] [stderr] Compiling rustix v1.1.4 [INFO] [stderr] Compiling syn v2.0.117 [INFO] [stderr] Compiling bit-vec v0.8.0 [INFO] [stderr] Compiling bitflags v2.11.0 [INFO] [stderr] Compiling anstyle-parse v1.0.0 [INFO] [stderr] Compiling murmur3 v0.4.1 [INFO] [stderr] Compiling is_ci v1.2.0 [INFO] [stderr] Compiling colorchoice v1.0.5 [INFO] [stderr] Compiling cc v1.2.59 [INFO] [stderr] Compiling typed-arena v2.0.2 [INFO] [stderr] Compiling better_any v0.2.1 [INFO] [stderr] Compiling uuid v1.23.0 [INFO] [stderr] Compiling anstream v1.0.0 [INFO] [stderr] Compiling owo-colors v4.3.0 [INFO] [stderr] Compiling clap_lex v1.1.0 [INFO] [stderr] Compiling arraydeque v0.5.1 [INFO] [stderr] Compiling const-oid v0.10.2 [INFO] [stderr] Compiling fastrand v2.3.0 [INFO] [stderr] Compiling indexmap v2.13.1 [INFO] [stderr] Compiling bit-set v0.8.0 [INFO] [stderr] Compiling clap_builder v4.6.0 [INFO] [stderr] Compiling nom v7.1.3 [INFO] [stderr] Compiling encoding_rs_io v0.1.7 [INFO] [stderr] Compiling supports-color v3.0.2 [INFO] [stderr] Compiling annotate-snippets v0.12.13 [INFO] [stderr] Compiling runok v0.2.3 (/opt/rustwide/workdir) [INFO] [stderr] Compiling nohash-hasher v0.2.0 [INFO] [stderr] Compiling streaming-iterator v0.1.9 [INFO] [stderr] Compiling shell-words v1.1.1 [INFO] [stderr] Compiling unicode-segmentation v1.13.2 [INFO] [stderr] Compiling semver v1.0.28 [INFO] [stderr] Compiling glob v0.3.3 [INFO] [stderr] Compiling regex-automata v0.4.14 [INFO] [stderr] Compiling hybrid-array v0.4.10 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling is-terminal v0.4.17 [INFO] [stderr] Compiling getrandom v0.4.2 [INFO] [stderr] Compiling getrandom v0.3.4 [INFO] [stderr] Compiling tree-sitter-bash v0.25.1 [INFO] [stderr] Compiling supports-color v2.1.0 [INFO] [stderr] Compiling ahash v0.8.12 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling console v0.16.3 [INFO] [stderr] Compiling similar v2.7.0 [INFO] [stderr] Compiling fs2 v0.4.3 [INFO] [stderr] Compiling block-buffer v0.12.0 [INFO] [stderr] Compiling crypto-common v0.2.1 [INFO] [stderr] Compiling seccompiler v0.5.0 [INFO] [stderr] Compiling antlr4rust v0.3.0-rc2 [INFO] [stderr] Compiling tempfile v3.27.0 [INFO] [stderr] Compiling terminal_size v0.4.4 [INFO] [stderr] Compiling dialoguer v0.12.0 [INFO] [stderr] Compiling digest v0.11.2 [INFO] [stderr] Compiling sha2 v0.11.0 [INFO] [stderr] Compiling thiserror-impl v2.0.18 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling enumflags2_derive v0.7.12 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Compiling clap_derive v4.6.0 [INFO] [stderr] Compiling enumflags2 v0.7.12 [INFO] [stderr] Compiling cel-parser v0.10.1 [INFO] [stderr] Compiling thiserror v2.0.18 [INFO] [stderr] Compiling saphyr-parser-bw v0.0.611 [INFO] [stderr] Compiling landlock v0.4.4 [INFO] [stderr] Compiling thiserror v1.0.69 [INFO] [stderr] Compiling regex v1.12.3 [INFO] [stderr] Compiling clap v4.6.0 [INFO] [stderr] Compiling tree-sitter v0.26.8 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling chrono v0.4.44 [INFO] [stderr] Compiling serde-saphyr v0.0.23 [INFO] [stderr] Compiling cel-interpreter v0.10.0 [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 43.52s [INFO] running `Command { std: "docker" "inspect" "0bcd3f1c8f61b423fe7157f386205146e7420f1bddb31381264b80a25e549265", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "0bcd3f1c8f61b423fe7157f386205146e7420f1bddb31381264b80a25e549265", kill_on_drop: false }` [INFO] [stdout] 0bcd3f1c8f61b423fe7157f386205146e7420f1bddb31381264b80a25e549265 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] f133561b0c971e00b7625641e0b5043bcfa74bfd1848fc704fd41abf971a20f5 [INFO] running `Command { std: "docker" "start" "-a" "f133561b0c971e00b7625641e0b5043bcfa74bfd1848fc704fd41abf971a20f5", kill_on_drop: false }` [INFO] [stderr] Compiling regex-automata v0.4.14 [INFO] [stderr] Compiling getrandom v0.3.4 [INFO] [stderr] Compiling bit-vec v0.8.0 [INFO] [stderr] Compiling thiserror-impl v2.0.18 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling winnow v1.0.1 [INFO] [stderr] Compiling enumflags2_derive v0.7.12 [INFO] [stderr] Compiling rustc_version v0.4.1 [INFO] [stderr] Compiling toml_datetime v1.1.1+spec-1.1.0 [INFO] [stderr] Compiling chrono v0.4.44 [INFO] [stderr] Compiling clap_derive v4.6.0 [INFO] [stderr] Compiling wait-timeout v0.2.1 [INFO] [stderr] Compiling predicates-core v1.0.10 [INFO] [stderr] Compiling serde_derive_internals v0.29.1 [INFO] [stderr] Compiling ppv-lite86 v0.2.21 [INFO] [stderr] Compiling float-cmp v0.10.0 [INFO] [stderr] Compiling futures-core v0.3.32 [INFO] [stderr] Compiling rand_core v0.9.5 [INFO] [stderr] Compiling bit-set v0.8.0 [INFO] [stderr] Compiling ahash v0.8.12 [INFO] [stderr] Compiling rstest_macros v0.26.1 [INFO] [stderr] Compiling difflib v0.4.0 [INFO] [stderr] Compiling normalize-line-endings v0.3.0 [INFO] [stderr] Compiling relative-path v1.9.3 [INFO] [stderr] Compiling antlr4rust v0.3.0-rc2 [INFO] [stderr] Compiling termtree v0.5.1 [INFO] [stderr] Compiling enumflags2 v0.7.12 [INFO] [stderr] Compiling assert_cmd v2.2.0 [INFO] [stderr] Compiling futures-util v0.3.32 [INFO] [stderr] Compiling predicates-tree v1.0.13 [INFO] [stderr] Compiling rusty-fork v0.3.1 [INFO] [stderr] Compiling rand_chacha v0.9.0 [INFO] [stderr] Compiling rand v0.9.2 [INFO] [stderr] Compiling rand_xorshift v0.4.0 [INFO] [stderr] Compiling unarray v0.1.4 [INFO] [stderr] Compiling futures-timer v3.0.3 [INFO] [stderr] Compiling dyn-clone v1.0.20 [INFO] [stderr] Compiling indoc v2.0.7 [INFO] [stderr] Compiling proptest v1.11.0 [INFO] [stderr] Compiling schemars_derive v1.2.1 [INFO] [stderr] Compiling toml_parser v1.1.2+spec-1.1.0 [INFO] [stderr] Compiling cel-parser v0.10.1 [INFO] [stderr] Compiling thiserror v2.0.18 [INFO] [stderr] Compiling saphyr-parser-bw v0.0.611 [INFO] [stderr] Compiling landlock v0.4.4 [INFO] [stderr] Compiling regex v1.12.3 [INFO] [stderr] Compiling clap v4.6.0 [INFO] [stderr] Compiling toml_edit v0.25.10+spec-1.1.0 [INFO] [stderr] Compiling bstr v1.12.1 [INFO] [stderr] Compiling schemars v1.2.1 [INFO] [stderr] Compiling proc-macro-crate v3.5.0 [INFO] [stderr] Compiling tree-sitter v0.26.8 [INFO] [stderr] Compiling serde-saphyr v0.0.23 [INFO] [stderr] Compiling predicates v3.1.4 [INFO] [stderr] Compiling cel-interpreter v0.10.0 [INFO] [stderr] Compiling runok v0.2.3 (/opt/rustwide/workdir) [INFO] [stderr] Compiling rstest v0.26.1 [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 38.41s [INFO] running `Command { std: "docker" "inspect" "f133561b0c971e00b7625641e0b5043bcfa74bfd1848fc704fd41abf971a20f5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f133561b0c971e00b7625641e0b5043bcfa74bfd1848fc704fd41abf971a20f5", kill_on_drop: false }` [INFO] [stdout] f133561b0c971e00b7625641e0b5043bcfa74bfd1848fc704fd41abf971a20f5 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,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" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+562dee4820c458d823175268e41601d4c060588a" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] c94ed8a5f75a387e556eaa494c835ed99428ddd21337c4a727d9e61d56884811 [INFO] running `Command { std: "docker" "start" "-a" "c94ed8a5f75a387e556eaa494c835ed99428ddd21337c4a727d9e61d56884811", kill_on_drop: false }` [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.29s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/runok-1837fa34495aa481) [INFO] [stdout] [INFO] [stdout] running 1679 tests [INFO] [stdout] test adapter::check_adapter::tests::build_check_output_maps_action_to_output::case_3_ask_with_message ... ok [INFO] [stdout] test adapter::check_adapter::tests::build_check_output_maps_action_to_output::case_2_deny ... ok [INFO] [stdout] test adapter::check_adapter::tests::build_check_output_maps_action_to_output::case_1_allow ... ok [INFO] [stdout] test adapter::check_adapter::tests::build_check_output_maps_action_to_output::case_4_ask_without_message ... ok [INFO] [stdout] test adapter::check_adapter::tests::build_check_output_maps_action_to_output::case_5_with_sandbox_preset ... ok [INFO] [stdout] test adapter::check_adapter::tests::build_no_match_output_maps_defaults::case_2_explicit_allow ... ok [INFO] [stdout] test adapter::check_adapter::tests::build_no_match_output_maps_defaults::case_1_default_ask ... ok [INFO] [stdout] test adapter::check_adapter::tests::build_no_match_output_maps_defaults::case_3_explicit_deny ... ok [INFO] [stdout] test adapter::check_adapter::tests::build_no_match_output_maps_defaults::case_4_explicit_ask ... ok [INFO] [stdout] test adapter::check_adapter::tests::build_sandbox_info_from_merged_policy_network_denied ... ok [INFO] [stdout] test adapter::check_adapter::tests::build_sandbox_info_from_merged_policy_network_allowed ... ok [INFO] [stdout] test adapter::check_adapter::tests::build_sandbox_info_from_preset ... ok [INFO] [stdout] test adapter::check_adapter::tests::build_sandbox_info_returns_none_for_empty::case_1_no_preset ... ok [INFO] [stdout] test adapter::check_adapter::tests::build_sandbox_info_returns_none_for_empty::case_2_no_merged_policy ... ok [INFO] [stdout] test adapter::check_adapter::tests::from_stdin_extracts_command ... ok [INFO] [stdout] test adapter::check_adapter::tests::handle_action_always_returns_exit_0::case_1_allow ... ok [INFO] [stdout] test adapter::check_adapter::tests::handle_action_always_returns_exit_0::case_2_deny ... ok [INFO] [stdout] test adapter::check_adapter::tests::handle_action_always_returns_exit_0::case_3_ask ... ok [INFO] [stdout] test adapter::check_adapter::tests::handle_no_match_returns_exit_0 ... ok [INFO] [stdout] test adapter::check_adapter::tests::is_auditable_returns_false ... ok [INFO] [stdout] test adapter::exec_adapter::tests::audit_metadata_returns_exec_endpoint_type ... ok [INFO] [stdout] test adapter::check_adapter::tests::handle_error_returns_exit_2 ... ok [INFO] [stdout] test adapter::exec_adapter::tests::extract_command_returns_expected::case_4_multiple_args ... ok [INFO] [stdout] test adapter::exec_adapter::tests::extract_command_returns_expected::case_2_single_arg ... ok [INFO] [stdout] test adapter::exec_adapter::tests::extract_command_returns_expected::case_3_single_compound_arg ... ok [INFO] [stdout] test adapter::exec_adapter::tests::handle_action_allow_errors_on_undefined_sandbox_preset ... ok [INFO] [stdout] test adapter::exec_adapter::tests::handle_action_ask_returns_exit_3::case_1_with_message ... ok [INFO] [stdout] test adapter::exec_adapter::tests::handle_action_deny_returns_exit_3::case_2_without_message ... ok [INFO] [stdout] test adapter::exec_adapter::tests::extract_command_returns_expected::case_1_empty_args ... ok [INFO] [stdout] test adapter::exec_adapter::tests::handle_action_allow_with_merged_policy ... ok [INFO] [stdout] test adapter::exec_adapter::tests::handle_action_allow_executes_and_returns_exit_code::case_3_exit_42 ... ok [INFO] [stdout] test adapter::exec_adapter::tests::handle_action_ask_returns_exit_3::case_2_without_message ... ok [INFO] [stdout] test adapter::exec_adapter::tests::handle_action_deny_returns_exit_3::case_1_with_message ... ok [INFO] [stdout] test adapter::exec_adapter::tests::handle_action_allow_executes_and_returns_exit_code::case_1_exit_0 ... ok [INFO] [stdout] test adapter::exec_adapter::tests::handle_action_deny_with_fix_suggestion ... ok [INFO] [stdout] test adapter::exec_adapter::tests::handle_action_allow_executes_and_returns_exit_code::case_2_exit_1 ... ok [INFO] [stdout] test adapter::exec_adapter::tests::extract_command_returns_expected::case_5_args_with_spaces ... ok [INFO] [stdout] test adapter::exec_adapter::tests::handle_action_dispatches_correct_command_input::case_1_single_arg_shell ... ok [INFO] [stdout] test adapter::exec_adapter::tests::handle_action_dispatches_correct_command_input::case_2_multiple_args_argv ... ok [INFO] [stdout] test adapter::exec_adapter::tests::handle_error_returns_exit_1 ... ok [INFO] [stdout] test adapter::exec_adapter::tests::handle_no_match_follows_defaults::case_2_none_default ... ok [INFO] [stdout] test adapter::exec_adapter::tests::handle_no_match_empty_args_returns_0 ... ok [INFO] [stdout] test adapter::exec_adapter::tests::handle_no_match_follows_defaults::case_1_allow_default ... ok [INFO] [stdout] test adapter::exec_adapter::tests::handle_no_match_follows_defaults::case_3_deny_default ... ok [INFO] [stdout] test adapter::exec_adapter::tests::handle_no_match_follows_defaults::case_4_ask_default ... ok [INFO] [stdout] test adapter::exec_adapter::tests::is_auditable_returns_true ... ok [INFO] [stdout] test adapter::hook_adapter::tests::audit_metadata_returns_hook_endpoint_type ... ok [INFO] [stdout] test adapter::hook_adapter::tests::build_action_output_maps_action_to_hook_output::case_2_allow_with_sandbox ... ok [INFO] [stdout] test adapter::hook_adapter::tests::build_action_output_maps_action_to_hook_output::case_1_allow ... ok [INFO] [stdout] test adapter::hook_adapter::tests::build_action_output_maps_action_to_hook_output::case_3_deny_with_message ... ok [INFO] [stdout] test adapter::hook_adapter::tests::build_action_output_maps_action_to_hook_output::case_4_deny_without_message ... ok [INFO] [stdout] test adapter::hook_adapter::tests::build_action_output_maps_action_to_hook_output::case_5_deny_with_message_and_suggestion ... ok [INFO] [stdout] test adapter::hook_adapter::tests::build_action_output_maps_action_to_hook_output::case_6_ask_with_message ... ok [INFO] [stdout] {"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"allow"}}test adapter::hook_adapter::tests::build_action_output_maps_action_to_hook_output::case_7_ask_without_message ... ok [INFO] [stdout] test adapter::hook_adapter::tests::build_no_match_output_bash_applies_defaults::case_1_default_ask ... ok [INFO] [stdout] {"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"ask"}}test adapter::hook_adapter::tests::extract_command_invalid_bash_input_returns_error ... ok [INFO] [stdout] test adapter::hook_adapter::tests::build_action_output_maps_action_to_hook_output::case_8_ask_with_sandbox ... ok [INFO] [stdout] test adapter::hook_adapter::tests::build_no_match_output_bash_applies_defaults::case_2_explicit_ask ... ok [INFO] [stdout] test adapter::hook_adapter::tests::build_no_match_output_bash_applies_defaults::case_3_explicit_allow ... ok [INFO] [stdout] test adapter::hook_adapter::tests::build_no_match_output_bash_applies_defaults::case_4_explicit_deny ... ok [INFO] [stdout] test adapter::hook_adapter::tests::build_no_match_output_non_bash_returns_none ... ok [INFO] [stdout] test adapter::hook_adapter::tests::build_no_match_output_with_default_sandbox::case_1_ask ... ok [INFO] [stdout] test adapter::hook_adapter::tests::build_no_match_output_with_default_sandbox::case_2_allow ... ok [INFO] [stdout] test adapter::hook_adapter::tests::extract_command_filters_by_tool_name::case_1_bash_tool ... ok [INFO] [stdout] test adapter::hook_adapter::tests::extract_command_filters_by_tool_name::case_3_write_tool ... ok [INFO] [stdout] test adapter::hook_adapter::tests::extract_command_filters_by_tool_name::case_2_non_bash_tool ... ok [INFO] [stdout] test adapter::hook_adapter::tests::handle_action_returns_exit_0 ... ok [INFO] [stdout] test adapter::hook_adapter::tests::handle_error_returns_exit_2 ... ok [INFO] [stdout] test adapter::hook_adapter::tests::handle_no_match_returns_exit_0 ... ok [INFO] [stdout] test adapter::hook_adapter::tests::hook_input_deserializes_from_snake_case_json ... ok [INFO] [stdout] test adapter::hook_adapter::tests::wrap_with_sandbox_quotes_command::case_1_simple_command ... ok [INFO] [stdout] test adapter::hook_adapter::tests::hook_output_includes_optional_fields_when_present ... ok [INFO] [stdout] test adapter::hook_adapter::tests::wrap_with_sandbox_quotes_command::case_2_command_with_spaces ... ok [INFO] [stdout] test adapter::hook_adapter::tests::hook_output_serializes_to_camel_case_json ... ok [INFO] [stdout] test adapter::hook_adapter::tests::is_auditable_returns_true ... ok [INFO] [stdout] test adapter::hook_adapter::tests::sandbox_updated_input_resolves_preset::case_1_preset_some ... ok [INFO] [stdout] test adapter::hook_adapter::tests::sandbox_updated_input_resolves_preset::case_2_preset_none ... ok [INFO] [stdout] test adapter::hook_adapter::tests::sandbox_updated_input_resolves_preset::case_3_merged_policy ... ok [INFO] [stdout] test adapter::hook_adapter::tests::wrap_with_sandbox_quotes_command::case_3_compound_and ... ok [INFO] [stdout] test adapter::hook_adapter::tests::wrap_with_sandbox_quotes_command::case_4_compound_pipe ... ok [INFO] [stdout] test adapter::hook_adapter::tests::wrap_with_sandbox_quotes_preset::case_1_preset_with_spaces ... ok [INFO] [stdout] test adapter::hook_adapter::tests::wrap_with_sandbox_quotes_preset::case_2_preset_with_special_chars ... ok [INFO] [stdout] test adapter::hook_adapter::tests::wrap_with_sandbox_rejects_nul_byte ... ok [INFO] [stdout] test adapter::tests::apply_sandbox_fallback_works::case_1_preset_none_with_default ... ok [INFO] [stdout] test adapter::tests::apply_sandbox_fallback_works::case_3_preset_none_without_default ... ok [INFO] [stdout] test adapter::tests::apply_sandbox_fallback_works::case_4_merged_none_with_default ... ok [INFO] [stdout] test adapter::tests::apply_sandbox_fallback_works::case_2_preset_some_with_default ... ok [INFO] [stdout] test adapter::hook_adapter::tests::wrap_with_sandbox_quotes_command::case_5_compound_semicolon ... ok [INFO] [stdout] test adapter::tests::allow_with_sandbox_preset_passes_to_handle_action ... ok [INFO] [stdout] test adapter::tests::extract_none_calls_handle_no_match ... ok [INFO] [stdout] test adapter::tests::extract_none_passes_defaults_to_handle_no_match ... ok [INFO] [stdout] test adapter::tests::audit_log_write_failure_does_not_affect_exit_code ... ok [INFO] [stdout] test adapter::tests::extract_error_calls_handle_error ... ok [INFO] [stdout] test adapter::tests::handle_error_exit_code_propagated::case_1_exit_2 ... ok [INFO] [stdout] test adapter::tests::compound_all_unmatched_calls_handle_action_with_ask ... ok [INFO] [stdout] test adapter::tests::handle_action_exit_code_propagated::case_1_exit_0 ... ok [INFO] [stdout] test adapter::tests::handle_action_error_delegates_to_handle_error ... ok [INFO] [stdout] test adapter::tests::handle_error_exit_code_propagated::case_2_exit_1 ... ok [INFO] [stdout] test adapter::tests::handle_action_exit_code_propagated::case_2_exit_1 ... ok [INFO] [stdout] test adapter::tests::handle_no_match_exit_code_propagated::case_1_exit_0 ... ok [INFO] [stdout] test adapter::tests::for_loop_with_deny_rule_on_subcommand ... ok [INFO] [stdout] test adapter::tests::compound_deny_wins_over_allow ... ok [INFO] [stdout] test adapter::tests::compound_allow_plus_unmatched_with_defaults_ask_calls_handle_action_with_ask ... ok [INFO] [stdout] test adapter::tests::handle_action_exit_code_propagated::case_3_exit_42 ... ok [INFO] [stdout] test adapter::tests::audit_log_not_written_for_non_auditable_endpoint ... ok [INFO] [stdout] test adapter::tests::audit_log_records_default_action_for_no_match ... ok [INFO] [stdout] test adapter::tests::rule_match_calls_handle_action::case_1_allow ... ok [INFO] [stdout] test adapter::tests::rule_match_calls_handle_action::case_2_deny ... ok [INFO] [stdout] test adapter::tests::audit_log_not_written_when_disabled ... ok [INFO] [stdout] test adapter::tests::rule_match_calls_handle_action::case_3_ask ... ok [INFO] [stdout] test adapter::tests::handle_no_match_exit_code_propagated::case_2_exit_5 ... ok [INFO] [stdout] test adapter::tests::matched_rule_with_sandbox_overrides_defaults_sandbox ... ok [INFO] [stdout] test adapter::tests::no_match_calls_handle_action_with_ask::case_1_no_matching_rule ... ok [INFO] [stdout] test adapter::tests::no_match_calls_handle_action_with_ask::case_2_empty_config ... ok [INFO] [stdout] test adapter::tests::no_match_with_defaults_allow_calls_handle_action_with_allow ... ok [INFO] [stdout] test adapter::tests::audit_log_records_compound_sub_evaluations ... ok [INFO] [stdout] test adapter::tests::audit_log_written_for_auditable_endpoint_on_match ... ok [INFO] [stdout] test adapter::tests::audit_log_records_deny_action ... ok [INFO] [stdout] test adapter::tests::handle_no_match_error_delegates_to_handle_error ... ok [INFO] [stdout] test adapter::tests::matched_rule_without_sandbox_falls_back_to_defaults_sandbox ... ok [INFO] [stdout] test audit::filter::tests::default_filter_has_limit_50 ... ok [INFO] [stdout] test audit::filter::tests::parse_invalid::case_1_empty ... ok [INFO] [stdout] test adapter::tests::single_extracted_subcommand_evaluates_simplified_form::case_2_for_loop_no_matching_rule ... ok [INFO] [stdout] test adapter::tests::single_extracted_subcommand_verbose_logs_extraction ... ok [INFO] [stdout] test audit::filter::tests::parse_invalid::case_3_no_unit ... ok [INFO] [stdout] test adapter::tests::single_extracted_subcommand_evaluates_simplified_form::case_1_for_loop_with_echo ... ok [INFO] [stdout] test adapter::tests::run_with_default_options_behaves_like_run ... ok [INFO] [stdout] test audit::filter::tests::parse_invalid::case_5_multibyte_suffix ... ok [INFO] [stdout] test audit::filter::tests::parse_absolute::case_1_date_only ... ok [INFO] [stdout] test audit::filter::tests::parse_invalid::case_4_bad_unit ... ok [INFO] [stdout] test audit::filter::tests::parse_absolute::case_2_iso_8601 ... ok [INFO] [stdout] test audit::filter::tests::parse_invalid::case_2_invalid ... ok [INFO] [stdout] test audit::filter::tests::parse_overflow_returns_error::case_1_large_days ... ok [INFO] [stdout] test audit::filter::tests::parse_overflow_returns_error::case_2_large_hours ... ok [INFO] [stdout] test audit::filter::tests::parse_overflow_returns_error::case_3_large_minutes ... ok [INFO] [stdout] test audit::filter::tests::parse_relative::case_1_minutes ... ok [INFO] [stdout] test audit::filter::tests::parse_relative::case_2_hours ... ok [INFO] [stdout] test audit::filter::tests::parse_relative::case_3_days ... ok [INFO] [stdout] test audit::filter::tests::resolve::case_1_relative ... ok [INFO] [stdout] test audit::filter::tests::resolve::case_2_absolute ... ok [INFO] [stdout] test audit::formatter::tests::test_action_str::case_1_allow ... ok [INFO] [stdout] test audit::formatter::tests::test_action_str::case_2_deny ... ok [INFO] [stdout] test audit::formatter::tests::test_action_str::case_3_ask ... ok [INFO] [stdout] test audit::formatter::tests::test_escape_control_chars::case_1_no_control_chars ... ok [INFO] [stdout] test audit::formatter::tests::test_escape_control_chars::case_2_with_newline ... ok [INFO] [stdout] test audit::formatter::tests::test_escape_control_chars::case_3_with_cr ... ok [INFO] [stdout] test audit::formatter::tests::test_escape_control_chars::case_4_with_tab ... ok [INFO] [stdout] test audit::formatter::tests::test_print_table_empty ... ok [INFO] [stdout] test audit::log_rotator::tests::current_log_path_contains_today_date ... ok [INFO] [stdout] test audit::log_rotator::tests::parse_log_date_cases::case_1_valid ... ok [INFO] [stdout] test audit::model::tests::action_to_serializable::case_4_ask_with_message ... ok [INFO] [stdout] test audit::model::tests::action_to_serializable::case_5_ask_without_message ... ok [INFO] [stdout] test audit::model::tests::action_to_serializable::case_1_allow ... ok [INFO] [stdout] test audit::model::tests::action_to_serializable::case_3_deny_without_details ... ok [INFO] [stdout] test audit::model::tests::action_to_serializable::case_2_deny_with_details ... ok [INFO] [stdout] test audit::formatter::tests::test_print_table_multibyte_truncation_does_not_panic ... ok [INFO] [stdout] test audit::formatter::tests::test_print_tsv_format ... ok [INFO] [stdout] test audit::model::tests::audit_entry_roundtrip::case_2_with_sub_evaluations ... ok [INFO] [stdout] test audit::formatter::tests::test_print_tsv_escapes_newlines ... ok [INFO] [stdout] test audit::log_rotator::tests::parse_log_date_cases::case_4_invalid_date ... ok [INFO] [stdout] test audit::formatter::tests::test_print_table_has_header_and_rows ... ok [INFO] [stdout] test audit::log_rotator::tests::cleanup_deletes_old_files ... ok [INFO] [stdout] test audit::formatter::tests::test_action_str::case_4_default ... ok [INFO] [stdout] test audit::log_rotator::tests::parse_log_date_cases::case_3_invalid_suffix ... ok [INFO] [stdout] test audit::model::tests::audit_entry_roundtrip::case_1_without_sub_evaluations ... ok [INFO] [stdout] test audit::log_rotator::tests::parse_log_date_cases::case_2_invalid_prefix ... ok [INFO] [stdout] test audit::log_rotator::tests::cleanup_nonexistent_dir_is_ok ... ok [INFO] [stdout] test audit::model::tests::rule_match_info_to_serializable::case_1_allow_rule ... ok [INFO] [stdout] test audit::model::tests::rule_match_info_to_serializable::case_2_deny_rule ... ok [INFO] [stdout] test audit::model::tests::rule_match_info_to_serializable::case_3_ask_rule ... ok [INFO] [stdout] test audit::model::tests::serializable_action_roundtrip::case_1_allow_action ... ok [INFO] [stdout] test audit::model::tests::serializable_action_roundtrip::case_2_deny_action_with_details ... ok [INFO] [stdout] test audit::model::tests::serializable_action_roundtrip::case_3_deny_action_without_details ... ok [INFO] [stdout] test audit::model::tests::serializable_action_roundtrip::case_4_ask_action_with_message ... ok [INFO] [stdout] test audit::model::tests::serializable_action_roundtrip::case_5_ask_action_without_message ... ok [INFO] [stdout] test audit::model::tests::serializable_action_roundtrip::case_6_default_action ... ok [INFO] [stdout] test audit::model::tests::serializable_rule_match_roundtrip::case_1_single_rule ... ok [INFO] [stdout] test audit::model::tests::sub_evaluation_roundtrip::case_1_sub_evaluation_compound ... ok [INFO] [stdout] test audit::model::tests::serializable_rule_match_roundtrip::case_2_empty_rules ... ok [INFO] [stdout] test audit::reader::tests::read_nonexistent_dir ... ok [INFO] [stdout] test audit::reader::tests::filter_by_action ... ok [INFO] [stdout] test audit::reader::tests::filter_by_command_pattern ... ok [INFO] [stdout] test audit::reader::tests::filter_by_cwd_no_false_prefix_match ... ok [INFO] [stdout] test audit::reader::tests::filter_by_until ... ok [INFO] [stdout] test audit::reader::tests::limit_entries ... ok [INFO] [stdout] test audit::reader::tests::filter_by_since ... ok [INFO] [stdout] test audit::reader::tests::filter_by_cwd ... ok [INFO] [stdout] test audit::reader::tests::read_empty_dir ... ok [INFO] [stdout] test audit::reader::tests::skip_corrupted_lines ... ok [INFO] [stdout] test audit::reader::tests::skip_empty_lines ... ok [INFO] [stdout] test audit::writer::tests::write_creates_parent_directory ... ok [INFO] [stdout] test audit::reader::tests::malformed_timestamp_excluded_by_time_filter ... ok [INFO] [stdout] test audit::writer::tests::write_creates_jsonl_file ... ok [INFO] [stdout] test audit::reader::tests::read_across_multiple_date_files ... ok [INFO] [stdout] test audit::reader::tests::read_entries_sorted_ascending ... ok [INFO] [stdout] test audit::reader::tests::since_filters_date_files ... ok [INFO] [stdout] test audit::reader::tests::filter_by_cwd_root_directory ... ok [INFO] [stdout] test audit::reader::tests::filter_combined ... ok [INFO] [stdout] test audit::writer::tests::write_failure_on_invalid_path ... ok [INFO] [stdout] test config::cache::tests::cache_key_differs_for_different_refs::case_1_different_versions ... ok [INFO] [stdout] test config::cache::tests::cache_key_differs_for_different_refs::case_2_different_repos ... ok [INFO] [stdout] test config::cache::tests::cache_key_is_deterministic::case_1_same_input ... ok [INFO] [stdout] test config::cache::tests::cache_key_is_hex_sha256 ... ok [INFO] [stdout] test audit::writer::tests::write_rotation_cleans_old_files ... ok [INFO] [stdout] test config::cache::tests::acquire_lock_creates_file ... ok [INFO] [stdout] test config::dirs::tests::cache_dir::case_1_xdg_set ... ok [INFO] [stdout] test config::dirs::tests::cache_dir::case_2_xdg_empty_falls_back ... ok [INFO] [stdout] test config::dirs::tests::cache_dir::case_3_xdg_unset_falls_back ... ok [INFO] [stdout] test config::dirs::tests::cache_dir::case_4_both_unset ... ok [INFO] [stdout] test config::dirs::tests::config_dir::case_1_xdg_set ... ok [INFO] [stdout] test config::dirs::tests::config_dir::case_3_xdg_unset_falls_back ... ok [INFO] [stdout] test config::dirs::tests::config_dir::case_4_both_unset ... ok [INFO] [stdout] test config::dirs::tests::config_dir::case_2_xdg_empty_falls_back ... ok [INFO] [stdout] test config::dirs::tests::home_dir::case_1_set ... ok [INFO] [stdout] test config::cache::tests::lock_is_released_on_drop ... ok [INFO] [stdout] test config::dirs::tests::home_dir::case_2_empty ... ok [INFO] [stdout] test config::cache::tests::metadata_roundtrip ... ok [INFO] [stdout] test config::dirs::tests::home_dir::case_3_unset ... ok [INFO] [stdout] test config::cache::tests::lock_path_is_beside_cache_dir ... ok [INFO] [stdout] test config::error::tests::anyhow_error_chain_config_to_preset ... ok [INFO] [stdout] test config::error::tests::config_error_from_io_error ... ok [INFO] [stdout] test config::error::tests::config_error_from_yaml_error ... ok [INFO] [stdout] test config::error::tests::config_error_from_preset_error ... ok [INFO] [stdout] test config::error::tests::config_error_into_anyhow ... ok [INFO] [stdout] test config::error::tests::config_error_io_has_source ... ok [INFO] [stdout] test config::cache::tests::miss_when_no_cache_dir ... ok [INFO] [stdout] test config::error::tests::config_error_preset_has_source ... ok [INFO] [stdout] test audit::writer::tests::write_produces_valid_jsonl ... ok [INFO] [stdout] test audit::writer::tests::write_skips_when_disabled ... ok [INFO] [stdout] test config::error::tests::config_error_yaml_has_source ... ok [INFO] [stdout] test config::error::tests::preset_error_circular_reference ... ok [INFO] [stdout] test config::error::tests::config_error_validation_multiple ... ok [INFO] [stdout] test config::error::tests::config_error_validation_single ... ok [INFO] [stdout] test config::error::tests::preset_error_display::case_1 ... ok [INFO] [stdout] test config::cache::tests::hit_when_fresh_cache ... ok [INFO] [stdout] test config::cache::tests::stale_when_ttl_exceeded ... ok [INFO] [stdout] test config::error::tests::preset_error_display::case_2 ... ok [INFO] [stdout] test config::error::tests::preset_error_display::case_3 ... ok [INFO] [stdout] test config::error::tests::preset_error_display::case_5 ... ok [INFO] [stdout] test config::error::tests::preset_error_implements_std_error ... ok [INFO] [stdout] test config::cache::tests::stale_when_no_metadata ... ok [INFO] [stdout] test config::error::tests::preset_error_local_not_found ... ok [INFO] [stdout] test config::cache::tests::immutable_never_stale ... ok [INFO] [stdout] test config::error::tests::preset_error_max_extends_depth_exceeded ... ok [INFO] [stdout] test config::error::tests::preset_error_into_anyhow ... ok [INFO] [stdout] test config::error::tests::preset_error_display::case_4 ... ok [INFO] [stdout] test adapter::check_adapter::tests::from_command_extracts_command ... ok [INFO] [stdout] test config::loader::tests::load_audit_absent_returns_none ... ok [INFO] [stdout] test config::loader::tests::load_global_local_override::case_1_global_local_yml ... ok [INFO] [stdout] test config::loader::tests::load_audit_stripped_from_extended_project_config ... ok [INFO] [stdout] test audit::writer::tests::write_appends_multiple_entries ... ok [INFO] [stdout] test config::loader::tests::load_finds_config_and_local_override_in_parent ... ok [INFO] [stdout] test config::loader::tests::load_audit_global_only_ignores_local_overrides ... ok [INFO] [stdout] test config::loader::tests::load_finds_config_in_parent_directory ... ok [INFO] [stdout] test config::loader::tests::load_global_only::case_2_yaml_fallback ... ok [INFO] [stdout] test config::loader::tests::load_global_only::case_1_yml ... ok [INFO] [stdout] test config::loader::tests::load_global_local_override::case_2_global_local_yaml_fallback ... ok [INFO] [stdout] test config::loader::tests::load_global_yml_takes_priority_over_yaml::case_1_global ... ok [INFO] [stdout] test config::loader::tests::load_local_override::case_1_local_yml ... ok [INFO] [stdout] test config::loader::tests::load_local_only::case_2_yaml_fallback ... ok [INFO] [stdout] test config::loader::tests::load_merges_global_and_local ... ok [INFO] [stdout] test config::loader::tests::load_global_local_override_parse_error ... ok [INFO] [stdout] test config::loader::tests::load_nearest_config_wins ... ok [INFO] [stdout] test config::loader::tests::load_local_override_parse_error ... ok [INFO] [stdout] test config::loader::tests::load_global_yml_takes_priority_over_yaml::case_2_global_local_override ... ok [INFO] [stdout] test config::loader::tests::load_no_config_files_returns_default ... ok [INFO] [stdout] test config::loader::tests::load_local_override_only_without_project_config ... ok [INFO] [stdout] test config::loader::tests::load_merges_all_three_layers ... ok [INFO] [stdout] test config::loader::tests::load_merges_definitions ... ok [INFO] [stdout] test config::loader::tests::load_merges_all_four_layers ... ok [INFO] [stdout] test config::loader::tests::load_local_only::case_1_yml ... ok [INFO] [stdout] test config::loader::tests::load_local_override::case_2_local_yaml_fallback ... ok [INFO] [stdout] test config::model::tests::action_and_pattern_returns_correct_action::case_1_deny ... ok [INFO] [stdout] test config::model::tests::action_and_pattern_returns_correct_action::case_3_ask ... ok [INFO] [stdout] test config::model::tests::action_kind_ordering ... ok [INFO] [stdout] test config::loader::tests::load_validation_error_propagated ... ok [INFO] [stdout] test config::loader::tests::load_project_yml_takes_priority_over_yaml::case_2_project_local_override ... ok [INFO] [stdout] test config::loader::tests::load_project_overrides_global_local_override ... ok [INFO] [stdout] test config::loader::tests::load_stops_at_home_dir ... ok [INFO] [stdout] test config::model::tests::action_kind_default_is_ask ... ok [INFO] [stdout] test config::loader::tests::load_yaml_parse_error::case_1_global_parse_error ... ok [INFO] [stdout] test config::model::tests::action_and_pattern_returns_none_when_multiple_set ... ok [INFO] [stdout] test config::model::tests::action_and_pattern_returns_none_when_none_set ... ok [INFO] [stdout] test config::model::tests::action_and_pattern_returns_correct_action::case_2_allow ... ok [INFO] [stdout] test config::model::tests::action_and_pattern_returns_none_when_all_three_set ... ok [INFO] [stdout] test config::loader::tests::load_yaml_parse_error::case_2_local_parse_error ... ok [INFO] [stdout] test config::loader::tests::load_no_config_in_ancestor_returns_default ... ok [INFO] [stdout] test config::loader::tests::load_project_yml_takes_priority_over_yaml::case_1_project ... ok [INFO] [stdout] test config::model::tests::audit_config_default ... ok [INFO] [stdout] test config::model::tests::audit_config_is_enabled::case_1_enabled ... ok [INFO] [stdout] test config::model::tests::audit_config_resolved_path_custom ... ok [INFO] [stdout] test config::model::tests::merge_audit_partial_override_preserves_base_fields ... ok [INFO] [stdout] test config::model::tests::audit_config_is_enabled::case_2_disabled ... ok [INFO] [stdout] test config::model::tests::audit_config_is_enabled::case_3_default_when_none ... ok [INFO] [stdout] test config::model::tests::merge_defaults_sandbox_overridden ... ok [INFO] [stdout] test config::model::tests::merge_defaults_partial_override ... ok [INFO] [stdout] test config::model::tests::expand_sandbox_path_refs_errors::case_2_no_paths_defined ... ok [INFO] [stdout] test config::model::tests::merge_audit_both_none ... ok [INFO] [stdout] test config::model::tests::merge_definitions_sandbox_per_key ... ok [INFO] [stdout] test config::model::tests::expand_sandbox_path_refs_success::case_1_single_path_ref ... ok [INFO] [stdout] test config::model::tests::merge_audit_base_preserved ... ok [INFO] [stdout] test config::model::tests::merge_definitions_vars_override_only ... ok [INFO] [stdout] test config::model::tests::merge_definitions_paths_deduplicates ... ok [INFO] [stdout] test config::model::tests::merge_audit_override_only ... ok [INFO] [stdout] test config::model::tests::merge_base_only ... ok [INFO] [stdout] test config::model::tests::merge_both_default ... ok [INFO] [stdout] test config::model::tests::merge_defaults_action_overridden ... ok [INFO] [stdout] test config::model::tests::expand_sandbox_path_refs_success::case_2_mixed_concrete_and_ref ... ok [INFO] [stdout] test config::model::tests::merge_definitions_paths_appended_per_key ... ok [INFO] [stdout] test config::model::tests::merge_definitions_vars_override_per_key ... ok [INFO] [stdout] test config::model::tests::merge_definitions_wrappers_appended ... ok [INFO] [stdout] test config::model::tests::expand_sandbox_path_refs_errors::case_1_undefined_name ... ok [INFO] [stdout] test config::model::tests::merge_audit_override_wins ... ok [INFO] [stdout] test config::model::tests::merge_extends_appended ... ok [INFO] [stdout] test config::model::tests::merge_override_only ... ok [INFO] [stdout] test config::model::tests::merge_rules_appended ... ok [INFO] [stdout] test config::model::tests::merge_strictest_deny_union ... ok [INFO] [stdout] test config::model::tests::merge_strictest_empty_returns_none ... ok [INFO] [stdout] test config::model::tests::merge_strictest_network::case_1_both_allowed ... ok [INFO] [stdout] test config::model::tests::merge_definitions_vars_base_only ... ok [INFO] [stdout] test config::model::tests::merge_strictest_network::case_2_one_denied ... ok [INFO] [stdout] test config::model::tests::merge_strictest_network::case_3_both_denied ... ok [INFO] [stdout] test config::model::tests::merge_strictest_network::case_4_none_defaults_to_allowed ... ok [INFO] [stdout] test config::model::tests::merge_strictest_single_preset ... ok [INFO] [stdout] test config::model::tests::merge_strictest_writable_intersection::case_1_non_empty_intersection ... ok [INFO] [stdout] test config::model::tests::merge_strictest_writable_intersection::case_2_empty_intersection ... ok [INFO] [stdout] test config::model::tests::parse_audit_absent_returns_none ... ok [INFO] [stdout] test config::model::tests::parse_audit_full ... ok [INFO] [stdout] test config::model::tests::parse_audit_partial ... ok [INFO] [stdout] test config::model::tests::parse_defaults_action::case_2 ... ok [INFO] [stdout] test config::model::tests::parse_defaults_action::case_3 ... ok [INFO] [stdout] test config::model::tests::parse_error::case_1_invalid_yaml ... ok [INFO] [stdout] test config::model::tests::parse_definitions_vars_default_type_is_literal ... ok [INFO] [stdout] test config::model::tests::parse_error::case_2_wrong_type ... ok [INFO] [stdout] test config::model::tests::parse_definitions_vars_multiple_vars ... ok [INFO] [stdout] test config::model::tests::parse_defaults_action::case_1 ... ok [INFO] [stdout] test config::model::tests::parse_definitions_sandbox ... ok [INFO] [stdout] test config::model::tests::parse_definitions_vars_literal ... ok [INFO] [stdout] test config::model::tests::parse_error::case_3_invalid_action ... ok [INFO] [stdout] test config::model::tests::parse_definitions_vars_path ... ok [INFO] [stdout] test config::model::tests::parse_definitions_string_lists::case_1_wrappers ... ok [INFO] [stdout] test config::model::tests::parse_empty_string_returns_empty_config ... ok [INFO] [stdout] test config::model::tests::parse_defaults_with_sandbox ... ok [INFO] [stdout] test config::model::tests::parse_empty_config ... ok [INFO] [stdout] test config::model::tests::parse_definitions_paths ... ok [INFO] [stdout] test config::model::tests::parse_extends ... ok [INFO] [stdout] test config::model::tests::parse_rule_all_optional_fields_none_by_default ... ok [INFO] [stdout] test config::model::tests::parse_rule_attributes::case_2_message ... ok [INFO] [stdout] test config::model::tests::parse_multiple_rules ... ok [INFO] [stdout] test config::model::tests::parse_rule_attributes::case_1_when ... ok [INFO] [stdout] test config::model::tests::parse_rule_attributes::case_5_message_and_fix ... ok [INFO] [stdout] test config::model::tests::parse_single_rule::case_1_deny ... ok [INFO] [stdout] test config::model::tests::parse_rule_attributes::case_4_sandbox ... ok [INFO] [stdout] test config::model::tests::parse_full_config ... ok [INFO] [stdout] test config::model::tests::rotation_config_resolved_retention_days::case_1_custom ... ok [INFO] [stdout] test config::model::tests::parse_single_rule::case_2_allow ... ok [INFO] [stdout] test config::model::tests::parse_rule_attributes::case_6_when_and_message ... ok [INFO] [stdout] test config::model::tests::parse_single_rule::case_3_ask ... ok [INFO] [stdout] test config::model::tests::rotation_config_resolved_retention_days::case_2_default_when_none ... ok [INFO] [stdout] test config::model::tests::validate_config_without_rules ... ok [INFO] [stdout] test config::model::tests::validate_errors_on_deny_with_sandbox ... ok [INFO] [stdout] test config::model::tests::parse_rule_attributes::case_3_fix_suggestion ... ok [INFO] [stdout] test config::model::tests::validate_allow_with_valid_sandbox ... ok [INFO] [stdout] test config::model::tests::validate_ask_with_valid_sandbox ... ok [INFO] [stdout] test config::model::tests::validate_collects_all_errors ... ok [INFO] [stdout] test config::model::tests::rotation_config_default ... ok [INFO] [stdout] test config::model::tests::validate_errors_on_rule_with_multiple_actions ... ok [INFO] [stdout] test config::model::tests::validate_errors_on_rule_with_no_action ... ok [INFO] [stdout] test config::model::tests::validate_accepts_valid_vars ... ok [INFO] [stdout] test config::path_resolver::tests::normalize_logical_cases::case_6_dotdot_at_root ... ok [INFO] [stdout] test config::model::tests::validate_errors_on_undefined_sandbox_name ... ok [INFO] [stdout] test config::model::tests::validate_rejects_path_ref_in_definitions_paths ... ok [INFO] [stdout] test config::model::tests::merge_strictest_no_fs_preserves_other ... ok [INFO] [stdout] test config::model::tests::validate_includes_rule_index_in_error ... ok [INFO] [stdout] test config::model::tests::validate_rejects_placeholder_in_definitions_vars::case_1_var_ref ... ok [INFO] [stdout] test config::model::tests::validate_errors_on_undefined_sandbox_name_with_empty_definitions ... ok [INFO] [stdout] test config::model::tests::validate_rejects_placeholder_in_definitions_vars::case_2_path_ref ... ok [INFO] [stdout] test config::path_resolver::tests::resolve_config_paths_preserves_path_refs ... ok [INFO] [stdout] test config::path_resolver::tests::resolve_path_cases::case_1_absolute_simple ... ok [INFO] [stdout] test config::path_resolver::tests::resolve_config_paths_resolves_definitions ... ok [INFO] [stdout] test config::path_resolver::tests::normalize_logical_cases::case_2_dot ... ok [INFO] [stdout] test config::model::tests::validate_valid_config ... ok [INFO] [stdout] test config::path_resolver::tests::normalize_logical_cases::case_4_multiple_dots ... ok [INFO] [stdout] test config::path_resolver::tests::normalize_logical_cases::case_3_dotdot ... ok [INFO] [stdout] test config::path_resolver::tests::normalize_logical_cases::case_5_multiple_dotdots ... ok [INFO] [stdout] test config::path_resolver::tests::resolve_path_cases::case_2_absolute_with_dot ... ok [INFO] [stdout] test config::path_resolver::tests::resolve_path_cases::case_6_relative_dotdot ... ok [INFO] [stdout] test config::path_resolver::tests::resolve_path_cases::case_7_relative_glob ... ok [INFO] [stdout] test config::path_resolver::tests::resolve_path_cases::case_8_relative_glob_nested ... ok [INFO] [stdout] test config::path_resolver::tests::resolve_path_cases::case_9_absolute_glob ... ok [INFO] [stdout] test config::path_resolver::tests::resolve_tilde_cases::case_2_tilde_only ... ok [INFO] [stdout] test config::path_resolver::tests::resolve_tilde_cases::case_3_tilde_with_dotdot ... ok [INFO] [stdout] test config::path_resolver::tests::resolve_tilde_home_not_set::case_1_tilde_prefix ... ok [INFO] [stdout] test config::path_resolver::tests::resolve_tilde_home_not_set::case_2_tilde_only ... ok [INFO] [stdout] test config::path_resolver::tests::resolve_tilde_cases::case_1_tilde_subpath ... ok [INFO] [stdout] test config::path_resolver::tests::resolve_path_cases::case_4_relative_simple ... ok [INFO] [stdout] test config::preset::tests::circular_reference_back_to_root ... ok [INFO] [stdout] test config::path_resolver::tests::resolve_path_cases::case_3_absolute_with_dotdot ... ok [INFO] [stdout] test config::path_resolver::tests::resolve_path_cases::case_5_relative_dot ... ok [INFO] [stdout] test config::preset::tests::circular_reference_self ... ok [INFO] [stdout] test config::preset::tests::circular_reference_three_level ... ok [INFO] [stdout] test config::preset::tests::circular_reference_direct ... ok [INFO] [stdout] test config::preset::tests::error_on_home_not_set ... ok [INFO] [stdout] test config::path_resolver::tests::normalize_logical_cases::case_1_identity ... ok [INFO] [stdout] test config::preset::tests::error_message_contains_cycle_chain ... ok [INFO] [stdout] test config::preset::tests::local_preset_inline_tests_preserved ... ok [INFO] [stdout] test config::preset::tests::diamond_extends_resolved ... ok [INFO] [stdout] test config::preset::tests::error_on_nonexistent_absolute_path ... ok [INFO] [stdout] test config::model::tests::schema_is_up_to_date ... ok [INFO] [stdout] test config::preset::tests::error_on_path_traversal_home ... ok [INFO] [stdout] test config::preset::tests::preset_base_dir_for_github_shorthand::case_3_github_nested_path ... ok [INFO] [stdout] test config::preset::tests::error_on_path_traversal_relative::case_2_dot_dot_nested ... ok [INFO] [stdout] test config::preset::tests::preset_base_dir_for_github_shorthand::case_1_github_no_path ... ok [INFO] [stdout] test config::preset::tests::resolve_absolute_path ... ok [INFO] [stdout] test config::preset::tests::error_on_nonexistent_file ... ok [INFO] [stdout] test config::preset::tests::error_on_invalid_yaml_in_preset ... ok [INFO] [stdout] test config::preset::tests::resolve_relative_path::case_2_relative_no_dot ... ok [INFO] [stdout] test config::preset_remote::tests::commit_sha_detection::case_1_valid_sha ... ok [INFO] [stdout] test config::preset::tests::nested_extends_resolved ... ok [INFO] [stdout] test config::preset::tests::resolve_relative_path::case_1_relative_dot_slash ... ok [INFO] [stdout] test config::preset::tests::error_on_path_traversal_relative::case_1_dot_dot_relative ... ok [INFO] [stdout] test config::preset_remote::tests::commit_sha_detection::case_2_all_digits ... ok [INFO] [stdout] test config::preset::tests::remote_preset_inline_tests_stripped ... ok [INFO] [stdout] test config::preset::tests::loaded_preset_config_is_valid ... ok [INFO] [stdout] test config::preset::tests::extends_stripped_from_resolved_config ... ok [INFO] [stdout] test config::preset_remote::tests::commit_sha_detection::case_4_too_long ... ok [INFO] [stdout] test config::preset_remote::tests::commit_sha_detection::case_5_non_hex ... ok [INFO] [stdout] test config::preset::tests::no_extends_returns_config_as_is ... ok [INFO] [stdout] test config::preset_remote::tests::commit_sha_detection::case_7_empty ... ok [INFO] [stdout] test config::preset_remote::tests::github_to_url::case_2_with_dash ... ok [INFO] [stdout] test config::preset_remote::tests::github_to_url::case_1_basic ... ok [INFO] [stdout] test config::preset_remote::tests::clone_failure_no_cache_returns_error ... ok [INFO] [stdout] test config::preset_remote::tests::commit_sha_triggers_fetch_and_checkout_after_clone ... ok [INFO] [stdout] test config::preset_remote::tests::commit_sha_detection::case_6_tag ... ok [INFO] [stdout] test config::preset::tests::resolve_home_directory_path ... ok [INFO] [stdout] test config::preset_remote::tests::lock_acquired_for_cache_miss ... ok [INFO] [stdout] test config::preset::tests::preset_base_dir_for_github_shorthand::case_2_github_simple_path ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference::case_01_github_latest ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference::case_02_github_tag ... ok [INFO] [stdout] test config::preset_remote::tests::commit_sha_detection::case_3_too_short ... ok [INFO] [stdout] test config::preset_remote::tests::clone_miss_calls_clone_with_branch ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference::case_03_github_sha ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference::case_04_github_branch_name ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference::case_05_github_with_path ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference::case_07_github_with_nested_path_and_sha ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference::case_08_https_url_no_ref ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference::case_09_https_url_with_ref ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference::case_10_ssh_url_no_ref ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference::case_12_ssh_url_no_git_suffix_with_ref ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference::case_13_https_url_with_userinfo ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference::case_14_https_url_with_userinfo_and_ref ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference::case_15_local_relative ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference::case_06_github_with_path_and_tag ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference::case_16_local_absolute ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference::case_17_local_home ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference_errors::case_02_empty_owner ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference_errors::case_03_empty_repo ... ok [INFO] [stdout] test config::preset_remote::tests::cache_hit_skips_lock ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference::case_11_ssh_url_with_ref ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference_errors::case_06_path_traversal ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference_errors::case_07_path_traversal_no_ref ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference_errors::case_04_empty_version ... ok [INFO] [stdout] test config::preset_remote::tests::missing_runok_yml_returns_error ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference_errors::case_08_absolute_path ... ok [INFO] [stdout] test config::preset_remote::tests::git_url_commit_sha_fetches_then_checkouts ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference_errors::case_09_dot_segment ... ok [INFO] [stdout] test config::preset_remote::tests::cache_hit_skips_clone ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference_errors::case_10_trailing_slash ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference_errors::case_01_no_slash ... ok [INFO] [stdout] test config::preset_remote::tests::read_preset_from_dir_reads_yml ... ok [INFO] [stdout] test config::preset_remote::tests::read_preset_from_dir_with_path::case_2_yaml ... ok [INFO] [stdout] test config::preset_remote::tests::parse_reference_errors::case_05_empty_path_with_version ... ok [INFO] [stdout] test config::required_version::tests::check_required_runok_version_invalid_requirement ... ok [INFO] [stdout] test config::preset_remote::tests::multiple_path_presets_from_same_repo ... ok [INFO] [stdout] test config::preset_remote::tests::read_preset_from_dir_with_path::case_1_yml ... ok [INFO] [stdout] test config::preset_remote::tests::read_preset_from_dir_reads_yaml ... ok [INFO] [stdout] test config::preset_remote::tests::path_based_preset_with_version ... ok [INFO] [stdout] test config::preset_remote::tests::path_based_preset_loads_correct_file ... ok [INFO] [stdout] test config::preset_remote::tests::nonexistent_path_preset_returns_descriptive_error ... ok [INFO] [stdout] test config::required_version::tests::check_required_runok_version_ok::case_1_none_always_ok ... ok [INFO] [stdout] test config::required_version::tests::check_required_runok_version_ok::case_2_exact_match ... ok [INFO] [stdout] test config::required_version::tests::check_required_runok_version_ok::case_3_ge_match ... ok [INFO] [stdout] test config::required_version::tests::check_required_runok_version_ok::case_4_caret_match ... ok [INFO] [stdout] test config::required_version::tests::check_required_runok_version_ok::case_5_range_inclusive ... ok [INFO] [stdout] test config::preset_remote::tests::read_preset_from_dir_with_path_not_found ... ok [INFO] [stdout] test config::required_version::tests::check_required_runok_version_unsupported::case_2_upper_bound_violated ... ok [INFO] [stdout] test config::required_version::tests::current_runok_version_from_cases::case_1_release ... ok [INFO] [stdout] test config::required_version::tests::check_required_runok_version_unsupported::case_1_too_old ... ok [INFO] [stdout] test config::required_version::tests::current_runok_version_from_cases::case_4_nightly_bare ... ok [INFO] [stdout] test config::required_version::tests::current_runok_version_from_cases::case_3_nightly_short ... ok [INFO] [stdout] test config::preset_remote::tests::lock_acquired_for_stale_cache ... ok [INFO] [stdout] test config::required_version::tests::nightly_satisfies_any_lower_bound ... ok [INFO] [stdout] test config::preset_remote::tests::stale_cache_fetch_failure_uses_old_cache ... ok [INFO] [stdout] test config::required_version::tests::current_runok_version_from_cases::case_5_unparseable ... ok [INFO] [stdout] test exec::command_executor::tests::build_deny_paths::case_1_empty_deny ... ok [INFO] [stdout] test config::required_version::tests::nightly_violates_strict_upper_bound ... ok [INFO] [stdout] test exec::command_executor::tests::build_deny_paths::case_2_glob_pattern ... ok [INFO] [stdout] test config::preset_remote::tests::stale_refresh_incompatible_candidate_keeps_working_tree ... ok [INFO] [stdout] test config::preset_remote::tests::stale_cache_latest_checkouts_fetch_head ... ok [INFO] [stdout] test config::preset_remote::tests::stale_refresh_incompatible_extends_child_rejects_parent ... ok [INFO] [stdout] test config::preset_remote::tests::stale_refresh_compatible_candidate_updates_working_tree ... ok [INFO] [stdout] test exec::command_executor::tests::build_deny_paths::case_3_recursive_glob ... ok [INFO] [stdout] test exec::command_executor::tests::build_deny_paths::case_6_multiple_deny ... ok [INFO] [stdout] test exec::command_executor::tests::build_duplicate_writable_deduped ... ok [INFO] [stdout] test exec::command_executor::tests::build_tilde_deny ... ok [INFO] [stdout] test exec::command_executor::tests::build_single_writable ... ok [INFO] [stdout] test exec::command_executor::tests::build_writable_and_deny_together ... ok [INFO] [stdout] test exec::command_executor::tests::command_input_is_compound::case_2_shell ... ok [INFO] [stdout] test exec::command_executor::tests::command_input_is_compound::case_1_argv ... ok [INFO] [stdout] test exec::command_executor::tests::command_input_program::case_2_shell ... ok [INFO] [stdout] test exec::command_executor::tests::determine_exec_mode::case_2_single_with_sandbox ... ok [INFO] [stdout] test exec::command_executor::tests::determine_exec_mode::case_1_single_no_sandbox ... ok [INFO] [stdout] test exec::command_executor::tests::command_input_program::case_1_argv ... ok [INFO] [stdout] test exec::command_executor::tests::build_tilde_writable ... ok [INFO] [stdout] test exec::command_executor::tests::build_deny_paths::case_4_nonexistent_path ... ok [INFO] [stdout] test exec::command_executor::tests::build_deny_paths::case_5_duplicate_deduped ... ok [INFO] [stdout] test exec::command_executor::tests::build_multiple_writable ... ok [INFO] [stdout] test exec::command_executor::tests::build_rejects_nonexistent_writable_path ... ok [INFO] [stdout] test config::preset_remote::tests::path_based_preset_stale_cache_fetches_then_reads_path ... ok [INFO] [stdout] test config::preset_remote::tests::stale_cache_fetch_success ... ok [INFO] [stdout] test config::required_version::tests::current_runok_version_from_cases::case_2_release_with_v_patch ... ok [INFO] [stdout] test exec::command_executor::tests::determine_exec_mode::case_3_compound_no_sandbox ... ok [INFO] [stdout] test exec::command_executor::tests::determine_exec_mode::case_4_compound_with_sandbox ... ok [INFO] [stdout] test exec::command_executor::tests::exec_argv_with_mock_sandbox_nonzero ... ok [INFO] [stdout] test exec::command_executor::tests::exec_argv_with_mock_sandbox_returns_exit_code ... ok [INFO] [stdout] test exec::command_executor::tests::exec_empty_argv_returns_not_found ... ok [INFO] [stdout] test exec::command_executor::tests::exec_argv_with_sandbox_calls_sandbox_executor ... ok [INFO] [stdout] test exec::command_executor::tests::expand_tilde_cases::case_1_tilde_prefix ... ok [INFO] [stdout] test exec::command_executor::tests::expand_tilde_cases::case_2_tilde_only ... ok [INFO] [stderr] sh: 1: __nonexistent_command_12345__: not found [INFO] [stdout] hello [INFO] [stdout] test exec::command_executor::tests::exec_shell_with_mock_sandbox_passes_sh_c ... ok [INFO] [stdout] test exec::command_executor::tests::exec_shell_returns_correct_exit_code::case_3_custom_exit_code ... ok [INFO] [stdout] test exec::command_executor::tests::exec_not_found_returns_error ... ok [INFO] [stdout] test exec::command_executor::tests::exit_code_from_status_cases::case_3_custom_exit ... ok [INFO] [stdout] test exec::command_executor::tests::expand_tilde_cases::case_3_no_tilde ... ok [INFO] [stdout] test exec::command_executor::tests::expand_tilde_cases::case_4_tilde_in_middle ... ok [INFO] [stdout] test exec::command_executor::tests::exit_code_from_status_cases::case_1_success ... ok [INFO] [stdout] test exec::command_executor::tests::from_merged_all_empty ... ok [INFO] [stdout] test exec::command_executor::tests::exit_code_from_status_cases::case_2_failure ... ok [INFO] [stdout] test exec::command_executor::tests::exec_shell_returns_correct_exit_code::case_4_pipeline ... ok [INFO] [stdout] test exec::command_executor::tests::linux_sandbox_executor_new_succeeds ... ok [INFO] [stdout] test exec::command_executor::tests::from_merged_basic ... ok [INFO] [stdout] test exec::command_executor::tests::merge_network_allowed::case_1_both_true ... ok [INFO] [stdout] test exec::command_executor::tests::from_merged_glob_and_tilde_deny ... ok [INFO] [stdout] test exec::command_executor::tests::exit_code_from_signal ... ok [INFO] [stdout] test exec::command_executor::tests::from_merged_rejects_nonexistent_writable ... ok [INFO] [stdout] test exec::command_executor::tests::linux_sandbox_executor_is_supported ... ok [INFO] [stdout] test exec::command_executor::tests::merge_empty_returns_error ... ok [INFO] [stdout] test exec::command_executor::tests::merge_network_allowed::case_2_first_false ... ok [INFO] [stdout] test exec::command_executor::tests::merge_network_allowed::case_3_second_false ... ok [INFO] [stdout] test exec::command_executor::tests::merge_single_returns_clone ... ok [INFO] [stdout] test exec::command_executor::tests::merge_read_only_subpaths::case_4_both_empty ... ok [INFO] [stdout] test exec::command_executor::tests::merge_read_only_subpaths::case_3_one_empty ... ok [INFO] [stdout] test exec::command_executor::tests::merge_writable_roots::case_1_partial_overlap ... ok [INFO] [stdout] test exec::command_executor::tests::merge_network_allowed::case_4_both_false ... ok [INFO] [stdout] test exec::command_executor::tests::merge_writable_roots::case_3_no_overlap_two_non_empty ... ok [INFO] [stdout] test exec::command_executor::tests::merge_writable_roots::case_2_identical ... ok [INFO] [stdout] test exec::command_executor::tests::merge_read_only_subpaths::case_1_disjoint ... ok [INFO] [stdout] test exec::command_executor::tests::merge_writable_roots::case_4_both_empty ... ok [INFO] [stdout] test exec::command_executor::tests::merge_writable_roots::case_6_three_way_success ... ok [INFO] [stdout] test exec::command_executor::tests::merge_writable_roots::case_5_one_empty_one_non_empty ... ok [INFO] [stdout] test exec::command_executor::tests::sandbox_policy_deserialize_from_json ... ok [INFO] [stdout] test exec::command_executor::tests::sandbox_policy_round_trip_serialization ... ok [INFO] [stdout] test exec::command_executor::tests::validate_command::case_3_empty ... ok [INFO] [stdout] test exec::command_executor::tests::merge_writable_roots::case_8_three_way_conflict ... ok [INFO] [stdout] test exec::error::tests::exec_error_display::case_2 ... ok [INFO] [stdout] test exec::error::tests::exec_error_from_io_error ... ok [INFO] [stdout] test exec::error::tests::exec_error_display::case_1 ... ok [INFO] [stdout] test exec::command_executor::tests::merge_writable_roots::case_7_three_way_one_empty ... ok [INFO] [stdout] test exec::error::tests::exec_error_into_anyhow ... ok [INFO] [stdout] test exec::error::tests::exec_error_io_has_source ... ok [INFO] [stdout] test exec::command_executor::tests::validate_command::case_2_nonexistent ... ok [INFO] [stdout] test exec::command_executor::tests::validate_command::case_1_exists ... ok [INFO] [stdout] test exec::error::tests::extension_error_display::case_1 ... ok [INFO] [stdout] test exec::error::tests::extension_error_from_io_error ... ok [INFO] [stdout] test exec::error::tests::sandbox_error_display::case_1 ... ok [INFO] [stdout] test exec::error::tests::extension_error_into_anyhow ... ok [INFO] [stdout] test exec::error::tests::extension_error_display::case_2 ... ok [INFO] [stdout] test exec::error::tests::extension_error_implements_std_error ... ok [INFO] [stdout] test exec::error::tests::sandbox_error_display::case_4 ... ok [INFO] [stdout] test exec::error::tests::sandbox_error_display::case_5 ... ok [INFO] [stdout] test exec::error::tests::sandbox_error_display::case_2 ... ok [INFO] [stdout] test exec::error::tests::sandbox_error_from_io_error ... ok [INFO] [stdout] test exec::error::tests::sandbox_error_display::case_3 ... ok [INFO] [stdout] test exec::error::tests::sandbox_error_into_anyhow ... ok [INFO] [stdout] test exec::extension_runner::tests::error_falls_back_to_ask::case_2_spawn ... ok [INFO] [stdout] test exec::extension_runner::tests::error_falls_back_to_ask::case_1_timeout ... ok [INFO] [stdout] test exec::extension_runner::tests::parse_command::case_1_simple ... ok [INFO] [stdout] test exec::extension_runner::tests::parse_command::case_2_no_args ... ok [INFO] [stdout] test exec::command_executor::tests::merge_read_only_subpaths::case_2_overlapping_deduped ... ok [INFO] [stdout] test exec::extension_runner::tests::parse_command::case_3_with_flags ... ok [INFO] [stdout] test exec::extension_runner::tests::error_falls_back_to_ask::case_3_invalid_response ... ok [INFO] [stdout] test exec::extension_runner::tests::integration_spawn_failure_falls_back_to_ask ... ok [INFO] [stdout] test exec::extension_runner::tests::parse_invalid_response::case_2_missing_result ... ok [INFO] [stdout] test exec::extension_runner::tests::parse_invalid_response::case_3_missing_status ... ok [INFO] [stdout] test exec::extension_runner::tests::parse_invalid_response::case_4_jsonrpc_error ... ok [INFO] [stdout] test exec::extension_runner::tests::parse_valid_response::case_1_deny ... ok [INFO] [stdout] test exec::extension_runner::tests::parse_valid_response::case_2_allow ... ok [INFO] [stdout] test exec::extension_runner::tests::parse_valid_response::case_3_ask ... ok [INFO] [stdout] test exec::extension_runner::tests::sanitize_for_terminal_cases::case_1_plain_text ... ok [INFO] [stdout] test exec::extension_runner::tests::sanitize_for_terminal_cases::case_2_strips_ansi_escape ... ok [INFO] [stdout] test exec::extension_runner::tests::sanitize_for_terminal_cases::case_4_preserves_tab ... ok [INFO] [stdout] test exec::extension_runner::tests::sanitize_for_terminal_cases::case_5_strips_null ... ok [INFO] [stdout] test exec::extension_runner::tests::sanitize_for_terminal_cases::case_6_strips_bell ... ok [INFO] [stdout] test exec::extension_runner::tests::sanitize_for_terminal_cases::case_3_preserves_newline ... ok [INFO] [stdout] test exec::extension_runner::tests::serialize_jsonrpc_request ... ok [INFO] [stdout] test exec::extension_runner::tests::success_maps_to_correct_action::case_1_allow ... ok [INFO] [stdout] test exec::extension_runner::tests::serialize_request_with_empty_fields ... ok [INFO] [stdout] test exec::extension_runner::tests::success_maps_to_correct_action::case_2_deny ... ok [INFO] [stdout] test exec::extension_runner::tests::success_maps_to_correct_action::case_3_ask ... ok [INFO] [stdout] test exec::command_executor::tests::exec_shell_with_sandbox_calls_sandbox_executor ... ok [INFO] [stdout] test exec::command_executor::tests::command_input_program::case_3_empty_argv ... ok [INFO] [stdout] test exec::extension_runner::tests::unknown_status_falls_back_to_ask ... ok [INFO] [stdout] test exec::extension_runner::tests::verbose_mode_logs_error::case_2_spawn_verbose ... ok [INFO] [stdout] test exec::extension_runner::tests::integration_success_does_not_fallback ... ok [INFO] [stdout] test exec::glob_utils::tests::expand_braces_cases::case_03_with_suffix ... ok [INFO] [stdout] test exec::glob_utils::tests::expand_braces_cases::case_02_with_prefix ... ok [INFO] [stdout] test exec::glob_utils::tests::expand_braces_cases::case_04_with_both ... ok [INFO] [stdout] test exec::glob_utils::tests::expand_braces_cases::case_06_nested ... ok [INFO] [stdout] test exec::glob_utils::tests::expand_braces_cases::case_07_no_braces ... ok [INFO] [stdout] test exec::extension_runner::tests::verbose_mode_logs_error::case_3_invalid_response_verbose ... ok [INFO] [stdout] test exec::glob_utils::tests::expand_braces_cases::case_05_three_alt ... ok [INFO] [stdout] test exec::command_executor::tests::exec_signal_termination_returns_128_plus_signal ... ok [INFO] [stdout] test exec::command_executor::tests::exec_shell_returns_correct_exit_code::case_1_success ... ok [INFO] [stdout] test exec::glob_utils::tests::expand_braces_cases::case_08_glob_with_brace ... ok [INFO] [stdout] test exec::glob_utils::tests::expand_braces_cases::case_09_unmatched_open ... ok [INFO] [stdout] test exec::glob_utils::tests::expand_braces_cases::case_11_leading_empty_alternative ... ok [INFO] [stdout] test exec::glob_utils::tests::expand_braces_cases::case_10_empty_alternative ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::bwrap_args_contain_stage2_subcommand_and_flag ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::bwrap_args_contain_chdir ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::bwrap_args_contain_command ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::bwrap_args_contain_ro_bind_root ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::bwrap_args_contain_unshare_all ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::bwrap_args_contain_writable_bind ... ok [INFO] [stdout] test exec::extension_runner::tests::validate_with_real_process::case_1_deny ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::bwrap_args_die_with_parent ... ok [INFO] [stdout] test exec::glob_utils::tests::expand_braces_cases::case_01_simple ... ok [INFO] [stdout] test exec::extension_runner::tests::validate_invalid_json_from_process ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::bwrap_args_expand_brace_glob ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::bwrap_args_expand_relative_glob ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::bwrap_args_glob_no_matches_produces_no_ro_bind ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::bwrap_args_no_tmpfs_when_parent_is_writable ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::bwrap_args_no_tmpfs_when_tmp_is_writable ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::bwrap_args_expand_absolute_glob ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::bwrap_args_proc_and_dev ... ok [INFO] [stdout] test exec::extension_runner::tests::integration_invalid_response_falls_back_to_ask ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::bwrap_args_share_net::case_1_network_blocked ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::bwrap_args_share_net::case_2_network_allowed ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::bwrap_args_no_tmpfs_when_child_of_tmp_is_writable ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::bwrap_args_tmpfs_when_tmp_not_writable ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::is_glob_pattern_cases::case_1_star ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::is_glob_pattern_cases::case_2_double_star ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::is_glob_pattern_cases::case_4_bracket ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::is_glob_pattern_cases::case_3_question_mark ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::is_glob_pattern_cases::case_5_brace ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::is_glob_pattern_cases::case_6_literal ... ok [INFO] [stdout] test exec::linux_sandbox::bwrap::tests::is_glob_pattern_cases::case_7_absolute_literal ... ok [INFO] [stdout] test exec::linux_sandbox::landlock_sandbox::tests::build_rules_from_policy::case_1_basic_policy ... ok [INFO] [stdout] test exec::linux_sandbox::landlock_sandbox::tests::build_rules_from_policy::case_2_no_writable ... ok [INFO] [stdout] test exec::linux_sandbox::seccomp_sandbox::tests::apply_seccomp_skips_filter_when_network_allowed ... ok [INFO] [stdout] test exec::linux_sandbox::seccomp_sandbox::tests::build_filter_succeeds ... ok [INFO] [stdout] test exec::linux_sandbox::seccomp_sandbox::tests::describe_rules_count::case_1_network_blocked ... ok [INFO] [stdout] test exec::linux_sandbox::seccomp_sandbox::tests::describe_rules_count::case_2_network_allowed ... ok [INFO] [stdout] test exec::linux_sandbox::seccomp_sandbox::tests::describe_rules_network_blocked_has_socket_rule ... ok [INFO] [stdout] test exec::linux_sandbox::tests::exec_command_rejects_empty_command ... ok [INFO] [stdout] test exec::linux_sandbox::tests::exec_command_rejects_nul_byte_in_argument ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::classify_deny_path_cases::case_01_absolute_path ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::classify_deny_path_cases::case_02_absolute_dir ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::classify_deny_path_cases::case_03_relative_dotfile ... ok [INFO] [stdout] test exec::linux_sandbox::seccomp_sandbox::tests::build_filter_can_convert_to_bpf ... ok [INFO] [stdout] test exec::linux_sandbox::landlock_sandbox::tests::build_rules_from_policy::case_3_multiple_writable ... ok [INFO] [stdout] test exec::linux_sandbox::tests::exit_code_from_status_returns_code::case_2_failure ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::classify_deny_path_cases::case_08_glob_deep ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::classify_deny_path_cases::case_05_relative_dotenv ... ok [INFO] [stdout] test exec::linux_sandbox::tests::exit_code_from_status_returns_code::case_1_success ... ok [INFO] [stdout] test exec::linux_sandbox::tests::exit_code_from_status_returns_code::case_3_exit_42 ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::classify_deny_path_cases::case_06_glob_relative ... ok [INFO] [stdout] test exec::extension_runner::tests::parse_invalid_response::case_1_invalid_json ... ok [INFO] [stdout] test exec::command_executor::tests::exec_shell_returns_correct_exit_code::case_2_failure ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::classify_deny_path_cases::case_07_glob_absolute ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::classify_deny_path_cases::case_04_relative_secrets ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::classify_deny_path_cases::case_09_glob_single_star ... ok [INFO] [stdout] test exec::extension_runner::tests::validate_spawn_error_for_nonexistent_command ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::classify_deny_path_cases::case_10_glob_question_mark ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::classify_deny_path_cases::case_11_glob_char_class ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_03_double_star ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_10_no_glob ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::classify_deny_path_cases::case_12_glob_brace ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_06_bare_double_star ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_07_double_star_prefix ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_13_multiple_question_marks ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_15_char_class_negation ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_08_double_star_trailing ... ok [INFO] [stdout] test exec::extension_runner::tests::validate_with_real_process::case_2_allow ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_14_char_class ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_05_double_star_with_suffix ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_01_single_star ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_11_dotfile ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_16_char_class_multiple ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_09_double_star_multiple ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_02_star_in_middle ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_17_brace_expansion ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_18_brace_with_path ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_19_brace_empty_alternative ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_20_brace_nested ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_04_double_star_nested ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_12_question_mark ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_24_plus_escaped ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_28_empty_pattern ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_27_unmatched_brace ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_22_brace_with_glob ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_29_star_and_question ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_25_parens_escaped ... ok [INFO] [stdout] test exec::macos_sandbox::tests::build_command_basic ... ok [INFO] [stdout] test exec::macos_sandbox::tests::build_command_preserves_original_args ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_26_pipe_escaped ... ok [INFO] [stdout] test exec::macos_sandbox::tests::generate_sbpl::case_01_minimal ... ok [INFO] [stdout] test exec::macos_sandbox::tests::generate_sbpl::case_02_with_writable_roots ... ok [INFO] [stdout] test exec::macos_sandbox::tests::generate_sbpl::case_03_with_read_only_subpaths ... ok [INFO] [stdout] test exec::macos_sandbox::tests::generate_sbpl::case_04_network_denied ... ok [INFO] [stdout] test exec::macos_sandbox::tests::generate_sbpl::case_05_full_policy ... ok [INFO] [stdout] test exec::macos_sandbox::tests::generate_sbpl::case_06_relative_deny_resolved ... ok [INFO] [stdout] test exec::macos_sandbox::tests::generate_sbpl::case_07_relative_deny_no_writable_roots ... ok [INFO] [stdout] test exec::macos_sandbox::tests::generate_sbpl::case_08_glob_absolute_deny ... ok [INFO] [stdout] test exec::macos_sandbox::tests::generate_sbpl::case_09_glob_relative_deny ... ok [INFO] [stdout] test exec::macos_sandbox::tests::generate_sbpl::case_10_multiple_roots_with_relative_deny ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_23_dots_escaped ... ok [INFO] [stdout] test exec::macos_sandbox::tests::is_supported_returns_bool ... ok [INFO] [stdout] test exec::macos_sandbox::tests::sbpl_escape::case_1_simple ... ok [INFO] [stdout] test exec::macos_sandbox::tests::sbpl_escape::case_2_with_spaces ... ok [INFO] [stdout] test exec::macos_sandbox::tests::sbpl_escape::case_3_with_backslash ... ok [INFO] [stdout] test exec::macos_sandbox::tests::sbpl_escape::case_4_with_quotes ... ok [INFO] [stdout] test init::claude_code::tests::convert_permissions_basic ... ok [INFO] [stdout] test init::claude_code::tests::convert_permissions_converts_prefix_match ... ok [INFO] [stdout] test init::claude_code::tests::convert_permissions_empty ... ok [INFO] [stdout] test init::claude_code::tests::convert_permissions_escapes_single_quotes ... ok [INFO] [stdout] test init::claude_code::tests::convert_permissions_skips_non_bash ... ok [INFO] [stdout] test init::claude_code::tests::read_permissions_from_settings_json ... ok [INFO] [stdout] test exec::extension_runner::tests::verbose_mode_logs_error::case_1_timeout_verbose ... ok [INFO] [stdout] test init::claude_code::tests::read_permissions_merges_both_files ... ok [INFO] [stdout] test init::claude_code::tests::read_permissions_no_files ... ok [INFO] [stdout] test init::claude_code::tests::register_hook_creates_new_file ... ok [INFO] [stdout] test init::claude_code::tests::register_hook_preserves_existing_keys ... ok [INFO] [stdout] test init::claude_code::tests::register_hook_skips_duplicate::case_1_current_format ... ok [INFO] [stdout] test init::claude_code::tests::register_hook_skips_duplicate::case_4_string_hooks_in_object ... ok [INFO] [stdout] test init::claude_code::tests::remove_permissions_no_file ... ok [INFO] [stdout] test init::claude_code::tests::remove_permissions_noop_when_empty ... ok [INFO] [stdout] test init::claude_code::tests::register_hook_skips_duplicate::case_2_legacy_format ... ok [INFO] [stdout] test init::claude_code::tests::remove_permissions_also_cleans_settings_local ... ok [INFO] [stdout] test init::claude_code::tests::test_convert_bash_pattern::case_1_plain ... ok [INFO] [stdout] test init::claude_code::tests::register_hook_skips_duplicate::case_3_string_format ... ok [INFO] [stdout] test init::claude_code::tests::remove_permissions_removes_only_bash_entries ... ok [INFO] [stdout] test init::claude_code::tests::test_convert_bash_pattern::case_2_glob ... ok [INFO] [stdout] test exec::macos_sandbox::glob_pattern::tests::glob_to_sbpl_regex_cases::case_21_brace_dot_in_alt ... ok [INFO] [stdout] test init::claude_code::tests::test_convert_bash_pattern::case_3_prefix_match ... ok [INFO] [stdout] test init::claude_code::tests::remove_permissions_removes_key_when_only_bash ... ok [INFO] [stdout] test init::claude_code::tests::test_convert_bash_pattern::case_4_prefix_match_nested ... ok [INFO] [stdout] test init::claude_code::tests::test_convert_bash_pattern::case_5_colon_in_middle ... ok [INFO] [stdout] test init::claude_code::tests::test_detect_conflicting_hooks::case_01_empty ... ok [INFO] [stdout] test init::claude_code::tests::test_detect_conflicting_hooks::case_02_runok_only ... ok [INFO] [stdout] test init::claude_code::tests::test_detect_conflicting_hooks::case_03_other_bash_matcher ... ok [INFO] [stdout] test init::claude_code::tests::test_detect_conflicting_hooks::case_04_no_matcher_field ... ok [INFO] [stdout] test init::claude_code::tests::test_detect_conflicting_hooks::case_05_non_bash_matcher ... ok [INFO] [stdout] test init::claude_code::tests::test_detect_conflicting_hooks::case_06_mixed_runok_and_conflicting ... ok [INFO] [stdout] test init::claude_code::tests::test_detect_conflicting_hooks::case_07_string_entry_non_runok ... ok [INFO] [stdout] test init::claude_code::tests::test_detect_conflicting_hooks::case_08_string_entry_runok ... ok [INFO] [stdout] test init::claude_code::tests::test_detect_conflicting_hooks::case_09_no_matcher_with_runok_present ... ok [INFO] [stdout] test init::claude_code::tests::test_detect_conflicting_hooks::case_10_multiple_conflicts ... ok [INFO] [stdout] test init::claude_code::tests::test_entry_has_runok_hook::case_1_current_format ... ok [INFO] [stdout] test init::claude_code::tests::test_entry_has_runok_hook::case_2_legacy_format ... ok [INFO] [stdout] test init::claude_code::tests::test_entry_has_runok_hook::case_3_plain_string ... ok [INFO] [stdout] test init::claude_code::tests::test_entry_has_runok_hook::case_4_string_hooks_in_object ... ok [INFO] [stdout] test init::claude_code::tests::test_entry_has_runok_hook::case_5_no_match_different_command ... ok [INFO] [stdout] test init::claude_code::tests::test_entry_has_runok_hook::case_6_no_match_different_string ... ok [INFO] [stdout] test init::claude_code::tests::test_parse_permission_entry::case_1_bash_simple ... ok [INFO] [stdout] test init::claude_code::tests::test_parse_permission_entry::case_2_bash_wildcard ... ok [INFO] [stdout] test init::claude_code::tests::test_parse_permission_entry::case_3_read_tool ... ok [INFO] [stdout] test init::claude_code::tests::test_parse_permission_entry::case_4_no_parens ... ok [INFO] [stdout] test init::claude_code::tests::test_parse_permission_entry::case_5_empty_parens ... ok [INFO] [stdout] test init::config_gen::tests::boilerplate_has_expected_content ... ok [INFO] [stdout] test init::config_gen::tests::build_config_content_with_empty_rules ... ok [INFO] [stdout] test init::config_gen::tests::build_config_content_with_rules ... ok [INFO] [stdout] test init::claude_code::tests::test_entry_has_runok_hook::case_7_no_match_empty_object ... ok [INFO] [stdout] test init::config_gen::tests::build_config_content_without_rules ... ok [INFO] [stdout] test init::config_gen::tests::write_config_creates_directory_and_file ... ok [INFO] [stdout] test init::error::tests::error_display::case_1_io_error ... ok [INFO] [stdout] test init::config_gen::tests::write_config_overwrites_existing ... ok [INFO] [stdout] test init::error::tests::json_error_display ... ok [INFO] [stdout] test init::prompt::tests::auto_yes_confirm_always_returns_true::case_1_auto_yes_default_true ... ok [INFO] [stdout] test init::prompt::tests::auto_yes_confirm_always_returns_true::case_2_auto_yes_default_false ... ok [INFO] [stdout] test init::prompt::tests::auto_yes_select_returns_default::case_1_select_default_zero ... ok [INFO] [stdout] test init::prompt::tests::auto_yes_select_returns_default::case_2_select_default_one ... ok [INFO] [stdout] test init::wizard::preview::tests::normalize_json_reformats_indentation ... ok [INFO] [stdout] test init::wizard::preview::tests::preview_register_hook_adds_hook_entry ... ok [INFO] [stdout] test init::wizard::preview::tests::preview_register_hook_returns_none_for_legacy_format ... ok [INFO] [stdout] test init::wizard::preview::tests::preview_register_hook_empty_input ... ok [INFO] [stdout] test init::wizard::preview::tests::preview_register_hook_returns_none_for_string_format ... ok [INFO] [stdout] test init::wizard::preview::tests::preview_remove_permissions_empty_input ... ok [INFO] [stdout] test init::wizard::preview::tests::preview_register_hook_returns_none_when_already_registered ... ok [INFO] [stdout] test init::wizard::preview::tests::preview_remove_permissions_strips_only_bash_entries ... ok [INFO] [stdout] test init::wizard::tests::wizard_no_scope_select_project ... ok [INFO] [stdout] test init::wizard::tests::wizard_project_scope_auto_yes_migrates_and_applies ... ok [INFO] [stdout] test init::wizard::tests::wizard_user_scope_creates_config ... ok [INFO] [stdout] test init::wizard::tests::wizard_project_scope_creates_config ... ok [INFO] [stdout] test init::wizard::tests::wizard_claude_dir_without_settings_json_registers_hook_only ... ok [INFO] [stdout] test migrate::sandbox_fs::tests::test_migrate_sandbox_fs::case_01_writable_only ... ok [INFO] [stdout] test init::wizard::tests::wizard_project_scope_never_registers_hook ... ok [INFO] [stdout] test migrate::sandbox_fs::tests::test_migrate_sandbox_fs::case_03_writable_and_deny_block ... ok [INFO] [stdout] test init::wizard::tests::wizard_warns_when_conflicting_hooks_exist ... ok [INFO] [stdout] test migrate::sandbox_fs::tests::test_migrate_sandbox_fs::case_04_deny_only ... ok [INFO] [stdout] test init::wizard::tests::wizard_no_scope_select_user ... ok [INFO] [stdout] test init::wizard::tests::wizard_no_scope_with_auto_yes_selects_user ... ok [INFO] [stdout] test migrate::sandbox_fs::tests::test_migrate_sandbox_fs::case_05_writable_block_style ... ok [INFO] [stdout] test init::wizard::tests::wizard_batch_decline_skips_all_changes ... ok [INFO] [stdout] test migrate::sandbox_fs::tests::test_migrate_sandbox_fs::case_06_preserves_comments ... ok [INFO] [stdout] test migrate::sandbox_fs::tests::test_migrate_sandbox_fs::case_07_no_changes_needed ... ok [INFO] [stdout] test init::wizard::tests::wizard_no_warning_when_no_conflicting_hooks ... ok [INFO] [stdout] test migrate::sandbox_fs::tests::test_migrate_sandbox_fs::case_08_non_sandbox_deny_untouched ... ok [INFO] [stdout] test init::wizard::tests::wizard_warns_after_registering_hook_with_existing_conflicting_entry ... ok [INFO] [stdout] test init::wizard::tests::wizard_non_bash_permissions_only_skips_rule_conversion ... ok [INFO] [stdout] test init::wizard::tests::wizard_hook_already_registered_no_prompt_needed ... ok [INFO] [stdout] test init::wizard::tests::wizard_project_scope_migrates_when_opted_in ... ok [INFO] [stdout] test migrate::sandbox_fs::tests::test_migrate_sandbox_fs::case_09_blank_line_between_blocks ... ok [INFO] [stdout] test migrate::sandbox_fs::tests::test_migrate_sandbox_fs::case_10_comment_between_blocks ... ok [INFO] [stdout] test migrate::sandbox_fs::tests::test_migrate_sandbox_fs::case_11_with_network ... ok [INFO] [stdout] test init::wizard::tests::wizard_user_scope_with_claude_code_integration ... ok [INFO] [stdout] test migrate::sandbox_fs::tests::test_migrate_sandbox_fs::case_12_deny_before_writable ... ok [INFO] [stdout] test rules::command_parser::tests::extract_bare_variable_assignment_returns_empty ... ok [INFO] [stdout] test rules::command_parser::tests::extract_commands_errors::case_1_empty ... ok [INFO] [stdout] test rules::command_parser::tests::extract_commands_errors::case_2_syntax_error ... ok [INFO] [stdout] test init::wizard::tests::wizard_batch_accept_applies_all_changes ... ok [INFO] [stdout] test rules::command_parser::tests::extract_commands_metadata_pipelines::case_3_three_stage_pipeline ... ok [INFO] [stdout] test rules::command_parser::tests::extract_commands_metadata_single::case_1_output_redirect ... ok [INFO] [stdout] test rules::command_parser::tests::extract_commands_metadata_pipelines::case_2_two_stage_pipeline ... ok [INFO] [stdout] test rules::command_parser::tests::extract_commands_metadata_pipelines::case_4_nested_pipeline_in_subshell ... ok [INFO] [stdout] test rules::command_parser::tests::extract_commands_metadata_pipelines::case_1_simple_command ... ok [INFO] [stdout] test rules::command_parser::tests::extract_commands_metadata_single::case_3_dup_redirect_2_to_1 ... ok [INFO] [stdout] test rules::command_parser::tests::extract_commands_metadata_single::case_4_input_redirect ... ok [INFO] [stdout] test rules::command_parser::tests::extract_commands_metadata_single::case_2_append_redirect ... ok [INFO] [stdout] test rules::command_parser::tests::extract_commands_metadata_single::case_5_herestring_redirect ... ok [INFO] [stdout] test rules::command_parser::tests::extract_commands_metadata_single::case_6_ampersand_redirect ... ok [INFO] [stdout] test rules::command_parser::tests::extract_commands_metadata_single::case_7_clobber_redirect ... ok [INFO] [stdout] test rules::command_parser::tests::extract_commands_whitespace::case_1_extra_whitespace ... ok [INFO] [stdout] test rules::command_parser::tests::extract_commands_whitespace::case_2_with_subshell ... ok [INFO] [stdout] test rules::command_parser::tests::extract_comments::case_1_comment_before_command ... ok [INFO] [stdout] test rules::command_parser::tests::extract_comments::case_2_comment_before_pipeline ... ok [INFO] [stdout] test rules::command_parser::tests::extract_comments::case_3_comment_only ... ok [INFO] [stdout] test rules::command_parser::tests::extract_comments::case_4_inline_comment_after_semicolon ... ok [INFO] [stdout] test rules::command_parser::tests::extract_compound_commands::case_1_single ... ok [INFO] [stdout] test rules::command_parser::tests::extract_compound_commands::case_2_pipeline ... ok [INFO] [stdout] test rules::command_parser::tests::extract_compound_commands::case_3_and ... ok [INFO] [stdout] test rules::command_parser::tests::extract_compound_commands::case_4_or ... ok [INFO] [stdout] test rules::command_parser::tests::extract_compound_commands::case_5_semicolon ... ok [INFO] [stdout] test rules::command_parser::tests::extract_compound_commands::case_6_mixed_operators ... ok [INFO] [stdout] test rules::command_parser::tests::extract_compound_commands::case_7_logical_chain ... ok [INFO] [stdout] test rules::command_parser::tests::extract_compound_commands::case_8_quotes_preserved ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_structures::case_01_for_simple ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_structures::case_02_for_multiple_cmds ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_structures::case_03_for_cmd_substitution ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_structures::case_04_for_backtick_substitution ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_structures::case_05_while_simple ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_structures::case_06_while_pipeline ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_structures::case_07_if_then ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_structures::case_08_if_then_else ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_structures::case_09_if_elif_else ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_structures::case_10_for_quoted_cmd_sub_in_value ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_structures::case_11_case_cmd_sub_in_match_value ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_structures::case_12_case_cmd_sub_in_pattern ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_structures::case_13_case_statement ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_structures::case_14_compound_statement ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_structures::case_17_negated_command_in_if ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_structures::case_15_function_def ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_structures::case_16_negated_command ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_structures::case_18_negated_pipeline_in_subshell ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_with_operators::case_3_cmd_sub_in_command ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_with_operators::case_5_cmd_sub_in_quoted_string ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_with_operators::case_6_cmd_sub_in_concatenation ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_with_operators::case_2_for_piped ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_with_operators::case_7_cmd_sub_in_single_quotes ... ok [INFO] [stdout] test rules::command_parser::tests::extract_env_prefix_commands::case_1_single_env_prefix ... ok [INFO] [stdout] test rules::command_parser::tests::extract_env_prefix_commands::case_2_multiple_env_prefixes ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_with_operators::case_8_backtick_sub_in_quoted_string ... ok [INFO] [stdout] test rules::command_parser::tests::extract_env_prefix_commands::case_3_env_prefix_with_flags ... ok [INFO] [stdout] test rules::command_parser::tests::extract_env_prefix_commands::case_4_env_prefix_with_pipeline ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_with_operators::case_9_docker_env_with_cmd_sub ... ok [INFO] [stdout] test rules::command_parser::tests::extract_env_prefix_commands::case_5_env_prefix_with_cmd_substitution ... ok [INFO] [stdout] test rules::command_parser::tests::extract_env_prefix_commands::case_6_env_cmd_with_var_arg ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_with_operators::case_4_backtick_in_command ... ok [INFO] [stdout] test migrate::sandbox_fs::tests::test_migrate_sandbox_fs::case_02_writable_and_deny_inline ... ok [INFO] [stdout] test rules::command_parser::tests::extract_nested_control_structures::case_1_for_in_if ... ok [INFO] [stdout] test rules::command_parser::tests::extract_nested_control_structures::case_2_if_in_for ... ok [INFO] [stdout] test rules::command_parser::tests::extract_redirected_statements::case_01_stdout_to_file ... ok [INFO] [stdout] test rules::command_parser::tests::extract_redirected_statements::case_02_append_to_file ... ok [INFO] [stdout] test rules::command_parser::tests::extract_control_with_operators::case_1_list_with_for ... ok [INFO] [stdout] test rules::command_parser::tests::extract_redirected_statements::case_04_stderr_to_devnull ... ok [INFO] [stdout] test rules::command_parser::tests::extract_redirected_statements::case_05_stdout_and_stderr ... ok [INFO] [stdout] test rules::command_parser::tests::extract_redirected_statements::case_09_redirect_with_pipeline ... ok [INFO] [stdout] test rules::command_parser::tests::extract_redirected_statements::case_06_fd_redirect_only ... ok [INFO] [stdout] test rules::command_parser::tests::extract_redirected_statements::case_11_redirect_in_compound ... ok [INFO] [stdout] test rules::command_parser::tests::extract_redirected_statements::case_12_process_substitution_in_redirect ... ok [INFO] [stdout] test rules::command_parser::tests::extract_redirected_statements::case_10_redirect_with_list ... ok [INFO] [stdout] test rules::command_parser::tests::extract_redirected_statements::case_13_command_substitution_in_redirect ... ok [INFO] [stdout] test rules::command_parser::tests::extract_redirected_statements::case_08_herestring ... ok [INFO] [stdout] test rules::command_parser::tests::extract_redirected_statements::case_03_stdin_from_file ... ok [INFO] [stdout] test rules::command_parser::tests::extract_redirected_statements::case_14_command_substitution_in_herestring ... ok [INFO] [stdout] test rules::command_parser::tests::extract_subshell::case_2_in_logical_chain ... ok [INFO] [stdout] test rules::command_parser::tests::extract_variable_assignments::case_8_process_substitution_in_assignment ... ok [INFO] [stdout] test rules::command_parser::tests::extract_subshell::case_1_in_pipeline ... ok [INFO] [stdout] test rules::command_parser::tests::extract_variable_assignments::case_1_assignment_then_command ... ok [INFO] [stdout] test rules::command_parser::tests::extract_variable_assignments::case_2_assignment_with_cmd_substitution ... ok [INFO] [stdout] test rules::command_parser::tests::extract_variable_assignments::case_3_assignment_with_cmd_substitution_and_command ... ok [INFO] [stdout] test rules::command_parser::tests::extract_variable_assignments::case_4_multiple_assignments ... ok [INFO] [stdout] test rules::command_parser::tests::extract_variable_assignments::case_5_assignment_with_backtick_substitution ... ok [INFO] [stdout] test rules::command_parser::tests::parse_command_default_schema::case_2_multiple_args ... ok [INFO] [stdout] test rules::command_parser::tests::extract_variable_assignments::case_6_quoted_cmd_substitution ... ok [INFO] [stdout] test rules::command_parser::tests::extract_redirected_statements::case_07_devnull_redirect ... ok [INFO] [stdout] test rules::command_parser::tests::parse_command_default_schema::case_3_short_combined ... ok [INFO] [stdout] test rules::command_parser::tests::extract_heredoc ... ok [INFO] [stdout] test rules::command_parser::tests::extract_subshell::case_3_deeply_nested ... ok [INFO] [stdout] test rules::command_parser::tests::parse_command_default_schema::case_5_eq_short ... ok [INFO] [stdout] test rules::command_parser::tests::parse_command_default_schema::case_1_no_flags ... ok [INFO] [stdout] test rules::command_parser::tests::extract_special_constructs::case_1_process_substitution ... ok [INFO] [stdout] test rules::command_parser::tests::parse_command_default_schema::case_6_eq_long ... ok [INFO] [stdout] test rules::command_parser::tests::extract_variable_assignments::case_7_quoted_backtick_substitution ... ok [INFO] [stdout] test rules::command_parser::tests::parse_command_default_schema::case_4_long_flag ... ok [INFO] [stdout] test rules::command_parser::tests::parse_command_empty_input ... ok [INFO] [stdout] test rules::command_parser::tests::parse_command_mixed_flags_and_args ... ok [INFO] [stdout] test rules::command_parser::tests::parse_command_raw_tokens_preserved ... ok [INFO] [stdout] test rules::command_parser::tests::parse_command_default_schema::case_7_eq_non_flag ... ok [INFO] [stdout] test rules::command_parser::tests::parse_command_with_schema::case_1_short ... ok [INFO] [stdout] test rules::command_parser::tests::parse_command_with_schema::case_2_long ... ok [INFO] [stdout] test rules::command_parser::tests::parse_command_with_schema::case_3_at_end ... ok [INFO] [stdout] test rules::command_parser::tests::parse_command_with_schema::case_4_separate_bool_and_value ... ok [INFO] [stdout] test rules::command_parser::tests::parse_command_with_schema::case_5_combined_short_flags ... ok [INFO] [stdout] test rules::command_parser::tests::parse_command_with_schema::case_6_order_flag_first ... ok [INFO] [stdout] test rules::command_parser::tests::parse_command_with_schema::case_7_order_flag_last ... ok [INFO] [stdout] test rules::command_parser::tests::shell_quote_join_cases::case_1_simple ... ok [INFO] [stdout] test rules::command_parser::tests::shell_quote_join_cases::case_2_space_in_token ... ok [INFO] [stdout] test rules::command_parser::tests::shell_quote_join_cases::case_3_empty_token ... ok [INFO] [stdout] test rules::command_parser::tests::shell_quote_join_cases::case_4_single_quote_in_token ... ok [INFO] [stdout] test rules::command_parser::tests::shell_quote_join_cases::case_5_flags_and_paths ... ok [INFO] [stdout] test rules::command_parser::tests::shell_quote_join_cases::case_6_single_token ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_command_aware_falls_back_for_compounds::case_1_pipeline ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_command_aware_falls_back_for_compounds::case_2_and_list ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_command_aware_groupings::case_1_bare_subshell ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_command_aware_groupings::case_2_subshell_pipeline ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_command_aware_groupings::case_3_subshell_multi_arg ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_command_aware_groupings::case_5_dollar_substitution_with_whitespace ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_command_aware_groupings::case_6_backtick_substitution ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_concatenated_quotes ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_command_aware_groupings::case_7_process_substitution ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_double_quote_known_escapes_preserved ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_command_aware_groupings::case_9_single_quoted_arg ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_double_quotes::case_1 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_double_quotes::case_2 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_equals_flags::case_1 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_errors::case_2 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_command_aware_groupings::case_8_double_quoted_arg ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_errors::case_3 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_errors::case_1 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_errors::case_5 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_double_quotes::case_3 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_errors::case_4 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_errors::case_6_unclosed_double_quote ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_equals_flags::case_2 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_empty_single_quotes ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_command_aware_groupings::case_4_nested_subshell ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_double_quote_unknown_escape_preserves_backslash ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_empty_double_quotes ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_escapes::case_1 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_escapes::case_2 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_extra_whitespace::case_1 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_extra_whitespace::case_2 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_mixed_quoting::case_2 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_simple_commands::case_1 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_simple_commands::case_2 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_simple_commands::case_3 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_mixed_quoting::case_1 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_single_command ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_single_quotes::case_1 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_single_quotes::case_3 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_single_quotes::case_2 ... ok [INFO] [stdout] test rules::command_parser::tests::tokenize_trailing_backslash_ignored ... ok [INFO] [stdout] test rules::error::tests::command_parse_error_display::case_1 ... ok [INFO] [stdout] test rules::error::tests::anyhow_error_chain_preserves_source ... ok [INFO] [stdout] test rules::error::tests::command_parse_error_display::case_2 ... ok [INFO] [stdout] test rules::error::tests::expr_error_display::case_3 ... ok [INFO] [stdout] test rules::error::tests::expr_error_implements_std_error ... ok [INFO] [stdout] test rules::error::tests::command_parse_error_implements_std_error ... ok [INFO] [stdout] test rules::error::tests::pattern_parse_error_display::case_5 ... ok [INFO] [stdout] test rules::error::tests::expr_error_display::case_2 ... ok [INFO] [stdout] test rules::error::tests::pattern_parse_error_display::case_4 ... ok [INFO] [stdout] test rules::error::tests::pattern_parse_error_is_debug ... ok [INFO] [stdout] test rules::error::tests::pattern_parse_error_display::case_1 ... ok [INFO] [stdout] test rules::error::tests::pattern_parse_error_into_anyhow ... ok [INFO] [stdout] test rules::error::tests::pattern_parse_error_implements_std_error ... ok [INFO] [stdout] test rules::error::tests::rule_error_expr_eval_has_source ... ok [INFO] [stdout] test rules::error::tests::rule_error_command_parse_has_source ... ok [INFO] [stdout] test rules::error::tests::rule_error_from_command_parse_error ... ok [INFO] [stdout] test rules::error::tests::rule_error_from_expr_error ... ok [INFO] [stdout] test rules::error::tests::rule_error_from_pattern_parse_error ... ok [INFO] [stdout] test rules::error::tests::pattern_parse_error_display::case_2 ... ok [INFO] [stdout] test rules::error::tests::rule_error_into_anyhow ... ok [INFO] [stdout] test rules::error::tests::rule_error_pattern_parse_has_source ... ok [INFO] [stdout] test rules::error::tests::rule_error_recursion_depth_exceeded ... ok [INFO] [stdout] test rules::error::tests::pattern_parse_error_display::case_3 ... ok [INFO] [stdout] test rules::error::tests::expr_error_display::case_1 ... ok [INFO] [stdout] test rules::expr_evaluator::tests::flag_access::case_2 ... ok [INFO] [stdout] test rules::expr_evaluator::tests::env_variable_access::case_1 ... ok [INFO] [stdout] test rules::expr_evaluator::tests::env_variable_access::case_3 ... ok [INFO] [stdout] test rules::expr_evaluator::tests::flag_access::case_1 ... ok [INFO] [stdout] test rules::expr_evaluator::tests::flag_access::case_3 ... ok [INFO] [stdout] test rules::expr_evaluator::tests::env_variable_access::case_2 ... ok [INFO] [stdout] test rules::expr_evaluator::tests::eval_error_on_undeclared_reference ... ok [INFO] [stdout] test rules::expr_evaluator::tests::args_index_access::case_3 ... ok [INFO] [stdout] test rules::expr_evaluator::tests::parse_error_on_invalid_expression ... ok [INFO] [stdout] test rules::expr_evaluator::tests::args_index_access::case_1 ... ok [INFO] [stdout] test rules::expr_evaluator::tests::args_index_access::case_2 ... ok [INFO] [stdout] test rules::expr_evaluator::tests::flag_groups_access::case_4_size_zero_when_group_unmatched ... ok [INFO] [stdout] test rules::expr_evaluator::tests::flag_groups_access::case_2_exists_no_match ... ok [INFO] [stdout] test rules::expr_evaluator::tests::paths_access ... ok [INFO] [stdout] test rules::expr_evaluator::tests::pipe_variable_access::case_1_pipe_stdin_true ... ok [INFO] [stdout] test rules::expr_evaluator::tests::flag_groups_access::case_3_size_one ... ok [INFO] [stdout] test rules::expr_evaluator::tests::paths_contains_check ... ok [INFO] [stdout] test rules::expr_evaluator::tests::args_starts_with ... ok [INFO] [stdout] test rules::expr_evaluator::tests::pipe_variable_access::case_2_pipe_stdin_false ... ok [INFO] [stdout] test rules::expr_evaluator::tests::logical_or ... ok [INFO] [stdout] test rules::expr_evaluator::tests::combined_conditions ... ok [INFO] [stdout] test rules::expr_evaluator::tests::flag_groups_access::case_1_exists_matches_mutation ... ok [INFO] [stdout] test rules::expr_evaluator::tests::logical_not ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_alternation::case_1 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_alternation::case_2 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_alternation::case_3 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_backslash_escaped_semicolon ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_brackets::case_1 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_brackets::case_2 ... ok [INFO] [stdout] test rules::expr_evaluator::tests::pipe_variable_access::case_4_pipe_stdout_false ... ok [INFO] [stdout] test rules::expr_evaluator::tests::logical_and ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_brackets::case_3 ... ok [INFO] [stdout] test rules::expr_evaluator::tests::pipe_variable_access::case_3_pipe_stdout_true ... ok [INFO] [stdout] test rules::expr_evaluator::tests::vars_empty_when_no_var_captured ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_complex::case_1 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_complex::case_2 ... ok [INFO] [stdout] test rules::expr_evaluator::tests::redirects_variable_access::case_5_redirect_descriptor_equals_2 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_complex::case_3 ... ok [INFO] [stdout] test rules::expr_evaluator::tests::type_error_on_non_bool_result ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_empty_alternation::case_1 ... ok [INFO] [stdout] test rules::expr_evaluator::tests::vars_access::case_2_no_match ... ok [INFO] [stdout] test rules::expr_evaluator::tests::vars_access::case_1_exact_match ... ok [INFO] [stdout] test rules::expr_evaluator::tests::redirects_variable_access::case_3_size_redirects_with_entry ... ok [INFO] [stdout] test rules::expr_evaluator::tests::redirects_variable_access::case_4_redirect_target_starts_with ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_empty_alternation::case_2 ... ok [INFO] [stdout] test rules::expr_evaluator::tests::vars_has_check ... ok [INFO] [stdout] test rules::expr_evaluator::tests::redirects_variable_access::case_1_exists_output_redirect_present ... ok [INFO] [stdout] test rules::expr_evaluator::tests::redirects_variable_access::case_2_exists_output_redirect_absent ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_empty_alternation::case_3 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_empty_alternation::case_4 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_empty_input ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_empty_negation_alternation::case_1 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_empty_negation_alternation::case_2 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_empty_negation_alternation::case_3 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_joined_token_with_equals ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_leading_trailing_spaces ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_literal_brackets::case_1_bracket_command_wildcard ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_flag_alternation_with_force ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_literal_brackets::case_3_bracket_at_end ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_literal_brackets::case_4_close_bracket_outside_group ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_literal_brackets::case_2_bracket_command_with_args ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_literals::case_1 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_literals::case_2 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_multi_word_alternation::case_02_bare_then_quoted ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_multi_word_alternation::case_01_quoted_then_bare ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_multi_word_alternation::case_04_multi_word_with_trailing_tokens ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_multi_word_alternation::case_03_three_alternatives ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_multi_word_alternation::case_05_all_single_word_quoted_becomes_alternation ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_multi_word_alternation::case_06_mixed_single_and_multi_word ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_multi_word_alternation::case_07_single_quoted_multi_word ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_multi_word_alternation::case_08_all_single_word_via_bare_and_quoted ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_multi_word_alternation::case_09_three_bare_and_quoted_single_word ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_multi_word_alternation::case_10_quoted_multi_then_two_bare ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_multi_word_alternation::case_11_bare_pipe_bare_pipe_quoted ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_multi_word_alternation_errors::case_1_empty_quoted_alternative ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_multi_word_unclosed_quote_reports_quote_position::case_1_bare_then_unclosed_quote ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_multiple_optional_groups ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_negation::case_1 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_nested_square_brackets ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_placeholder_directly_after_bracket ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_negation::case_2 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_placeholders::case_1 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_placeholders::case_2 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_placeholders::case_3 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_quoted::case_1_double_quoted_glob ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_negation::case_3 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_quoted::case_3_escaped_star_in_quotes ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_quoted::case_4_escaped_star_unquoted ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_single_literal ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_single_word_alternation_unchanged ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_unclosed_angle_bracket ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_multi_word_alternation_errors::case_2_trailing_pipe_after_quoted ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_multi_word_unclosed_quote_reports_quote_position::case_2_quoted_then_unclosed_quote ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_multiple_spaces ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_unclosed_quote ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_wildcard::case_1 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_wildcard::case_2 ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_quoted::case_2_single_quoted_with_space ... ok [INFO] [stdout] test rules::pattern_matcher::flag_utils::tests::split_flag_equals_cases::case_01_long_flag ... ok [INFO] [stdout] test rules::pattern_matcher::flag_utils::tests::split_flag_equals_cases::case_02_short_flag ... ok [INFO] [stdout] test rules::pattern_matcher::flag_utils::tests::split_flag_equals_cases::case_04_multiple_equals ... ok [INFO] [stdout] test rules::pattern_matcher::flag_utils::tests::split_flag_equals_cases::case_05_no_equals ... ok [INFO] [stdout] test rules::pattern_matcher::flag_utils::tests::split_flag_equals_cases::case_06_java_system_property ... ok [INFO] [stdout] test rules::pattern_matcher::flag_utils::tests::split_flag_equals_cases::case_07_combined_short_flags_with_equals ... ok [INFO] [stdout] test rules::pattern_matcher::flag_utils::tests::split_flag_equals_cases::case_08_no_dash ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_whitespace_only ... ok [INFO] [stdout] test rules::pattern_matcher::flag_utils::tests::split_flag_equals_cases::case_03_empty_value ... ok [INFO] [stdout] test rules::pattern_lexer::tests::tokenize_unclosed_square_bracket ... ok [INFO] [stdout] test rules::pattern_matcher::flag_utils::tests::split_short_flag_value_cases::case_9_non_ascii_after_dash ... ok [INFO] [stdout] test rules::pattern_matcher::flag_utils::tests::split_flag_equals_cases::case_09_equals_only ... ok [INFO] [stdout] test rules::pattern_matcher::flag_utils::tests::split_flag_equals_cases::case_10_empty ... ok [INFO] [stdout] test rules::pattern_matcher::flag_utils::tests::split_short_flag_value_cases::case_3_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::flag_utils::tests::split_flag_equals_cases::case_11_dash_only ... ok [INFO] [stdout] test rules::pattern_matcher::flag_utils::tests::split_short_flag_value_cases::case_1_fused_value ... ok [INFO] [stdout] test rules::pattern_matcher::flag_utils::tests::split_short_flag_value_cases::case_2_fused_multichar_value ... ok [INFO] [stdout] test rules::pattern_matcher::flag_utils::tests::split_short_flag_value_cases::case_4_long_flag ... ok [INFO] [stdout] test rules::pattern_matcher::flag_utils::tests::split_short_flag_value_cases::case_5_exact_short_flag ... ok [INFO] [stdout] test rules::pattern_matcher::flag_utils::tests::split_short_flag_value_cases::case_6_dash_only ... ok [INFO] [stdout] test rules::pattern_matcher::tests::alternation_flag_equals_joined::case_1_long_flag_equals_joined ... ok [INFO] [stdout] test rules::pattern_matcher::flag_utils::tests::split_short_flag_value_cases::case_7_empty ... ok [INFO] [stdout] test rules::pattern_matcher::flag_utils::tests::split_short_flag_value_cases::case_8_multiple_aliases ... ok [INFO] [stdout] test rules::pattern_matcher::tests::alternation_flag_equals_joined::case_2_short_flag_equals_joined ... ok [INFO] [stdout] test rules::pattern_matcher::tests::alternation_glob_matching::case_1_glob_alt_match ... ok [INFO] [stdout] test rules::pattern_matcher::tests::alternation_flag_equals_joined::case_3_equals_joined_no_match_wrong_flag ... ok [INFO] [stdout] test rules::pattern_matcher::tests::alternation_glob_matching::case_2_glob_alt_exact_still_works ... ok [INFO] [stdout] test rules::pattern_matcher::tests::alternation_glob_matching::case_3_glob_alt_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::tests::alternation_glob_matching::case_4_glob_alt_list_instances ... ok [INFO] [stdout] test rules::pattern_matcher::tests::alternation_glob_matching::case_5_glob_alt_describe_prefix ... ok [INFO] [stdout] test rules::pattern_matcher::tests::alternation_matching::case_1_first_alt ... ok [INFO] [stdout] test rules::pattern_matcher::tests::alternation_matching::case_2_second_alt ... ok [INFO] [stdout] test rules::pattern_matcher::tests::alternation_matching::case_4_subcommand_alt ... ok [INFO] [stdout] test rules::pattern_matcher::tests::alternation_matching::case_3_no_alt_match ... ok [INFO] [stdout] test rules::pattern_matcher::tests::alternation_matching::case_7_non_flag_alt_after_double_dash_no_skip ... ok [INFO] [stdout] test rules::pattern_matcher::tests::alternation_matching::case_6_non_flag_alt_skips_flags_second ... ok [INFO] [stdout] test rules::pattern_matcher::tests::alternation_matching::case_8_mixed_flag_nonflag_alt_flag_variant ... ok [INFO] [stdout] test rules::pattern_matcher::tests::alternation_matching::case_5_non_flag_alt_skips_flags ... ok [INFO] [stdout] test rules::pattern_matcher::tests::bracket_command_matching::case_1_bracket_wildcard ... ok [INFO] [stdout] test rules::pattern_matcher::tests::alternation_matching::case_9_mixed_flag_nonflag_alt_nonflag_variant ... ok [INFO] [stdout] test rules::pattern_matcher::tests::bracket_command_matching::case_2_bracket_exact_args ... ok [INFO] [stdout] test rules::pattern_matcher::tests::bracket_command_matching::case_5_bracket_wrong_args ... ok [INFO] [stdout] test rules::pattern_matcher::tests::bracket_command_matching::case_4_bracket_command_mismatch ... ok [INFO] [stdout] test rules::pattern_matcher::tests::double_dash_matching::case_1_double_dash_exact ... ok [INFO] [stdout] test rules::pattern_matcher::tests::combined_optional_and_wildcard ... ok [INFO] [stdout] test rules::pattern_matcher::tests::double_dash_matching::case_3_double_dash_with_optional_c ... ok [INFO] [stdout] test rules::pattern_matcher::tests::bracket_command_matching::case_3_bracket_wildcard_no_args ... ok [INFO] [stdout] test rules::pattern_matcher::tests::double_dash_matching::case_2_double_dash_multiple_files ... ok [INFO] [stdout] test rules::pattern_matcher::tests::double_dash_matching::case_4_double_dash_with_optional_c_present ... ok [INFO] [stdout] test rules::pattern_matcher::tests::double_dash_matching::case_5_double_dash_rejects_args_before ... ok [INFO] [stdout] test rules::pattern_matcher::tests::double_dash_matching::case_6_double_dash_rejects_no_separator ... ok [INFO] [stdout] test rules::pattern_matcher::tests::equals_joined_token ... ok [INFO] [stdout] test rules::pattern_matcher::tests::extract_placeholder_cases::case_01_simple_placeholder ... ok [INFO] [stdout] test rules::pattern_matcher::tests::extract_placeholder_cases::case_02_literal_before_cmd ... ok [INFO] [stdout] test rules::pattern_matcher::tests::extract_placeholder_cases::case_03_wildcard_before_cmd ... ok [INFO] [stdout] test rules::pattern_matcher::tests::extract_placeholder_cases::case_04_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::tests::extract_placeholder_cases::case_05_opts_before_cmd ... ok [INFO] [stdout] test rules::pattern_matcher::tests::extract_placeholder_cases::case_06_negation_before_cmd ... ok [INFO] [stdout] test rules::pattern_matcher::tests::extract_placeholder_cases::case_08_positional_negation_empty_tokens ... ok [INFO] [stdout] test rules::pattern_matcher::tests::extract_placeholder_cases::case_07_positional_negation_before_cmd ... ok [INFO] [stdout] test rules::pattern_matcher::tests::extract_placeholder_cases::case_09_flag_negation_empty_tokens_before_cmd ... ok [INFO] [stdout] test rules::pattern_matcher::tests::extract_placeholder_cases::case_10_flag_negation_rejected_before_cmd ... ok [INFO] [stdout] test rules::pattern_matcher::tests::extract_placeholder_cases::case_11_positional_negation_rejected_before_cmd ... ok [INFO] [stdout] test rules::pattern_matcher::tests::extract_placeholder_cases::case_12_flag_like_literal_bash_c ... ok [INFO] [stdout] test rules::pattern_matcher::tests::extract_placeholder_cases::case_13_flag_like_literal_before_cmd ... ok [INFO] [stdout] test rules::pattern_matcher::tests::extract_placeholder_cases::case_14_cmd_rejects_flag_start ... ok [INFO] [stdout] test rules::pattern_matcher::tests::extract_placeholder_cases::case_15_cmd_accepts_non_flag ... ok [INFO] [stdout] test rules::pattern_matcher::tests::extract_placeholder_cmd_followed_by_literal ... ok [INFO] [stdout] test rules::pattern_matcher::tests::extract_placeholder_with_alternation ... ok [INFO] [stdout] test rules::pattern_matcher::tests::extract_placeholder_with_flag_with_value::case_1_space_separated ... ok [INFO] [stdout] test rules::pattern_matcher::tests::extract_placeholder_with_flag_with_value::case_2_equals_joined ... ok [INFO] [stdout] test rules::pattern_matcher::tests::extract_placeholder_with_non_cmd_trailing ... ok [INFO] [stdout] test rules::pattern_matcher::tests::flag_group_ref_matching::case_2_long_space ... ok [INFO] [stdout] test rules::pattern_matcher::tests::flag_group_ref_matching::case_3_long_equals ... ok [INFO] [stdout] test rules::pattern_matcher::tests::flag_group_ref_matching::case_1_short_space ... ok [INFO] [stdout] test rules::pattern_matcher::tests::flag_group_ref_matching::case_4_no_field_flag ... ok [INFO] [stdout] test rules::pattern_matcher::tests::flag_with_negation_value ... ok [INFO] [stdout] test rules::pattern_matcher::tests::flag_with_value_matching::case_01_flag_before_arg ... ok [INFO] [stdout] test rules::pattern_matcher::tests::flag_with_value_matching::case_03_long_alias ... ok [INFO] [stdout] test rules::pattern_matcher::tests::flag_with_value_matching::case_02_flag_after_arg ... ok [INFO] [stdout] test rules::pattern_matcher::tests::flag_with_value_matching::case_04_wrong_value ... ok [INFO] [stdout] test rules::pattern_matcher::tests::flag_with_value_matching::case_05_missing_flag ... ok [INFO] [stdout] test rules::pattern_matcher::tests::flag_with_value_matching::case_06_wildcard_value ... ok [INFO] [stdout] test rules::pattern_matcher::tests::flag_with_value_matching::case_08_bare_flag_after_arg ... ok [INFO] [stdout] test rules::pattern_matcher::tests::flag_with_value_matching::case_09_bare_flag_wrong_value ... ok [INFO] [stdout] test rules::pattern_matcher::tests::flag_with_value_matching::case_10_bare_flag_missing ... ok [INFO] [stdout] test rules::pattern_matcher::tests::flag_with_value_matching::case_07_bare_flag_before_arg ... ok [INFO] [stdout] test rules::pattern_matcher::tests::literal_glob_matching::case_1_literal_glob_prefix ... ok [INFO] [stdout] test rules::pattern_matcher::tests::literal_glob_matching::case_2_literal_glob_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::tests::literal_glob_matching::case_3_literal_glob_exact_still_works ... ok [INFO] [stdout] test rules::pattern_matcher::tests::literal_glob_matching::case_4_literal_glob_suffix ... ok [INFO] [stdout] test rules::pattern_matcher::tests::literal_glob_matching::case_5_literal_glob_suffix_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::tests::literal_glob_matching::case_6_literal_glob_middle ... ok [INFO] [stdout] test rules::pattern_matcher::tests::literal_glob_matching::case_7_literal_glob_middle_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::tests::literal_glob_matching::case_8_negated_literal_glob_blocks ... ok [INFO] [stdout] test rules::pattern_matcher::tests::literal_glob_matching::case_9_negated_literal_glob_allows ... ok [INFO] [stdout] test rules::pattern_matcher::tests::matches_with_captures_returns_expected::case_1_no_wildcard ... ok [INFO] [stdout] test rules::pattern_matcher::tests::matches_with_captures_returns_expected::case_2_single_wildcard ... ok [INFO] [stdout] test rules::pattern_matcher::tests::matches_with_captures_returns_expected::case_3_wildcard_multiple_tokens ... ok [INFO] [stdout] test rules::pattern_matcher::tests::matches_with_captures_returns_expected::case_4_wildcard_in_optional ... ok [INFO] [stdout] test rules::pattern_matcher::tests::matches_with_captures_returns_expected::case_5_optional_absent_no_captures ... ok [INFO] [stdout] test rules::pattern_matcher::tests::matches_with_captures_returns_expected::case_6_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::tests::matches_with_captures_returns_expected::case_8_wildcard_command_captures ... ok [INFO] [stdout] test rules::pattern_matcher::tests::matches_with_captures_returns_expected::case_9_wildcard_command_no_args ... ok [INFO] [stdout] test rules::pattern_matcher::tests::matches_with_captures_returns_expected::case_7_different_command ... ok [INFO] [stdout] test rules::pattern_matcher::tests::multi_word_alternation_backward_compat::case_1_backward_compat_first ... ok [INFO] [stdout] test rules::pattern_matcher::tests::multi_word_alternation_backward_compat::case_2_backward_compat_second ... ok [INFO] [stdout] test rules::pattern_matcher::tests::multi_word_alternation_backward_compat::case_3_backward_compat_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::tests::multi_word_alternation_matching::case_01_npx_variant ... ok [INFO] [stdout] test rules::pattern_matcher::tests::multi_word_alternation_matching::case_02_bare_variant ... ok [INFO] [stdout] test rules::pattern_matcher::tests::multi_word_alternation_matching::case_03_no_match_different_runner ... ok [INFO] [stdout] test rules::pattern_matcher::tests::multi_word_alternation_matching::case_04_no_match_different_tool ... ok [INFO] [stdout] test rules::pattern_matcher::tests::multi_word_alternation_matching::case_05_three_alternatives_first ... ok [INFO] [stdout] test rules::pattern_matcher::tests::multi_word_alternation_matching::case_06_three_alternatives_second ... ok [INFO] [stdout] test rules::pattern_matcher::tests::multi_word_alternation_matching::case_08_python_pytest_module ... ok [INFO] [stdout] test rules::pattern_matcher::tests::multi_word_alternation_matching::case_09_python_pytest_bare ... ok [INFO] [stdout] test rules::pattern_matcher::tests::multi_word_alternation_matching::case_10_python_pytest_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_alternation_glob_matching::case_1_negated_glob_blocks_match ... ok [INFO] [stdout] test rules::pattern_matcher::tests::multi_word_alternation_matching::case_07_three_alternatives_third ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_alternation_glob_matching::case_2_negated_glob_allows_non_match ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_alternation_glob_matching::case_3_negated_glob_blocks_exact ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_alternation_glob_matching::case_4_negated_glob_blocks_exact_get ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_matching::case_01_negation_matches ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_matching::case_02_negation_rejects ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_matching::case_03_negation_alternation ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_matching::case_04_negation_alternation_reject ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_matching::case_05_flag_negation_rejects_at_end ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_matching::case_06_flag_negation_rejects_at_start ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_matching::case_07_flag_negation_allows_no_flag ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_matching::case_08_flag_negation_alt_rejects ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_matching::case_09_flag_negation_alt_allows ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_matching::case_10_flag_negation_rejects_equals_form ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_matching::case_11_flag_negation_allows_different_flag_equals ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_matching::case_12_flag_negation_alt_rejects_equals_form ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_matching::case_13_flag_negation_alt_allows_equals_different_flag ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_matching::case_14_flag_negation_empty_tokens_single ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_matching::case_15_flag_negation_empty_tokens_alt ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_matching::case_16_flag_negation_empty_tokens_find ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_matching::case_17_long_flag_negation_empty_after_literals ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_matching::case_20_positional_negation_empty_tokens ... ok [INFO] [stdout] test rules::pattern_matcher::tests::no_match::case_1_different_command ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_matching::case_19_long_flag_negation_rejects_banned ... ok [INFO] [stdout] test rules::pattern_matcher::tests::no_match::case_2_extra_args ... ok [INFO] [stdout] test rules::pattern_matcher::tests::negation_matching::case_18_long_flag_negation_with_safe_arg ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_01_with_optional_flag ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_02_without_optional_flag ... ok [INFO] [stdout] test rules::pattern_matcher::tests::no_match::case_3_missing_args ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_03_optional_flag_with_value ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_05_optional_wrong_value ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_06_optional_flag_with_value_after_arg ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_07_optional_dir ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_08_optional_dir_absent ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_09_optional_bare_flags_reversed ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_04_optional_absent ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_11_optional_bare_flags_interleaved ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_12_optional_bare_flags_in_order ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_13_optional_bare_flags_all_absent ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_14_optional_bare_flags_only_s ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_15_optional_bare_flags_only_x ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_16_optional_bare_flags_wrong_value_reversed ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_10_optional_bare_flags_after_arg ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_17_optional_bare_flags_wrong_value_after_arg ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_18_optional_bare_flags_wrong_value_interleaved ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_20_optional_flag_with_value_equals_joined_absent ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_19_optional_flag_with_value_equals_joined ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_23_optional_flag_with_value_equals_joined_wrong_value ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_22_optional_flag_with_value_equals_joined_specific_value ... ok [INFO] [stdout] test rules::pattern_matcher::tests::optional_matching::case_21_optional_flag_with_value_equals_joined_with_other_flags ... ok [INFO] [stdout] test rules::pattern_matcher::tests::opts_non_wrapper_matching::case_3_opts_with_short_flag_value ... ok [INFO] [stdout] test rules::pattern_matcher::tests::opts_non_wrapper_matching::case_4_opts_mismatch_trailing ... ok [INFO] [stdout] test rules::pattern_matcher::tests::opts_non_wrapper_matching::case_5_opts_digit_flag_not_consuming ... ok [INFO] [stdout] test rules::pattern_matcher::tests::opts_non_wrapper_matching::case_2_opts_no_flags ... ok [INFO] [stdout] test rules::pattern_matcher::tests::opts_non_wrapper_matching::case_6_opts_end_of_options_marker ... ok [INFO] [stdout] test rules::pattern_matcher::tests::opts_non_wrapper_matching::case_1_opts_consumes_flags ... ok [INFO] [stdout] test rules::pattern_matcher::tests::opts_non_wrapper_matching::case_7_opts_end_of_options_with_flags ... ok [INFO] [stdout] test rules::pattern_matcher::tests::order_independent_literal_matching::case_01_flag_before_literal ... ok [INFO] [stdout] test rules::pattern_matcher::tests::order_independent_literal_matching::case_02_literal_at_normal_position ... ok [INFO] [stdout] test rules::pattern_matcher::tests::order_independent_literal_matching::case_04_extra_flag_not_in_pattern_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::tests::order_independent_literal_matching::case_06_double_dash_at_correct_position ... ok [INFO] [stdout] test rules::pattern_matcher::tests::order_independent_literal_matching::case_07_literal_mismatch_still_fails ... ok [INFO] [stdout] test rules::pattern_matcher::tests::order_independent_literal_matching::case_08_flag_literal_remains_positional ... ok [INFO] [stdout] test rules::pattern_matcher::tests::order_independent_literal_matching::case_10_flag_not_consumed_means_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::tests::order_independent_literal_matching::case_09_flag_after_double_dash_is_positional ... ok [INFO] [stdout] test rules::pattern_matcher::tests::order_independent_literal_matching::case_05_double_dash_stays_positional ... ok [INFO] [stdout] test rules::pattern_matcher::tests::order_independent_literal_matching::case_11_flag_skip_leaves_flag_unconsumed ... ok [INFO] [stdout] test rules::pattern_matcher::tests::order_independent_literal_matching::case_12_skipped_flag_consumed_by_wildcard ... ok [INFO] [stdout] test rules::pattern_matcher::tests::order_independent_literal_matching::case_13_negation_bypass_with_flag ... ok [INFO] [stdout] test rules::pattern_matcher::tests::order_independent_literal_matching::case_03_multiple_flags_before_literal ... ok [INFO] [stdout] test rules::pattern_matcher::tests::order_independent_literal_matching::case_14_skipped_flag_unconsumed_without_wildcard ... ok [INFO] [stdout] test rules::pattern_matcher::tests::path_ref_definition_normalized ... ok [INFO] [stdout] test rules::pattern_matcher::tests::path_ref_normalized::case_1_dot_segment ... ok [INFO] [stdout] test rules::pattern_matcher::tests::path_ref_normalized::case_2_dotdot_segment ... ok [INFO] [stdout] test rules::pattern_matcher::tests::path_ref_normalized::case_3_multiple_dots ... ok [INFO] [stdout] test rules::pattern_matcher::tests::path_ref_normalized::case_4_complex_traversal ... ok [INFO] [stdout] test rules::pattern_matcher::tests::path_ref_normalized::case_5_unrelated_path ... ok [INFO] [stdout] test rules::pattern_matcher::tests::path_ref_matches_listed_path ... ok [INFO] [stdout] test rules::pattern_matcher::tests::path_ref_rejects_unlisted_path ... ok [INFO] [stdout] test rules::pattern_matcher::tests::path_ref_undefined_name_never_matches ... ok [INFO] [stdout] test rules::pattern_matcher::tests::quoted_literal_matching::case_1_quoted_star_glob_matches ... ok [INFO] [stdout] test rules::pattern_matcher::tests::quoted_literal_matching::case_2_quoted_star_glob_exact ... ok [INFO] [stdout] test rules::pattern_matcher::tests::quoted_literal_matching::case_4_quoted_star_only_glob ... ok [INFO] [stdout] test rules::pattern_matcher::tests::quoted_literal_matching::case_3_quoted_star_glob_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::tests::quoted_literal_matching::case_6_escaped_star_no_glob ... ok [INFO] [stdout] test rules::pattern_matcher::tests::quoted_literal_matching::case_7_escaped_star_only ... ok [INFO] [stdout] test rules::pattern_matcher::tests::quoted_literal_matching::case_5_escaped_star_exact_match ... ok [INFO] [stdout] test rules::pattern_matcher::tests::quoted_literal_matching::case_8_escaped_star_only_no_glob ... ok [INFO] [stdout] test rules::pattern_matcher::tests::simple_matching::case_1_exact_match ... ok [INFO] [stdout] test rules::pattern_matcher::tests::simple_matching::case_2_exact_multi ... ok [INFO] [stdout] test rules::pattern_matcher::tests::simple_matching::case_3_command_mismatch ... ok [INFO] [stdout] test rules::pattern_matcher::tests::simple_matching::case_4_too_few_args ... ok [INFO] [stdout] test rules::pattern_matcher::tests::simple_matching::case_5_too_many_args ... ok [INFO] [stdout] test rules::pattern_matcher::tests::simple_matching::case_6_command_only ... ok [INFO] [stdout] test rules::pattern_matcher::tests::simple_matching::case_7_command_only_mismatch ... ok [INFO] [stdout] test rules::pattern_matcher::tests::var_captures_not_stale_after_optional_backtrack ... ok [INFO] [stdout] test rules::pattern_matcher::tests::var_captures_returns_expected::case_1_literal_var_captured ... ok [INFO] [stdout] test rules::pattern_matcher::tests::var_captures_returns_expected::case_2_no_match_returns_none ... ok [INFO] [stdout] test rules::pattern_matcher::tests::var_captures_returns_expected::case_3_path_var_captured ... ok [INFO] [stdout] test rules::pattern_matcher::tests::wildcard_command_matching::case_01_help_flag ... ok [INFO] [stdout] test rules::pattern_matcher::tests::wildcard_command_matching::case_02_version_flag ... ok [INFO] [stdout] test rules::pattern_matcher::tests::wildcard_command_matching::case_03_any_command_any_args ... ok [INFO] [stdout] test rules::pattern_matcher::tests::wildcard_command_matching::case_04_wildcard_only ... ok [INFO] [stdout] test rules::pattern_matcher::tests::wildcard_command_matching::case_05_wildcard_command_multi_word ... ok [INFO] [stdout] test rules::pattern_matcher::tests::wildcard_command_matching::case_06_wildcard_command_flag_mismatch ... ok [INFO] [stdout] test rules::pattern_matcher::tests::wildcard_command_matching::case_07_wildcard_command_missing_flag ... ok [INFO] [stdout] test rules::pattern_matcher::tests::wildcard_command_matching::case_08_wildcard_help_multi_word ... ok [INFO] [stdout] test rules::pattern_matcher::tests::wildcard_command_matching::case_09_wildcard_help_three_words ... ok [INFO] [stdout] test rules::pattern_matcher::tests::wildcard_command_matching::case_10_wildcard_help_deep_subcommand ... ok [INFO] [stdout] test rules::pattern_matcher::tests::wildcard_command_matching::case_11_wildcard_with_args_multi_word ... ok [INFO] [stdout] test rules::pattern_matcher::tests::wildcard_matching::case_1_trailing_wildcard ... ok [INFO] [stdout] test rules::pattern_matcher::tests::wildcard_matching::case_3_wildcard_many ... ok [INFO] [stdout] test rules::pattern_matcher::tests::wildcard_matching::case_2_wildcard_zero ... ok [INFO] [stdout] test rules::pattern_matcher::tests::wildcard_matching::case_6_middle_wildcard_multi ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::literal_matches_cases::case_2_backslash_semicolon_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::literal_matches_cases::case_3_backslash_star_literal ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::literal_matches_cases::case_1_backslash_semicolon ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::literal_matches_cases::case_4_backslash_star_not_glob ... ok [INFO] [stdout] test rules::pattern_matcher::tests::wildcard_dos_terminates ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::literal_matches_cases::case_5_escaped_and_bare_glob ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::literal_matches_cases::case_6_escaped_and_bare_glob_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::literal_matches_cases::case_7_no_backslash ... ok [INFO] [stdout] test rules::pattern_matcher::tests::wildcard_matching::case_4_wildcard_with_flags ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::literal_matches_cases::case_8_plain_glob ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::match_var_ref_literal::case_1_literal_match ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::match_var_ref_literal::case_3_literal_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::match_var_ref_multi_multi_word ... ok [INFO] [stdout] test rules::pattern_matcher::tests::wildcard_matching::case_5_middle_wildcard ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::match_var_ref_multi_per_value_type::case_1_plain_literal_match ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::match_var_ref_multi_per_value_type::case_2_typed_path_match ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::match_var_ref_multi_per_value_type::case_4_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::match_var_ref_negative_cases::case_1_undefined_var ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::match_var_ref_negative_cases::case_2_empty_values ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::match_var_ref_negative_cases::case_3_no_vars_section ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::match_var_ref_literal::case_4_literal_empty_string ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::match_var_ref_literal::case_2_literal_match_second_value ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::match_var_ref_multi_per_value_type::case_3_multi_word_literal ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::match_var_ref_path::case_1_exact_match ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::match_var_ref_path::case_2_dot_prefix ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::match_var_ref_path::case_3_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::match_var_ref_per_value_type_overrides_definition ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::normalize_path_cases::case_1_identity ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::normalize_path_cases::case_2_dot ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::normalize_path_cases::case_3_dotdot ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::normalize_path_cases::case_4_multiple_dots ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::normalize_path_cases::case_5_dotdot_at_root ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::normalize_path_cases::case_6_relative ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::normalize_path_cases::case_7_relative_dotdot ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::normalize_path_cases::case_8_leading_dotdot ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::normalize_path_cases::case_9_leading_double_dotdot ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::test_glob_match::case_01_prefix_glob ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::test_glob_match::case_02_prefix_glob_short ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::test_glob_match::case_03_prefix_glob_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::test_glob_match::case_04_prefix_glob_no_match_partial ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::test_glob_match::case_05_suffix_glob ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::test_glob_match::case_06_suffix_glob_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::test_glob_match::case_07_middle_glob ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::test_glob_match::case_08_middle_glob_exact ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::test_glob_match::case_09_middle_glob_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::test_glob_match::case_10_exact_no_glob ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::test_glob_match::case_11_exact_no_glob_no_match ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::test_glob_match::case_12_star_only ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::test_glob_match::case_13_star_only_empty ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::test_glob_match::case_14_multiple_stars ... ok [INFO] [stdout] test rules::pattern_matcher::token_matching::tests::test_glob_match::case_15_multiple_stars_no_match ... ok [INFO] [stdout] test rules::pattern_parser::tests::command_alternation_matches::case_1_matches_first ... ok [INFO] [stdout] test rules::pattern_parser::tests::command_alternation_matches::case_2_matches_second ... ok [INFO] [stdout] test rules::pattern_parser::tests::command_alternation_matches::case_3_no_match ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_alternation::case_1_value_alternation ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_alternation::case_2_non_flag ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_bare_flag::case_2_short_flag_with_value ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_bare_flag::case_1_flag_with_value ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_bare_flag::case_3_flag_consumes_next_non_flag ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_bare_flag::case_4_flag_not_consuming_trailing_wildcard ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_bare_flag::case_5_flag_at_end ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_bare_flag::case_6_combined_short_flag_with_value ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_bare_flag::case_7_flag_not_consuming_flag_negation ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_command_alternation::case_1_two_aliases ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_command_alternation::case_2_three_aliases ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_command_alternation::case_3_aliases_no_args ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_double_dash_as_literal::case_1_double_dash_with_wildcard ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_double_dash_as_literal::case_2_flag_before_double_dash ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_double_dash_as_literal::case_3_double_dash_with_optional ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_err::case_01_empty_string ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_err::case_02_whitespace_only ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_err::case_03_unclosed_angle_bracket ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_err::case_04_unclosed_square_bracket ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_err::case_05_nested_square_brackets ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_err::case_06_empty_angle_brackets ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_err::case_07_angle_bracket_with_pipe ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_err::case_08_angle_bracket_value_alternation ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_err::case_09_empty_alternation ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_err::case_10_empty_negation_alternation ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_err::case_11_unclosed_single_quote ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_err::case_12_unclosed_double_quote ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_flag_group_ref::case_1_standalone ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_flag_group_ref::case_2_with_trailing_literal ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_flag_group_ref::case_3_with_trailing_wildcard ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_flag_group_ref::case_4_no_trailing_token ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_flag_group_ref_empty_name_is_error ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_flag_with_value::case_1_literal_value ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_flag_with_value::case_2_wildcard_value ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_flag_with_value::case_3_named_value ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_flag_with_value::case_4_trailing_wildcard_not_consumed ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_flag_with_value::case_5_boolean_flag ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_flag_group_ref_inside_optional_group_is_error ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_flag_with_value::case_6_placeholder_not_consumed_as_flag_value ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_flag_with_value::case_7_path_ref_value ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_literal_bracket_command::case_1_bracket_command_wildcard ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_literal_bracket_command::case_2_bracket_command_boolean_flag ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_literal_bracket_command::case_3_bracket_command_with_args ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_literals::case_1_command_only ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_literals::case_2_simple ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_literals::case_3_multiple ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_literals::case_4_joined_equals ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_literals::case_6_double_quoted ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_literals::case_5_single_quoted ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_multi_expands_alternatives::case_1_two_alternatives ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_multi_expands_alternatives::case_2_three_alternatives ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_multi_expands_alternatives::case_3_multi_word_with_subcommand ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_multi_no_expansion::case_1_single_word_alternation ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_multi_no_expansion::case_2_simple_literal ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_multi_no_expansion::case_3_wildcard_command ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_negation::case_1_literal ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_negation::case_2_alternation ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_optional::case_1_single_flag ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_optional::case_2_flag_with_value ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_optional::case_3_multiple_tokens ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_path_ref_command_position_rejected ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_placeholder::case_1_placeholder ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_placeholder::case_2_path_ref ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_placeholder::case_3_flag_alternation_then_placeholder ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_placeholder::case_5_var_ref_after_flag ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_var_ref_command_position::case_1_with_literal_arg ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_var_ref_command_position::case_2_with_wildcard_arg ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_wildcard::case_1_standalone ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_placeholder::case_4_var_ref ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_wildcard_command::case_1_wildcard_with_flag ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_wildcard_command::case_2_wildcard_with_version ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_wildcard_command::case_3_wildcard_only ... ok [INFO] [stdout] test rules::pattern_parser::tests::test_parse_flag_group_definition::case_1_value_flag_wildcard ... ok [INFO] [stdout] test rules::pattern_parser::tests::test_parse_flag_group_definition::case_2_bool_flag ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_wildcard::case_2_between_literals ... ok [INFO] [stdout] test rules::pattern_parser::tests::test_parse_flag_group_definition::case_3_value_restriction ... ok [INFO] [stdout] test rules::pattern_parser::tests::parse_wildcard_command::case_4_wildcard_with_wildcard_args ... ok [INFO] [stdout] test rules::pattern_parser::tests::test_parse_flag_group_definition::case_4_single_flag_with_value ... ok [INFO] [stdout] test rules::pattern_parser::tests::test_parse_flag_group_definition_errors::case_1_empty ... ok [INFO] [stdout] test rules::pattern_parser::tests::test_parse_flag_group_definition_errors::case_2_not_a_flag ... ok [INFO] [stdout] test rules::pattern_parser::tests::test_parse_flag_group_definition_errors::case_3_bare_double_dash ... ok [INFO] [stdout] test rules::pattern_parser::tests::test_parse_flag_group_definition::case_5_single_bool_flag ... ok [INFO] [stdout] test rules::rule_engine::tests::ask_response_includes_message ... ok [INFO] [stdout] test rules::rule_engine::tests::ask_wins_over_allow ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_all_allow::case_1_pipeline ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_all_allow::case_2_and_chain ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_ask_not_overwritten_by_escalation ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_ask_wins_over_allow ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_command_guard_splits_and_evaluates_individually::case_1_cd_and_rm ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_command_guard_splits_and_evaluates_individually::case_2_cd_and_pnpm_build ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_all_unmatched_with_defaults_ask ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_all_allow::case_3_or_chain ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_command_guard_splits_and_evaluates_individually::case_3_cd_and_unmatched_escalates_to_ask ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_command_guard_splits_and_evaluates_individually::case_5_semicolon_separated ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_command_guard_splits_and_evaluates_individually::case_4_triple_compound ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_command_guard_splits_and_evaluates_individually::case_7_or_separated ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_command_guard_splits_and_evaluates_individually::case_6_pipe_separated ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_default_resolved_to_allow_stays_allow ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_command_in_wrapper_denies_dangerous_part ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_default_resolved_to_ask_wins_over_allow ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_command_in_wrapper_allows_safe_commands ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_default_resolved_to_deny_wins_over_allow ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_deny_wins::case_2_and_chain ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_deny_wins::case_3_or_chain ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_deny_rule_still_wins_over_resolved_default ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_deny_wins_over_ask_and_allow ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_deny_wins::case_1_pipeline ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_mixed_operators ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_no_matching_rules_returns_default ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_sandbox_writable_roots_intersection ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_same_sandbox_preset_deduplicates ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_partial_sandbox_only_some_commands ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_sandbox_deny_paths_union ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_semicolon_separator ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_no_defaults_unmatched_wins_over_allow ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_guard_cd_wildcard_does_not_match_entire_compound ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_no_sandbox_presets_returns_none ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_sandbox_network_intersection ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_sandbox_network_restricted_by_any ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_single_command_delegates ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_single_command_with_sandbox ... ok [INFO] [stdout] test rules::rule_engine::tests::deny_wins_over_allow ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_writable_contradiction_escalates_to_ask ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_writable_contradiction_does_not_downgrade_deny ... ok [INFO] [stdout] test rules::rule_engine::tests::deny_response_includes_details ... ok [INFO] [stdout] test rules::rule_engine::tests::deny_wins_over_ask ... ok [INFO] [stdout] test rules::rule_engine::tests::deny_wins_over_allow_and_ask ... ok [INFO] [stdout] test rules::rule_engine::tests::deny_wins_regardless_of_order ... ok [INFO] [stdout] test rules::rule_engine::tests::deny_with_path_ref ... ok [INFO] [stdout] test rules::rule_engine::tests::empty_rules_returns_default ... ok [INFO] [stdout] test rules::rule_engine::tests::multiple_deny_rules_picks_first_deny ... ok [INFO] [stdout] test rules::rule_engine::tests::no_matching_rule_returns_default ... ok [INFO] [stdout] test rules::rule_engine::tests::no_rules_returns_default ... ok [INFO] [stdout] test rules::rule_engine::tests::no_sandbox_when_rule_has_no_sandbox ... ok [INFO] [stdout] test rules::rule_engine::tests::no_wrappers_defined_skips_unwrap ... ok [INFO] [stdout] test rules::rule_engine::tests::rule_with_no_action_is_skipped ... ok [INFO] [stdout] test rules::rule_engine::tests::sandbox_from_most_restrictive_matched_rule ... ok [INFO] [stdout] test rules::rule_engine::tests::single_allow_rule ... ok [INFO] [stdout] test rules::rule_engine::tests::sandbox_preset_from_matched_rule ... ok [INFO] [stdout] test rules::rule_engine::tests::single_ask_rule ... ok [INFO] [stdout] test rules::rule_engine::tests::wildcard_command_matching::case_1_help_matches ... ok [INFO] [stdout] test rules::rule_engine::tests::wildcard_command_matching::case_3_no_match_without_flag ... ok [INFO] [stdout] test rules::rule_engine::tests::single_deny_rule ... ok [INFO] [stdout] test rules::rule_engine::tests::wildcard_command_deny_wins_over_wildcard_allow ... ok [INFO] [stdout] test rules::rule_engine::tests::when_clause_skips_deny_falls_back_to_allow ... ok [INFO] [stdout] test rules::rule_engine::tests::wildcard_deny_matches_all_subcommands ... ok [INFO] [stdout] test rules::rule_engine::tests::when_clause_not_satisfied_skips_rule ... ok [INFO] [stdout] test rules::rule_engine::tests::when_clause_satisfied_matches ... ok [INFO] [stdout] test rules::rule_engine::tests::wrapper_compound_unmatched_resolved_via_defaults_action ... ok [INFO] [stdout] test rules::rule_engine::tests::wildcard_command_matching::case_2_version_matches ... ok [INFO] [stdout] test rules::rule_engine::tests::nested_wrappers_sudo_bash_c ... ok [INFO] [stdout] test rules::rule_engine::tests::wrapper_allows_safe_inner_command ... ok [INFO] [stdout] test test::tests::expected_decision_display::case_2_ask ... ok [INFO] [stdout] test rules::rule_engine::tests::wrapper_deny_wins_over_allow_from_direct_rule ... ok [INFO] [stdout] test test::tests::expected_decision_display::case_3_deny ... ok [INFO] [stdout] test rules::rule_engine::tests::wrapper_with_unsupported_token_returns_error::case_2_path_ref ... ok [INFO] [stdout] test rules::rule_engine::tests::wrapper_without_placeholder_does_not_recurse ... ok [INFO] [stdout] test rules::rule_engine::tests::wrapper_preserves_quoting_in_inner_command ... ok [INFO] [stdout] test rules::rule_engine::tests::recursion_depth_exceeded ... ok [INFO] [stdout] test test::tests::expected_decision_display::case_1_allow ... ok [INFO] [stdout] test test::tests::expected_decision_to_action_kind::case_2_ask ... ok [INFO] [stdout] test test::tests::expected_decision_to_action_kind::case_3_deny ... ok [INFO] [stdout] test rules::rule_engine::tests::wrapper_evaluates_inner_deny::case_1_sudo ... ok [INFO] [stdout] test rules::rule_engine::tests::wrapper_with_unsupported_token_returns_error::case_1_optional ... ok [INFO] [stdout] test rules::rule_engine::tests::wrapper_evaluates_inner_deny::case_2_bash_c ... ok [INFO] [stdout] test test::tests::load_test_config_from_directory ... ok [INFO] [stdout] test test::tests::load_test_config_from_file ... ok [INFO] [stdout] test test::tests::load_test_config_nonexistent_path ... ok [INFO] [stdout] test rules::rule_engine::tests::compound_three_presets_progressive_intersection ... ok [INFO] [stdout] test test::tests::parse_test_cases_empty_config ... ok [INFO] [stdout] test test::tests::expected_decision_to_action_kind::case_1_allow ... ok [INFO] [stdout] test test::tests::load_test_config_not_found ... ok [INFO] [stdout] test test::tests::load_test_config_yaml_extension ... ok [INFO] [stdout] test test::tests::parse_test_cases_inline_tests ... ok [INFO] [stdout] test test::tests::load_test_config_with_extends ... ok [INFO] [stdout] test test::tests::run_tests_all_pass ... ok [INFO] [stdout] test test::tests::test_action_kind_label::case_1_allow ... ok [INFO] [stdout] test test::tests::load_test_config_tests_extends_not_found ... ok [INFO] [stdout] test test::tests::parse_test_cases_top_level ... ok [INFO] [stdout] test test::tests::report_output::case_1_pass ... ok [INFO] [stdout] test test::tests::test_action_kind_label::case_3_deny ... ok [INFO] [stdout] test test::tests::report_output::case_2_fail ... ok [INFO] [stdout] test test::tests::load_test_config_with_tests_extends ... ok [INFO] [stdout] test test::tests::report_summary_output ... ok [INFO] [stdout] test test::tests::test_action_to_kind::case_1_allow ... ok [INFO] [stdout] test test::tests::run_tests_with_failure ... ok [INFO] [stdout] test rules::rule_engine::tests::wrapper_no_match_returns_default ... ok [INFO] [stdout] test test::tests::test_error_display::case_2_no_test_cases ... ok [INFO] [stdout] test test::tests::parse_test_cases_mixed ... ok [INFO] [stdout] test test::tests::test_error_from_config ... ok [INFO] [stdout] test test::tests::test_action_to_kind::case_2_deny ... ok [INFO] [stdout] test test::tests::test_error_display::case_1_config_not_found ... ok [INFO] [stdout] test test::tests::run_tests_eval_error_is_failure_not_false_positive ... ok [INFO] [stdout] test test::tests::test_action_to_kind::case_3_ask ... ok [INFO] [stdout] test test::tests::test_parse_inline_entry::case_1_allow_entry ... ok [INFO] [stdout] test test::tests::run_tests_default_action ... ok [INFO] [stdout] test test::tests::run_tests_continues_after_failure ... ok [INFO] [stdout] test test::tests::test_action_kind_label::case_2_ask ... ok [INFO] [stdout] test test::tests::test_error_from_io ... ok [INFO] [stdout] test test::tests::test_parse_inline_entry::case_2_ask_entry ... ok [INFO] [stdout] test test::tests::test_parse_inline_entry::case_3_deny_entry ... ok [INFO] [stdout] test test::tests::test_parse_inline_entry::case_4_none_set ... ok [INFO] [stdout] test test::tests::test_parse_inline_entry::case_5_multiple_set ... ok [INFO] [stdout] test test::tests::test_results_aggregation::case_1_all_pass ... ok [INFO] [stdout] test test::tests::test_results_aggregation::case_3_all_fail ... ok [INFO] [stdout] test test::tests::test_results_aggregation::case_2_some_fail ... ok [INFO] [stdout] test test::tests::test_results_aggregation::case_4_empty ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_01_full_basic_upgrade ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_02_full_respects_major_boundary ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_04_full_skips_pre_release ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_03_full_no_newer_version ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_06_full_without_v_prefix ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_05_full_only_pre_release_available ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_10_major_upgrade_to_v3 ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_12_major_without_v_prefix ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_19_minor_without_v_prefix ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_20_minor_from_partial_tags ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_13_major_v_prefix_mismatch ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_11_major_no_newer ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_08_full_mixed_major_versions ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_07_full_v_prefix_mismatch_excluded ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_15_major_skips_pre_release ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_16_minor_upgrade ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_14_major_from_partial_tags ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_17_minor_no_newer ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_09_major_upgrade_to_v2 ... ok [INFO] [stdout] test update_presets::semver_utils::tests::non_semver_current_returns_none ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_18_minor_respects_major_boundary ... ok [INFO] [stdout] test update_presets::semver_utils::tests::find_latest_upgrade_test::case_21_minor_skips_pre_release ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_semver_tag_test::case_1_with_v_prefix ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_semver_tag_test::case_3_with_patch ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_semver_tag_test::case_4_pre_release ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_semver_tag_test::case_5_branch_name ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_semver_tag_test::case_8_partial_version_two ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_version_spec_pre_release ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_version_spec_test::case_02_major_without_v ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_semver_tag_test::case_6_non_semver_tag ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_version_spec_test::case_01_major_with_v ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_semver_tag_test::case_7_partial_version ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_version_spec_test::case_03_major_zero ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_version_spec_test::case_04_major_minor_with_v ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_version_spec_test::case_05_major_minor_without_v ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_version_spec_test::case_06_full_with_v ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_version_spec_test::case_08_branch_name ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_version_spec_test::case_07_full_without_v ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_version_spec_test::case_09_non_semver_tag ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_semver_tag_test::case_2_without_prefix ... ok [INFO] [stdout] test update_presets::tests::collect_remote_references_empty_extends ... ok [INFO] [stdout] test update_presets::tests::collect_references_skips_missing_files ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_version_spec_test::case_10_four_parts ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_version_spec_test::case_11_non_digit ... ok [INFO] [stdout] test update_presets::tests::collect_remote_references_filters_local::case_2_git_url ... ok [INFO] [stdout] test update_presets::tests::collect_remote_references_filters_local::case_3_local_path ... ok [INFO] [stdout] test update_presets::tests::collect_remote_references_filters_local::case_1_github_shorthand ... ok [INFO] [stdout] test update_presets::tests::collect_references_allows_same_ref_from_different_dirs ... ok [INFO] [stdout] test update_presets::semver_utils::tests::parse_version_spec_test::case_12_empty_part ... ok [INFO] [stdout] test update_presets::tests::collect_references_tracks_source_file ... ok [INFO] [stdout] test update_presets::tests::build_updated_reference_test::case_1_github ... ok [INFO] [stdout] test update_presets::tests::collect_references_deduplicates ... ok [INFO] [stdout] test update_presets::tests::run_with_scenarios::case_4_skipped_does_not_modify_config ... ok [INFO] [stdout] test update_presets::tests::build_updated_reference_test::case_2_git_url ... ok [INFO] [stdout] test update_presets::tests::update_config_file_replaces_reference ... ok [INFO] [stdout] test update_presets::tests::update_config_file_preserves_comments ... ok [INFO] [stdout] test update_presets::tests::update_single_preset_scenarios::case_01_commit_sha_is_skipped ... ok [INFO] [stdout] test update_presets::tests::run_with_scenarios::case_2_updated_does_not_modify_config ... ok [INFO] [stdout] test update_presets::tests::run_with_scenarios::case_3_up_to_date_does_not_modify_config ... ok [INFO] [stdout] test update_presets::tests::run_with_scenarios::case_5_error_returns_err ... ok [INFO] [stdout] test update_presets::tests::update_handles_fetch_error ... ok [INFO] [stdout] test update_presets::tests::try_tag_upgrade_skips_incompatible_newest_and_picks_older ... ok [INFO] [stdout] test update_presets::tests::try_tag_upgrade_adopts_newest_compatible_candidate ... ok [INFO] [stdout] test update_presets::tests::update_single_preset_scenarios::case_03_v1_branch_to_v2_branch ... ok [INFO] [stdout] test update_presets::tests::run_with_scenarios::case_6_mixed_results_counts_errors ... ok [INFO] [stdout] test update_presets::tests::run_with_scenarios::case_1_upgraded_updates_config ... ok [INFO] [stdout] test update_presets::tests::try_tag_upgrade_reports_up_to_date_when_all_candidates_incompatible ... ok [INFO] [stdout] test update_presets::tests::update_single_preset_scenarios::case_05_v1_mixed_branches_and_tags ... ok [INFO] [stdout] test update_presets::tests::update_single_preset_scenarios::case_02_branch_refetched ... ok [INFO] [stdout] test update_presets::tests::update_single_preset_scenarios::case_04_v1_tag_to_v2_tag ... ok [INFO] [stdout] test update_presets::tests::update_single_preset_scenarios::case_08_full_semver_respects_major_boundary ... ok [INFO] [stdout] test update_presets::tests::update_single_preset_scenarios::case_06_v1_no_newer_major ... ok [INFO] [stdout] test update_presets::tests::update_single_preset_scenarios::case_09_full_semver_patch_upgrade ... ok [INFO] [stdout] test update_presets::tests::update_single_preset_scenarios::case_07_full_semver_picks_latest_minor ... ok [INFO] [stdout] test update_presets::tests::update_single_preset_scenarios::case_12_major_minor_already_latest ... ok [INFO] [stdout] test update_presets::tests::update_single_preset_scenarios::case_11_major_minor_upgrade ... ok [INFO] [stdout] test update_presets::tests::update_single_preset_scenarios::case_10_full_semver_already_latest ... ok [INFO] [stdout] test update_presets::tests::update_single_preset_scenarios::case_13_major_minor_respects_major_boundary ... ok [INFO] [stdout] test update_presets::tests::update_single_preset_scenarios::case_14_pre_release_excluded ... ok [INFO] [stdout] test update_presets::tests::update_single_preset_scenarios::case_15_v_prefix_mismatch ... ok [INFO] [stdout] test exec::extension_runner::tests::integration_timeout_falls_back_to_ask ... ok [INFO] [stdout] test exec::extension_runner::tests::validate_timeout ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 1679 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.20s [INFO] [stdout] [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/runok-e54d836c62560cfd) [INFO] [stdout] [INFO] [stdout] running 79 tests [INFO] [stdout] test cli::route::tests::route_check_explicit_format_claude_code_hook ... ok [INFO] [stdout] test cli::route::tests::route_check_stdin_json_auto_detect::case_2_generic_check ... ok [INFO] [stdout] test cli::route::tests::route_check_stdin_json_auto_detect::case_1_claude_code_hook ... ok [INFO] [stdout] test cli::route::tests::route_check_with_command_arg::case_1_simple_command ... ok [INFO] [stdout] test cli::route::tests::route_check_command_flag_takes_precedence_over_stdin ... ok [INFO] [stdout] test cli::route::tests::route_check_with_command_arg::case_3_arg_with_spaces ... ok [INFO] [stdout] test cli::route::tests::route_check_with_command_arg::case_2_command_with_flags ... ok [INFO] [stdout] test cli::route::tests::route_check_unknown_format_returns_error ... ok [INFO] [stdout] test cli::route::tests::route_check_format_with_non_json_stdin_returns_error ... ok [INFO] [stdout] test cli::route::tests::route_check_non_object_json_treated_as_plaintext::case_2_json_number ... ok [INFO] [stdout] test cli::route::tests::route_check_stdin_unknown_json_format_returns_error ... ok [INFO] [stdout] test cli::route::tests::route_check_only_empty_lines_returns_error ... ok [INFO] [stdout] test cli::route::tests::route_check_empty_stdin_returns_error ... ok [INFO] [stdout] test cli::route::tests::route_check_plaintext_skips_empty_lines ... ok [INFO] [stdout] test cli::route::tests::route_check_plaintext_single_line ... ok [INFO] [stdout] test cli::route::tests::route_check_non_object_json_treated_as_plaintext::case_1_json_true ... ok [INFO] [stdout] test cli::route::tests::route_check_plaintext_trims_whitespace ... ok [INFO] [stdout] test cli::route::tests::route_check_non_object_json_treated_as_plaintext::case_3_json_string ... ok [INFO] [stdout] test cli::route::tests::route_check_plaintext_multi_line ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_09_audit_default ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_06_check_with_output_format_json ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_02_exec_with_sandbox ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_10_audit_with_action ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_03_exec_with_verbose ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_15_init_with_scope_user ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_07_check_with_both ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_05_check_with_input_format ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_16_init_with_scope_project ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_14_init_defaults ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_11_audit_with_since ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_01_exec_simple ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_13_audit_with_all_options ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_04_check_with_command ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_12_audit_with_dir ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_20_migrate_default ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_23_migrate_with_yes ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_21_migrate_with_config_short ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_17_init_with_yes ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_24_test_default ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_25_test_with_config_short ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_18_init_with_yes_long ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_26_test_with_config_long ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_22_migrate_with_config_long ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_08_check_with_verbose ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_19_init_all_flags ... ok [INFO] [stdout] test cli::tests::cli_parsing::case_27_update_presets ... ok [INFO] [stdout] test cli::validate::tests::invalid_args::case_1_exec_unknown_flag ... ok [INFO] [stdout] test cli::tests::cli_parsing_errors::case_1_invalid_scope ... ok [INFO] [stdout] test cli::validate::tests::invalid_args::case_2_exec_unknown_before_known ... ok [INFO] [stdout] test cli::validate::tests::invalid_args::case_3_check_unknown_flag ... ok [INFO] [stdout] test cli::validate::tests::invalid_args::case_4_check_unknown_short_flag ... ok [INFO] [stdout] test cli::validate::tests::invalid_args::case_5_exec_unknown_no_double_dash ... ok [INFO] [stdout] test cli::validate::tests::valid_args::case_01_exec_with_double_dash ... ok [INFO] [stdout] test cli::validate::tests::valid_args::case_02_exec_known_flag_before_double_dash ... ok [INFO] [stdout] test cli::validate::tests::valid_args::case_03_exec_sandbox_with_value ... ok [INFO] [stdout] test cli::validate::tests::valid_args::case_04_exec_sandbox_eq_form ... ok [INFO] [stdout] test cli::validate::tests::valid_args::case_05_exec_all_flags ... ok [INFO] [stdout] test cli::validate::tests::valid_args::case_06_exec_command_without_double_dash ... ok [INFO] [stdout] test cli::validate::tests::valid_args::case_07_exec_command_with_flag_args ... ok [INFO] [stdout] test cli::validate::tests::valid_args::case_08_check_with_double_dash ... ok [INFO] [stdout] test cli::validate::tests::valid_args::case_09_check_known_flags ... ok [INFO] [stdout] test cli::validate::tests::valid_args::case_10_check_output_format ... ok [INFO] [stdout] test cli::validate::tests::valid_args::case_11_check_command_without_double_dash ... ok [INFO] [stdout] test cli::validate::tests::valid_args::case_12_check_no_args ... ok [INFO] [stdout] test cli::validate::tests::valid_args::case_13_unknown_after_double_dash ... ok [INFO] [stdout] test cli::validate::tests::valid_args::case_14_check_unknown_after_double_dash ... ok [INFO] [stdout] test cli::validate::tests::valid_args::case_15_exec_help ... ok [INFO] [stdout] test cli::validate::tests::valid_args::case_16_exec_help_short ... ok [INFO] [stdout] test cli::validate::tests::valid_args::case_17_check_help ... ok [INFO] [stdout] test cli::validate::tests::valid_args::case_19_exec_version ... ok [INFO] [stdout] test cli::validate::tests::valid_args::case_18_check_help_short ... ok [INFO] [stdout] test cli::validate::tests::valid_args::case_20_exec_version_short ... ok [INFO] [stdout] test tests::run_sandbox_exec_rejects_invalid_json ... ok [INFO] [stdout] test tests::create_executor_returns_executor ... ok [INFO] [stdout] test tests::run_command_check_with_empty_stdin_returns_two ... ok [INFO] [stdout] test tests::run_command_check_with_stdin_json_returns_zero ... ok [INFO] [stdout] test tests::run_command_check_with_plaintext_stdin_returns_zero ... ok [INFO] [stdout] test tests::run_command_check_with_command_returns_zero ... ok [INFO] [stdout] test tests::run_command_check_with_multiline_plaintext_stdin_returns_zero ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 79 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s [INFO] [stdout] [INFO] [stderr] Running tests/e2e/main.rs (/opt/rustwide/target/debug/deps/e2e-a3ccd88baeee571d) [INFO] [stdout] [INFO] [stdout] running 88 tests [INFO] [stdout] test check_claude_code_hook::hook_bash_allow ... ok [INFO] [stdout] test audit::audit_disabled_no_log_created ... ok [INFO] [stdout] test audit::exec_compound_command_audit_log ... ok [INFO] [stdout] test audit::non_exec_does_not_create_audit_log::case_1_check ... ok [INFO] [stdout] test audit::exec_creates_audit_log::case_1_allow ... ok [INFO] [stdout] test audit::no_audit_config_still_works ... ok [INFO] [stdout] test audit::audit_rotation_deletes_old_files ... ok [INFO] [stdout] test audit::exec_creates_audit_log::case_2_deny ... ok [INFO] [stdout] test check_claude_code_hook::hook_bash_deny ... ok [INFO] [stdout] test check_claude_code_hook::hook_bash_no_match_returns_ask ... ok [INFO] [stdout] test check_claude_code_hook::hook_invalid_json_exits_2 ... ok [INFO] [stdout] test check_claude_code_hook::hook_sandbox_allow_rewrites_command ... ok [INFO] [stdout] test check_claude_code_hook::hook_output_contains_event_name ... ok [INFO] [stdout] test check_claude_code_hook::hook_non_bash_tool_no_output::case_2_write ... ok [INFO] [stdout] test check_claude_code_hook::hook_non_bash_tool_no_output::case_1_read ... ok [INFO] [stdout] test check_format_auto_detect::auto_detect_generic_format ... ok [INFO] [stdout] test check_generic::check_allow_with_sandbox_info ... ok [INFO] [stdout] test check_generic::check_cmd_sub_in_quoted_string::case_1_cmd_sub_in_quotes_deny ... ok [INFO] [stdout] test check_claude_code_hook::hook_non_bash_tool_no_output::case_3_edit ... ok [INFO] [stdout] test check_generic::check_cmd_sub_in_quoted_string::case_4_backtick_in_quotes_deny ... ok [INFO] [stdout] test check_format_auto_detect::auto_detect_unknown_json_exits_2 ... ok [INFO] [stdout] test check_generic::check_command_arg_json::case_1_deny_rm ... ok [INFO] [stdout] test check_generic::check_command_arg_json::case_2_allow_git_status ... ok [INFO] [stdout] test check_generic::check_cmd_sub_in_quoted_string::case_2_cmd_sub_in_quotes_inner_unmatched_is_ask ... ok [INFO] [stdout] test audit::audit_subcommand_human_format ... ok [INFO] [stdout] test check_generic::check_find_exec_wrapper::case_1_find_exec_deny ... ok [INFO] [stdout] test check_generic::check_deny_includes_reason ... ok [INFO] [stdout] test audit::audit_filter_by_since ... ok [INFO] [stdout] test check_generic::check_command_arg_text::case_1_deny_rm ... ok [INFO] [stdout] test check_generic::check_command_arg_text::case_2_allow_git_status ... ok [INFO] [stdout] test check_generic::check_find_exec_wrapper::case_3_find_execdir_allow ... ok [INFO] [stdout] test audit::audit_filter_by_action::case_2_allow ... ok [INFO] [stdout] test check_generic::check_cmd_sub_in_quoted_string::case_3_single_quotes_no_substitution ... ok [INFO] [stdout] test check_generic::check_command_arg_text::case_3_comment_only ... ok [INFO] [stdout] test check_generic::check_find_exec_wrapper::case_2_find_exec_plus_deny ... ok [INFO] [stdout] test check_generic::check_no_input_exits_2 ... ok [INFO] [stdout] test check_generic::check_cmd_sub_in_quoted_string::case_5_docker_env_with_unmatched_cmd_sub ... ok [INFO] [stdout] test check_generic::check_find_exec_wrapper::case_5_find_okdir_allow ... ok [INFO] [stdout] test check_generic::check_plaintext_stdin_single_line ... ok [INFO] [stdout] test check_format_auto_detect::auto_detect_claude_code_hook_format ... ok [INFO] [stdout] test audit::audit_filter_by_action::case_1_deny ... ok [INFO] [stdout] test check_generic::check_find_exec_wrapper::case_4_find_ok_deny ... ok [INFO] [stdout] test error_handling::invalid_config_exits_with_error::case_2_exec ... ok [INFO] [stdout] test audit::audit_filter_by_command ... ok [INFO] [stdout] test check_generic::check_stdin_comment_before_command ... ok [INFO] [stdout] test check_generic::check_stdin_json_deny ... ok [INFO] [stdout] test audit::audit_subcommand_json_format ... ok [INFO] [stdout] test error_handling::exit_codes::case_2_check_deny ... ok [INFO] [stdout] test audit::audit_filter_by_limit ... ok [INFO] [stdout] test check_generic::check_stdin_json_allow ... ok [INFO] [stdout] test cli::version_flag_prints_version ... ok [INFO] [stdout] test error_handling::exit_codes::case_1_exec_deny ... ok [INFO] [stdout] test error_handling::no_config_check_returns_default ... ok [INFO] [stdout] test error_handling::format_with_non_json_stdin_exits_2 ... ok [INFO] [stdout] test error_handling::exec_nonexistent_command ... ok [INFO] [stdout] test error_handling::validation_error_deny_with_sandbox::case_1_check ... ok [INFO] [stdout] test error_handling::validation_error_deny_with_sandbox::case_2_exec ... ok [INFO] [stdout] test error_handling::invalid_config_exits_with_error::case_1_check ... ok [INFO] [stdout] test init::init_project_scope_creates_config ... ok [INFO] [stdout] test init::init_invalid_scope ... ok [INFO] [stdout] test exec::exec_allow_runs_command ... ok [INFO] [stdout] test error_handling::unknown_format_flag_exits_2 ... ok [INFO] [stdout] test init::init_user_scope_creates_config ... ok [INFO] [stdout] test test_command::ask_decision_test ... ok [INFO] [stdout] test exec::exec_no_match_uses_default_deny ... ok [INFO] [stdout] test sandbox_fs_read_deny::new_format_does_not_emit_deprecation_warning ... ok [INFO] [stdout] test init::init_user_scope_with_claude_code_integration ... ok [INFO] [stdout] test test_command::config_option::case_1_short_flag ... ok [INFO] [stdout] test exec::exec_deny_prints_reason ... ok [INFO] [stdout] test test_command::inline_tests::case_1_all_pass ... ok [INFO] [stdout] test sandbox_fs_read_deny::config_error_on_undefined_path_ref_in_read_deny ... ok [INFO] [stdout] test sandbox_fs_read_deny::legacy_format_emits_deprecation_warning ... ok [INFO] [stdout] test test_command::inline_tests::case_2_some_fail ... ok [INFO] [stdout] test exec::exec_ask_treated_as_deny ... ok [INFO] [stdout] test test_command::tests_extends_merges_additional_rules ... ok [INFO] [stdout] test exec::exec_exit_code::case_1_deny_post ... ok [INFO] [stdout] test test_command::top_level_tests ... ok [INFO] [stdout] test test_command::output_shows_pass_and_fail_details ... ok [INFO] [stdout] test test_command::exit_code_2_on_no_test_cases ... ok [INFO] [stdout] test init::init_project_scope_overwrites_existing ... ok [INFO] [stdout] test test_command::extends_in_config ... ok [INFO] [stdout] test test_command::exit_code_2_on_config_not_found ... ok [INFO] [stdout] test test_command::extends_resolution_error_shows_path ... ok [INFO] [stdout] test test_command::inline_tests::case_3_all_fail ... ok [INFO] [stdout] test test_command::mixed_inline_and_top_level ... ok [INFO] [stdout] test test_command::config_option::case_2_long_flag ... ok [INFO] [stdout] test test_command::tests_extends_does_not_overwrite_main_tests ... ok [INFO] [stdout] test test_command::global_config_does_not_affect_test ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 88 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.24s [INFO] [stdout] [INFO] [stderr] Running tests/integration/main.rs (/opt/rustwide/target/debug/deps/integration-85a2d22f4c59895e) [INFO] [stdout] [INFO] [stdout] running 601 tests [INFO] [stdout] test audit_log_integration::check_does_not_generate_audit_log ... ok [INFO] [stdout] test audit_log_integration::audit_disabled_does_not_generate_log ... ok [INFO] [stdout] test compound_command_evaluation::action_aggregation_priority::case_1_ask_over_allow ... ok [INFO] [stdout] test compound_command_evaluation::any_deny_makes_overall_deny::case_1_one_deny_among_allows ... ok [INFO] [stdout] test compound_command_evaluation::command_substitution_extraction::case_1_command_substitution_deny ... ok [INFO] [stdout] test audit_log_integration::exec_generates_audit_log::case_1_allow ... ok [INFO] [stdout] test compound_command_evaluation::action_aggregation_priority::case_2_deny_over_ask_and_allow ... ok [INFO] [stdout] test audit_log_integration::audit_log_records_matched_rules ... ok [INFO] [stdout] test audit_log_integration::no_audit_section_uses_default_behavior ... ok [INFO] [stdout] test compound_command_evaluation::any_deny_makes_overall_deny::case_2_deny_at_start ... ok [INFO] [stdout] test audit_log_integration::audit_log_records_default_action ... ok [INFO] [stdout] test compound_command_evaluation::command_substitution_in_strings::case_1_cmd_sub_in_double_quotes_deny ... ok [INFO] [stdout] test compound_command_evaluation::command_substitution_in_strings::case_3_cmd_sub_in_double_quotes_inner_unmatched_is_ask ... ok [INFO] [stdout] test audit_log_integration::exec_generates_audit_log::case_2_deny ... ok [INFO] [stdout] test compound_command_evaluation::command_substitution_extraction::case_2_command_substitution_allowed ... ok [INFO] [stdout] test compound_command_evaluation::any_deny_makes_overall_deny::case_3_deny_at_end ... ok [INFO] [stdout] test compound_command_evaluation::command_substitution_extraction::case_3_backtick_substitution_deny ... ok [INFO] [stdout] test compound_command_evaluation::command_substitution_in_strings::case_2_cmd_sub_in_double_quotes_all_allowed ... ok [INFO] [stdout] test compound_command_evaluation::command_substitution_in_strings::case_4_nested_wrapper_in_cmd_sub_in_quotes ... ok [INFO] [stdout] test compound_command_evaluation::command_substitution_must_not_bypass_rules::case_1_gh_pr_edit_with_allowed_cmd_sub ... ok [INFO] [stdout] test compound_command_evaluation::command_substitution_in_strings::case_7_docker_env_with_secret_cmd_sub ... ok [INFO] [stdout] test compound_command_evaluation::command_substitution_in_strings::case_8_git_commit_with_date_cmd_sub ... ok [INFO] [stdout] test compound_command_evaluation::command_substitution_with_redirects_no_stack_overflow::case_2_cmd_sub_with_redirect_deny_inner ... ok [INFO] [stdout] test compound_command_evaluation::compound_command_uses_shell_input::case_2_shell_is_compound ... ok [INFO] [stdout] test audit_log_integration::compound_command_records_sub_evaluations ... ok [INFO] [stdout] test compound_command_evaluation::command_substitution_must_not_bypass_rules::case_4_all_matched_cmd_sub_is_still_allowed ... ok [INFO] [stdout] test compound_command_evaluation::command_substitution_with_redirects_no_stack_overflow::case_3_cmd_sub_simple_with_redirect ... ok [INFO] [stdout] test compound_command_evaluation::command_substitution_must_not_bypass_rules::case_2_unmatched_outer_with_allowed_inner_chain ... ok [INFO] [stdout] test compound_command_evaluation::control_structure_subcommand_extraction::case_1_if_then_with_deny ... ok [INFO] [stdout] test compound_command_evaluation::command_substitution_in_strings::case_5_single_quotes_no_substitution ... ok [INFO] [stdout] test compound_command_evaluation::compound_command_uses_shell_input::case_1_argv_is_not_compound ... ok [INFO] [stdout] test compound_command_evaluation::command_substitution_with_redirects_no_stack_overflow::case_4_nested_cmd_sub_with_pipe ... ok [INFO] [stdout] test compound_command_evaluation::command_substitution_in_strings::case_6_backtick_in_double_quotes_deny ... ok [INFO] [stdout] test compound_command_evaluation::control_structure_subcommand_extraction::case_2_if_else_deny_in_else ... ok [INFO] [stdout] test compound_command_evaluation::command_substitution_with_redirects_no_stack_overflow::case_1_cmd_sub_with_redirect_and_pipe ... ok [INFO] [stdout] test compound_command_evaluation::control_structure_subcommand_extraction::case_3_if_all_allowed ... ok [INFO] [stdout] test compound_command_evaluation::command_substitution_must_not_bypass_rules::case_3_unmatched_outer_with_allowed_inner_defaults_deny ... ok [INFO] [stdout] test compound_command_evaluation::control_structure_subcommand_extraction::case_4_while_loop_with_deny ... ok [INFO] [stdout] test compound_command_evaluation::control_structure_subcommand_extraction::case_5_case_statement_with_deny ... ok [INFO] [stdout] test compound_command_evaluation::control_structure_subcommand_extraction::case_7_negated_command_deny ... ok [INFO] [stdout] test compound_command_evaluation::defaults_action_absent_compound_unmatched_asks::case_2_no_defaults_all_unmatched ... ok [INFO] [stdout] test compound_command_evaluation::control_structure_subcommand_extraction::case_6_negated_command_allowed ... ok [INFO] [stdout] test compound_command_evaluation::control_structure_subcommand_extraction::case_8_negated_command_in_if_allowed ... ok [INFO] [stdout] test compound_command_evaluation::defaults_action_absent_compound_unmatched_asks::case_1_no_defaults_unmatched_wins_over_allow ... ok [INFO] [stdout] test compound_command_evaluation::deny_only_sandbox_presets_no_contradiction ... ok [INFO] [stdout] test compound_command_evaluation::defaults_action_absent_compound_unmatched_asks::case_3_no_defaults_all_matched ... ok [INFO] [stdout] test compound_command_evaluation::evaluate_command_splits_compound_before_matching::case_1_cd_wildcard_does_not_match_entire_compound ... ok [INFO] [stdout] test compound_command_evaluation::evaluate_command_splits_compound_before_matching::case_2_cd_and_rm_deny_wins ... ok [INFO] [stdout] test compound_command_evaluation::empty_rules_compound_returns_default ... ok [INFO] [stdout] test compound_command_evaluation::evaluate_command_splits_compound_before_matching::case_3_all_sub_commands_allowed ... ok [INFO] [stdout] test compound_command_evaluation::evaluate_command_splits_compound_before_matching::case_8_semicolon_separated_deny ... ok [INFO] [stdout] test compound_command_evaluation::evaluate_command_splits_compound_before_matching::case_5_unmatched_with_defaults_action_deny ... ok [INFO] [stdout] test compound_command_evaluation::each_command_in_compound_is_evaluated_individually::case_4_deny_in_pipe ... ok [INFO] [stdout] test compound_command_evaluation::flag_negation_empty_tokens_in_compound::case_1_sort_no_args_in_pipeline ... ok [INFO] [stdout] test compound_command_evaluation::for_loop_subcommand_extraction::case_1_for_loop_all_allowed ... ok [INFO] [stdout] test compound_command_evaluation::each_command_in_compound_is_evaluated_individually::case_3_pipe_and_chain_mixed ... ok [INFO] [stdout] test compound_command_evaluation::flag_negation_empty_tokens_in_compound::case_2_sort_with_banned_flag_in_pipeline ... ok [INFO] [stdout] test compound_command_evaluation::each_command_in_compound_is_evaluated_individually::case_5_deny_in_or_chain ... ok [INFO] [stdout] test compound_command_evaluation::evaluate_command_splits_compound_before_matching::case_4_unmatched_sub_command_escalates_to_ask ... ok [INFO] [stdout] test compound_command_evaluation::evaluate_command_splits_compound_before_matching::case_6_pipe_separated ... ok [INFO] [stdout] test compound_command_evaluation::each_command_in_compound_is_evaluated_individually::case_2_and_chain_all_allowed ... ok [INFO] [stdout] test compound_command_evaluation::each_command_in_compound_is_evaluated_individually::case_1_pipe_all_allowed ... ok [INFO] [stdout] test compound_command_evaluation::evaluate_command_splits_compound_before_matching::case_7_or_separated_deny ... ok [INFO] [stdout] test compound_command_evaluation::for_loop_subcommand_extraction::case_2_for_loop_with_deny ... ok [INFO] [stdout] test compound_command_evaluation::redirected_statements_match_rules::case_1_stdout_redirect ... ok [INFO] [stdout] test compound_command_evaluation::mixed_operators_compound::case_2_mixed_with_deny ... ok [INFO] [stdout] test compound_command_evaluation::mixed_operators_compound::case_1_semicolon_pipe_and ... ok [INFO] [stdout] test compound_command_evaluation::partial_sandbox_compound ... ok [INFO] [stdout] test compound_command_evaluation::function_definition_subcommand_extraction::case_1_function_def_with_deny ... ok [INFO] [stdout] test compound_command_evaluation::mixed_operators_compound::case_3_pipe_then_semicolon ... ok [INFO] [stdout] test compound_command_evaluation::redirected_statements_match_rules::case_6_redirect_in_pipeline ... ok [INFO] [stdout] test compound_command_evaluation::function_definition_subcommand_extraction::case_2_function_def_all_allowed ... ok [INFO] [stdout] test compound_command_evaluation::redirected_statements_match_rules::case_5_deny_still_works_with_redirect ... ok [INFO] [stdout] test compound_command_evaluation::redirected_statements_match_rules::case_3_devnull_redirect ... ok [INFO] [stdout] test compound_command_evaluation::for_loop_subcommand_extraction::case_3_for_loop_mixed ... ok [INFO] [stdout] test compound_command_evaluation::sandbox_strictest_wins_aggregation::case_2_deny_paths_union ... ok [INFO] [stdout] test compound_command_evaluation::sandbox_contradiction_preserves_existing_ask ... ok [INFO] [stdout] test compound_command_evaluation::unmatched_sub_command_uses_defaults_action::case_1_allow_plus_unmatched_defaults_ask ... ok [INFO] [stdout] test compound_command_evaluation::shell_construct_subcommand_extraction::case_2_subshell_all_allowed ... ok [INFO] [stdout] test compound_command_evaluation::single_sandbox_preset_via_compound ... ok [INFO] [stdout] test compound_command_evaluation::shell_construct_subcommand_extraction::case_1_subshell_with_deny ... ok [INFO] [stdout] test compound_command_evaluation::unmatched_sub_command_uses_defaults_action::case_3_allow_plus_unmatched_defaults_allow ... ok [INFO] [stdout] test compound_command_evaluation::sandbox_strictest_wins_aggregation::case_3_network_denied_by_any ... ok [INFO] [stdout] test compound_command_evaluation::redirected_statements_match_rules::case_4_compound_with_redirect ... ok [INFO] [stdout] test compound_command_evaluation::sandbox_strictest_wins_aggregation::case_1_writable_roots_intersection ... ok [INFO] [stdout] test compound_command_evaluation::redirected_statements_match_rules::case_2_stderr_redirect ... ok [INFO] [stdout] test compound_command_evaluation::unmatched_sub_command_uses_defaults_action::case_2_allow_plus_unmatched_defaults_deny ... ok [INFO] [stdout] test config_to_rule_evaluation::allow_rule_with_sandbox_propagates_preset ... ok [INFO] [stdout] test compound_command_evaluation::writable_contradiction_escalates_to_ask ... ok [INFO] [stdout] test compound_command_evaluation::three_preset_progressive_intersection ... ok [INFO] [stdout] test config_to_rule_evaluation::alternation_glob_wildcard_config::case_2_glob_alt_get_object ... ok [INFO] [stdout] test config_to_rule_evaluation::alternation_glob_wildcard_config::case_1_glob_alt_list_buckets ... ok [INFO] [stdout] test config_to_rule_evaluation::alternation_glob_wildcard_config::case_4_glob_alt_delete_blocked ... ok [INFO] [stdout] test config_to_rule_evaluation::alternation_order_independent::case_3_non_flag_alt_no_flag ... ok [INFO] [stdout] test config_to_rule_evaluation::alternation_order_independent::case_1_non_flag_alt_skips_flags ... ok [INFO] [stdout] test config_to_rule_evaluation::ask_response_preserves_message ... ok [INFO] [stdout] test compound_command_evaluation::unmatched_sub_command_uses_defaults_action::case_4_deny_rule_still_wins_over_resolved_default ... ok [INFO] [stdout] test config_to_rule_evaluation::alternation_order_independent::case_4_non_flag_alt_mismatch ... ok [INFO] [stdout] test config_to_rule_evaluation::backslash_before_closing_quote ... ok [INFO] [stdout] test config_to_rule_evaluation::alternation_order_independent::case_2_non_flag_alt_second_variant ... ok [INFO] [stdout] test config_to_rule_evaluation::alternation_glob_wildcard_config::case_3_glob_alt_describe_instances ... ok [INFO] [stdout] test compound_command_evaluation::writable_contradiction_does_not_downgrade_deny ... ok [INFO] [stdout] test config_to_rule_evaluation::ask_without_message_has_none ... ok [INFO] [stdout] test config_to_rule_evaluation::backslash_followed_by_space::case_1_backslash_then_wildcard_matches ... ok [INFO] [stdout] test config_to_rule_evaluation::boolean_flag_not_broken_by_equals_splitting::case_3_no_flag_allowed ... ok [INFO] [stdout] test config_to_rule_evaluation::boolean_flag_not_broken_by_equals_splitting::case_1_boolean_flag_space_separated ... ok [INFO] [stdout] test config_to_rule_evaluation::backslash_followed_by_space::case_2_backslash_then_wildcard_no_match ... ok [INFO] [stdout] test config_to_rule_evaluation::boolean_flag_not_broken_by_equals_splitting::case_2_boolean_flag_with_multiple_args ... ok [INFO] [stdout] test config_to_rule_evaluation::boolean_flag_not_broken_by_equals_splitting::case_4_boolean_flag_equals_not_split ... ok [INFO] [stdout] test config_to_rule_evaluation::config_validation_collects_multiple_errors ... ok [INFO] [stdout] test config_to_rule_evaluation::double_dash_positional_matching::case_2_checkout_file_only_with_c ... ok [INFO] [stdout] test config_to_rule_evaluation::config_validation_rejects_invalid::case_1_no_action_key ... ok [INFO] [stdout] test config_to_rule_evaluation::deny_response_preserves_message_and_fix_suggestion ... ok [INFO] [stdout] test config_to_rule_evaluation::config_validation_rejects_undefined_sandbox ... ok [INFO] [stdout] test config_to_rule_evaluation::defaults_sandbox_does_not_apply_to_rules_without_sandbox ... ok [INFO] [stdout] test config_to_rule_evaluation::double_dash_positional_matching::case_1_checkout_file_only ... ok [INFO] [stdout] test config_to_rule_evaluation::double_dash_remains_positional::case_1_double_dash_correct_position ... ok [INFO] [stdout] test config_to_rule_evaluation::explicit_deny_wins::case_1_deny_over_allow ... ok [INFO] [stdout] test config_to_rule_evaluation::explicit_deny_wins::case_4_deny_wins_over_both ... ok [INFO] [stdout] test config_to_rule_evaluation::explicit_deny_wins::case_2_deny_over_ask ... ok [INFO] [stdout] test config_to_rule_evaluation::double_dash_remains_positional::case_2_double_dash_wrong_position ... ok [INFO] [stdout] test config_to_rule_evaluation::equals_sign_in_flag_token::case_1_equals_flag_matches ... ok [INFO] [stdout] test config_to_rule_evaluation::equals_sign_in_flag_token::case_2_different_value_no_match ... ok [INFO] [stdout] test config_to_rule_evaluation::explicit_deny_wins::case_3_ask_over_allow ... ok [INFO] [stdout] test config_to_rule_evaluation::empty_rules_returns_default ... ok [INFO] [stdout] test config_to_rule_evaluation::config_validation_rejects_invalid::case_2_deny_with_sandbox ... ok [INFO] [stdout] test config_to_rule_evaluation::duplicate_rules_deny_wins ... ok [INFO] [stdout] test config_to_rule_evaluation::double_dash_positional_matching::case_3_checkout_ref_then_double_dash_rejected ... ok [INFO] [stdout] test config_to_rule_evaluation::flag_equals_value_with_wildcard_pattern::case_2_equals_joined_flag_matches ... ok [INFO] [stdout] test config_to_rule_evaluation::double_dash_positional_matching::case_4_checkout_ref_then_double_dash_with_c_rejected ... ok [INFO] [stdout] test config_to_rule_evaluation::flag_equals_value_with_wildcard_pattern::case_1_space_separated_flag_matches ... ok [INFO] [stdout] test config_to_rule_evaluation::flag_negation_empty_tokens::case_2_sort_safe_flag_allowed ... ok [INFO] [stdout] test config_to_rule_evaluation::flag_negation_empty_tokens::case_1_sort_no_args_allowed ... ok [INFO] [stdout] test config_to_rule_evaluation::flag_equals_value_with_wildcard_pattern::case_4_short_flag_equals_joined ... ok [INFO] [stdout] test config_to_rule_evaluation::flag_equals_value_with_wildcard_pattern::case_3_short_flag_space_separated ... ok [INFO] [stdout] test config_to_rule_evaluation::flag_negation_empty_tokens::case_3_sort_banned_flag_rejected ... ok [INFO] [stdout] test config_to_rule_evaluation::flag_equals_value_with_wildcard_pattern::case_5_no_output_flag_allowed ... ok [INFO] [stdout] test config_to_rule_evaluation::flag_negation_empty_tokens::case_4_find_no_args_allowed ... ok [INFO] [stdout] test config_to_rule_evaluation::flag_negation_empty_tokens::case_6_find_banned_flag_rejected ... ok [INFO] [stdout] test config_to_rule_evaluation::flag_negation_equals_form::case_1_equals_form_rejected ... ok [INFO] [stdout] test config_to_rule_evaluation::flag_negation_equals_form::case_3_different_flag_equals_allowed ... ok [INFO] [stdout] test config_to_rule_evaluation::flag_negation_empty_tokens::case_5_find_safe_args_allowed ... ok [INFO] [stdout] test config_to_rule_evaluation::flag_negation_equals_form::case_2_space_form_rejected ... ok [INFO] [stdout] test config_to_rule_evaluation::flag_negation_equals_form::case_5_alt_negation_equals_rejected ... ok [INFO] [stdout] test config_to_rule_evaluation::flag_negation_order_independent::case_2_flag_negation_rejects_alt_at_any_position ... ok [INFO] [stdout] test config_to_rule_evaluation::fused_short_flag_value::case_3_fused_multichar_value ... ok [INFO] [stdout] test config_to_rule_evaluation::fused_short_flag_value::case_2_space_separated_still_works ... ok [INFO] [stdout] test config_to_rule_evaluation::flag_negation_order_independent::case_1_flag_negation_rejects_at_any_position ... ok [INFO] [stdout] test config_to_rule_evaluation::flag_negation_equals_form::case_4_no_flag_allowed ... ok [INFO] [stdout] test config_to_rule_evaluation::full_config_evaluates_correctly::case_2_denied_command ... ok [INFO] [stdout] test config_to_rule_evaluation::full_config_evaluates_correctly::case_3_asked_command ... ok [INFO] [stdout] test config_to_rule_evaluation::fused_short_flag_value::case_5_fused_in_optional_group ... ok [INFO] [stdout] test config_to_rule_evaluation::full_config_evaluates_correctly::case_4_unmatched_command ... ok [INFO] [stdout] test config_to_rule_evaluation::flag_negation_order_independent::case_3_flag_negation_allows_safe_command ... ok [INFO] [stdout] test config_to_rule_evaluation::literal_glob_wildcard_config::case_1_literal_glob_deny_matches ... ok [INFO] [stdout] test config_to_rule_evaluation::flag_negation_equals_form::case_6_alt_negation_equals_different_flag_allowed ... ok [INFO] [stdout] test config_to_rule_evaluation::fused_short_flag_value::case_7_optional_space_separated ... ok [INFO] [stdout] test config_to_rule_evaluation::literal_glob_wildcard_config::case_3_literal_glob_deny_no_match ... ok [INFO] [stdout] test config_to_rule_evaluation::literal_order_independent::case_1_flag_before_literal ... ok [INFO] [stdout] test config_to_rule_evaluation::fused_short_flag_value::case_4_optional_flag_absent_still_matches ... ok [INFO] [stdout] test config_to_rule_evaluation::fused_short_flag_value::case_1_fused_short_flag_matches ... ok [INFO] [stdout] test config_to_rule_evaluation::literal_glob_wildcard_config::case_2_literal_glob_deny_matches_variant ... ok [INFO] [stdout] test config_to_rule_evaluation::fused_short_flag_value::case_6_optional_absent ... ok [INFO] [stdout] test config_to_rule_evaluation::literal_order_independent::case_3_flag_after_literal ... ok [INFO] [stdout] test config_to_rule_evaluation::literal_order_independent::case_4_literal_mismatch ... ok [INFO] [stdout] test config_to_rule_evaluation::long_flag_negation_with_preceding_literals::case_1_no_trailing_args_allowed ... ok [INFO] [stdout] test config_to_rule_evaluation::long_flag_negation_with_preceding_literals::case_2_safe_trailing_arg_allowed ... ok [INFO] [stdout] test config_to_rule_evaluation::long_flag_negation_with_preceding_literals::case_4_banned_flag_with_arg_rejected ... ok [INFO] [stdout] test config_to_rule_evaluation::full_config_evaluates_correctly::case_1_allowed_command ... ok [INFO] [stdout] test config_to_rule_evaluation::multi_word_alternation_allow_and_deny::case_4_bare_allowed ... ok [INFO] [stdout] test config_to_rule_evaluation::multi_word_alternation_config::case_1_npx_prettier_allowed ... ok [INFO] [stdout] test config_to_rule_evaluation::multi_word_alternation_config::case_2_bunx_prettier_allowed ... ok [INFO] [stdout] test config_to_rule_evaluation::multi_word_alternation_allow_and_deny::case_1_npx_denied ... ok [INFO] [stdout] test config_to_rule_evaluation::multi_word_alternation_allow_and_deny::case_2_bare_denied ... ok [INFO] [stdout] test config_to_rule_evaluation::multi_word_alternation_config::case_4_unrelated_command_default ... ok [INFO] [stdout] test config_to_rule_evaluation::negated_literal_glob_wildcard_config::case_1_negated_literal_glob_allows ... ok [INFO] [stdout] test config_to_rule_evaluation::multi_word_alternation_config::case_3_bare_prettier_allowed ... ok [INFO] [stdout] test config_to_rule_evaluation::negation_alternation_glob_wildcard_config::case_3_negated_glob_denies_describe ... ok [INFO] [stdout] test config_to_rule_evaluation::long_flag_negation_with_preceding_literals::case_3_banned_flag_rejected ... ok [INFO] [stdout] test config_to_rule_evaluation::negated_literal_glob_wildcard_config::case_2_negated_literal_glob_denies ... ok [INFO] [stdout] test config_to_rule_evaluation::preset_merge_wrappers_appended ... ok [INFO] [stdout] test config_to_rule_evaluation::negation_alternation_glob_wildcard_config::case_2_negated_glob_denies_list_pods ... ok [INFO] [stdout] test config_to_rule_evaluation::multi_word_alternation_allow_and_deny::case_3_npx_allowed ... ok [INFO] [stdout] test config_to_rule_evaluation::preset_merge_appends_rules_and_overrides_defaults ... ok [INFO] [stdout] test config_to_rule_evaluation::no_sandbox_rule_returns_none_preset ... ok [INFO] [stdout] test config_to_rule_evaluation::quoted_and_escaped_star_matching::case_2_quoted_star_glob_exact ... ok [INFO] [stdout] test config_to_rule_evaluation::negation_alternation_glob_wildcard_config::case_4_negated_glob_denies_get ... ok [INFO] [stdout] test config_to_rule_evaluation::literal_order_independent::case_2_literal_at_normal_position ... ok [INFO] [stdout] test config_to_rule_evaluation::quoted_and_escaped_star_matching::case_3_quoted_star_glob_no_match ... ok [INFO] [stdout] test config_to_rule_evaluation::negation_alternation_glob_wildcard_config::case_1_negated_glob_allows_delete ... ok [INFO] [stdout] test config_to_rule_evaluation::rule_order_independence::case_1_deny_before_allow ... ok [INFO] [stdout] test config_to_rule_evaluation::wildcard_command_patterns::case_1_star_help_matches_any_command ... ok [INFO] [stdout] test config_to_rule_evaluation::wildcard_command_patterns::case_2_star_help_matches_curl ... ok [INFO] [stdout] test config_to_rule_evaluation::quoted_and_escaped_star_matching::case_1_quoted_star_glob_matches ... ok [INFO] [stdout] test config_to_rule_evaluation::rule_order_independence::case_3_ask_before_deny ... ok [INFO] [stdout] test config_to_rule_evaluation::preset_merge_paths_are_appended_per_key ... ok [INFO] [stdout] test config_to_rule_evaluation::wildcard_command_patterns::case_3_deny_rm_star_vs_allow_star_help ... ok [INFO] [stdout] test config_to_rule_evaluation::wildcard_deny_beats_specific_allow::case_1_deny_git_star_overrides_allow_git_status ... ok [INFO] [stdout] test config_to_rule_evaluation::quoted_glob_with_space::case_2_quoted_glob_with_space_no_match ... ok [INFO] [stdout] test config_to_rule_evaluation::rule_order_independence::case_4_deny_before_ask ... ok [INFO] [stdout] test config_to_rule_evaluation::quoted_and_escaped_star_matching::case_5_escaped_star_no_glob ... ok [INFO] [stdout] test config_to_rule_evaluation::quoted_flag_like_value::case_2_quoted_flag_value_wrong_value_rejects ... ok [INFO] [stdout] test config_to_rule_evaluation::quoted_flag_like_value::case_1_quoted_flag_value_different_order ... ok [INFO] [stdout] test config_to_rule_evaluation::quoted_glob_with_space::case_1_quoted_glob_with_space_matches ... ok [INFO] [stdout] test config_to_rule_evaluation::rule_order_independence::case_2_allow_before_deny ... ok [INFO] [stdout] test config_to_rule_evaluation::quoted_and_escaped_star_matching::case_4_escaped_star_exact_match ... ok [INFO] [stdout] test config_to_rule_evaluation::wildcard_deny_beats_specific_allow::case_3_unrelated_command_not_affected ... ok [INFO] [stdout] test config_to_rule_evaluation::wildcard_command_patterns::case_4_allow_star_help_unmatched_without_flag ... ok [INFO] [stdout] test config_to_rule_evaluation::yaml_config_evaluates_commands::case_3_ask_matches ... ok [INFO] [stdout] test config_to_rule_evaluation::yaml_config_evaluates_commands::case_1_allow_matches ... ok [INFO] [stdout] test config_to_rule_evaluation::wildcard_deny_beats_specific_allow::case_2_deny_git_star_overrides_allow_git_diff ... ok [INFO] [stdout] test config_to_rule_evaluation::yaml_config_evaluates_commands::case_2_deny_matches ... ok [INFO] [stdout] test config_to_rule_evaluation::unicode_in_commands::case_1_unicode_arg_allowed ... ok [INFO] [stdout] test config_to_rule_evaluation::unicode_in_commands::case_2_unicode_in_path ... ok [INFO] [stdout] test config_to_rule_evaluation::yaml_config_evaluates_commands::case_4_no_match_returns_default ... ok [INFO] [stdout] test extends_resolution::extends_resolves_child_rules::case_1_child_allow_rule_applied ... ok [INFO] [stdout] test flag_group_evaluation::config_without_flag_groups_still_works ... ok [INFO] [stdout] test extends_resolution::extends_resolves_child_rules::case_2_child_ask_rule_applied ... ok [INFO] [stdout] test extends_resolution::multiple_extends_rules_are_merged::case_1_base_then_extra ... ok [INFO] [stdout] test extends_resolution::parent_rules_override_child_rules::case_2_parent_deny_over_child_allow ... ok [INFO] [stdout] test extends_resolution::nested_extends_resolved_transitively ... ok [INFO] [stdout] test extends_resolution::extends_resolved_relative_to_config_dir_not_cwd ... ok [INFO] [stdout] test extends_resolution::multiple_extends_rules_are_merged::case_2_extra_then_base ... ok [INFO] [stdout] test extends_resolution::parent_rules_override_child_rules::case_1_parent_ask_over_child_allow ... ok [INFO] [stdout] test flag_group_evaluation::bool_flag_group_not_present_fails_match ... ok [INFO] [stdout] test extends_resolution::parent_rules_override_child_rules::case_3_parent_deny_over_child_ask ... ok [INFO] [stdout] test extends_resolution::no_extends_returns_config_unchanged ... ok [INFO] [stdout] test flag_group_evaluation::flag_group_validation_errors::case_2_invalid_flag_name ... ok [INFO] [stdout] test flag_group_evaluation::flag_group_inside_optional_group_is_rejected_at_evaluation ... ok [INFO] [stdout] test extends_resolution::extends_resolves_child_rules::case_3_child_rule_no_match_returns_default ... ok [INFO] [stdout] test flag_group_evaluation::flag_group_validation_errors::case_3_empty_definition ... ok [INFO] [stdout] test flag_group_evaluation::flag_group_validation_errors::case_1_undefined_flag_group_reference ... ok [INFO] [stdout] test flag_group_evaluation::value_restricted_flag_group::case_1_allowed_value ... ok [INFO] [stdout] test flag_group_evaluation::field_flag_group_routes_mutation_to_ask::case_06_multi_mixed_aliases_no_mutation ... ok [INFO] [stdout] test flag_group_evaluation::field_flag_group_routes_mutation_to_ask::case_01_single_short_f ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_01_p01_no_settings_user ... ok [INFO] [stdout] test flag_group_evaluation::field_flag_group_routes_mutation_to_ask::case_05_multi_no_mutation ... ok [INFO] [stdout] test flag_group_evaluation::field_flag_group_routes_mutation_to_ask::case_04_single_long_field ... ok [INFO] [stdout] test flag_group_evaluation::flag_groups_supports_equals_joined_values ... ok [INFO] [stdout] test flag_group_evaluation::value_restricted_flag_group::case_3_disallowed_value ... ok [INFO] [stdout] test flag_group_evaluation::field_flag_group_routes_mutation_to_ask::case_08_single_mutation_long ... ok [INFO] [stdout] test flag_group_evaluation::field_flag_group_routes_mutation_to_ask::case_10_multi_mutation_last ... ok [INFO] [stdout] test flag_group_evaluation::field_flag_group_routes_mutation_to_ask::case_07_single_mutation ... ok [INFO] [stdout] test flag_group_evaluation::flag_groups_empty_when_no_flag_in_group_used ... ok [INFO] [stdout] test flag_group_evaluation::field_flag_group_routes_mutation_to_ask::case_02_single_long_raw_field ... ok [INFO] [stdout] test flag_group_evaluation::bool_flag_group_captures_presence ... ok [INFO] [stdout] test flag_group_evaluation::field_flag_group_routes_mutation_to_ask::case_09_multi_mutation_first ... ok [INFO] [stdout] test flag_group_evaluation::flag_groups_collects_all_occurrences ... ok [INFO] [stdout] test flag_group_evaluation::field_flag_group_routes_mutation_to_ask::case_03_single_short_capital_f ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_02_p02_no_settings_user_existing_overwrite_yes ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_04_p04_no_settings_project ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_06_p06_no_settings_project_existing_overwrite_no ... ok [INFO] [stdout] test flag_group_evaluation::multiple_flag_groups_independent ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_09_p09_no_bash_no_hook_user_apply_no ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_10_p10_no_bash_no_hook_user_existing_apply_no ... ok [INFO] [stdout] test flag_group_evaluation::value_restricted_flag_group::case_2_allowed_value_head ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_14_p14_no_bash_no_hook_project ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_17_p17_no_bash_hook_exists_project ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_15_p15_no_bash_no_hook_project_existing_overwrite_yes ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_13_p13_no_bash_hook_exists_user_existing_overwrite_no ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_19_p19_no_bash_hook_exists_project_existing_overwrite_no ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_03_p03_no_settings_user_existing_overwrite_no ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_07_p07_no_bash_no_hook_user_apply_yes ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_26_p26_bash_no_hook_user_mig_no_app_no ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_24_p24_bash_no_hook_user_mig_no_app_yes ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_27_p27_bash_no_hook_user_existing_mig_no_app_no ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_12_p12_no_bash_hook_exists_user_existing_overwrite_yes ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_23_p23_bash_no_hook_user_existing_mig_yes_app_no ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_16_p16_no_bash_no_hook_project_existing_overwrite_no ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_20_p20_bash_no_hook_user_mig_yes_app_yes ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_34_p34_bash_hook_user_mig_no_app_no ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_21_p21_bash_no_hook_user_existing_mig_yes_app_yes ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_28_p28_bash_hook_user_mig_yes_app_yes ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_30_p30_bash_hook_user_mig_yes_app_no ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_08_p08_no_bash_no_hook_user_existing_apply_yes ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_05_p05_no_settings_project_existing_overwrite_yes ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_31_p31_bash_hook_user_existing_mig_yes_app_no ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_43_p43_bash_no_hook_project_existing_mig_no_app_no ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_42_p42_bash_no_hook_project_mig_no_app_no ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_44_p44_bash_hook_project_mig_yes_app_yes ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_45_p45_bash_hook_project_existing_mig_yes_app_yes ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_46_p46_bash_hook_project_mig_yes_app_no ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_48_p48_bash_hook_project_mig_no_app_yes ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_22_p22_bash_no_hook_user_mig_yes_app_no ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_47_p47_bash_hook_project_existing_mig_yes_app_no ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_11_p11_no_bash_hook_exists_user ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_25_p25_bash_no_hook_user_existing_mig_no_app_yes ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_18_p18_no_bash_hook_exists_project_existing_overwrite_yes ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_35_p35_bash_hook_user_existing_mig_no_app_no ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_50_p50_bash_hook_project_mig_no_app_no ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_29_p29_bash_hook_user_existing_mig_yes_app_yes ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_51_p51_bash_hook_project_existing_mig_no_app_no ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_38_p38_bash_no_hook_project_mig_yes_app_no ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_49_p49_bash_hook_project_existing_mig_no_app_yes ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_37_p37_bash_no_hook_project_existing_mig_yes_app_yes ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_41_p41_bash_no_hook_project_existing_mig_no_app_yes ... ok [INFO] [stdout] test optional_notation_and_path_ref::alternation_matches_any_variant::case_2_put ... ok [INFO] [stdout] test optional_notation_and_path_ref::alternation_matches_any_variant::case_1_post ... ok [INFO] [stdout] test optional_notation_and_path_ref::flag_with_value_position_independence::case_2_flag_after_url ... ok [INFO] [stdout] test optional_notation_and_path_ref::alternation_matches_any_variant::case_3_patch ... ok [INFO] [stdout] test migrate_config::migrate_single_file::case_4_skips_remote_extends ... ok [INFO] [stdout] test migrate_config::migrate_single_file::case_3_targets_specific_file ... ok [INFO] [stdout] test optional_notation_and_path_ref::flag_with_value_position_independence::case_1_flag_before_url ... ok [INFO] [stdout] test optional_notation_and_path_ref::flag_with_value_position_independence::case_7_equals_joined_long ... ok [INFO] [stdout] test optional_notation_and_path_ref::flag_with_value_position_independence::case_6_equals_joined_short ... ok [INFO] [stdout] test optional_notation_and_path_ref::flag_with_value_position_independence::case_5_flag_between_args ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_40_p40_bash_no_hook_project_mig_no_app_yes ... ok [INFO] [stdout] test optional_notation_and_path_ref::flag_with_value_position_independence::case_4_long_flag_after_url ... ok [INFO] [stdout] test optional_notation_and_path_ref::alternation_matches_any_variant::case_4_get ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_36_p36_bash_no_hook_project_mig_yes_app_yes ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_32_p32_bash_hook_user_mig_no_app_yes ... ok [INFO] [stdout] test optional_notation_and_path_ref::flag_with_value_position_independence::case_3_long_flag_before_url ... ok [INFO] [stdout] test optional_notation_and_path_ref::multiple_path_groups::case_3_safe_allowed ... ok [INFO] [stdout] test optional_notation_and_path_ref::multiple_path_groups::case_2_config_read_denied ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_33_p33_bash_hook_user_existing_mig_no_app_yes ... ok [INFO] [stdout] test optional_notation_and_path_ref::multiple_path_groups::case_1_log_read_denied ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_in_deny_rule::case_1_without_force ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_boolean_flag::case_1_without_f ... ok [INFO] [stdout] test optional_notation_and_path_ref::negation_matches_everything_except::case_1_post_denied ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_boolean_flag::case_2_with_f ... ok [INFO] [stdout] test init_wizard::scope_select_without_explicit_scope::case_2_select_project ... ok [INFO] [stdout] test init_wizard::scope_select_without_explicit_scope::case_1_select_user ... ok [INFO] [stdout] test migrate_config::migrate_follows_local_extends ... ok [INFO] [stdout] test optional_notation_and_path_ref::negation_matches_everything_except::case_3_get_not_matched ... ok [INFO] [stdout] test migrate_config::migrate_single_file::case_1_rewrites_legacy_sandbox_fs ... ok [INFO] [stdout] test optional_notation_and_path_ref::negation_matches_everything_except::case_2_delete_denied ... ok [INFO] [stdout] test init_wizard::exhaustive_wizard_test::case_39_p39_bash_no_hook_project_existing_mig_yes_app_no ... ok [INFO] [stdout] test migrate_config::migrate_single_file::case_2_no_changes_when_already_new_format ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_in_deny_rule::case_2_with_force ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_negation::case_1_force_push_main_denied ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_negation::case_2_force_push_master_denied ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_path_ref::case_3_safe_no_flag ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_value::case_7_equals_joined_wrong_value ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_value::case_4_with_wrong_value ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_path_ref::case_4_safe_with_flag ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_negation::case_3_force_push_develop_default ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_path_ref::case_2_sensitive_with_flag ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_value_equals_joined::case_2_equals_joined ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_value_equals_joined::case_4_sort_only ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_value_equals_joined::case_3_without_sort ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_wildcard_value::case_1_without_c ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_value_equals_joined::case_1_space_separated ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_value::case_6_equals_joined_long ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_path_ref::case_1_sensitive_no_flag ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_value::case_1_without_flag ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_negation::case_4_normal_push_main_default ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_value::case_2_with_short_flag ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_in_deny_rule::case_3_with_short_force ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_value::case_3_with_long_flag ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_value::case_5_equals_joined_short ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_wildcard_value::case_4_equals_joined ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_wildcard_value::case_3_with_c_different_path ... ok [INFO] [stdout] test optional_notation_and_path_ref::path_normalization_resolves_traversal::case_1_dotdot_resolves_to_match ... ok [INFO] [stdout] test optional_notation_and_path_ref::path_ref_matches_defined_paths::case_2_env_local ... ok [INFO] [stdout] test optional_notation_and_path_ref::path_ref_matches_defined_paths::case_5_safe_file ... ok [INFO] [stdout] test optional_notation_and_path_ref::path_normalization_resolves_traversal::case_2_dot_resolves_to_match ... ok [INFO] [stdout] test optional_notation_and_path_ref::optional_flag_with_wildcard_value::case_2_with_c ... ok [INFO] [stdout] test optional_notation_and_path_ref::path_ref_matches_defined_paths::case_1_env_file ... ok [INFO] [stdout] test optional_notation_and_path_ref::path_ref_matches_defined_paths::case_3_etc_passwd ... ok [INFO] [stdout] test optional_notation_and_path_ref::path_ref_with_alternation_command::case_2_less_sensitive_denied ... ok [INFO] [stdout] test optional_notation_and_path_ref::path_normalization_resolves_traversal::case_3_multiple_dotdot_resolves ... ok [INFO] [stdout] test optional_notation_and_path_ref::path_ref_with_alternation_command::case_1_cat_sensitive_denied ... ok [INFO] [stdout] test optional_notation_and_path_ref::path_normalization_resolves_traversal::case_5_unrelated_path_not_matched ... ok [INFO] [stdout] test optional_notation_and_path_ref::path_ref_with_alternation_command::case_5_vim_sensitive_default ... ok [INFO] [stdout] test optional_notation_and_path_ref::path_ref_matches_defined_paths::case_6_readme ... ok [INFO] [stdout] test optional_notation_and_path_ref::path_ref_with_alternation_command::case_4_cat_safe_default ... ok [INFO] [stdout] test optional_notation_and_path_ref::path_normalization_resolves_traversal::case_4_clean_path_still_matches ... ok [INFO] [stdout] test optional_notation_and_path_ref::path_ref_matches_defined_paths::case_4_etc_shadow ... ok [INFO] [stdout] test path_resolution::global_and_local_use_different_base_dirs ... ok [INFO] [stdout] test path_resolution::paths_resolved_relative_to_config_file::case_1_from_project_root ... ok [INFO] [stdout] test path_resolution::preset_paths_resolved_relative_to_preset_file ... ok [INFO] [stdout] test path_resolution::sandbox_paths_resolved_relative_to_config_file::case_1_from_project_root ... ok [INFO] [stdout] test path_resolution::sandbox_paths_resolved_relative_to_config_file::case_2_from_src ... ok [INFO] [stdout] test path_resolution::paths_resolved_relative_to_config_file::case_2_from_src ... ok [INFO] [stdout] test path_resolution::paths_resolved_relative_to_config_file::case_3_from_nested ... ok [INFO] [stdout] test optional_notation_and_path_ref::path_ref_with_alternation_command::case_3_head_sensitive_denied ... ok [INFO] [stdout] test property_based::prop_deny_propagation_compound ... ok [INFO] [stdout] test property_based::prop_deny_propagation_with_command_substitution ... ok [INFO] [stdout] test property_based::prop_escaped_star_suppresses_glob ... ok [INFO] [stdout] test property_based::prop_equals_equivalence_flag_with_wildcard_value ... ok [INFO] [stdout] test property_based::prop_flag_negation_after_literal_allows_when_absent ... ok [INFO] [stdout] test property_based::prop_equals_equivalence_flag_with_fixed_value ... ok [INFO] [stdout] test property_based::prop_compound_unmatched_subcmd_not_allowed ... ok [INFO] [stdout] test property_based::prop_flag_negation_after_literal_rejects_when_present ... ok [INFO] [stdout] test property_based::prop_equals_equivalence_optional_flag_with_value ... ok [INFO] [stdout] test property_based::prop_evaluate_command_compound_guard_all_allowed ... ok [INFO] [stdout] test property_based::prop_flag_negation_allows_when_absent ... ok [INFO] [stdout] test property_based::prop_alternation_matches_member ... ok [INFO] [stdout] test property_based::prop_equals_equivalence_flag_negation ... ok [INFO] [stdout] test property_based::prop_flag_negation_rejects_when_present ... ok [INFO] [stdout] test property_based::prop_flag_with_value_position_independence ... ok [INFO] [stdout] test property_based::prop_literal_exact_match ... ok [INFO] [stdout] test property_based::prop_glob_literal_matches ... ok [INFO] [stdout] test property_based::prop_flag_position_independence ... ok [INFO] [stdout] test property_based::prop_flag_negation_position_independence ... ok [INFO] [stdout] test property_based::prop_alternation_rejects_non_member ... ok [INFO] [stdout] test property_based::prop_literal_matches_with_multiple_flags_before ... ok [INFO] [stdout] test property_based::prop_compound_match_correctness ... ok [INFO] [stdout] test property_based::prop_evaluate_command_compound_guard_deny ... ok [INFO] [stdout] test property_based::prop_literal_rejects_different ... ok [INFO] [stdout] test property_based::prop_glob_literal_rejects_non_match ... ok [INFO] [stdout] test property_based::prop_no_panic_evaluate_command ... ok [INFO] [stdout] test property_based::prop_equals_equivalence_with_glob_value ... ok [INFO] [stdout] test property_based::prop_literal_matches_with_flags_before ... ok [INFO] [stdout] test property_based::prop_value_negation_rejects_matching_head ... ok [INFO] [stdout] test property_based::prop_optional_matches_without_flag ... ok [INFO] [stdout] test property_based::prop_wildcard_subsumes_any_args ... ok [INFO] [stdout] test property_based::prop_value_negation_allows_different_head ... ok [INFO] [stdout] test remote_preset_with_path::base_preset_aggregates_all_via_local_extends::case_1_cat_via_base ... ok [INFO] [stdout] test remote_preset_with_path::base_preset_aggregates_all_via_local_extends::case_2_git_log_via_base ... ok [INFO] [stdout] test property_based::prop_rule_order_independence ... ok [INFO] [stdout] test property_based::prop_quoted_literal_exact_match ... ok [INFO] [stdout] test remote_preset_with_path::base_preset_aggregates_all_via_local_extends::case_3_rm_not_via_base ... ok [INFO] [stdout] test remote_preset_with_path::definitions_preset_loads_wrappers ... ok [INFO] [stdout] test remote_preset_with_path::multiple_path_presets_all_rules_merged::case_1_cat_from_unix ... ok [INFO] [stdout] test remote_preset_with_path::multiple_path_presets_all_rules_merged::case_2_git_status_from_git ... ok [INFO] [stdout] test remote_preset_with_path::nonexistent_path_preset_produces_error ... ok [INFO] [stdout] test remote_preset_with_path::multiple_path_presets_all_rules_merged::case_3_git_diff_from_git ... ok [INFO] [stdout] test remote_preset_with_path::multiple_path_presets_all_rules_merged::case_4_ls_from_unix ... ok [INFO] [stdout] test remote_preset_with_path::multiple_path_presets_all_rules_merged::case_5_rm_not_in_any ... ok [INFO] [stdout] test remote_preset_with_path::single_path_preset_readonly_git::case_2_git_log_allowed ... ok [INFO] [stdout] test remote_preset_with_path::single_path_preset_readonly_git::case_3_git_diff_allowed ... ok [INFO] [stdout] test remote_preset_with_path::single_path_preset_readonly_git::case_4_git_branch_allowed ... ok [INFO] [stdout] test remote_preset_with_path::single_path_preset_readonly_git::case_5_git_add_not_allowed ... ok [INFO] [stdout] test remote_preset_with_path::single_path_preset_readonly_git::case_1_git_status_allowed ... ok [INFO] [stdout] test remote_preset_with_path::single_path_preset_readonly_git::case_6_git_commit_not_allowed ... ok [INFO] [stdout] test remote_preset_with_path::single_path_preset_readonly_unix::case_2_ls_allowed ... ok [INFO] [stdout] test remote_preset_with_path::single_path_preset_readonly_unix::case_3_grep_allowed ... ok [INFO] [stdout] test property_based::prop_optional_matches_with_flag ... ok [INFO] [stdout] test property_based::prop_wrapper_bash_c_unwraps ... ok [INFO] [stdout] test property_based::prop_quoted_star_acts_as_glob ... ok [INFO] [stdout] test remote_preset_with_path::single_path_preset_readonly_unix::case_8_rm_not_allowed ... ok [INFO] [stdout] test remote_preset_with_path::single_path_preset_readonly_git::case_7_git_push_not_allowed ... ok [INFO] [stdout] test remote_preset_with_path::single_path_preset_readonly_unix::case_1_cat_allowed ... ok [INFO] [stdout] test remote_preset_with_path::single_path_preset_readonly_unix::case_7_find_delete_excluded ... ok [INFO] [stdout] test remote_preset_with_path::single_path_preset_readonly_unix::case_9_curl_not_allowed ... ok [INFO] [stdout] test remote_preset_with_path::single_path_preset_readonly_unix::case_4_find_allowed ... ok [INFO] [stdout] test remote_preset_with_path::wrappers_evaluate_inner_commands::case_2_bash_c_rm_not_allowed ... ok [INFO] [stdout] test required_runok_version::direct_check_api::case_2_not_satisfies ... ok [INFO] [stdout] test required_runok_version::direct_check_api::case_1_satisfies ... ok [INFO] [stdout] test required_runok_version::direct_check_api::case_3_caret ... ok [INFO] [stdout] test required_runok_version::direct_check_api::case_4_upper_exclusive ... ok [INFO] [stdout] test remote_preset_with_path::wrappers_evaluate_inner_commands::case_3_sudo_cat_allowed ... ok [INFO] [stdout] test remote_preset_with_path::single_path_preset_readonly_unix::case_5_sed_readonly_allowed ... ok [INFO] [stdout] test required_runok_version::extends_chain_passes_when_child_constraint_is_loose ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_and_path_ref_coexist ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_command_position::case_1_command_position_literal_match ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_command_position::case_2_command_position_multi_word_match ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_command_position::case_3_command_position_no_match ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_command_position::case_4_command_position_path_type ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_command_position::case_5_command_position_with_wildcard_args ... ok [INFO] [stdout] test required_runok_version::invalid_requirement_in_extends_child_is_reported ... ok [INFO] [stdout] test required_runok_version::invalid_requirement_is_reported_with_source ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_command_position::case_6_command_position_shorter_value_listed_first ... ok [INFO] [stdout] test remote_preset_with_path::wrappers_evaluate_inner_commands::case_1_bash_c_cat_allowed ... ok [INFO] [stdout] test remote_preset_with_path::single_path_preset_readonly_unix::case_6_sed_inplace_excluded ... ok [INFO] [stdout] test remote_preset_with_path::user_deny_overrides_preset_allow ... ok [INFO] [stdout] test required_runok_version::load_local_preset_accepts_compatible_version ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_literal::case_1_literal_match ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_deny::case_2_deny_non_matching_var_falls_through ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_deny::case_1_deny_matching_var ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_literal::case_2_literal_second_value ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_literal::case_3_literal_no_match ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_literal::case_4_literal_explicit_type ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_path::case_2_path_dot_prefix ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_path::case_3_path_no_match ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_path::case_4_path_dotdot_resolution ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_per_value_type::case_1_per_value_typed_path_in_args ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_per_value_type::case_3_per_value_type_overrides_definition ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_per_value_type::case_2_per_value_plain_inherits_definition_type ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_path::case_1_path_exact ... ok [INFO] [stdout] test property_based::prop_wildcard_does_not_match_different_command ... ok [INFO] [stdout] test when_clause_rules::argument_condition_controls_rule::case_1_prod_url_denied ... ok [INFO] [stdout] test when_clause_rules::argument_condition_controls_rule::case_2_dev_url_default ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_when_clause_with_vars::case_1_var_value_matches_when_condition ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_when_clause_with_vars::case_4_var_with_has_guard_non_us_region_allowed ... ok [INFO] [stdout] test when_clause_rules::empty_args_size_guard::case_2_with_args_denied ... ok [INFO] [stdout] test when_clause_rules::empty_args_size_guard::case_1_no_args_allowed ... ok [INFO] [stdout] test when_clause_rules::env_variable_controls_rule_application::case_2_env_does_not_match_default ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_when_clause_with_vars::case_2_var_value_does_not_match_when_falls_through ... ok [INFO] [stdout] test when_clause_rules::env_variable_controls_rule_application::case_1_env_matches_deny ... ok [INFO] [stdout] test when_clause_rules::all_when_false_returns_default ... ok [INFO] [stdout] test var_ref_evaluation::var_ref_when_clause_with_vars::case_3_var_with_has_guard_and_starts_with ... ok [INFO] [stdout] test when_clause_rules::env_variable_missing_returns_error ... ok [INFO] [stdout] test when_clause_rules::hyphenated_flag_name_in_cel::case_2_without_no_verify ... ok [INFO] [stdout] test when_clause_rules::hyphenated_flag_name_in_cel::case_1_with_no_verify ... ok [INFO] [stdout] test when_clause_rules::env_variable_with_has_macro_handles_missing_key ... ok [INFO] [stdout] test when_clause_rules::flag_condition_with_flag_with_value_pattern::case_4_long_flag_get_default ... ok [INFO] [stdout] test when_clause_rules::flag_condition_with_flag_with_value_pattern::case_3_long_flag_post_denied ... ok [INFO] [stdout] test when_clause_rules::pipe_stdin_prevents_shell_execution::case_1_curl_pipe_sh_denied ... ok [INFO] [stdout] test when_clause_rules::pipe_stdin_prevents_shell_execution::case_2_sh_standalone_allowed ... ok [INFO] [stdout] test when_clause_rules::paths_in_when_clause::case_2_safe_path_default ... ok [INFO] [stdout] test when_clause_rules::flag_condition_with_flag_with_value_pattern::case_2_short_flag_get_default ... ok [INFO] [stdout] test when_clause_rules::redirect_count_check::case_1_with_redirect_allowed ... ok [INFO] [stdout] test when_clause_rules::redirect_count_check::case_2_no_redirect_denied ... ok [INFO] [stdout] test when_clause_rules::paths_in_when_clause::case_1_sensitive_path_denied ... ok [INFO] [stdout] test when_clause_rules::pipe_stdin_prevents_shell_execution::case_3_echo_pipe_bash_denied ... ok [INFO] [stdout] test when_clause_rules::flag_condition_with_flag_with_value_pattern::case_1_short_flag_post_denied ... ok [INFO] [stdout] test when_clause_rules::redirect_descriptor_check::case_2_stdout_redirect_default ... ok [INFO] [stdout] test when_clause_rules::redirect_descriptor_check::case_1_stderr_redirect_denied ... ok [INFO] [stdout] test when_clause_rules::multiple_rules_with_different_when_conditions ... ok [INFO] [stdout] test when_clause_rules::when_clause_compound_all_skipped_falls_back ... ok [INFO] [stdout] test when_clause_rules::redirect_output_exists::case_1_output_redirect_denied ... ok [INFO] [stdout] test when_clause_rules::redirect_output_exists_via_evaluate_command::case_1_output_redirect_denied ... ok [INFO] [stdout] test when_clause_rules::redirect_output_exists::case_2_no_redirect_default ... ok [INFO] [stdout] test when_clause_rules::redirect_output_exists_via_evaluate_command::case_2_no_redirect_default ... ok [INFO] [stdout] test when_clause_rules::redirect_target_starts_with::case_2_redirect_to_var_default ... ok [INFO] [stdout] test when_clause_rules::redirect_target_starts_with::case_1_redirect_to_tmp_allowed ... ok [INFO] [stdout] test when_clause_rules::when_clause_with_path_ref::case_2_sensitive_in_dev_default ... ok [INFO] [stdout] test when_clause_rules::when_clause_with_logical_or ... ok [INFO] [stdout] test when_clause_rules::when_clause_with_logical_and ... ok [INFO] [stdout] test when_clause_rules::when_clause_with_path_ref::case_3_safe_in_prod_default ... ok [INFO] [stdout] test when_clause_rules::when_skipped_deny_falls_back_to_allow ... ok [INFO] [stdout] test wrapper_recursive_evaluation::bare_env_prefix_evaluates_stripped_command::case_1_bare_env_prefix_allowed ... ok [INFO] [stdout] test wrapper_recursive_evaluation::bash_c_double_vs_single_quotes::case_1_single_quoted ... ok [INFO] [stdout] test when_clause_rules::when_satisfied_deny_wins_over_allow ... ok [INFO] [stdout] test when_clause_rules::when_clause_with_path_ref::case_1_sensitive_in_prod_denied ... ok [INFO] [stdout] test wrapper_recursive_evaluation::bare_env_prefix_evaluates_stripped_command::case_2_bare_env_prefix_denied ... ok [INFO] [stdout] test wrapper_recursive_evaluation::bash_c_double_vs_single_quotes::case_2_double_quoted ... ok [INFO] [stdout] test wrapper_recursive_evaluation::bash_c_wrapper_evaluates_inner::case_1_bash_c_curl_post_denied ... ok [INFO] [stdout] test wrapper_recursive_evaluation::cmd_placeholder_skips_flag_starting_tokens::case_2_command_uppercase_v_allow ... ok [INFO] [stdout] test wrapper_recursive_evaluation::cmd_placeholder_skips_flag_starting_tokens::case_1_command_v_allow ... ok [INFO] [stdout] test wrapper_recursive_evaluation::cmd_placeholder_skips_flag_starting_tokens::case_3_command_ls_wrapper_applies ... ok [INFO] [stdout] test wrapper_recursive_evaluation::compound_commands_inside_wrapper::case_2_compound_all_safe ... ok [INFO] [stdout] test wrapper_recursive_evaluation::compound_commands_inside_wrapper::case_1_compound_with_deny ... ok [INFO] [stdout] test when_clause_rules::when_clause_compound_different_results_per_subcommand ... ok [INFO] [stdout] test wrapper_recursive_evaluation::env_wrapper_evaluates_inner::case_2_env_var_rm_denied ... ok [INFO] [stdout] test wrapper_recursive_evaluation::deny_from_inner_wins_over_direct_allow ... ok [INFO] [stdout] test wrapper_recursive_evaluation::compound_in_wrapper_unmatched_uses_defaults_action ... ok [INFO] [stdout] test wrapper_recursive_evaluation::env_wrapper_evaluates_inner::case_3_env_multiple_vars ... ok [INFO] [stdout] test wrapper_recursive_evaluation::env_wrapper_evaluates_inner::case_1_env_var_echo_allowed ... ok [INFO] [stdout] test wrapper_recursive_evaluation::bash_c_wrapper_evaluates_inner::case_2_bash_c_curl_get_allowed ... ok [INFO] [stdout] test wrapper_recursive_evaluation::env_wrapper_evaluates_inner::case_4_env_var_unmatched_default ... ok [INFO] [stdout] test wrapper_recursive_evaluation::find_exec_wrapper_evaluates_inner::case_4_find_ok_rm_denied ... ok [INFO] [stdout] test wrapper_recursive_evaluation::find_exec_wrapper_evaluates_inner::case_6_find_exec_unmatched_default ... ok [INFO] [stdout] test wrapper_recursive_evaluation::find_exec_wrapper_evaluates_inner::case_2_find_exec_rm_denied_plus ... ok [INFO] [stdout] test wrapper_recursive_evaluation::find_exec_wrapper_evaluates_inner::case_3_find_execdir_echo_allowed ... ok [INFO] [stdout] test wrapper_recursive_evaluation::deeply_nested_wrappers_hit_recursion_limit ... ok [INFO] [stdout] test wrapper_recursive_evaluation::merge_results_all_branches::case_3_direct_ask_wrapper_deny ... ok [INFO] [stdout] test wrapper_recursive_evaluation::find_exec_wrapper_evaluates_inner::case_5_find_okdir_ls_allowed ... ok [INFO] [stdout] test wrapper_recursive_evaluation::merge_results_all_branches::case_5_direct_default_wrapper_deny ... ok [INFO] [stdout] test wrapper_recursive_evaluation::nested_wrappers_evaluate_recursively::case_1_sudo_bash_c_rm ... ok [INFO] [stdout] test wrapper_recursive_evaluation::merge_results_all_branches::case_4_direct_default_wrapper_allow ... ok [INFO] [stdout] test wrapper_recursive_evaluation::merge_results_all_branches::case_2_direct_allow_wrapper_deny ... ok [INFO] [stdout] test wrapper_recursive_evaluation::nested_wrappers_evaluate_recursively::case_2_sudo_sh_c_rm ... ok [INFO] [stdout] test wrapper_recursive_evaluation::nested_wrappers_evaluate_recursively::case_3_sudo_bash_c_safe ... ok [INFO] [stdout] test wrapper_recursive_evaluation::opts_wrapper_consumes_flags::case_1_opts_single_flag ... ok [INFO] [stdout] test wrapper_recursive_evaluation::opts_wrapper_consumes_flags::case_7_opts_digit_flag_self_contained ... ok [INFO] [stdout] test wrapper_recursive_evaluation::opts_wrapper_consumes_flags::case_2_opts_flag_rm_denied ... ok [INFO] [stdout] test wrapper_recursive_evaluation::find_exec_wrapper_evaluates_inner::case_1_find_exec_rm_denied_semicolon ... ok [INFO] [stdout] test wrapper_recursive_evaluation::opts_wrapper_consumes_flags::case_3_opts_no_flags ... ok [INFO] [stdout] test wrapper_recursive_evaluation::opts_wrapper_consumes_flags::case_4_opts_multiple_flags ... ok [INFO] [stdout] test wrapper_recursive_evaluation::opts_wrapper_consumes_flags::case_5_opts_flag_with_separate_arg ... ok [INFO] [stdout] test wrapper_recursive_evaluation::opts_wrapper_consumes_flags::case_8_opts_end_of_options ... ok [INFO] [stdout] test wrapper_recursive_evaluation::opts_wrapper_consumes_flags::case_9_opts_flags_then_end_of_options ... ok [INFO] [stdout] test wrapper_recursive_evaluation::opts_wrapper_with_defaults_action_deny ... ok [INFO] [stdout] test wrapper_recursive_evaluation::opts_wrapper_consumes_flags::case_6_opts_mixed_flags_and_args ... ok [INFO] [stdout] test wrapper_recursive_evaluation::sudo_subshell_wrapper_evaluates_inner::case_1_sudo_subshell_single ... ok [INFO] [stdout] test wrapper_recursive_evaluation::sudo_subshell_wrapper_evaluates_inner::case_2_sudo_subshell_pipeline ... ok [INFO] [stdout] test wrapper_recursive_evaluation::sudo_subshell_wrapper_evaluates_inner::case_3_sudo_subshell_inner_deny ... ok [INFO] [stdout] test wrapper_recursive_evaluation::sudo_wrapper_evaluates_inner::case_2_sudo_safe_allowed ... ok [INFO] [stdout] test wrapper_recursive_evaluation::sudo_wrapper_evaluates_inner::case_3_sudo_unmatched_default ... ok [INFO] [stdout] test wrapper_recursive_evaluation::sudo_wrapper_evaluates_inner::case_1_sudo_rm_denied ... ok [INFO] [stdout] test wrapper_recursive_evaluation::time_subshell_wrapper_evaluates_inner::case_2_time_subshell_single ... ok [INFO] [stdout] test wrapper_recursive_evaluation::time_subshell_wrapper_evaluates_inner::case_3_time_subshell_single_multi_arg ... ok [INFO] [stdout] test wrapper_recursive_evaluation::time_subshell_wrapper_evaluates_inner::case_1_time_plain ... ok [INFO] [stdout] test wrapper_recursive_evaluation::time_subshell_wrapper_evaluates_inner::case_6_time_subshell_redirect_pipeline ... ok [INFO] [stdout] test wrapper_recursive_evaluation::time_subshell_wrapper_evaluates_inner::case_4_time_subshell_pipeline ... ok [INFO] [stdout] test wrapper_recursive_evaluation::time_subshell_wrapper_evaluates_inner::case_8_time_subshell_inner_deny ... ok [INFO] [stdout] test wrapper_recursive_evaluation::vars_wrapper_consumes_assignments::case_1_vars_single ... ok [INFO] [stdout] test wrapper_recursive_evaluation::vars_wrapper_consumes_assignments::case_2_vars_multiple ... ok [INFO] [stdout] test wrapper_recursive_evaluation::time_subshell_wrapper_evaluates_inner::case_7_time_subshell_and_list ... ok [INFO] [stdout] test wrapper_recursive_evaluation::time_subshell_wrapper_evaluates_inner::case_9_time_subshell_inner_deny_mixed ... ok [INFO] [stdout] test wrapper_recursive_evaluation::time_subshell_wrapper_evaluates_inner::case_5_time_subshell_pipeline_multi_arg ... ok [INFO] [stdout] test wrapper_recursive_evaluation::vars_wrapper_consumes_assignments::case_4_vars_with_opts ... ok [INFO] [stdout] test wrapper_recursive_evaluation::vars_wrapper_consumes_assignments::case_5_vars_with_opts_rm_denied ... ok [INFO] [stdout] test wrapper_recursive_evaluation::wildcard_wrapper_greedy_consumes_flags::case_3_xargs_no_flags_echo_allowed ... ok [INFO] [stdout] test wrapper_recursive_evaluation::without_wrappers_sudo_is_not_unwrapped ... ok [INFO] [stdout] test wrapper_recursive_evaluation::wildcard_wrapper_greedy_consumes_flags::case_4_xargs_multiple_flags_echo_allowed ... ok [INFO] [stdout] test wrapper_recursive_evaluation::when_clause_with_wrapper ... ok [INFO] [stdout] test wrapper_recursive_evaluation::merge_results_all_branches::case_1_direct_allow_wrapper_ask ... ok [INFO] [stdout] test wrapper_recursive_evaluation::wrapper_compound_with_sandbox ... ok [INFO] [stdout] test wrapper_recursive_evaluation::wrapper_direct_rule_overrides_inner_sandbox ... ok [INFO] [stdout] test wrapper_recursive_evaluation::wrapper_inner_compound_all_sub_wrappers_allowed ... ok [INFO] [stdout] test wrapper_recursive_evaluation::wrapper_inner_compound_with_sub_wrappers ... ok [INFO] [stdout] test wrapper_recursive_evaluation::wrapper_preserves_quoted_arguments ... ok [INFO] [stdout] test wrapper_recursive_evaluation::wrapper_preserves_inner_sandbox_preset ... ok [INFO] [stdout] test wrapper_recursive_evaluation::wrapper_depth_exactly_at_limit_succeeds ... ok [INFO] [stdout] test wrapper_recursive_evaluation::wrapper_depth_one_over_limit_fails ... ok [INFO] [stdout] test wrapper_recursive_evaluation::wrapper_without_cmd_placeholder_no_recurse ... ok [INFO] [stdout] test wrapper_recursive_evaluation::vars_wrapper_consumes_assignments::case_3_vars_none ... ok [INFO] [stdout] test wrapper_recursive_evaluation::wildcard_wrapper_greedy_consumes_flags::case_2_xargs_flags_rm_denied ... ok [INFO] [stdout] test wrapper_recursive_evaluation::wildcard_wrapper_greedy_consumes_flags::case_1_xargs_flags_echo_allowed ... ok [INFO] [stdout] test property_based::prop_no_panic_evaluate_compound ... ok [INFO] [stdout] test property_based::prop_wrapper_compound_inner_deny_propagates ... ok [INFO] [stdout] test property_based::prop_wrapper_sudo_unwraps ... ok [INFO] [stdout] test property_based::prop_no_panic_evaluate_command_with_compound ... ok [INFO] [stdout] test property_based::prop_wrapper_nested_unwraps ... ok [INFO] [stdout] test property_based::prop_flag_with_glob_value_position_independence ... ok [INFO] [stdout] test property_based::prop_no_panic_wrapper_evaluation ... ok [INFO] [stdout] test property_based::prop_wrapper_deep_nesting_hits_depth_guard ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 601 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.61s [INFO] [stdout] [INFO] [stderr] Running tests/sandbox_verification_linux.rs (/opt/rustwide/target/debug/deps/sandbox_verification_linux-d70abaa1e71a9d87) [INFO] [stdout] [INFO] [stdout] running 10 tests [INFO] [stdout] test sandbox_denies_write_to_read_only_subpath ... ok [INFO] [stdout] test sandbox_denies_write_outside_writable_roots ... ok [INFO] [stdout] test sandbox_preserves_nonzero_exit_code ... ok [INFO] [stdout] test sandbox_denies_network_when_not_allowed ... ok [INFO] [stdout] test sandbox_runs_command_successfully ... FAILED [INFO] [stdout] test sandbox_allows_write_to_writable_root ... FAILED [INFO] [stdout] test sandbox_read_deny_blocks_file_access::case_2_ssh_dir ... FAILED [INFO] [stdout] test sandbox_allows_read_when_writes_denied ... FAILED [INFO] [stdout] test sandbox_allows_write_outside_read_only_subpath ... FAILED [INFO] [stdout] test sandbox_read_deny_blocks_file_access::case_1_file_in_denied_dir ... FAILED [INFO] [stdout] [INFO] [stdout] failures: [INFO] [stdout] [INFO] [stdout] ---- sandbox_runs_command_successfully stdout ---- [INFO] [stdout] [INFO] [stdout] thread 'sandbox_runs_command_successfully' (2861) panicked at tests/sandbox_verification_linux.rs:296:5: [INFO] [stdout] assertion `left == right` failed: simple command should succeed in sandbox [INFO] [stdout] left: 1 [INFO] [stdout] right: 0 [INFO] [stdout] stack backtrace: [INFO] [stdout] 0: 0x59b660f1ed8a - std[31e582c13f4e914f]::backtrace_rs::backtrace::libunwind::trace [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9 [INFO] [stdout] 1: 0x59b660f1ed8a - std[31e582c13f4e914f]::backtrace_rs::backtrace::trace_unsynchronized:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14 [INFO] [stdout] 2: 0x59b660f1ed8a - std[31e582c13f4e914f]::sys::backtrace::_print_fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:74:9 [INFO] [stdout] 3: 0x59b660f1ed8a - <::print::DisplayBacktrace as core[fa0eadad68403074]::fmt::Display>::fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:44:26 [INFO] [stdout] 4: 0x59b660f32b5a - ::fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/fmt/rt.rs:152:76 [INFO] [stdout] 5: 0x59b660f32b5a - core[fa0eadad68403074]::fmt::write [INFO] [stdout] 6: 0x59b660f23712 - std[31e582c13f4e914f]::io::default_write_fmt::> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/io/mod.rs:639:11 [INFO] [stdout] 7: 0x59b660f23712 - as std[31e582c13f4e914f]::io::Write>::write_fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/io/mod.rs:1994:13 [INFO] [stdout] 8: 0x59b660efc78f - ::print [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:47:9 [INFO] [stdout] 9: 0x59b660efc78f - std[31e582c13f4e914f]::panicking::default_hook::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:292:27 [INFO] [stdout] 10: 0x59b660f16a59 - std[31e582c13f4e914f]::panicking::default_hook [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:316:9 [INFO] [stdout] 11: 0x59b660e981fc - core[fa0eadad68403074]::ops::function::Fn<(&'a std[31e582c13f4e914f]::panic::PanicHookInfo<'b>,), Output = ()> + core[fa0eadad68403074]::marker::Sync + core[fa0eadad68403074]::marker::Send> as core[fa0eadad68403074]::ops::function::Fn<(&std[31e582c13f4e914f]::panic::PanicHookInfo,)>>::call [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/alloc/src/boxed.rs:2254:9 [INFO] [stdout] 12: 0x59b660e981fc - test[7530e63dc052480e]::test_main_with_exit_callback::::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:145:21 [INFO] [stdout] 13: 0x59b660f16c12 - core[fa0eadad68403074]::ops::function::Fn<(&'a std[31e582c13f4e914f]::panic::PanicHookInfo<'b>,), Output = ()> + core[fa0eadad68403074]::marker::Sync + core[fa0eadad68403074]::marker::Send> as core[fa0eadad68403074]::ops::function::Fn<(&std[31e582c13f4e914f]::panic::PanicHookInfo,)>>::call [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/alloc/src/boxed.rs:2254:9 [INFO] [stdout] 14: 0x59b660f16c12 - std[31e582c13f4e914f]::panicking::panic_with_hook [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:833:13 [INFO] [stdout] 15: 0x59b660efc848 - std[31e582c13f4e914f]::panicking::panic_handler::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:698:13 [INFO] [stdout] 16: 0x59b660ef1979 - std[31e582c13f4e914f]::sys::backtrace::__rust_end_short_backtrace:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:182:18 [INFO] [stdout] 17: 0x59b660efd55d - __rustc[fc8e3a9f23f26cb]::rust_begin_unwind [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:689:5 [INFO] [stdout] 18: 0x59b660f332ec - core[fa0eadad68403074]::panicking::panic_fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panicking.rs:80:14 [INFO] [stdout] 19: 0x59b660f33203 - core[fa0eadad68403074]::panicking::assert_failed_inner [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panicking.rs:434:23 [INFO] [stdout] 20: 0x59b660ed6239 - core[fa0eadad68403074]::panicking::assert_failed:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panicking.rs:394:5 [INFO] [stdout] 21: 0x59b660e8829e - sandbox_verification_linux[a32be68a98c6dc62]::sandbox_runs_command_successfully::sandbox_runs_command_successfully [INFO] [stdout] at /opt/rustwide/workdir/tests/sandbox_verification_linux.rs:296:5 [INFO] [stdout] 22: 0x59b660e87566 - sandbox_verification_linux[a32be68a98c6dc62]::sandbox_runs_command_successfully [INFO] [stdout] at /opt/rustwide/workdir/tests/sandbox_verification_linux.rs:283:1 [INFO] [stdout] 23: 0x59b660e85aa7 - sandbox_verification_linux[a32be68a98c6dc62]::sandbox_runs_command_successfully::{closure#0} [INFO] [stdout] at /opt/rustwide/workdir/tests/sandbox_verification_linux.rs:283:10 [INFO] [stdout] 24: 0x59b660e8bff6 - >::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 25: 0x59b660e8c2db - core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String> as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 26: 0x59b660e8c2db - test[7530e63dc052480e]::__rust_begin_short_backtrace::, fn() -> core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:663:18 [INFO] [stdout] 27: 0x59b660e98ccb - test[7530e63dc052480e]::run_test_in_process::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:686:74 [INFO] [stdout] 28: 0x59b660e98ccb - as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panic/unwind_safe.rs:275:9 [INFO] [stdout] 29: 0x59b660e98ccb - std[31e582c13f4e914f]::panicking::catch_unwind::do_call::, core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:581:40 [INFO] [stdout] 30: 0x59b660e98ccb - std[31e582c13f4e914f]::panicking::catch_unwind::, core[fa0eadad68403074]::panic::unwind_safe::AssertUnwindSafe> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:544:19 [INFO] [stdout] 31: 0x59b660e98ccb - std[31e582c13f4e914f]::panic::catch_unwind::, core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panic.rs:359:14 [INFO] [stdout] 32: 0x59b660e98ccb - test[7530e63dc052480e]::run_test_in_process [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:686:27 [INFO] [stdout] 33: 0x59b660e98ccb - test[7530e63dc052480e]::run_test::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:607:43 [INFO] [stdout] 34: 0x59b660e93124 - test[7530e63dc052480e]::run_test::{closure#1} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:637:41 [INFO] [stdout] 35: 0x59b660e93124 - std[31e582c13f4e914f]::sys::backtrace::__rust_begin_short_backtrace:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:166:18 [INFO] [stdout] 36: 0x59b660e9b8d2 - std[31e582c13f4e914f]::thread::lifecycle::spawn_unchecked::::{closure#1}::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/thread/lifecycle.rs:91:13 [INFO] [stdout] 37: 0x59b660e9b8d2 - ::{closure#1}::{closure#0}> as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panic/unwind_safe.rs:275:9 [INFO] [stdout] 38: 0x59b660e9b8d2 - std[31e582c13f4e914f]::panicking::catch_unwind::do_call::::{closure#1}::{closure#0}>, ()> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:581:40 [INFO] [stdout] 39: 0x59b660e9b8d2 - std[31e582c13f4e914f]::panicking::catch_unwind::<(), core[fa0eadad68403074]::panic::unwind_safe::AssertUnwindSafe::{closure#1}::{closure#0}>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:544:19 [INFO] [stdout] 40: 0x59b660e9b8d2 - std[31e582c13f4e914f]::panic::catch_unwind::::{closure#1}::{closure#0}>, ()> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panic.rs:359:14 [INFO] [stdout] 41: 0x59b660e9b8d2 - std[31e582c13f4e914f]::thread::lifecycle::spawn_unchecked::::{closure#1} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/thread/lifecycle.rs:89:26 [INFO] [stdout] 42: 0x59b660e9b8d2 - ::{closure#1} as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 43: 0x59b660f1e4cf - + core[fa0eadad68403074]::marker::Send> as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/alloc/src/boxed.rs:2240:9 [INFO] [stdout] 44: 0x59b660f1e4cf - ::new::thread_start [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/thread/unix.rs:118:17 [INFO] [stdout] 45: 0x7e1717d50aa4 - [INFO] [stdout] 46: 0x7e1717ddda64 - clone [INFO] [stdout] 47: 0x0 - [INFO] [stdout] [INFO] [stdout] ---- sandbox_allows_write_to_writable_root stdout ---- [INFO] [stdout] [INFO] [stdout] thread 'sandbox_allows_write_to_writable_root' (2852) panicked at tests/sandbox_verification_linux.rs:105:5: [INFO] [stdout] assertion `left == right` failed: write should succeed in writable_root [INFO] [stdout] left: 1 [INFO] [stdout] right: 0 [INFO] [stdout] stack backtrace: [INFO] [stdout] 0: 0x59b660f1ed8a - std[31e582c13f4e914f]::backtrace_rs::backtrace::libunwind::trace [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9 [INFO] [stdout] 1: 0x59b660f1ed8a - std[31e582c13f4e914f]::backtrace_rs::backtrace::trace_unsynchronized:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14 [INFO] [stdout] 2: 0x59b660f1ed8a - std[31e582c13f4e914f]::sys::backtrace::_print_fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:74:9 [INFO] [stdout] 3: 0x59b660f1ed8a - <::print::DisplayBacktrace as core[fa0eadad68403074]::fmt::Display>::fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:44:26 [INFO] [stdout] 4: 0x59b660f32b5a - ::fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/fmt/rt.rs:152:76 [INFO] [stdout] 5: 0x59b660f32b5a - core[fa0eadad68403074]::fmt::write [INFO] [stdout] 6: 0x59b660f23712 - std[31e582c13f4e914f]::io::default_write_fmt::> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/io/mod.rs:639:11 [INFO] [stdout] 7: 0x59b660f23712 - as std[31e582c13f4e914f]::io::Write>::write_fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/io/mod.rs:1994:13 [INFO] [stdout] 8: 0x59b660efc78f - ::print [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:47:9 [INFO] [stdout] 9: 0x59b660efc78f - std[31e582c13f4e914f]::panicking::default_hook::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:292:27 [INFO] [stdout] 10: 0x59b660f16a59 - std[31e582c13f4e914f]::panicking::default_hook [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:316:9 [INFO] [stdout] 11: 0x59b660e981fc - core[fa0eadad68403074]::ops::function::Fn<(&'a std[31e582c13f4e914f]::panic::PanicHookInfo<'b>,), Output = ()> + core[fa0eadad68403074]::marker::Sync + core[fa0eadad68403074]::marker::Send> as core[fa0eadad68403074]::ops::function::Fn<(&std[31e582c13f4e914f]::panic::PanicHookInfo,)>>::call [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/alloc/src/boxed.rs:2254:9 [INFO] [stdout] 12: 0x59b660e981fc - test[7530e63dc052480e]::test_main_with_exit_callback::::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:145:21 [INFO] [stdout] 13: 0x59b660f16c12 - core[fa0eadad68403074]::ops::function::Fn<(&'a std[31e582c13f4e914f]::panic::PanicHookInfo<'b>,), Output = ()> + core[fa0eadad68403074]::marker::Sync + core[fa0eadad68403074]::marker::Send> as core[fa0eadad68403074]::ops::function::Fn<(&std[31e582c13f4e914f]::panic::PanicHookInfo,)>>::call [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/alloc/src/boxed.rs:2254:9 [INFO] [stdout] 14: 0x59b660f16c12 - std[31e582c13f4e914f]::panicking::panic_with_hook [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:833:13 [INFO] [stdout] 15: 0x59b660efc848 - std[31e582c13f4e914f]::panicking::panic_handler::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:698:13 [INFO] [stdout] 16: 0x59b660ef1979 - std[31e582c13f4e914f]::sys::backtrace::__rust_end_short_backtrace:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:182:18 [INFO] [stdout] 17: 0x59b660efd55d - __rustc[fc8e3a9f23f26cb]::rust_begin_unwind [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:689:5 [INFO] [stdout] 18: 0x59b660f332ec - core[fa0eadad68403074]::panicking::panic_fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panicking.rs:80:14 [INFO] [stdout] 19: 0x59b660f33203 - core[fa0eadad68403074]::panicking::assert_failed_inner [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panicking.rs:434:23 [INFO] [stdout] 20: 0x59b660ed6239 - core[fa0eadad68403074]::panicking::assert_failed:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panicking.rs:394:5 [INFO] [stdout] 21: 0x59b660e88cc0 - sandbox_verification_linux[a32be68a98c6dc62]::sandbox_allows_write_to_writable_root::sandbox_allows_write_to_writable_root [INFO] [stdout] at /opt/rustwide/workdir/tests/sandbox_verification_linux.rs:105:5 [INFO] [stdout] 22: 0x59b660e87586 - sandbox_verification_linux[a32be68a98c6dc62]::sandbox_allows_write_to_writable_root [INFO] [stdout] at /opt/rustwide/workdir/tests/sandbox_verification_linux.rs:89:1 [INFO] [stdout] 23: 0x59b660e85b07 - sandbox_verification_linux[a32be68a98c6dc62]::sandbox_allows_write_to_writable_root::{closure#0} [INFO] [stdout] at /opt/rustwide/workdir/tests/sandbox_verification_linux.rs:89:10 [INFO] [stdout] 24: 0x59b660e8c076 - >::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 25: 0x59b660e8c2db - core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String> as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 26: 0x59b660e8c2db - test[7530e63dc052480e]::__rust_begin_short_backtrace::, fn() -> core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:663:18 [INFO] [stdout] 27: 0x59b660e98ccb - test[7530e63dc052480e]::run_test_in_process::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:686:74 [INFO] [stdout] 28: 0x59b660e98ccb - as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panic/unwind_safe.rs:275:9 [INFO] [stdout] 29: 0x59b660e98ccb - std[31e582c13f4e914f]::panicking::catch_unwind::do_call::, core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:581:40 [INFO] [stdout] 30: 0x59b660e98ccb - std[31e582c13f4e914f]::panicking::catch_unwind::, core[fa0eadad68403074]::panic::unwind_safe::AssertUnwindSafe> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:544:19 [INFO] [stdout] 31: 0x59b660e98ccb - std[31e582c13f4e914f]::panic::catch_unwind::, core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panic.rs:359:14 [INFO] [stdout] 32: 0x59b660e98ccb - test[7530e63dc052480e]::run_test_in_process [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:686:27 [INFO] [stdout] 33: 0x59b660e98ccb - test[7530e63dc052480e]::run_test::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:607:43 [INFO] [stdout] 34: 0x59b660e93124 - test[7530e63dc052480e]::run_test::{closure#1} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:637:41 [INFO] [stdout] 35: 0x59b660e93124 - std[31e582c13f4e914f]::sys::backtrace::__rust_begin_short_backtrace:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:166:18 [INFO] [stdout] 36: 0x59b660e9b8d2 - std[31e582c13f4e914f]::thread::lifecycle::spawn_unchecked::::{closure#1}::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/thread/lifecycle.rs:91:13 [INFO] [stdout] 37: 0x59b660e9b8d2 - ::{closure#1}::{closure#0}> as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panic/unwind_safe.rs:275:9 [INFO] [stdout] 38: 0x59b660e9b8d2 - std[31e582c13f4e914f]::panicking::catch_unwind::do_call::::{closure#1}::{closure#0}>, ()> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:581:40 [INFO] [stdout] 39: 0x59b660e9b8d2 - std[31e582c13f4e914f]::panicking::catch_unwind::<(), core[fa0eadad68403074]::panic::unwind_safe::AssertUnwindSafe::{closure#1}::{closure#0}>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:544:19 [INFO] [stdout] 40: 0x59b660e9b8d2 - std[31e582c13f4e914f]::panic::catch_unwind::::{closure#1}::{closure#0}>, ()> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panic.rs:359:14 [INFO] [stdout] 41: 0x59b660e9b8d2 - std[31e582c13f4e914f]::thread::lifecycle::spawn_unchecked::::{closure#1} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/thread/lifecycle.rs:89:26 [INFO] [stdout] 42: 0x59b660e9b8d2 - ::{closure#1} as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 43: 0x59b660f1e4cf - + core[fa0eadad68403074]::marker::Send> as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/alloc/src/boxed.rs:2240:9 [INFO] [stdout] 44: 0x59b660f1e4cf - ::new::thread_start [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/thread/unix.rs:118:17 [INFO] [stdout] 45: 0x7e1717d50aa4 - [INFO] [stdout] 46: 0x7e1717ddda64 - clone [INFO] [stdout] 47: 0x0 - [INFO] [stdout] [INFO] [stdout] ---- sandbox_read_deny_blocks_file_access::case_2_ssh_dir stdout ---- [INFO] [stdout] [INFO] [stdout] thread 'sandbox_read_deny_blocks_file_access::case_2_ssh_dir' (2860) panicked at tests/sandbox_verification_linux.rs:275:5: [INFO] [stdout] assertion `left == right` failed: reading file outside denied dir should succeed [INFO] [stdout] left: 1 [INFO] [stdout] right: 0 [INFO] [stdout] stack backtrace: [INFO] [stdout] 0: 0x59b660f1ed8a - std[31e582c13f4e914f]::backtrace_rs::backtrace::libunwind::trace [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9 [INFO] [stdout] 1: 0x59b660f1ed8a - std[31e582c13f4e914f]::backtrace_rs::backtrace::trace_unsynchronized:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14 [INFO] [stdout] 2: 0x59b660f1ed8a - std[31e582c13f4e914f]::sys::backtrace::_print_fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:74:9 [INFO] [stdout] 3: 0x59b660f1ed8a - <::print::DisplayBacktrace as core[fa0eadad68403074]::fmt::Display>::fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:44:26 [INFO] [stdout] 4: 0x59b660f32b5a - ::fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/fmt/rt.rs:152:76 [INFO] [stdout] 5: 0x59b660f32b5a - core[fa0eadad68403074]::fmt::write [INFO] [stdout] 6: 0x59b660f23712 - std[31e582c13f4e914f]::io::default_write_fmt::> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/io/mod.rs:639:11 [INFO] [stdout] 7: 0x59b660f23712 - as std[31e582c13f4e914f]::io::Write>::write_fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/io/mod.rs:1994:13 [INFO] [stdout] 8: 0x59b660efc78f - ::print [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:47:9 [INFO] [stdout] 9: 0x59b660efc78f - std[31e582c13f4e914f]::panicking::default_hook::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:292:27 [INFO] [stdout] 10: 0x59b660f16a59 - std[31e582c13f4e914f]::panicking::default_hook [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:316:9 [INFO] [stdout] 11: 0x59b660e981fc - core[fa0eadad68403074]::ops::function::Fn<(&'a std[31e582c13f4e914f]::panic::PanicHookInfo<'b>,), Output = ()> + core[fa0eadad68403074]::marker::Sync + core[fa0eadad68403074]::marker::Send> as core[fa0eadad68403074]::ops::function::Fn<(&std[31e582c13f4e914f]::panic::PanicHookInfo,)>>::call [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/alloc/src/boxed.rs:2254:9 [INFO] [stdout] 12: 0x59b660e981fc - test[7530e63dc052480e]::test_main_with_exit_callback::::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:145:21 [INFO] [stdout] 13: 0x59b660f16c12 - core[fa0eadad68403074]::ops::function::Fn<(&'a std[31e582c13f4e914f]::panic::PanicHookInfo<'b>,), Output = ()> + core[fa0eadad68403074]::marker::Sync + core[fa0eadad68403074]::marker::Send> as core[fa0eadad68403074]::ops::function::Fn<(&std[31e582c13f4e914f]::panic::PanicHookInfo,)>>::call [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/alloc/src/boxed.rs:2254:9 [INFO] [stdout] 14: 0x59b660f16c12 - std[31e582c13f4e914f]::panicking::panic_with_hook [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:833:13 [INFO] [stdout] 15: 0x59b660efc848 - std[31e582c13f4e914f]::panicking::panic_handler::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:698:13 [INFO] [stdout] 16: 0x59b660ef1979 - std[31e582c13f4e914f]::sys::backtrace::__rust_end_short_backtrace:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:182:18 [INFO] [stdout] 17: 0x59b660efd55d - __rustc[fc8e3a9f23f26cb]::rust_begin_unwind [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:689:5 [INFO] [stdout] 18: 0x59b660f332ec - core[fa0eadad68403074]::panicking::panic_fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panicking.rs:80:14 [INFO] [stdout] 19: 0x59b660f33203 - core[fa0eadad68403074]::panicking::assert_failed_inner [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panicking.rs:434:23 [INFO] [stdout] 20: 0x59b660ed6239 - core[fa0eadad68403074]::panicking::assert_failed:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panicking.rs:394:5 [INFO] [stdout] 21: 0x59b660e8746a - sandbox_verification_linux[a32be68a98c6dc62]::sandbox_read_deny_blocks_file_access [INFO] [stdout] at /opt/rustwide/workdir/tests/sandbox_verification_linux.rs:275:5 [INFO] [stdout] 22: 0x59b660e87c7e - sandbox_verification_linux[a32be68a98c6dc62]::sandbox_read_deny_blocks_file_access::case_2_ssh_dir [INFO] [stdout] at /opt/rustwide/workdir/tests/sandbox_verification_linux.rs:238:1 [INFO] [stdout] 23: 0x59b660e85c27 - sandbox_verification_linux[a32be68a98c6dc62]::sandbox_read_deny_blocks_file_access::case_2_ssh_dir::{closure#0} [INFO] [stdout] at /opt/rustwide/workdir/tests/sandbox_verification_linux.rs:238:10 [INFO] [stdout] 24: 0x59b660e8c1f6 - >::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 25: 0x59b660e8c2db - core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String> as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 26: 0x59b660e8c2db - test[7530e63dc052480e]::__rust_begin_short_backtrace::, fn() -> core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:663:18 [INFO] [stdout] 27: 0x59b660e98ccb - test[7530e63dc052480e]::run_test_in_process::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:686:74 [INFO] [stdout] 28: 0x59b660e98ccb - as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panic/unwind_safe.rs:275:9 [INFO] [stdout] 29: 0x59b660e98ccb - std[31e582c13f4e914f]::panicking::catch_unwind::do_call::, core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:581:40 [INFO] [stdout] 30: 0x59b660e98ccb - std[31e582c13f4e914f]::panicking::catch_unwind::, core[fa0eadad68403074]::panic::unwind_safe::AssertUnwindSafe> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:544:19 [INFO] [stdout] 31: 0x59b660e98ccb - std[31e582c13f4e914f]::panic::catch_unwind::, core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panic.rs:359:14 [INFO] [stdout] 32: 0x59b660e98ccb - test[7530e63dc052480e]::run_test_in_process [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:686:27 [INFO] [stdout] 33: 0x59b660e98ccb - test[7530e63dc052480e]::run_test::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:607:43 [INFO] [stdout] 34: 0x59b660e93124 - test[7530e63dc052480e]::run_test::{closure#1} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:637:41 [INFO] [stdout] 35: 0x59b660e93124 - std[31e582c13f4e914f]::sys::backtrace::__rust_begin_short_backtrace:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:166:18 [INFO] [stdout] 36: 0x59b660e9b8d2 - std[31e582c13f4e914f]::thread::lifecycle::spawn_unchecked::::{closure#1}::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/thread/lifecycle.rs:91:13 [INFO] [stdout] 37: 0x59b660e9b8d2 - ::{closure#1}::{closure#0}> as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panic/unwind_safe.rs:275:9 [INFO] [stdout] 38: 0x59b660e9b8d2 - std[31e582c13f4e914f]::panicking::catch_unwind::do_call::::{closure#1}::{closure#0}>, ()> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:581:40 [INFO] [stdout] 39: 0x59b660e9b8d2 - std[31e582c13f4e914f]::panicking::catch_unwind::<(), core[fa0eadad68403074]::panic::unwind_safe::AssertUnwindSafe::{closure#1}::{closure#0}>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:544:19 [INFO] [stdout] 40: 0x59b660e9b8d2 - std[31e582c13f4e914f]::panic::catch_unwind::::{closure#1}::{closure#0}>, ()> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panic.rs:359:14 [INFO] [stdout] 41: 0x59b660e9b8d2 - std[31e582c13f4e914f]::thread::lifecycle::spawn_unchecked::::{closure#1} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/thread/lifecycle.rs:89:26 [INFO] [stdout] 42: 0x59b660e9b8d2 - ::{closure#1} as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 43: 0x59b660f1e4cf - + core[fa0eadad68403074]::marker::Send> as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/alloc/src/boxed.rs:2240:9 [INFO] [stdout] 44: 0x59b660f1e4cf - ::new::thread_start [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/thread/unix.rs:118:17 [INFO] [stdout] 45: 0x7e1717d50aa4 - [INFO] [stdout] 46: 0x7e1717ddda64 - clone [INFO] [stdout] 47: 0x0 - [INFO] [stdout] [INFO] [stdout] ---- sandbox_allows_read_when_writes_denied stdout ---- [INFO] [stdout] [INFO] [stdout] thread 'sandbox_allows_read_when_writes_denied' (2850) panicked at tests/sandbox_verification_linux.rs:227:5: [INFO] [stdout] assertion `left == right` failed: reading files should succeed even when writes are denied [INFO] [stdout] left: 1 [INFO] [stdout] right: 0 [INFO] [stdout] stack backtrace: [INFO] [stdout] 0: 0x59b660f1ed8a - std[31e582c13f4e914f]::backtrace_rs::backtrace::libunwind::trace [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9 [INFO] [stdout] 1: 0x59b660f1ed8a - std[31e582c13f4e914f]::backtrace_rs::backtrace::trace_unsynchronized:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14 [INFO] [stdout] 2: 0x59b660f1ed8a - std[31e582c13f4e914f]::sys::backtrace::_print_fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:74:9 [INFO] [stdout] 3: 0x59b660f1ed8a - <::print::DisplayBacktrace as core[fa0eadad68403074]::fmt::Display>::fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:44:26 [INFO] [stdout] 4: 0x59b660f32b5a - ::fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/fmt/rt.rs:152:76 [INFO] [stdout] 5: 0x59b660f32b5a - core[fa0eadad68403074]::fmt::write [INFO] [stdout] 6: 0x59b660f23712 - std[31e582c13f4e914f]::io::default_write_fmt::> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/io/mod.rs:639:11 [INFO] [stdout] 7: 0x59b660f23712 - as std[31e582c13f4e914f]::io::Write>::write_fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/io/mod.rs:1994:13 [INFO] [stdout] 8: 0x59b660efc78f - ::print [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:47:9 [INFO] [stdout] 9: 0x59b660efc78f - std[31e582c13f4e914f]::panicking::default_hook::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:292:27 [INFO] [stdout] 10: 0x59b660f16a59 - std[31e582c13f4e914f]::panicking::default_hook [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:316:9 [INFO] [stdout] 11: 0x59b660e981fc - core[fa0eadad68403074]::ops::function::Fn<(&'a std[31e582c13f4e914f]::panic::PanicHookInfo<'b>,), Output = ()> + core[fa0eadad68403074]::marker::Sync + core[fa0eadad68403074]::marker::Send> as core[fa0eadad68403074]::ops::function::Fn<(&std[31e582c13f4e914f]::panic::PanicHookInfo,)>>::call [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/alloc/src/boxed.rs:2254:9 [INFO] [stdout] 12: 0x59b660e981fc - test[7530e63dc052480e]::test_main_with_exit_callback::::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:145:21 [INFO] [stdout] 13: 0x59b660f16c12 - core[fa0eadad68403074]::ops::function::Fn<(&'a std[31e582c13f4e914f]::panic::PanicHookInfo<'b>,), Output = ()> + core[fa0eadad68403074]::marker::Sync + core[fa0eadad68403074]::marker::Send> as core[fa0eadad68403074]::ops::function::Fn<(&std[31e582c13f4e914f]::panic::PanicHookInfo,)>>::call [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/alloc/src/boxed.rs:2254:9 [INFO] [stdout] 14: 0x59b660f16c12 - std[31e582c13f4e914f]::panicking::panic_with_hook [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:833:13 [INFO] [stdout] 15: 0x59b660efc848 - std[31e582c13f4e914f]::panicking::panic_handler::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:698:13 [INFO] [stdout] 16: 0x59b660ef1979 - std[31e582c13f4e914f]::sys::backtrace::__rust_end_short_backtrace:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:182:18 [INFO] [stdout] 17: 0x59b660efd55d - __rustc[fc8e3a9f23f26cb]::rust_begin_unwind [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:689:5 [INFO] [stdout] 18: 0x59b660f332ec - core[fa0eadad68403074]::panicking::panic_fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panicking.rs:80:14 [INFO] [stdout] 19: 0x59b660f33203 - core[fa0eadad68403074]::panicking::assert_failed_inner [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panicking.rs:434:23 [INFO] [stdout] 20: 0x59b660ed6239 - core[fa0eadad68403074]::panicking::assert_failed:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panicking.rs:394:5 [INFO] [stdout] 21: 0x59b660e88f77 - sandbox_verification_linux[a32be68a98c6dc62]::sandbox_allows_read_when_writes_denied::sandbox_allows_read_when_writes_denied [INFO] [stdout] at /opt/rustwide/workdir/tests/sandbox_verification_linux.rs:227:5 [INFO] [stdout] 22: 0x59b660e87596 - sandbox_verification_linux[a32be68a98c6dc62]::sandbox_allows_read_when_writes_denied [INFO] [stdout] at /opt/rustwide/workdir/tests/sandbox_verification_linux.rs:212:1 [INFO] [stdout] 23: 0x59b660e85b37 - sandbox_verification_linux[a32be68a98c6dc62]::sandbox_allows_read_when_writes_denied::{closure#0} [INFO] [stdout] at /opt/rustwide/workdir/tests/sandbox_verification_linux.rs:212:10 [INFO] [stdout] 24: 0x59b660e8c0b6 - >::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 25: 0x59b660e8c2db - core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String> as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 26: 0x59b660e8c2db - test[7530e63dc052480e]::__rust_begin_short_backtrace::, fn() -> core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:663:18 [INFO] [stdout] 27: 0x59b660e98ccb - test[7530e63dc052480e]::run_test_in_process::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:686:74 [INFO] [stdout] 28: 0x59b660e98ccb - as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panic/unwind_safe.rs:275:9 [INFO] [stdout] 29: 0x59b660e98ccb - std[31e582c13f4e914f]::panicking::catch_unwind::do_call::, core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:581:40 [INFO] [stdout] 30: 0x59b660e98ccb - std[31e582c13f4e914f]::panicking::catch_unwind::, core[fa0eadad68403074]::panic::unwind_safe::AssertUnwindSafe> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:544:19 [INFO] [stdout] 31: 0x59b660e98ccb - std[31e582c13f4e914f]::panic::catch_unwind::, core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panic.rs:359:14 [INFO] [stdout] 32: 0x59b660e98ccb - test[7530e63dc052480e]::run_test_in_process [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:686:27 [INFO] [stdout] 33: 0x59b660e98ccb - test[7530e63dc052480e]::run_test::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:607:43 [INFO] [stdout] 34: 0x59b660e93124 - test[7530e63dc052480e]::run_test::{closure#1} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:637:41 [INFO] [stdout] 35: 0x59b660e93124 - std[31e582c13f4e914f]::sys::backtrace::__rust_begin_short_backtrace:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:166:18 [INFO] [stdout] 36: 0x59b660e9b8d2 - std[31e582c13f4e914f]::thread::lifecycle::spawn_unchecked::::{closure#1}::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/thread/lifecycle.rs:91:13 [INFO] [stdout] 37: 0x59b660e9b8d2 - ::{closure#1}::{closure#0}> as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panic/unwind_safe.rs:275:9 [INFO] [stdout] 38: 0x59b660e9b8d2 - std[31e582c13f4e914f]::panicking::catch_unwind::do_call::::{closure#1}::{closure#0}>, ()> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:581:40 [INFO] [stdout] 39: 0x59b660e9b8d2 - std[31e582c13f4e914f]::panicking::catch_unwind::<(), core[fa0eadad68403074]::panic::unwind_safe::AssertUnwindSafe::{closure#1}::{closure#0}>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:544:19 [INFO] [stdout] 40: 0x59b660e9b8d2 - std[31e582c13f4e914f]::panic::catch_unwind::::{closure#1}::{closure#0}>, ()> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panic.rs:359:14 [INFO] [stdout] 41: 0x59b660e9b8d2 - std[31e582c13f4e914f]::thread::lifecycle::spawn_unchecked::::{closure#1} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/thread/lifecycle.rs:89:26 [INFO] [stdout] 42: 0x59b660e9b8d2 - ::{closure#1} as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 43: 0x59b660f1e4cf - + core[fa0eadad68403074]::marker::Send> as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/alloc/src/boxed.rs:2240:9 [INFO] [stdout] 44: 0x59b660f1e4cf - ::new::thread_start [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/thread/unix.rs:118:17 [INFO] [stdout] 45: 0x7e1717d50aa4 - [INFO] [stdout] 46: 0x7e1717ddda64 - clone [INFO] [stdout] 47: 0x0 - [INFO] [stdout] [INFO] [stdout] ---- sandbox_allows_write_outside_read_only_subpath stdout ---- [INFO] [stdout] [INFO] [stdout] thread 'sandbox_allows_write_outside_read_only_subpath' (2851) panicked at tests/sandbox_verification_linux.rs:166:5: [INFO] [stdout] assertion `left == right` failed: write outside read_only_subpath should succeed [INFO] [stdout] left: 1 [INFO] [stdout] right: 0 [INFO] [stdout] stack backtrace: [INFO] [stdout] 0: 0x59b660f1ed8a - std[31e582c13f4e914f]::backtrace_rs::backtrace::libunwind::trace [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9 [INFO] [stdout] 1: 0x59b660f1ed8a - std[31e582c13f4e914f]::backtrace_rs::backtrace::trace_unsynchronized:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14 [INFO] [stdout] 2: 0x59b660f1ed8a - std[31e582c13f4e914f]::sys::backtrace::_print_fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:74:9 [INFO] [stdout] 3: 0x59b660f1ed8a - <::print::DisplayBacktrace as core[fa0eadad68403074]::fmt::Display>::fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:44:26 [INFO] [stdout] 4: 0x59b660f32b5a - ::fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/fmt/rt.rs:152:76 [INFO] [stdout] 5: 0x59b660f32b5a - core[fa0eadad68403074]::fmt::write [INFO] [stdout] 6: 0x59b660f23712 - std[31e582c13f4e914f]::io::default_write_fmt::> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/io/mod.rs:639:11 [INFO] [stdout] 7: 0x59b660f23712 - as std[31e582c13f4e914f]::io::Write>::write_fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/io/mod.rs:1994:13 [INFO] [stdout] 8: 0x59b660efc78f - ::print [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:47:9 [INFO] [stdout] 9: 0x59b660efc78f - std[31e582c13f4e914f]::panicking::default_hook::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:292:27 [INFO] [stdout] 10: 0x59b660f16a59 - std[31e582c13f4e914f]::panicking::default_hook [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:316:9 [INFO] [stdout] 11: 0x59b660e981fc - core[fa0eadad68403074]::ops::function::Fn<(&'a std[31e582c13f4e914f]::panic::PanicHookInfo<'b>,), Output = ()> + core[fa0eadad68403074]::marker::Sync + core[fa0eadad68403074]::marker::Send> as core[fa0eadad68403074]::ops::function::Fn<(&std[31e582c13f4e914f]::panic::PanicHookInfo,)>>::call [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/alloc/src/boxed.rs:2254:9 [INFO] [stdout] 12: 0x59b660e981fc - test[7530e63dc052480e]::test_main_with_exit_callback::::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:145:21 [INFO] [stdout] 13: 0x59b660f16c12 - core[fa0eadad68403074]::ops::function::Fn<(&'a std[31e582c13f4e914f]::panic::PanicHookInfo<'b>,), Output = ()> + core[fa0eadad68403074]::marker::Sync + core[fa0eadad68403074]::marker::Send> as core[fa0eadad68403074]::ops::function::Fn<(&std[31e582c13f4e914f]::panic::PanicHookInfo,)>>::call [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/alloc/src/boxed.rs:2254:9 [INFO] [stdout] 14: 0x59b660f16c12 - std[31e582c13f4e914f]::panicking::panic_with_hook [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:833:13 [INFO] [stdout] 15: 0x59b660efc848 - std[31e582c13f4e914f]::panicking::panic_handler::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:698:13 [INFO] [stdout] 16: 0x59b660ef1979 - std[31e582c13f4e914f]::sys::backtrace::__rust_end_short_backtrace:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:182:18 [INFO] [stdout] 17: 0x59b660efd55d - __rustc[fc8e3a9f23f26cb]::rust_begin_unwind [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:689:5 [INFO] [stdout] 18: 0x59b660f332ec - core[fa0eadad68403074]::panicking::panic_fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panicking.rs:80:14 [INFO] [stdout] 19: 0x59b660f33203 - core[fa0eadad68403074]::panicking::assert_failed_inner [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panicking.rs:434:23 [INFO] [stdout] 20: 0x59b660ed6239 - core[fa0eadad68403074]::panicking::assert_failed:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panicking.rs:394:5 [INFO] [stdout] 21: 0x59b660e8b914 - sandbox_verification_linux[a32be68a98c6dc62]::sandbox_allows_write_outside_read_only_subpath::sandbox_allows_write_outside_read_only_subpath [INFO] [stdout] at /opt/rustwide/workdir/tests/sandbox_verification_linux.rs:166:5 [INFO] [stdout] 22: 0x59b660e875d6 - sandbox_verification_linux[a32be68a98c6dc62]::sandbox_allows_write_outside_read_only_subpath [INFO] [stdout] at /opt/rustwide/workdir/tests/sandbox_verification_linux.rs:143:1 [INFO] [stdout] 23: 0x59b660e85bf7 - sandbox_verification_linux[a32be68a98c6dc62]::sandbox_allows_write_outside_read_only_subpath::{closure#0} [INFO] [stdout] at /opt/rustwide/workdir/tests/sandbox_verification_linux.rs:143:10 [INFO] [stdout] 24: 0x59b660e8c1b6 - >::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 25: 0x59b660e8c2db - core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String> as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 26: 0x59b660e8c2db - test[7530e63dc052480e]::__rust_begin_short_backtrace::, fn() -> core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:663:18 [INFO] [stdout] 27: 0x59b660e98ccb - test[7530e63dc052480e]::run_test_in_process::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:686:74 [INFO] [stdout] 28: 0x59b660e98ccb - as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panic/unwind_safe.rs:275:9 [INFO] [stdout] 29: 0x59b660e98ccb - std[31e582c13f4e914f]::panicking::catch_unwind::do_call::, core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:581:40 [INFO] [stdout] 30: 0x59b660e98ccb - std[31e582c13f4e914f]::panicking::catch_unwind::, core[fa0eadad68403074]::panic::unwind_safe::AssertUnwindSafe> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:544:19 [INFO] [stdout] 31: 0x59b660e98ccb - std[31e582c13f4e914f]::panic::catch_unwind::, core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panic.rs:359:14 [INFO] [stdout] 32: 0x59b660e98ccb - test[7530e63dc052480e]::run_test_in_process [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:686:27 [INFO] [stdout] 33: 0x59b660e98ccb - test[7530e63dc052480e]::run_test::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:607:43 [INFO] [stdout] 34: 0x59b660e93124 - test[7530e63dc052480e]::run_test::{closure#1} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:637:41 [INFO] [stdout] 35: 0x59b660e93124 - std[31e582c13f4e914f]::sys::backtrace::__rust_begin_short_backtrace:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:166:18 [INFO] [stdout] 36: 0x59b660e9b8d2 - std[31e582c13f4e914f]::thread::lifecycle::spawn_unchecked::::{closure#1}::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/thread/lifecycle.rs:91:13 [INFO] [stdout] 37: 0x59b660e9b8d2 - ::{closure#1}::{closure#0}> as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panic/unwind_safe.rs:275:9 [INFO] [stdout] 38: 0x59b660e9b8d2 - std[31e582c13f4e914f]::panicking::catch_unwind::do_call::::{closure#1}::{closure#0}>, ()> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:581:40 [INFO] [stdout] 39: 0x59b660e9b8d2 - std[31e582c13f4e914f]::panicking::catch_unwind::<(), core[fa0eadad68403074]::panic::unwind_safe::AssertUnwindSafe::{closure#1}::{closure#0}>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:544:19 [INFO] [stdout] 40: 0x59b660e9b8d2 - std[31e582c13f4e914f]::panic::catch_unwind::::{closure#1}::{closure#0}>, ()> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panic.rs:359:14 [INFO] [stdout] 41: 0x59b660e9b8d2 - std[31e582c13f4e914f]::thread::lifecycle::spawn_unchecked::::{closure#1} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/thread/lifecycle.rs:89:26 [INFO] [stdout] 42: 0x59b660e9b8d2 - ::{closure#1} as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 43: 0x59b660f1e4cf - + core[fa0eadad68403074]::marker::Send> as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/alloc/src/boxed.rs:2240:9 [INFO] [stdout] 44: 0x59b660f1e4cf - ::new::thread_start [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/thread/unix.rs:118:17 [INFO] [stdout] 45: 0x7e1717d50aa4 - [INFO] [stdout] 46: 0x7e1717ddda64 - clone [INFO] [stdout] 47: 0x0 - [INFO] [stdout] [INFO] [stdout] ---- sandbox_read_deny_blocks_file_access::case_1_file_in_denied_dir stdout ---- [INFO] [stdout] [INFO] [stdout] thread 'sandbox_read_deny_blocks_file_access::case_1_file_in_denied_dir' (2859) panicked at tests/sandbox_verification_linux.rs:275:5: [INFO] [stdout] assertion `left == right` failed: reading file outside denied dir should succeed [INFO] [stdout] left: 1 [INFO] [stdout] right: 0 [INFO] [stdout] stack backtrace: [INFO] [stdout] 0: 0x59b660f1ed8a - std[31e582c13f4e914f]::backtrace_rs::backtrace::libunwind::trace [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9 [INFO] [stdout] 1: 0x59b660f1ed8a - std[31e582c13f4e914f]::backtrace_rs::backtrace::trace_unsynchronized:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14 [INFO] [stdout] 2: 0x59b660f1ed8a - std[31e582c13f4e914f]::sys::backtrace::_print_fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:74:9 [INFO] [stdout] 3: 0x59b660f1ed8a - <::print::DisplayBacktrace as core[fa0eadad68403074]::fmt::Display>::fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:44:26 [INFO] [stdout] 4: 0x59b660f32b5a - ::fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/fmt/rt.rs:152:76 [INFO] [stdout] 5: 0x59b660f32b5a - core[fa0eadad68403074]::fmt::write [INFO] [stdout] 6: 0x59b660f23712 - std[31e582c13f4e914f]::io::default_write_fmt::> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/io/mod.rs:639:11 [INFO] [stdout] 7: 0x59b660f23712 - as std[31e582c13f4e914f]::io::Write>::write_fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/io/mod.rs:1994:13 [INFO] [stdout] 8: 0x59b660efc78f - ::print [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:47:9 [INFO] [stdout] 9: 0x59b660efc78f - std[31e582c13f4e914f]::panicking::default_hook::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:292:27 [INFO] [stdout] 10: 0x59b660f16a59 - std[31e582c13f4e914f]::panicking::default_hook [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:316:9 [INFO] [stdout] 11: 0x59b660e981fc - core[fa0eadad68403074]::ops::function::Fn<(&'a std[31e582c13f4e914f]::panic::PanicHookInfo<'b>,), Output = ()> + core[fa0eadad68403074]::marker::Sync + core[fa0eadad68403074]::marker::Send> as core[fa0eadad68403074]::ops::function::Fn<(&std[31e582c13f4e914f]::panic::PanicHookInfo,)>>::call [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/alloc/src/boxed.rs:2254:9 [INFO] [stdout] 12: 0x59b660e981fc - test[7530e63dc052480e]::test_main_with_exit_callback::::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:145:21 [INFO] [stdout] 13: 0x59b660f16c12 - core[fa0eadad68403074]::ops::function::Fn<(&'a std[31e582c13f4e914f]::panic::PanicHookInfo<'b>,), Output = ()> + core[fa0eadad68403074]::marker::Sync + core[fa0eadad68403074]::marker::Send> as core[fa0eadad68403074]::ops::function::Fn<(&std[31e582c13f4e914f]::panic::PanicHookInfo,)>>::call [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/alloc/src/boxed.rs:2254:9 [INFO] [stdout] 14: 0x59b660f16c12 - std[31e582c13f4e914f]::panicking::panic_with_hook [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:833:13 [INFO] [stdout] 15: 0x59b660efc848 - std[31e582c13f4e914f]::panicking::panic_handler::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:698:13 [INFO] [stdout] 16: 0x59b660ef1979 - std[31e582c13f4e914f]::sys::backtrace::__rust_end_short_backtrace:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:182:18 [INFO] [stdout] 17: 0x59b660efd55d - __rustc[fc8e3a9f23f26cb]::rust_begin_unwind [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:689:5 [INFO] [stdout] 18: 0x59b660f332ec - core[fa0eadad68403074]::panicking::panic_fmt [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panicking.rs:80:14 [INFO] [stdout] 19: 0x59b660f33203 - core[fa0eadad68403074]::panicking::assert_failed_inner [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panicking.rs:434:23 [INFO] [stdout] 20: 0x59b660ed6239 - core[fa0eadad68403074]::panicking::assert_failed:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panicking.rs:394:5 [INFO] [stdout] 21: 0x59b660e8746a - sandbox_verification_linux[a32be68a98c6dc62]::sandbox_read_deny_blocks_file_access [INFO] [stdout] at /opt/rustwide/workdir/tests/sandbox_verification_linux.rs:275:5 [INFO] [stdout] 22: 0x59b660e87cfe - sandbox_verification_linux[a32be68a98c6dc62]::sandbox_read_deny_blocks_file_access::case_1_file_in_denied_dir [INFO] [stdout] at /opt/rustwide/workdir/tests/sandbox_verification_linux.rs:238:1 [INFO] [stdout] 23: 0x59b660e85c57 - sandbox_verification_linux[a32be68a98c6dc62]::sandbox_read_deny_blocks_file_access::case_1_file_in_denied_dir::{closure#0} [INFO] [stdout] at /opt/rustwide/workdir/tests/sandbox_verification_linux.rs:238:10 [INFO] [stdout] 24: 0x59b660e8c236 - >::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 25: 0x59b660e8c2db - core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String> as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 26: 0x59b660e8c2db - test[7530e63dc052480e]::__rust_begin_short_backtrace::, fn() -> core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:663:18 [INFO] [stdout] 27: 0x59b660e98ccb - test[7530e63dc052480e]::run_test_in_process::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:686:74 [INFO] [stdout] 28: 0x59b660e98ccb - as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panic/unwind_safe.rs:275:9 [INFO] [stdout] 29: 0x59b660e98ccb - std[31e582c13f4e914f]::panicking::catch_unwind::do_call::, core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:581:40 [INFO] [stdout] 30: 0x59b660e98ccb - std[31e582c13f4e914f]::panicking::catch_unwind::, core[fa0eadad68403074]::panic::unwind_safe::AssertUnwindSafe> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:544:19 [INFO] [stdout] 31: 0x59b660e98ccb - std[31e582c13f4e914f]::panic::catch_unwind::, core[fa0eadad68403074]::result::Result<(), alloc[49b8922c36ca62de]::string::String>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panic.rs:359:14 [INFO] [stdout] 32: 0x59b660e98ccb - test[7530e63dc052480e]::run_test_in_process [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:686:27 [INFO] [stdout] 33: 0x59b660e98ccb - test[7530e63dc052480e]::run_test::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:607:43 [INFO] [stdout] 34: 0x59b660e93124 - test[7530e63dc052480e]::run_test::{closure#1} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/test/src/lib.rs:637:41 [INFO] [stdout] 35: 0x59b660e93124 - std[31e582c13f4e914f]::sys::backtrace::__rust_begin_short_backtrace:: [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/backtrace.rs:166:18 [INFO] [stdout] 36: 0x59b660e9b8d2 - std[31e582c13f4e914f]::thread::lifecycle::spawn_unchecked::::{closure#1}::{closure#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/thread/lifecycle.rs:91:13 [INFO] [stdout] 37: 0x59b660e9b8d2 - ::{closure#1}::{closure#0}> as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/panic/unwind_safe.rs:275:9 [INFO] [stdout] 38: 0x59b660e9b8d2 - std[31e582c13f4e914f]::panicking::catch_unwind::do_call::::{closure#1}::{closure#0}>, ()> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:581:40 [INFO] [stdout] 39: 0x59b660e9b8d2 - std[31e582c13f4e914f]::panicking::catch_unwind::<(), core[fa0eadad68403074]::panic::unwind_safe::AssertUnwindSafe::{closure#1}::{closure#0}>> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panicking.rs:544:19 [INFO] [stdout] 40: 0x59b660e9b8d2 - std[31e582c13f4e914f]::panic::catch_unwind::::{closure#1}::{closure#0}>, ()> [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/panic.rs:359:14 [INFO] [stdout] 41: 0x59b660e9b8d2 - std[31e582c13f4e914f]::thread::lifecycle::spawn_unchecked::::{closure#1} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/thread/lifecycle.rs:89:26 [INFO] [stdout] 42: 0x59b660e9b8d2 - ::{closure#1} as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/core/src/ops/function.rs:250:5 [INFO] [stdout] 43: 0x59b660f1e4cf - + core[fa0eadad68403074]::marker::Send> as core[fa0eadad68403074]::ops::function::FnOnce<()>>::call_once [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/alloc/src/boxed.rs:2240:9 [INFO] [stdout] 44: 0x59b660f1e4cf - ::new::thread_start [INFO] [stdout] at /rustc/562dee4820c458d823175268e41601d4c060588a/library/std/src/sys/thread/unix.rs:118:17 [INFO] [stdout] 45: 0x7e1717d50aa4 - [INFO] [stdout] 46: 0x7e1717ddda64 - clone [INFO] [stdout] 47: 0x0 - [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] failures: [INFO] [stdout] sandbox_allows_read_when_writes_denied [INFO] [stdout] sandbox_allows_write_outside_read_only_subpath [INFO] [stdout] sandbox_allows_write_to_writable_root [INFO] [stdout] sandbox_read_deny_blocks_file_access::case_1_file_in_denied_dir [INFO] [stdout] sandbox_read_deny_blocks_file_access::case_2_ssh_dir [INFO] [stdout] sandbox_runs_command_successfully [INFO] [stdout] [INFO] [stdout] test result: FAILED. 4 passed; 6 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.29s [INFO] [stdout] [INFO] [stderr] error: test failed, to rerun pass `--test sandbox_verification_linux` [INFO] running `Command { std: "docker" "inspect" "c94ed8a5f75a387e556eaa494c835ed99428ddd21337c4a727d9e61d56884811", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "c94ed8a5f75a387e556eaa494c835ed99428ddd21337c4a727d9e61d56884811", kill_on_drop: false }` [INFO] [stdout] c94ed8a5f75a387e556eaa494c835ed99428ddd21337c4a727d9e61d56884811