[INFO] cloning repository https://github.com/michaelasper/hackpi
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/michaelasper/hackpi" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmichaelasper%2Fhackpi", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmichaelasper%2Fhackpi'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 7af9be7da83d489cf9f5c090d4f85e31a67bd0e2
[INFO] testing michaelasper/hackpi against 1.98.0-beta.6+cargoflags=--release for beta-1.98-release-3
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmichaelasper%2Fhackpi" "/workspace/builds/worker-3-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/michaelasper/hackpi
[INFO] finished tweaking git repo https://github.com/michaelasper/hackpi
[INFO] tweaked toml for git repo https://github.com/michaelasper/hackpi written to /workspace/builds/worker-3-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/michaelasper/hackpi on toolchain 1.98.0-beta.6
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.98.0-beta.6" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/michaelasper/hackpi already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.98.0-beta.6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:00c5645b54fe3ce5dae1417175e3c7fb6a6646c021d554ecd63a097b8b9f3602" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] f19dab789ed72cacfce4189b3097c6eff6165c3218f9823218606d96f1b19f2a
[INFO] running `Command { std: "docker" "start" "f19dab789ed72cacfce4189b3097c6eff6165c3218f9823218606d96f1b19f2a", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "f19dab789ed72cacfce4189b3097c6eff6165c3218f9823218606d96f1b19f2a", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "f19dab789ed72cacfce4189b3097c6eff6165c3218f9823218606d96f1b19f2a" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "f19dab789ed72cacfce4189b3097c6eff6165c3218f9823218606d96f1b19f2a", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "f19dab789ed72cacfce4189b3097c6eff6165c3218f9823218606d96f1b19f2a" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.6" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling log v0.4.29
[INFO] [stderr]    Compiling jobserver v0.1.34
[INFO] [stderr]    Compiling shlex v1.3.0
[INFO] [stderr]    Compiling pkg-config v0.3.33
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling vcpkg v0.2.15
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling scopeguard v1.2.0
[INFO] [stderr]    Compiling lock_api v0.4.14
[INFO] [stderr]    Compiling mio v1.2.0
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling futures-sink v0.3.32
[INFO] [stderr]    Compiling socket2 v0.6.3
[INFO] [stderr]    Compiling cc v1.2.62
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling equivalent v1.0.2
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling tokio v1.52.3
[INFO] [stderr]    Compiling futures-channel v0.3.32
[INFO] [stderr]    Compiling tinystr v0.8.3
[INFO] [stderr]    Compiling icu_locale_core v2.2.0
[INFO] [stderr]    Compiling zerotrie v0.2.4
[INFO] [stderr]    Compiling icu_collections v2.2.0
[INFO] [stderr]    Compiling http v1.4.0
[INFO] [stderr]    Compiling futures-io v0.3.32
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling hashbrown v0.17.1
[INFO] [stderr]    Compiling openssl-sys v0.9.115
[INFO] [stderr]    Compiling icu_provider v2.2.0
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling icu_properties v2.2.0
[INFO] [stderr]    Compiling icu_normalizer v2.2.0
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling openssl v0.10.79
[INFO] [stderr]    Compiling foreign-types-shared v0.1.1
[INFO] [stderr]    Compiling foreign-types v0.3.2
[INFO] [stderr]    Compiling idna_adapter v1.2.2
[INFO] [stderr]    Compiling openssl-macros v0.1.1
[INFO] [stderr]    Compiling native-tls v0.2.18
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling libz-sys v1.1.28
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling openssl-probe v0.2.1
[INFO] [stderr]    Compiling anyhow v1.0.102
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling instant v0.1.13
[INFO] [stderr]    Compiling encoding_rs v0.8.35
[INFO] [stderr]    Compiling inotify-sys v0.1.5
[INFO] [stderr]    Compiling rustversion v1.0.22
[INFO] [stderr]    Compiling same-file v1.0.6
[INFO] [stderr]    Compiling bitflags v1.3.2
[INFO] [stderr]    Compiling inotify v0.10.2
[INFO] [stderr]    Compiling walkdir v2.5.0
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling bstr v1.12.1
[INFO] [stderr]    Compiling h2 v0.4.14
[INFO] [stderr]    Compiling notify-types v1.0.1
[INFO] [stderr]    Compiling tokio-native-tls v0.3.1
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling libssh2-sys v0.3.1
[INFO] [stderr]    Compiling filetime v0.2.29
[INFO] [stderr]    Compiling notify v7.0.0
[INFO] [stderr]    Compiling globset v0.4.18
[INFO] [stderr]    Compiling hyper v1.9.0
[INFO] [stderr]    Compiling tower-http v0.6.10
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling hyper-tls v0.6.0
[INFO] [stderr]    Compiling strsim v0.11.1
[INFO] [stderr]    Compiling home v0.5.12
[INFO] [stderr]    Compiling mime v0.3.17
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]    Compiling ident_case v1.0.1
[INFO] [stderr]    Compiling autocfg v1.5.0
[INFO] [stderr]    Compiling darling_core v0.23.0
[INFO] [stderr]    Compiling hackpi-guardrails v0.1.0 (/opt/rustwide/workdir/hackpi-guardrails)
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling libgit2-sys v0.17.0+1.8.1
[INFO] [stderr]    Compiling version_check v0.9.5
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]    Compiling serde_yml v0.0.12
[INFO] [stderr]    Compiling grep-matcher v0.1.8
[INFO] [stderr]    Compiling linux-raw-sys v0.4.15
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling foldhash v0.1.5
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling paste v1.0.15
[INFO] [stderr]    Compiling hackpi-core v0.1.0 (/opt/rustwide/workdir/hackpi-core)
[INFO] [stderr]    Compiling allocator-api2 v0.2.21
[INFO] [stderr]    Compiling instability v0.3.12
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]    Compiling hashbrown v0.15.5
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling signal-hook-mio v0.2.5
[INFO] [stderr]    Compiling castaway v0.2.4
[INFO] [stderr]    Compiling libyml v0.0.5
[INFO] [stderr]    Compiling encoding_rs_io v0.1.7
[INFO] [stderr]    Compiling memmap2 v0.9.10
[INFO] [stderr]    Compiling unicode-width v0.1.14
[INFO] [stderr]    Compiling iana-time-zone v0.1.65
[INFO] [stderr]    Compiling openssl-probe v0.1.6
[INFO] [stderr]    Compiling static_assertions v1.1.0
[INFO] [stderr]    Compiling indoc v2.0.7
[INFO] [stderr]    Compiling unicode-segmentation v1.13.2
[INFO] [stderr]    Compiling chrono v0.4.44
[INFO] [stderr]    Compiling unicode-truncate v1.1.0
[INFO] [stderr]    Compiling compact_str v0.8.1
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling sharded-slab v0.1.7
[INFO] [stderr]    Compiling grep-searcher v0.1.16
[INFO] [stderr]    Compiling crossterm v0.28.1
[INFO] [stderr]    Compiling strum v0.26.3
[INFO] [stderr]    Compiling lru v0.12.5
[INFO] [stderr]    Compiling grep-regex v0.1.14
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling thread_local v1.1.9
[INFO] [stderr]    Compiling fs2 v0.4.3
[INFO] [stderr]    Compiling xxhash-rust v0.8.15
[INFO] [stderr]    Compiling nu-ansi-term v0.50.3
[INFO] [stderr]    Compiling cassowary v0.3.0
[INFO] [stderr]    Compiling ratatui v0.28.1
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling hackpi-tools v0.1.0 (/opt/rustwide/workdir/hackpi-tools)
[INFO] [stderr]    Compiling hackpi-tasks v0.1.0 (/opt/rustwide/workdir/hackpi-tasks)
[INFO] [stderr]    Compiling git2 v0.19.0
[INFO] [stderr]    Compiling hackpi-vcs v0.1.0 (/opt/rustwide/workdir/hackpi-vcs)
[INFO] [stderr]    Compiling hackpi-tui v0.1.0 (/opt/rustwide/workdir/hackpi-tui)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 2m 44s
[INFO] running `Command { std: "docker" "inspect" "f19dab789ed72cacfce4189b3097c6eff6165c3218f9823218606d96f1b19f2a", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "f19dab789ed72cacfce4189b3097c6eff6165c3218f9823218606d96f1b19f2a" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.6" "test" "--frozen" "--no-run" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling hyper v1.9.0
[INFO] [stderr]    Compiling num_cpus v1.17.0
[INFO] [stderr]    Compiling deadpool-runtime v0.1.4
[INFO] [stderr]    Compiling assert-json-diff v2.0.2
[INFO] [stderr]    Compiling hackpi-guardrails v0.1.0 (/opt/rustwide/workdir/hackpi-guardrails)
[INFO] [stderr]    Compiling deadpool v0.12.3
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling hyper-tls v0.6.0
[INFO] [stderr]    Compiling wiremock v0.6.5
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]    Compiling hackpi-core v0.1.0 (/opt/rustwide/workdir/hackpi-core)
[INFO] [stderr]    Compiling hackpi-vcs v0.1.0 (/opt/rustwide/workdir/hackpi-vcs)
[INFO] [stderr]    Compiling hackpi-tools v0.1.0 (/opt/rustwide/workdir/hackpi-tools)
[INFO] [stderr]    Compiling hackpi-tasks v0.1.0 (/opt/rustwide/workdir/hackpi-tasks)
[INFO] [stderr]    Compiling hackpi-tui v0.1.0 (/opt/rustwide/workdir/hackpi-tui)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 31.66s
[INFO] running `Command { std: "docker" "inspect" "f19dab789ed72cacfce4189b3097c6eff6165c3218f9823218606d96f1b19f2a", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-w" "/opt/rustwide/workdir" "--user" "0:0" "f19dab789ed72cacfce4189b3097c6eff6165c3218f9823218606d96f1b19f2a" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.6" "test" "--frozen" "--release", kill_on_drop: false }`
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 0.24s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/deps/hackpi_core-df1c73b26504d8bd)
[INFO] [stdout] 
[INFO] [stdout] running 91 tests
[INFO] [stdout] test agent::api::tests::test_process_sse_events_git_read_via_partial_json ... ok
[INFO] [stdout] test agent::api::tests::test_process_sse_events_no_partial_json_still_works ... ok
[INFO] [stdout] test agent::api::tests::test_process_sse_events_partial_json_write_tool_params ... ok
[INFO] [stdout] test agent::api::tests::test_process_sse_events_mixed_text_and_partial_json ... ok
[INFO] [stdout] test agent::api::tests::test_process_sse_events_accumulates_partial_json ... ok
[INFO] [stdout] test agent::conversation::tests::test_build_assistant_message_adds_for_whitespace_text ... ok
[INFO] [stdout] test agent::api::tests::test_process_sse_events_processes_normally_when_not_cancelled ... ok
[INFO] [stdout] test agent::conversation::tests::test_build_assistant_message_adds_message_for_only_tool_calls_with_empty_text ... ok
[INFO] [stdout] test agent::conversation::tests::test_build_assistant_message_adds_message_for_non_empty_text ... ok
[INFO] [stdout] test agent::api::tests::test_process_sse_events_returns_none_when_cancelled ... ok
[INFO] [stdout] test agent::conversation::tests::test_build_assistant_message_does_not_add_for_empty_text_and_no_tool_calls ... ok
[INFO] [stdout] test agent::conversation::tests::test_build_assistant_message_does_not_add_for_empty_tool_calls_with_empty_text ... ok
[INFO] [stdout] test agent::conversation::tests::test_build_assistant_message_includes_tool_use_blocks ... ok
[INFO] [stdout] test agent::conversation::tests::test_build_assistant_message_multiple_calls ... ok
[INFO] [stdout] test agent::events::tests::test_handle_step_stop_reason_end_turn_returns_true ... ok
[INFO] [stdout] test agent::events::tests::test_handle_step_stop_reason_end_turn_sends_done_event ... ok
[INFO] [stdout] test agent::events::tests::test_handle_step_stop_reason_none_returns_false ... ok
[INFO] [stdout] test agent::events::tests::test_handle_step_stop_reason_stop_returns_true ... ok
[INFO] [stdout] test agent::events::tests::test_handle_step_stop_reason_other_does_not_send_done ... ok
[INFO] [stdout] test agent::events::tests::test_handle_step_stop_reason_other_reason_returns_false ... ok
[INFO] [stdout] test agent::events::tests::test_handle_step_stop_reason_stop_sends_done_event ... ok
[INFO] [stdout] test agent::state::tests::test_truncate_output_at_exact_limit_passthrough ... ok
[INFO] [stdout] test agent::state::tests::test_truncate_output_under_limit_passthrough ... ok
[INFO] [stdout] test agent::tests::test_atomic_bool_reset_makes_load_return_false ... ok
[INFO] [stdout] test agent::state::tests::test_truncate_output_one_byte_over_truncates ... ok
[INFO] [stdout] test agent::state::tests::test_truncate_output_non_ascii_safe_boundary ... ok
[INFO] [stdout] test agent::state::tests::test_truncate_output_unsafe_only_tool_id_falls_back ... ok
[INFO] [stdout] test agent::tool_dispatch::tests::test_no_empty_assistant_messages_in_tool_results ... ok
[INFO] [stdout] test agent::state::tests::test_truncate_output_over_limit_clips_and_mentions_file ... ok
[INFO] [stdout] test agent::state::tests::test_truncate_output_over_limit_writes_full_content_to_disk ... ok
[INFO] [stdout] test agent::state::tests::test_truncate_output_empty_tool_id_uses_fallback ... ok
[INFO] [stdout] test agent::state::tests::test_truncate_output_sanitizes_tool_id ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_data_without_space ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_carriage_return_line_endings ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_done_at_end_still_succeeds ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_done_without_space ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_empty_stream_logs_warning ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_empty_data_line_skipped ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_exceeds_max_line_size ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_handles_done_only ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_handles_multiple_events_in_one_chunk ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_handles_split_utf8 ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_incomplete_stream_logs_warning ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_exceeds_max_line_size_cumulative ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_invalid_json_sends_diagnostic ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_leftover_bytes_on_eof ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_message_delta_without_input_tokens ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_non_data_lines_ignored ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_normal_events ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_normal_events_under_limit ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_only_done_succeeds ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_skips_empty_lines ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_skips_invalid_utf8_and_continues ... ok
[INFO] [stdout] test api::tests::test_process_sse_stream_exact_fit_does_not_overflow ... ok
[INFO] [stdout] test system_prompt::tests::test_build_system_prompt_contains_all_sections ... ok
[INFO] [stdout] test system_prompt::tests::test_build_system_prompt_under_500_tokens ... ok
[INFO] [stdout] test system_prompt::tests::test_identity_section_non_empty ... ok
[INFO] [stdout] test system_prompt::tests::test_rules_section_contains_constraints ... ok
[INFO] [stdout] test system_prompt::tests::test_tools_section_contains_known_tools ... ok
[INFO] [stdout] test system_prompt::tests::test_workflow_section_contains_steps ... ok
[INFO] [stdout] test tools::tests::test_dispatch_clears_profile_when_none ... ok
[INFO] [stdout] test tools::tests::test_dispatch_no_guard_executes_normally ... ok
[INFO] [stdout] test tools::tests::test_dispatch_no_registry_fallback_executes_normally ... ok
[INFO] [stdout] test tools::tests::test_dispatch_permission_ask_allow_once_executes ... ok
[INFO] [stdout] test tools::tests::test_dispatch_permission_ask_cancelled_before_wait ... ok
[INFO] [stdout] test agent::tool_dispatch::tests::test_valid_tool_json_passes_through ... ok
[INFO] [stdout] test agent::tool_dispatch::tests::test_malformed_tool_json_returns_system_error ... ok
[INFO] [stdout] test agent::tests::test_run_returns_immediately_when_cancelled_true ... ok
[INFO] [stdout] test api::tests::test_api_client_has_connect_timeout ... ok
[INFO] [stdout] test tools::tests::test_dispatch_with_allow_guard_executes_normally ... ok
[INFO] [stdout] test api::tests::test_send_messages_http_500_returns_error ... ok
[INFO] [stdout] test tools::tests::test_dispatch_with_god_mode_bypasses_checks ... ok
[INFO] [stdout] test tools::tests::test_dispatch_profile_deny_overrides_guardrail_allow ... ok
[INFO] [stdout] test tools::tests::test_dispatch_with_profile_allow_passes_through ... ok
[INFO] [stdout] test tools::tests::test_dispatch_with_profile_ask_prompts ... ok
[INFO] [stdout] test tools::tests::test_dispatch_with_unknown_tool_returns_none ... ok
[INFO] [stdout] test tools::tests::test_dispatch_with_profile_deny_blocks_tool ... ok
[INFO] [stdout] test types::tests::test_api_config_from_env_falls_back_to_defaults ... ok
[INFO] [stdout] test api::tests::test_send_messages_http_401_returns_error ... ok
[INFO] [stdout] test types::tests::test_api_config_from_env_overrides_defaults ... ok
[INFO] [stdout] test types::tests::test_delta_payload_deserializes_partial_json ... ok
[INFO] [stdout] test types::tests::test_delta_payload_deserializes_stop_reason ... ok
[INFO] [stdout] test types::tests::test_delta_payload_deserializes_text_without_partial_json ... ok
[INFO] [stdout] test agent::tests::test_run_does_not_exit_immediately_when_cancelled_reset ... ok
[INFO] [stdout] test types::tests::test_stream_event_deserializes_usage_without_input_tokens ... ok
[INFO] [stdout] test types::tests::test_stream_event_deserializes_tool_input_delta ... ok
[INFO] [stdout] test types::tests::test_usage_deserializes_with_all_fields_missing ... ok
[INFO] [stdout] test types::tests::test_usage_deserializes_with_missing_input_tokens ... ok
[INFO] [stdout] test types::tests::test_usage_round_trip ... ok
[INFO] [stdout] test tools::tests::test_dispatch_permission_ask_timeout_returns_system_error ... ok
[INFO] [stdout] test tools::tests::test_dispatch_permission_ask_cancelled_during_wait ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 91 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.11s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/integration_test.rs (/opt/rustwide/target/release/deps/integration_test-fc32f94c39e2d96e)
[INFO] [stdout] 
[INFO] [stdout] running 1 test
[INFO] [stdout] test test_agent_basic_conversation ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/deps/hackpi_guardrails-ee3a9b295ef38c14)
[INFO] [stdout] 
[INFO] [stdout] running 408 tests
[INFO] [stdout] test command_gate::tests::test_allow_rule_for_rm_rf_bypasses_dangerous_patterns ... ok
[INFO] [stdout] test command_gate::tests::test_add_not_flagged_by_dd ... ok
[INFO] [stdout] test command_gate::tests::test_address_book_not_flagged_by_dd ... ok
[INFO] [stdout] test command_gate::tests::test_allow_rule_overrides_built_in_rm_rf ... ok
[INFO] [stdout] test command_gate::tests::test_cargo_test_not_denied_by_vcs_patterns ... ok
[INFO] [stdout] test command_gate::tests::test_case_insensitive_sudo ... ok
[INFO] [stdout] test command_gate::tests::test_cat_issue_not_flagged_by_su ... ok
[INFO] [stdout] test command_gate::tests::test_chained_commands_rm_rf_and_curl ... ok
[INFO] [stdout] test command_gate::tests::test_chmod_r_uses_case_sensitive_matching ... ok
[INFO] [stdout] test command_gate::tests::test_chmod_lowercase_r_not_flagged ... ok
[INFO] [stdout] test command_gate::tests::test_chown_r_asks ... ok
[INFO] [stdout] test command_gate::tests::test_chpasswd_denies ... ok
[INFO] [stdout] test command_gate::tests::test_dangerous_patterns_contains_expected_patterns ... ok
[INFO] [stdout] test command_gate::tests::test_case_insensitive_rm_rf ... ok
[INFO] [stdout] test command_gate::tests::test_dangerous_patterns_safe_is_none ... ok
[INFO] [stdout] test command_gate::tests::test_config_allow_rule_overrides_vcs_deny ... ok
[INFO] [stdout] test command_gate::tests::test_curl_asks ... ok
[INFO] [stdout] test command_gate::tests::test_dangerous_patterns_rm_rf_asks ... ok
[INFO] [stdout] test command_gate::tests::test_chmod_r_asks ... ok
[INFO] [stdout] test command_gate::tests::test_dd_denies ... ok
[INFO] [stdout] test command_gate::tests::test_dangerous_patterns_sudo_denies ... ok
[INFO] [stdout] test command_gate::tests::test_dd_uses_word_boundary_matching ... ok
[INFO] [stdout] test command_gate::tests::test_deny_rule_overrides_built_in_ask_for_curl ... ok
[INFO] [stdout] test command_gate::tests::test_deny_rule_scoped_to_correct_tool_applies ... ok
[INFO] [stdout] test command_gate::tests::test_deny_rule_scoped_to_different_tool_does_not_apply ... ok
[INFO] [stdout] test command_gate::tests::test_doas_denies ... ok
[INFO] [stdout] test command_gate::tests::test_dev_sda_denies ... ok
[INFO] [stdout] test command_gate::tests::test_echo_sure_not_flagged_by_su ... ok
[INFO] [stdout] test command_gate::tests::test_dev_nvme_denies ... ok
[INFO] [stdout] test command_gate::tests::test_fork_bomb_denies ... ok
[INFO] [stdout] test command_gate::tests::test_empty_command_allows ... ok
[INFO] [stdout] test command_gate::tests::test_gh_issue_list_denied_by_vcs_pattern ... ok
[INFO] [stdout] test command_gate::tests::test_gh_pr_create_denied_by_vcs_pattern ... ok
[INFO] [stdout] test command_gate::tests::test_gh_uppercase_denied ... ok
[INFO] [stdout] test command_gate::tests::test_gh_uses_word_boundary_matching ... ok
[INFO] [stdout] test command_gate::tests::test_gh_word_boundary_not_inside_other_word ... ok
[INFO] [stdout] test command_gate::tests::test_git_log_denied_by_vcs_pattern ... ok
[INFO] [stdout] test command_gate::tests::test_git_commit_denied_by_vcs_pattern ... ok
[INFO] [stdout] test command_gate::tests::test_git_status_denied_by_vcs_pattern ... ok
[INFO] [stdout] test command_gate::tests::test_git_uppercase_denied ... ok
[INFO] [stdout] test command_gate::tests::test_git_uses_word_boundary_matching ... ok
[INFO] [stdout] test command_gate::tests::test_git_word_boundary_not_inside_other_word ... ok
[INFO] [stdout] test command_gate::tests::test_no_space_dev_nvme_denies ... ok
[INFO] [stdout] test command_gate::tests::test_ls_not_denied_by_vcs_patterns ... ok
[INFO] [stdout] test command_gate::tests::test_no_matching_pattern_allows ... ok
[INFO] [stdout] test command_gate::tests::test_mkfs_denies ... ok
[INFO] [stdout] test command_gate::tests::test_no_space_dev_sda_denies ... ok
[INFO] [stdout] test command_gate::tests::test_passwd_denies ... ok
[INFO] [stdout] test command_gate::tests::test_piped_curl_with_sudo_denies_for_sudo ... ok
[INFO] [stdout] test command_gate::tests::test_piped_wget_to_sh_asks_for_wget ... ok
[INFO] [stdout] test command_gate::tests::test_rm_r_asks ... ok
[INFO] [stdout] test command_gate::tests::test_piped_curl_to_bash_asks_for_curl ... ok
[INFO] [stdout] test command_gate::tests::test_rm_rf_before_rm_r ... ok
[INFO] [stdout] test command_gate::tests::test_rm_rf_asks ... ok
[INFO] [stdout] test command_gate::tests::test_rules_no_command_pattern_skipped ... ok
[INFO] [stdout] test command_gate::tests::test_rules_deny_first_then_allow ... ok
[INFO] [stdout] test command_gate::tests::test_rules_allow_matches ... ok
[INFO] [stdout] test command_gate::tests::test_safe_command_allows ... ok
[INFO] [stdout] test command_gate::tests::test_source_env_not_flagged_by_su ... ok
[INFO] [stdout] test command_gate::tests::test_su_denies ... ok
[INFO] [stdout] test command_gate::tests::test_rules_ask_matches ... ok
[INFO] [stdout] test command_gate::tests::test_rules_deny_matches ... ok
[INFO] [stdout] test command_gate::tests::test_su_uses_word_boundary_matching ... ok
[INFO] [stdout] test command_gate::tests::test_sudo_denies ... ok
[INFO] [stdout] test command_gate::tests::test_vcs_patterns_exist_in_dangerous_patterns ... ok
[INFO] [stdout] test command_gate::tests::test_wget_asks ... ok
[INFO] [stdout] test command_gate::tests::test_wildcard_bare_asterisk_deny_matches_everything ... ok
[INFO] [stdout] test command_gate::tests::test_wildcard_curl_allow_overrides_built_in_ask ... ok
[INFO] [stdout] test command_gate::tests::test_wildcard_curl_deny_does_not_match_non_curl ... ok
[INFO] [stdout] test command_gate::tests::test_wildcard_cargo_allow_does_not_match_other_commands ... ok
[INFO] [stdout] test command_gate::tests::test_wildcard_cargo_allow_matches_cargo_subcommands ... ok
[INFO] [stdout] test command_gate::tests::test_wildcard_curl_deny_matches_curl_http_url ... ok
[INFO] [stdout] test command_gate::tests::test_wildcard_curl_deny_matches_curl_url ... ok
[INFO] [stdout] test command_gate::tests::test_wildcard_pattern_without_asterisk_still_works ... ok
[INFO] [stdout] test command_gate::tests::test_wildcard_ssh_deny_does_not_match_echo ... ok
[INFO] [stdout] test command_gate::tests::test_wildcard_ssh_deny_matches_ssh_command ... ok
[INFO] [stdout] test command_gate::tests::test_wildcard_wget_deny_matches_wget_url ... ok
[INFO] [stdout] test command_gate::tests::test_word_boundary_dd_after_semicolon ... ok
[INFO] [stdout] test command_gate::tests::test_word_boundary_dd_in_heredoc_not_flagged ... ok
[INFO] [stdout] test command_gate::tests::test_word_boundary_dd_in_url_not_flagged ... ok
[INFO] [stdout] test command_gate::tests::test_word_boundary_su_after_pipe ... ok
[INFO] [stdout] test command_gate::tests::test_word_boundary_su_in_result_not_flagged ... ok
[INFO] [stdout] test command_gate::tests::test_word_boundary_su_with_dash_prefix ... ok
[INFO] [stdout] test config::tests::test_load_all_empty_directory ... ok
[INFO] [stdout] test config::tests::test_load_claude_settings_invalid_json ... ok
[INFO] [stdout] test config::tests::test_load_all_invalid_json_returns_error ... ok
[INFO] [stdout] test config::tests::test_load_claude_settings_with_allow_deny ... ok
[INFO] [stdout] test config::tests::test_load_all_skips_missing_files ... ok
[INFO] [stdout] test config::tests::test_load_claude_settings_empty_permissions ... ok
[INFO] [stdout] test config::tests::test_load_hackpi_config_all_sections ... ok
[INFO] [stdout] test config::tests::test_load_all_partial_failure_recovers ... ok
[INFO] [stdout] test config::tests::test_load_all_higher_priority_overrides_lower ... ok
[INFO] [stdout] test config::tests::test_load_hackpi_config_file_not_found ... ok
[INFO] [stdout] test config::tests::test_load_all_claude_local_overrides_claude_project ... ok
[INFO] [stdout] test config::tests::test_load_claude_settings_no_permissions_block ... ok
[INFO] [stdout] test config::tests::test_load_hackpi_config_empty_object ... ok
[INFO] [stdout] test config::tests::test_merge_rules_concatenates_in_order ... ok
[INFO] [stdout] test config::tests::test_load_hackpi_config_invalid_json ... ok
[INFO] [stdout] test config::tests::test_parse_command_gate_block_ask_array ... ok
[INFO] [stdout] test config::tests::test_merge_rules_empty_sources ... ok
[INFO] [stdout] test config::tests::test_load_hackpi_config_minimal ... ok
[INFO] [stdout] test config::tests::test_parse_command_gate_block_allow_array ... ok
[INFO] [stdout] test config::tests::test_merge_rules_three_sources ... ok
[INFO] [stdout] test config::tests::test_parse_command_gate_block_deny_array ... ok
[INFO] [stdout] test config::tests::test_parse_command_gate_block_combined_patterns_and_arrays ... ok
[INFO] [stdout] test config::tests::test_parse_command_gate_block_empty_patterns ... ok
[INFO] [stdout] test config::tests::test_parse_command_gate_block_patterns ... ok
[INFO] [stdout] test config::tests::test_parse_command_gate_extras_allow_git_in_bash_false ... ok
[INFO] [stdout] test config::tests::test_parse_command_gate_block_deny_before_allow_order ... ok
[INFO] [stdout] test config::tests::test_parse_command_gate_block_non_string_action_rejected ... ok
[INFO] [stdout] test config::tests::test_parse_command_gate_block_unknown_action_rejected ... ok
[INFO] [stdout] test config::tests::test_parse_file_protection_block_empty ... ok
[INFO] [stdout] test config::tests::test_parse_command_gate_extras_allow_git_in_bash_true ... ok
[INFO] [stdout] test config::tests::test_parse_command_gate_extras_default_false ... ok
[INFO] [stdout] test config::tests::test_parse_file_protection_block_patterns ... ok
[INFO] [stdout] test config::tests::test_parse_file_protection_block_invalid_operation_value_rejected ... ok
[INFO] [stdout] test config::tests::test_parse_file_protection_block_unknown_action_rejected ... ok
[INFO] [stdout] test config::tests::test_parse_file_protection_block_per_op_rules ... ok
[INFO] [stdout] test config::tests::test_parse_path_access_block_allow_deny ... ok
[INFO] [stdout] test config::tests::test_parse_path_access_block_ask_false_no_ask_rule ... ok
[INFO] [stdout] test config::tests::test_parse_file_protection_block_string_instead_of_object_rejected ... ok
[INFO] [stdout] test config::tests::test_parse_file_protection_block_single_op ... ok
[INFO] [stdout] test config::tests::test_parse_path_access_block_no_ask_field ... ok
[INFO] [stdout] test config::tests::test_parse_permissions_block_none_deny ... ok
[INFO] [stdout] test config::tests::test_parse_permissions_block_bare_pattern_is_valid ... ok
[INFO] [stdout] test config::tests::test_parse_path_access_block_ask_true_generates_ask_rule ... ok
[INFO] [stdout] test config::tests::test_parse_permissions_block_bare_pattern_no_tool ... ok
[INFO] [stdout] test config::tests::test_parse_permissions_block_rejects_empty_entry ... ok
[INFO] [stdout] test config::tests::test_parse_permissions_block_none_allow ... ok
[INFO] [stdout] test config::tests::test_parse_permissions_block_rejects_empty_pattern ... ok
[INFO] [stdout] test config::tests::test_parse_permissions_block_rejects_empty_tool_name ... ok
[INFO] [stdout] test config::tests::test_parse_permissions_block_rejects_unknown_tool ... ok
[INFO] [stdout] test config::tests::test_parse_permissions_block_rejects_missing_closing_paren ... ok
[INFO] [stdout] test config::tests::test_parse_permissions_block_valid_entries ... ok
[INFO] [stdout] test config::tests::test_vcs_bypass_rules_returns_git_and_gh_allow ... ok
[INFO] [stdout] test file_protection::tests::test_check_custom_rule_overrides_default ... ok
[INFO] [stdout] test file_protection::tests::test_check_env_read_returns_ask ... ok
[INFO] [stdout] test file_protection::tests::test_check_custom_deny_rule_blocks_non_protected ... ok
[INFO] [stdout] test file_protection::tests::test_check_env_write_returns_deny ... ok
[INFO] [stdout] test file_protection::tests::test_check_custom_ask_rule_overrides_default_allow ... ok
[INFO] [stdout] test file_protection::tests::test_default_pattern_env_read_action ... ok
[INFO] [stdout] test file_protection::tests::test_default_pattern_git_read_action ... ok
[INFO] [stdout] test file_protection::tests::test_default_protected_patterns_count ... ok
[INFO] [stdout] test file_protection::tests::test_file_rules_ask_matches ... ok
[INFO] [stdout] test file_protection::tests::test_file_rules_no_path_match_returns_none ... ok
[INFO] [stdout] test file_protection::tests::test_file_rules_deny_matches ... ok
[INFO] [stdout] test file_protection::tests::test_file_rules_allow_matches ... ok
[INFO] [stdout] test file_protection::tests::test_file_rules_no_path_pattern_skipped ... ok
[INFO] [stdout] test file_protection::tests::test_check_git_config_read_returns_allow ... ok
[INFO] [stdout] test file_protection::tests::test_check_git_config_write_returns_deny ... ok
[INFO] [stdout] test file_protection::tests::test_file_rules_tool_scoped_no_match ... ok
[INFO] [stdout] test file_protection::tests::test_file_rules_tool_scoped_matches ... ok
[INFO] [stdout] test file_protection::tests::test_check_secrets_key_pem_read_returns_ask ... ok
[INFO] [stdout] test file_protection::tests::test_nested_custom_rule_matches_subdirectory ... ok
[INFO] [stdout] test file_protection::tests::test_check_non_protected_path_returns_allow ... ok
[INFO] [stdout] test file_protection::tests::test_nested_credentials_in_subdir ... ok
[INFO] [stdout] test file_protection::tests::test_nested_custom_rule_with_globstar ... ok
[INFO] [stdout] test file_protection::tests::test_nested_deeply_env_local ... ok
[INFO] [stdout] test file_protection::tests::test_key_file_in_deep_path_returns_ask ... ok
[INFO] [stdout] test file_protection::tests::test_nested_key_in_deep_path ... ok
[INFO] [stdout] test file_protection::tests::test_read_credentials_file_returns_ask ... ok
[INFO] [stdout] test file_protection::tests::test_nested_pem_in_deep_path ... ok
[INFO] [stdout] test file_protection::tests::test_read_env_local_returns_ask ... ok
[INFO] [stdout] test file_protection::tests::test_nested_not_protected_returns_none ... ok
[INFO] [stdout] test file_protection::tests::test_nested_git_in_inside_hidden_dir ... ok
[INFO] [stdout] test file_protection::tests::test_nested_secrets_deeply ... ok
[INFO] [stdout] test file_protection::tests::test_read_env_returns_ask ... ok
[INFO] [stdout] test file_protection::tests::test_read_ed25519_key_returns_ask ... ok
[INFO] [stdout] test file_protection::tests::test_read_git_config_returns_allow ... ok
[INFO] [stdout] test file_protection::tests::test_read_key_file_returns_ask ... ok
[INFO] [stdout] test file_protection::tests::test_read_nested_env_returns_ask ... ok
[INFO] [stdout] test file_protection::tests::test_read_secrets_key_pem_returns_ask ... ok
[INFO] [stdout] test file_protection::tests::test_read_secrets_in_subdir_returns_ask ... ok
[INFO] [stdout] test file_protection::tests::test_same_file_protected_both_ops_with_custom_rules ... ok
[INFO] [stdout] test file_protection::tests::test_same_file_read_asks_write_denies ... ok
[INFO] [stdout] test file_protection::tests::test_read_rsa_key_returns_ask ... ok
[INFO] [stdout] test file_protection::tests::test_read_src_main_rs_returns_none ... ok
[INFO] [stdout] test file_protection::tests::test_write_nested_env_returns_deny ... ok
[INFO] [stdout] test file_protection::tests::test_same_file_git_config_read_allow_write_deny ... ok
[INFO] [stdout] test file_protection::tests::test_write_env_returns_deny ... ok
[INFO] [stdout] test hot_reload::tests::test_try_reload_no_config_files_ok ... ok
[INFO] [stdout] test file_protection::tests::test_write_git_config_returns_deny ... ok
[INFO] [stdout] test file_protection::tests::test_write_ed25519_key_returns_deny ... ok
[INFO] [stdout] test hot_reload::tests::test_validate_empty_command_pattern_err ... ok
[INFO] [stdout] test hot_reload::tests::test_validate_empty_rules_ok ... ok
[INFO] [stdout] test hot_reload::tests::test_try_reload_merge_three_configs ... ok
[INFO] [stdout] test hot_reload::tests::test_validate_invalid_glob_err ... ok
[INFO] [stdout] test hot_reload::tests::test_validate_none_path_and_command_ok ... ok
[INFO] [stdout] test hot_reload::tests::test_validate_rejects_empty_command_pattern ... ok
[INFO] [stdout] test hot_reload::tests::test_try_reload_atomic_swap_visible_immediately ... ok
[INFO] [stdout] test hot_reload::tests::test_validate_rejects_invalid_glob_with_brackets ... ok
[INFO] [stdout] test hot_reload::tests::test_try_reload_with_valid_config ... ok
[INFO] [stdout] test hot_reload::tests::test_validate_rejects_unknown_tool_name ... ok
[INFO] [stdout] test hot_reload::tests::test_try_reload_preserves_old_rules_on_invalid_config ... ok
[INFO] [stdout] test hot_reload::tests::test_watcher_detects_changes ... ignored, notify may not work reliably in CI on Linux
[INFO] [stdout] test hot_reload::tests::test_validate_unknown_tool_err ... ok
[INFO] [stdout] test hot_reload::tests::test_try_reload_preserves_old_rules_on_invalid_json ... ok
[INFO] [stdout] test hot_reload::tests::test_validate_valid_glob_with_special_chars_ok ... ok
[INFO] [stdout] test hot_reload::tests::test_try_reload_preserves_old_rules_when_new_config_is_missing_required_fields ... ok
[INFO] [stdout] test hot_reload::tests::test_watcher_does_not_update_on_invalid_config ... ignored, notify may not work reliably in CI on Linux
[INFO] [stdout] test hot_reload::tests::test_validate_valid_rules_ok ... ok
[INFO] [stdout] test path_guard::tests::test_check_dot_dot_traversal_asks ... ok
[INFO] [stdout] test path_guard::tests::test_check_path_inside_workspace_with_deny_rule_denies ... ok
[INFO] [stdout] test path_guard::tests::test_check_path_inside_workspace_with_allow_rule_allows ... ok
[INFO] [stdout] test path_guard::tests::test_check_rules_absolute_path_pattern ... ok
[INFO] [stdout] test path_guard::tests::test_check_rules_allow_match ... ok
[INFO] [stdout] test path_guard::tests::test_check_path_outside_workspace_no_rule_asks ... ok
[INFO] [stdout] test path_guard::tests::test_check_path_inside_workspace_allows ... ok
[INFO] [stdout] test path_guard::tests::test_check_path_outside_workspace_with_allow_rule_allows ... ok
[INFO] [stdout] test path_guard::tests::test_check_path_outside_workspace_with_deny_rule_denies ... ok
[INFO] [stdout] test path_guard::tests::test_check_rules_ask_action_skipped ... ok
[INFO] [stdout] test path_guard::tests::test_check_outside_workspace_with_glob_allow_rule ... ok
[INFO] [stdout] test path_guard::tests::test_check_rules_deny_match ... ok
[INFO] [stdout] test path_guard::tests::test_check_relative_path_inside_workspace ... ok
[INFO] [stdout] test path_guard::tests::test_check_rules_skip_command_only_rules ... ok
[INFO] [stdout] test path_guard::tests::test_check_rules_deny_takes_precedence_over_allow ... ok
[INFO] [stdout] test path_guard::tests::test_check_rules_no_match_returns_none ... ok
[INFO] [stdout] test path_guard::tests::test_check_rules_glob_pattern_nested ... ok
[INFO] [stdout] test path_guard::tests::test_check_rules_tool_scoped_matches_correct_tool ... ok
[INFO] [stdout] test path_guard::tests::test_check_rules_tool_scoped_no_match_for_different_tool ... ok
[INFO] [stdout] test path_guard::tests::test_check_symlink_inside_workspace_allows ... ok
[INFO] [stdout] test path_guard::tests::test_check_tool_scoped_rule_only_matches_specific_tool ... ok
[INFO] [stdout] test path_guard::tests::test_is_outside_workspace_outside ... ok
[INFO] [stdout] test path_guard::tests::test_check_symlink_to_outside_asks ... ok
[INFO] [stdout] test path_guard::tests::test_is_outside_workspace_symlink_inside_workspace ... ok
[INFO] [stdout] test path_guard::tests::test_is_outside_workspace_dot_dot_traversal ... ok
[INFO] [stdout] test path_guard::tests::test_resolve_tool_path_dot ... ok
[INFO] [stdout] test path_guard::tests::test_resolve_tool_path_tilde ... ok
[INFO] [stdout] test path_guard::tests::test_is_outside_workspace_inside ... ok
[INFO] [stdout] test path_guard::tests::test_resolve_tool_path_relative ... ok
[INFO] [stdout] test path_guard::tests::test_resolve_tool_path_absolute ... ok
[INFO] [stdout] test path_guard::tests::test_is_outside_workspace_workspace_root_itself ... ok
[INFO] [stdout] test pattern::tests::test_command_matches_case_insensitive_reverse ... ok
[INFO] [stdout] test pattern::tests::test_command_matches_empty_pattern ... ok
[INFO] [stdout] test path_guard::tests::test_is_outside_workspace_symlink_resolved_to_inside ... ok
[INFO] [stdout] test pattern::tests::test_command_matches_no_match ... ok
[INFO] [stdout] test pattern::tests::test_command_matches_case_insensitive ... ok
[INFO] [stdout] test path_guard::tests::test_resolve_tool_path_tilde_only ... ok
[INFO] [stdout] test pattern::tests::test_command_matches_empty_command ... ok
[INFO] [stdout] test pattern::tests::test_compile_invalid_glob ... ok
[INFO] [stdout] test pattern::tests::test_command_matches_substring ... ok
[INFO] [stdout] test pattern::tests::test_compile_glob_matches ... ok
[INFO] [stdout] test pattern::tests::test_is_known_tool_case_insensitive ... ok
[INFO] [stdout] test pattern::tests::test_is_known_tool_bash ... ok
[INFO] [stdout] test pattern::tests::test_compile_valid_glob ... ok
[INFO] [stdout] test pattern::tests::test_is_known_tool_edit ... ok
[INFO] [stdout] test pattern::tests::test_is_known_tool_read ... ok
[INFO] [stdout] test pattern::tests::test_is_known_tool_search_grep ... ok
[INFO] [stdout] test pattern::tests::test_is_known_tool_searchgrep ... ok
[INFO] [stdout] test pattern::tests::test_is_known_tool_unknown ... ok
[INFO] [stdout] test pattern::tests::test_is_known_tool_write ... ok
[INFO] [stdout] test pattern::tests::test_parse_bare_pattern_absolute ... ok
[INFO] [stdout] test pattern::tests::test_parse_bare_pattern_no_tool ... ok
[INFO] [stdout] test pattern::tests::test_parse_bash_permission ... ok
[INFO] [stdout] test pattern::tests::test_parse_empty_pattern_rejected ... ok
[INFO] [stdout] test pattern::tests::test_parse_empty_tool_name_rejected ... ok
[INFO] [stdout] test pattern::tests::test_parse_no_parens_is_bare_not_error ... ok
[INFO] [stdout] test pattern::tests::test_parse_read_permission ... ok
[INFO] [stdout] test pattern::tests::test_parse_tool_name_case_insensitive ... ok
[INFO] [stdout] test pattern::tests::test_parse_unknown_tool_rejected ... ok
[INFO] [stdout] test pattern::tests::test_path_matches_glob_absolute ... ok
[INFO] [stdout] test pattern::tests::test_parse_write_permission ... ok
[INFO] [stdout] test pattern::tests::test_parse_empty_string_rejected ... ok
[INFO] [stdout] test pattern::tests::test_path_matches_glob_no_match ... ok
[INFO] [stdout] test pattern::tests::test_path_matches_glob_invalid_pattern ... ok
[INFO] [stdout] test pattern::tests::test_path_matches_glob_in_workspace ... ok
[INFO] [stdout] test pattern::tests::test_resolve_absolute_path ... ok
[INFO] [stdout] test pattern::tests::test_resolve_relative_path ... ok
[INFO] [stdout] test pattern::tests::test_resolve_tilde_only ... ok
[INFO] [stdout] test pattern::tests::test_path_matches_glob_relative_pattern ... ok
[INFO] [stdout] test pattern::tests::test_resolve_tilde_path ... ok
[INFO] [stdout] test pattern::tests::test_rule_matches_operation_combined_rule_applies_to_all_ops ... ok
[INFO] [stdout] test pattern::tests::test_rule_matches_operation_command_only_rule ... ok
[INFO] [stdout] test pattern::tests::test_rule_matches_operation_filter_write_only ... ok
[INFO] [stdout] test pattern::tests::test_rule_matches_operation_op_param_default_all_ops ... ok
[INFO] [stdout] test pattern::tests::test_rule_matches_operation_filter_read_only ... ok
[INFO] [stdout] test pattern::tests::test_rule_matches_operation_path_rule ... ok
[INFO] [stdout] test pattern::tests::test_rule_matches_operation_path_rule_applies_to_read_and_write ... ok
[INFO] [stdout] test pattern::tests::test_rule_matches_tool_case_insensitive ... ok
[INFO] [stdout] test pattern::tests::test_rule_matches_tool_matching ... ok
[INFO] [stdout] test pattern::tests::test_rule_matches_tool_not_matching ... ok
[INFO] [stdout] test pattern::tests::test_rule_matches_tool_no_tool_pattern ... ok
[INFO] [stdout] test pattern::tests::test_session_key_format ... ok
[INFO] [stdout] test pattern::tests::test_session_key_lowercases_tool ... ok
[INFO] [stdout] test pattern::tests::test_wildcard_cargo_asterisk_does_not_match_non_cargo ... ok
[INFO] [stdout] test pattern::tests::test_wildcard_cargo_asterisk_matches_subcommands ... ok
[INFO] [stdout] test pattern::tests::test_wildcard_case_insensitive ... ok
[INFO] [stdout] test pattern::tests::test_session_key_preserves_pattern_case ... ok
[INFO] [stdout] test pattern::tests::test_wildcard_bare_asterisk_matches_everything ... ok
[INFO] [stdout] test pattern::tests::test_wildcard_curl_asterisk_no_space ... ok
[INFO] [stdout] test pattern::tests::test_wildcard_curl_asterisk_matches_curl_url ... ok
[INFO] [stdout] test pattern::tests::test_wildcard_asterisk_in_middle ... ok
[INFO] [stdout] test pattern::tests::test_wildcard_curl_asterisk_does_not_match_other_commands ... ok
[INFO] [stdout] test pattern::tests::test_wildcard_curl_alone_no_arg_not_matched_by_curl_space_asterisk ... ok
[INFO] [stdout] test pattern::tests::test_wildcard_curl_piped_to_sh ... ok
[INFO] [stdout] test pattern::tests::test_wildcard_empty_command_no_match_for_non_empty_pattern ... ok
[INFO] [stdout] test pattern::tests::test_wildcard_leading_segment_must_match_start ... ok
[INFO] [stdout] test pattern::tests::test_wildcard_ssh_asterisk_matches_ssh_command ... ok
[INFO] [stdout] test pattern::tests::test_wildcard_sudo_asterisk_matches_sudo_commands ... ok
[INFO] [stdout] test pattern::tests::test_wildcard_wget_asterisk_matches_wget_url ... ok
[INFO] [stdout] test pattern::tests::test_wildcard_empty_pattern_matches ... ok
[INFO] [stdout] test pattern::tests::test_wildcard_no_wildcard_falls_back_to_substring ... ok
[INFO] [stdout] test pattern::tests::test_word_boundary_case_insensitive ... ok
[INFO] [stdout] test pattern::tests::test_wildcard_multiple_asterisks ... ok
[INFO] [stdout] test path_guard::tests::test_is_outside_workspace_complex_dot_dot_traversal ... FAILED
[INFO] [stdout] test pattern::tests::test_wildcard_trailing_segment_must_match_end ... ok
[INFO] [stdout] test pattern::tests::test_word_boundary_dd_does_not_match_inside_word ... ok
[INFO] [stdout] test pattern::tests::test_word_boundary_case_sensitive ... ok
[INFO] [stdout] test pattern::tests::test_word_boundary_dd_matches_at_start ... ok
[INFO] [stdout] test pattern::tests::test_word_boundary_empty_pattern ... ok
[INFO] [stdout] test pattern::tests::test_word_boundary_no_match ... ok
[INFO] [stdout] test pattern::tests::test_word_boundary_respects_punctuation ... ok
[INFO] [stdout] test pattern::tests::test_word_boundary_su_does_not_match_inside_word ... ok
[INFO] [stdout] test pattern::tests::test_word_boundary_su_matches_at_start ... ok
[INFO] [stdout] test pattern::tests::test_word_boundary_su_matches_with_space_prefix ... ok
[INFO] [stdout] test tests::profile_ask_escalates_even_when_guardrails_allow ... ok
[INFO] [stdout] test tests::profile_check_god_mode_bypasses_everything ... ok
[INFO] [stdout] test tests::profile_allow_passes_through_to_guardrails ... ok
[INFO] [stdout] test tests::profile_allow_guardrails_deny_results_in_deny ... ok
[INFO] [stdout] test tests::profile_ask_guardrails_deny_results_in_ask ... ok
[INFO] [stdout] test tests::profile_deny_wins_over_god_mode_false ... ok
[INFO] [stdout] test tests::profile_deny_short_circuits_before_guardrails ... ok
[INFO] [stdout] test tests::profile_deny_guardrails_deny_both_deny ... ok
[INFO] [stdout] test tests::test_allow_git_in_bash_true_bypasses_vcs_deny ... ok
[INFO] [stdout] test tests::profile_none_falls_back_to_normal_check ... ok
[INFO] [stdout] test tests::profile_deny_with_loaded_rules_still_short_circuits ... ok
[INFO] [stdout] test tests::test_allow_git_in_bash_true_allows_gh ... ok
[INFO] [stdout] test tests::test_append_to_permissions_appends_to_existing_deny ... ok
[INFO] [stdout] test tests::test_append_to_permissions_creates_new_file_with_allow ... ok
[INFO] [stdout] test tests::test_append_to_permissions_invalid_json_returns_error ... ok
[INFO] [stdout] test tests::test_append_to_permissions_duplicate_prevention ... ok
[INFO] [stdout] test tests::test_append_to_permissions_atomic_write_no_temp_file_left_behind ... ok
[INFO] [stdout] test tests::test_append_to_permissions_write_failure_returns_error ... ok
[INFO] [stdout] test tests::profile_access_for_unlisted_tool_passes_through ... ok
[INFO] [stdout] test tests::test_append_to_permissions_duplicate_case_insensitive ... ok
[INFO] [stdout] test tests::test_bash_ls_still_allowed_with_vcs_patterns ... ok
[INFO] [stdout] test tests::test_bash_gh_issue_list_denied_by_default ... ok
[INFO] [stdout] test tests::test_check_tool_consults_session_cache_allows ... ok
[INFO] [stdout] test tests::test_append_to_permissions_invalid_target_array ... ok
[INFO] [stdout] test tests::test_check_tool_allow_rule_bypasses_dangerous_patterns ... ok
[INFO] [stdout] test tests::test_bash_git_status_denied_by_default ... ok
[INFO] [stdout] test tests::test_check_tool_session_cache_allow_bypasses_guards ... ok
[INFO] [stdout] test tests::test_check_tool_session_cache_deny_bypasses_guards ... ok
[INFO] [stdout] test tests::test_check_tool_session_cache_deny_on_path ... ok
[INFO] [stdout] test tests::test_check_tool_session_cache_key_consistency ... ok
[INFO] [stdout] test tests::test_check_tool_with_both_command_and_path_command_wins ... ok
[INFO] [stdout] test tests::test_git_write_add_and_commit_allowed ... ok
[INFO] [stdout] test tests::test_check_tool_no_cache_entry_runs_normal_checks ... ok
[INFO] [stdout] test tests::test_git_write_allow_rule_overrides_destructive ... ok
[INFO] [stdout] test tests::test_check_tool_session_cache_allow_session_for_path ... ok
[INFO] [stdout] test tests::test_clear_session ... ok
[INFO] [stdout] test tests::test_git_write_branch_delete_asks ... ok
[INFO] [stdout] test tests::test_git_write_merge_asks ... ok
[INFO] [stdout] test tests::test_command_gate_allow_overrides_vcs_deny ... ok
[INFO] [stdout] test tests::test_git_write_checkout_asks ... ok
[INFO] [stdout] test tests::test_git_write_stash_pop_asks ... ok
[INFO] [stdout] test tests::test_god_mode_bypasses_all_checks ... ok
[INFO] [stdout] test tests::test_god_mode_stored_and_accessible ... ok
[INFO] [stdout] test tests::test_git_write_deny_rule_overrides_default_allow ... ok
[INFO] [stdout] test tests::test_git_write_force_push_denied ... ok
[INFO] [stdout] test tests::test_git_write_rebase_asks ... ok
[INFO] [stdout] test tests::test_guard_type_display ... ok
[INFO] [stdout] test tests::test_git_write_reset_hard_denied ... ok
[INFO] [stdout] test tests::test_check_tool_non_god_mode_passes_with_no_rules ... ok
[INFO] [stdout] test tests::test_permission_rule_both_patterns ... ok
[INFO] [stdout] test tests::test_permission_rule_command_only ... ok
[INFO] [stdout] test tests::test_load_rules_empty_config ... ok
[INFO] [stdout] test tests::test_permission_rule_no_patterns ... ok
[INFO] [stdout] test tests::test_non_bash_tool_git_not_blocked ... ok
[INFO] [stdout] test tests::test_permission_rule_path_only ... ok
[INFO] [stdout] test tests::test_permission_rule_serde_json_compatible ... ok
[INFO] [stdout] test tests::test_session_cache_allow_session ... ok
[INFO] [stdout] test tests::test_persist_decision_non_persistable_returns_error ... ok
[INFO] [stdout] test tests::test_persist_decision_always_allow_creates_file ... ok
[INFO] [stdout] test tests::test_session_cache_allow_once_not_cached ... ok
[INFO] [stdout] test tests::test_settings_paths_new ... ok
[INFO] [stdout] test tests::test_persist_decision_always_deny_appends_to_deny ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_allow_rule_overrides_force_push ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_allow_rule_overrides_reset_hard ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_branch_create_is_allowed ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_branch_delete_asks ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_allow_rule_scoped_to_different_tool_does_not_apply ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_checkout_asks ... ok
[INFO] [stdout] test tests::test_persist_to_hackpi_config_always_allow ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_deny_rule_overrides_default_allow_for_add ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_fetch_is_allowed ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_add_is_allowed ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_destructive_patterns_contain_expected_operations ... ok
[INFO] [stdout] test tests::test_try_reload_with_empty_config ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_force_param_case_insensitive ... ok
[INFO] [stdout] test tests::test_session_cache_deny ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_force_push_is_denied ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_merge_asks ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_force_push_before_push ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_operation_case_insensitive ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_commit_is_allowed ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_pull_is_allowed ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_rebase_asks ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_push_asks_without_force ... ok
[INFO] [stdout] test tests::test_persist_to_hackpi_config_always_deny ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_reset_hard_is_denied ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_reset_mixed_asks ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_stash_is_allowed ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_reset_soft_asks ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_reset_default_mixed_asks ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_reset_hard_before_reset ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_stash_pop_asks ... ok
[INFO] [stdout] test vcs_operation_gate::tests::test_unknown_operation_is_allowed ... ok
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- path_guard::tests::test_is_outside_workspace_complex_dot_dot_traversal stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'path_guard::tests::test_is_outside_workspace_complex_dot_dot_traversal' (4667) panicked at hackpi-guardrails/src/path_guard.rs:668:9:
[INFO] [stdout] complex .. traversal should be detected as outside workspace
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x57c225958c61 - <<std[93043b772a62376c]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[812a354ff5be3162]::fmt::Display>::fmt
[INFO] [stdout]    1:     0x57c22596f21a - core[812a354ff5be3162]::fmt::write
[INFO] [stdout]    2:     0x57c22595d5ac - <alloc[9902a75dd20b7c99]::vec::Vec<u8> as std[93043b772a62376c]::io::Write>::write_fmt
[INFO] [stdout]    3:     0x57c225934386 - std[93043b772a62376c]::panicking::default_hook::{closure#0}
[INFO] [stdout]    4:     0x57c22594f659 - std[93043b772a62376c]::panicking::default_hook
[INFO] [stdout]    5:     0x57c2257bdcc0 - test[8de0c696b8e66f4f]::test_main_inner::<test[8de0c696b8e66f4f]::test_main_static::{closure#0}>::{closure#0}
[INFO] [stdout]    6:     0x57c22594f982 - std[93043b772a62376c]::panicking::panic_with_hook
[INFO] [stdout]    7:     0x57c225934464 - std[93043b772a62376c]::panicking::panic_handler::{closure#0}
[INFO] [stdout]    8:     0x57c22592b979 - std[93043b772a62376c]::sys::backtrace::__rust_end_short_backtrace::<std[93043b772a62376c]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]    9:     0x57c22593520d - __rustc[9fcb67b4460bf95]::rust_begin_unwind
[INFO] [stdout]   10:     0x57c22596f9fc - core[812a354ff5be3162]::panicking::panic_fmt
[INFO] [stdout]   11:     0x57c22576bae1 - <hackpi_guardrails[d0bf7452e9475a6e]::path_guard::tests::test_is_outside_workspace_complex_dot_dot_traversal::{closure#0} as core[812a354ff5be3162]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]   12:     0x57c2257b0ffb - test[8de0c696b8e66f4f]::__rust_begin_short_backtrace::<core[812a354ff5be3162]::result::Result<(), alloc[9902a75dd20b7c99]::string::String>, fn() -> core[812a354ff5be3162]::result::Result<(), alloc[9902a75dd20b7c99]::string::String>>
[INFO] [stdout]   13:     0x57c2257be645 - test[8de0c696b8e66f4f]::run_test::{closure#0}
[INFO] [stdout]   14:     0x57c2257b90f4 - std[93043b772a62376c]::sys::backtrace::__rust_begin_short_backtrace::<test[8de0c696b8e66f4f]::run_test::{closure#1}, ()>
[INFO] [stdout]   15:     0x57c2257c1792 - <std[93043b772a62376c]::thread::lifecycle::spawn_unchecked<test[8de0c696b8e66f4f]::run_test::{closure#1}, ()>::{closure#1} as core[812a354ff5be3162]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]   16:     0x57c225957f3f - <std[93043b772a62376c]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]   17:     0x7fe5fac2707a - <unknown>
[INFO] [stdout]   18:     0x7fe5facba534 - clone
[INFO] [stdout]   19:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     path_guard::tests::test_is_outside_workspace_complex_dot_dot_traversal
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 405 passed; 1 failed; 2 ignored; 0 measured; 0 filtered out; finished in 0.04s
[INFO] [stdout] 
[INFO] [stderr] error: test failed, to rerun pass `-p hackpi-guardrails --lib`
[INFO] running `Command { std: "docker" "inspect" "f19dab789ed72cacfce4189b3097c6eff6165c3218f9823218606d96f1b19f2a", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "f19dab789ed72cacfce4189b3097c6eff6165c3218f9823218606d96f1b19f2a", kill_on_drop: false }`
[INFO] [stdout] f19dab789ed72cacfce4189b3097c6eff6165c3218f9823218606d96f1b19f2a
