[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.97.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-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc1/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-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/michaelasper/hackpi on toolchain 1.97.0-beta.6 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.97.0-beta.6" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/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.97.0-beta.6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Updating crates.io index [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded deadpool-runtime v0.1.4 [INFO] [stderr] Downloaded wasm-bindgen-shared v0.2.121 [INFO] [stderr] Downloaded wasm-bindgen-futures v0.4.71 [INFO] [stderr] Downloaded fs2 v0.4.3 [INFO] [stderr] Downloaded lru v0.12.5 [INFO] [stderr] Downloaded kqueue-sys v1.1.2 [INFO] [stderr] Downloaded grep-matcher v0.1.8 [INFO] [stderr] Downloaded wasm-bindgen-macro v0.2.121 [INFO] [stderr] Downloaded unicode-truncate v1.1.0 [INFO] [stderr] Downloaded wasm-streams v0.4.2 [INFO] [stderr] Downloaded cassowary v0.3.0 [INFO] [stderr] Downloaded xxhash-rust v0.8.15 [INFO] [stderr] Downloaded grep-regex v0.1.14 [INFO] [stderr] Downloaded deadpool v0.12.3 [INFO] [stderr] Downloaded globset v0.4.18 [INFO] [stderr] Downloaded grep-searcher v0.1.16 [INFO] [stderr] Downloaded memmap2 v0.9.10 [INFO] [stderr] Downloaded encoding_rs_io v0.1.7 [INFO] [stderr] Downloaded wiremock v0.6.5 [INFO] [stderr] Downloaded futures v0.3.32 [INFO] [stderr] Downloaded wasm-bindgen v0.2.121 [INFO] [stderr] Downloaded wasm-bindgen-macro-support v0.2.121 [INFO] [stderr] Downloaded openssl-sys v0.9.115 [INFO] [stderr] Downloaded libyml v0.0.5 [INFO] [stderr] Downloaded hyper v1.9.0 [INFO] [stderr] Downloaded h2 v0.4.14 [INFO] [stderr] Downloaded compact_str v0.8.1 [INFO] [stderr] Downloaded cc v1.2.62 [INFO] [stderr] Downloaded js-sys v0.3.98 [INFO] [stderr] Downloaded serde_yml v0.0.12 [INFO] [stderr] Downloaded tower-http v0.6.10 [INFO] [stderr] Downloaded git2 v0.19.0 [INFO] [stderr] Downloaded openssl v0.10.79 [INFO] [stderr] Downloaded bstr v1.12.1 [INFO] [stderr] Downloaded ratatui v0.28.1 [INFO] [stderr] Downloaded libssh2-sys v0.3.1 [INFO] [stderr] Downloaded web-sys v0.3.98 [INFO] [stderr] Downloaded libz-sys v1.1.28 [INFO] [stderr] Downloaded libgit2-sys v0.17.0+1.8.1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:00c5645b54fe3ce5dae1417175e3c7fb6a6646c021d554ecd63a097b8b9f3602" "sleep" "infinity", kill_on_drop: false }` [INFO] [stdout] aaf82120f2e14c4e6dc235808c1de588fc0a5bccbfdae1e0be57c9a65a07ec40 [INFO] running `Command { std: "docker" "start" "aaf82120f2e14c4e6dc235808c1de588fc0a5bccbfdae1e0be57c9a65a07ec40", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "aaf82120f2e14c4e6dc235808c1de588fc0a5bccbfdae1e0be57c9a65a07ec40", 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" "aaf82120f2e14c4e6dc235808c1de588fc0a5bccbfdae1e0be57c9a65a07ec40" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "aaf82120f2e14c4e6dc235808c1de588fc0a5bccbfdae1e0be57c9a65a07ec40", 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" "aaf82120f2e14c4e6dc235808c1de588fc0a5bccbfdae1e0be57c9a65a07ec40" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }` [INFO] [stderr] Compiling log v0.4.29 [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 jobserver v0.1.34 [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 cc v1.2.62 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling socket2 v0.6.3 [INFO] [stderr] Compiling equivalent v1.0.2 [INFO] [stderr] Compiling tinystr v0.8.3 [INFO] [stderr] Compiling zerotrie v0.2.4 [INFO] [stderr] Compiling icu_locale_core v2.2.0 [INFO] [stderr] Compiling tracing-core v0.1.36 [INFO] [stderr] Compiling futures-channel v0.3.32 [INFO] [stderr] Compiling tokio v1.52.3 [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 futures-util v0.3.32 [INFO] [stderr] Compiling aho-corasick v1.1.4 [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 regex-automata v0.4.14 [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 http-body v1.0.1 [INFO] [stderr] Compiling foreign-types-shared v0.1.1 [INFO] [stderr] Compiling openssl v0.10.79 [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 openssl-probe v0.2.1 [INFO] [stderr] Compiling anyhow v1.0.102 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling url v2.5.8 [INFO] [stderr] Compiling inotify-sys v0.1.5 [INFO] [stderr] Compiling instant v0.1.13 [INFO] [stderr] Compiling encoding_rs v0.8.35 [INFO] [stderr] Compiling same-file v1.0.6 [INFO] [stderr] Compiling bitflags v1.3.2 [INFO] [stderr] Compiling rustversion v1.0.22 [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 bstr v1.12.1 [INFO] [stderr] Compiling h2 v0.4.14 [INFO] [stderr] Compiling tower v0.5.3 [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 tower-http v0.6.10 [INFO] [stderr] Compiling hyper v1.9.0 [INFO] [stderr] Compiling globset v0.4.18 [INFO] [stderr] Compiling futures-executor v0.3.32 [INFO] [stderr] Compiling autocfg v1.5.0 [INFO] [stderr] Compiling hyper-util v0.1.20 [INFO] [stderr] Compiling hyper-tls v0.6.0 [INFO] [stderr] Compiling signal-hook v0.3.18 [INFO] [stderr] Compiling ident_case v1.0.1 [INFO] [stderr] Compiling home v0.5.12 [INFO] [stderr] Compiling mime v0.3.17 [INFO] [stderr] Compiling strsim v0.11.1 [INFO] [stderr] Compiling darling_core v0.23.0 [INFO] [stderr] Compiling reqwest v0.12.28 [INFO] [stderr] Compiling hackpi-guardrails v0.1.0 (/opt/rustwide/workdir/hackpi-guardrails) [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 getrandom v0.4.2 [INFO] [stderr] Compiling version_check v0.9.5 [INFO] [stderr] Compiling rustix v0.38.44 [INFO] [stderr] Compiling rustix v1.1.4 [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 foldhash v0.1.5 [INFO] [stderr] Compiling either v1.15.0 [INFO] [stderr] Compiling paste v1.0.15 [INFO] [stderr] Compiling instability v0.3.12 [INFO] [stderr] Compiling allocator-api2 v0.2.21 [INFO] [stderr] Compiling linux-raw-sys v0.12.1 [INFO] [stderr] Compiling itertools v0.13.0 [INFO] [stderr] Compiling hackpi-core v0.1.0 (/opt/rustwide/workdir/hackpi-core) [INFO] [stderr] Compiling darling_macro v0.23.0 [INFO] [stderr] Compiling hashbrown v0.15.5 [INFO] [stderr] Compiling darling v0.23.0 [INFO] [stderr] Compiling strum_macros v0.26.4 [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 openssl-probe v0.1.6 [INFO] [stderr] Compiling static_assertions v1.1.0 [INFO] [stderr] Compiling unicode-width v0.1.14 [INFO] [stderr] Compiling unicode-segmentation v1.13.2 [INFO] [stderr] Compiling iana-time-zone v0.1.65 [INFO] [stderr] Compiling indoc v2.0.7 [INFO] [stderr] Compiling chrono v0.4.44 [INFO] [stderr] Compiling unicode-truncate v1.1.0 [INFO] [stderr] Compiling tempfile v3.27.0 [INFO] [stderr] Compiling compact_str v0.8.1 [INFO] [stderr] Compiling strum v0.26.3 [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 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 fs2 v0.4.3 [INFO] [stderr] Compiling thread_local v1.1.9 [INFO] [stderr] Compiling cassowary v0.3.0 [INFO] [stderr] Compiling xxhash-rust v0.8.15 [INFO] [stderr] Compiling nu-ansi-term v0.50.3 [INFO] [stderr] Compiling hackpi-tools v0.1.0 (/opt/rustwide/workdir/hackpi-tools) [INFO] [stderr] Compiling tracing-subscriber v0.3.23 [INFO] [stderr] Compiling ratatui v0.28.1 [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 5m 57s [INFO] running `Command { std: "docker" "inspect" "aaf82120f2e14c4e6dc235808c1de588fc0a5bccbfdae1e0be57c9a65a07ec40", 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" "aaf82120f2e14c4e6dc235808c1de588fc0a5bccbfdae1e0be57c9a65a07ec40" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.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-tasks v0.1.0 (/opt/rustwide/workdir/hackpi-tasks) [INFO] [stderr] Compiling hackpi-tools v0.1.0 (/opt/rustwide/workdir/hackpi-tools) [INFO] [stderr] Compiling hackpi-tui v0.1.0 (/opt/rustwide/workdir/hackpi-tui) [INFO] [stderr] Finished `release` profile [optimized] target(s) in 3m 31s [INFO] running `Command { std: "docker" "inspect" "aaf82120f2e14c4e6dc235808c1de588fc0a5bccbfdae1e0be57c9a65a07ec40", 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" "aaf82120f2e14c4e6dc235808c1de588fc0a5bccbfdae1e0be57c9a65a07ec40" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "test" "--frozen" "--release", kill_on_drop: false }` [INFO] [stderr] Finished `release` profile [optimized] target(s) in 0.38s [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_mixed_text_and_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_returns_none_when_cancelled ... ok [INFO] [stdout] test agent::conversation::tests::test_build_assistant_message_adds_for_whitespace_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_git_read_via_partial_json ... 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_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::events::tests::test_handle_step_stop_reason_end_turn_returns_true ... ok [INFO] [stdout] test agent::api::tests::test_process_sse_events_accumulates_partial_json ... ok [INFO] [stdout] test agent::api::tests::test_process_sse_events_processes_normally_when_not_cancelled ... 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_end_turn_sends_done_event ... 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_returns_true ... 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_one_byte_over_truncates ... ok [INFO] [stdout] test agent::conversation::tests::test_build_assistant_message_multiple_calls ... 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_over_limit_clips_and_mentions_file ... ok [INFO] [stdout] test agent::state::tests::test_truncate_output_under_limit_passthrough ... ok [INFO] [stdout] test agent::state::tests::test_truncate_output_unsafe_only_tool_id_falls_back ... ok [INFO] [stdout] test agent::state::tests::test_truncate_output_non_ascii_safe_boundary ... 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_sanitizes_tool_id ... ok [INFO] [stdout] test agent::tests::test_atomic_bool_reset_makes_load_return_false ... ok [INFO] [stdout] test api::tests::test_process_sse_stream_carriage_return_line_endings ... ok [INFO] [stdout] test agent::tool_dispatch::tests::test_no_empty_assistant_messages_in_tool_results ... ok [INFO] [stdout] test api::tests::test_process_sse_stream_data_without_space ... 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_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_empty_stream_logs_warning ... 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_exact_fit_does_not_overflow ... ok [INFO] [stdout] test api::tests::test_process_sse_stream_handles_split_utf8 ... 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_incomplete_stream_logs_warning ... ok [INFO] [stdout] test api::tests::test_process_sse_stream_invalid_json_sends_diagnostic ... 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_leftover_bytes_on_eof ... 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_normal_events ... ok [INFO] [stdout] test api::tests::test_process_sse_stream_non_data_lines_ignored ... 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::tests::test_run_does_not_exit_immediately_when_cancelled_reset ... ok [INFO] [stdout] test agent::tool_dispatch::tests::test_malformed_tool_json_returns_system_error ... ok [INFO] [stdout] test api::tests::test_api_client_has_connect_timeout ... ok [INFO] [stdout] test agent::tests::test_run_returns_immediately_when_cancelled_true ... ok [INFO] [stdout] test api::tests::test_send_messages_http_500_returns_error ... ok [INFO] [stdout] test api::tests::test_send_messages_http_401_returns_error ... ok [INFO] [stdout] test agent::tool_dispatch::tests::test_valid_tool_json_passes_through ... ok [INFO] [stdout] test tools::tests::test_dispatch_permission_ask_cancelled_during_wait ... ok [INFO] [stdout] test tools::tests::test_dispatch_with_god_mode_bypasses_checks ... ok [INFO] [stdout] test types::tests::test_api_config_from_env_falls_back_to_defaults ... ok [INFO] [stdout] test tools::tests::test_dispatch_with_profile_allow_passes_through ... ok [INFO] [stdout] test tools::tests::test_dispatch_with_profile_deny_blocks_tool ... ok [INFO] [stdout] test tools::tests::test_dispatch_profile_deny_overrides_guardrail_allow ... 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 tools::tests::test_dispatch_with_allow_guard_executes_normally ... ok [INFO] [stdout] test tools::tests::test_dispatch_with_profile_ask_prompts ... 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 types::tests::test_stream_event_deserializes_tool_input_delta ... ok [INFO] [stdout] test types::tests::test_stream_event_deserializes_usage_without_input_tokens ... 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 tools::tests::test_dispatch_with_unknown_tool_returns_none ... 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] [INFO] [stdout] test result: ok. 91 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.21s [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_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_add_not_flagged_by_dd ... ok [INFO] [stdout] test command_gate::tests::test_allow_rule_for_rm_rf_bypasses_dangerous_patterns ... 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_rm_rf ... ok [INFO] [stdout] test command_gate::tests::test_cat_issue_not_flagged_by_su ... ok [INFO] [stdout] test command_gate::tests::test_case_insensitive_sudo ... ok [INFO] [stdout] test command_gate::tests::test_chmod_lowercase_r_not_flagged ... ok [INFO] [stdout] test command_gate::tests::test_chmod_r_asks ... ok [INFO] [stdout] test command_gate::tests::test_chained_commands_rm_rf_and_curl ... ok [INFO] [stdout] test command_gate::tests::test_chown_r_asks ... ok [INFO] [stdout] test command_gate::tests::test_chmod_r_uses_case_sensitive_matching ... ok [INFO] [stdout] test command_gate::tests::test_chpasswd_denies ... ok [INFO] [stdout] test command_gate::tests::test_config_allow_rule_overrides_vcs_deny ... ok [INFO] [stdout] test command_gate::tests::test_dangerous_patterns_contains_expected_patterns ... ok [INFO] [stdout] test command_gate::tests::test_curl_asks ... ok [INFO] [stdout] test command_gate::tests::test_dd_denies ... ok [INFO] [stdout] test command_gate::tests::test_dangerous_patterns_safe_is_none ... ok [INFO] [stdout] test command_gate::tests::test_deny_rule_overrides_built_in_ask_for_curl ... ok [INFO] [stdout] test command_gate::tests::test_dangerous_patterns_rm_rf_asks ... ok [INFO] [stdout] test command_gate::tests::test_deny_rule_scoped_to_correct_tool_applies ... ok [INFO] [stdout] test command_gate::tests::test_dev_nvme_denies ... 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_dev_sda_denies ... ok [INFO] [stdout] test command_gate::tests::test_doas_denies ... ok [INFO] [stdout] test command_gate::tests::test_fork_bomb_denies ... ok [INFO] [stdout] test command_gate::tests::test_gh_issue_list_denied_by_vcs_pattern ... ok [INFO] [stdout] test command_gate::tests::test_dd_uses_word_boundary_matching ... ok [INFO] [stdout] test command_gate::tests::test_empty_command_allows ... ok [INFO] [stdout] test command_gate::tests::test_dangerous_patterns_sudo_denies ... ok [INFO] [stdout] test command_gate::tests::test_gh_pr_create_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_commit_denied_by_vcs_pattern ... 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_gh_uppercase_denied ... ok [INFO] [stdout] test command_gate::tests::test_git_log_denied_by_vcs_pattern ... ok [INFO] [stdout] test command_gate::tests::test_git_word_boundary_not_inside_other_word ... ok [INFO] [stdout] test command_gate::tests::test_git_uses_word_boundary_matching ... ok [INFO] [stdout] test command_gate::tests::test_ls_not_denied_by_vcs_patterns ... ok [INFO] [stdout] test command_gate::tests::test_mkfs_denies ... ok [INFO] [stdout] test command_gate::tests::test_no_matching_pattern_allows ... ok [INFO] [stdout] test command_gate::tests::test_no_space_dev_nvme_denies ... ok [INFO] [stdout] test command_gate::tests::test_no_space_dev_sda_denies ... ok [INFO] [stdout] test command_gate::tests::test_piped_curl_to_bash_asks_for_curl ... 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_rf_asks ... ok [INFO] [stdout] test command_gate::tests::test_rm_rf_before_rm_r ... ok [INFO] [stdout] test command_gate::tests::test_rules_allow_matches ... ok [INFO] [stdout] test command_gate::tests::test_rules_ask_matches ... ok [INFO] [stdout] test command_gate::tests::test_passwd_denies ... ok [INFO] [stdout] test command_gate::tests::test_rm_r_asks ... ok [INFO] [stdout] test command_gate::tests::test_rules_deny_first_then_allow ... ok [INFO] [stdout] test command_gate::tests::test_rules_deny_matches ... ok [INFO] [stdout] test command_gate::tests::test_rules_no_command_pattern_skipped ... 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_su_uses_word_boundary_matching ... ok [INFO] [stdout] test command_gate::tests::test_echo_sure_not_flagged_by_su ... ok [INFO] [stdout] test command_gate::tests::test_sudo_denies ... ok [INFO] [stdout] test command_gate::tests::test_wildcard_cargo_allow_does_not_match_other_commands ... ok [INFO] [stdout] test command_gate::tests::test_wget_asks ... ok [INFO] [stdout] test command_gate::tests::test_wildcard_cargo_allow_matches_cargo_subcommands ... ok [INFO] [stdout] test command_gate::tests::test_wildcard_bare_asterisk_deny_matches_everything ... 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_allow_overrides_built_in_ask ... ok [INFO] [stdout] test command_gate::tests::test_vcs_patterns_exist_in_dangerous_patterns ... 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_curl_deny_matches_curl_url ... ok [INFO] [stdout] test command_gate::tests::test_wildcard_ssh_deny_does_not_match_echo ... 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_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_claude_settings_no_permissions_block ... ok [INFO] [stdout] test config::tests::test_load_claude_settings_empty_permissions ... ok [INFO] [stdout] test config::tests::test_load_all_claude_local_overrides_claude_project ... ok [INFO] [stdout] test config::tests::test_load_hackpi_config_file_not_found ... ok [INFO] [stdout] test config::tests::test_load_all_skips_missing_files ... ok [INFO] [stdout] test config::tests::test_load_all_higher_priority_overrides_lower ... ok [INFO] [stdout] test config::tests::test_load_claude_settings_with_allow_deny ... ok [INFO] [stdout] test config::tests::test_load_all_partial_failure_recovers ... ok [INFO] [stdout] test config::tests::test_load_all_invalid_json_returns_error ... ok [INFO] [stdout] test config::tests::test_load_hackpi_config_all_sections ... 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_merge_rules_empty_sources ... 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_ask_array ... ok [INFO] [stdout] test config::tests::test_parse_command_gate_block_deny_array ... ok [INFO] [stdout] test config::tests::test_load_hackpi_config_invalid_json ... ok [INFO] [stdout] test config::tests::test_parse_command_gate_block_empty_patterns ... 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_extras_allow_git_in_bash_false ... ok [INFO] [stdout] test config::tests::test_parse_command_gate_block_unknown_action_rejected ... 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_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_load_hackpi_config_minimal ... ok [INFO] [stdout] test config::tests::test_parse_command_gate_block_patterns ... ok [INFO] [stdout] test config::tests::test_parse_file_protection_block_empty ... 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_invalid_operation_value_rejected ... ok [INFO] [stdout] test config::tests::test_parse_file_protection_block_patterns ... ok [INFO] [stdout] test config::tests::test_parse_path_access_block_ask_true_generates_ask_rule ... ok [INFO] [stdout] test config::tests::test_parse_file_protection_block_per_op_rules ... ok [INFO] [stdout] test config::tests::test_parse_file_protection_block_single_op ... 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_allow_deny ... ok [INFO] [stdout] test config::tests::test_parse_file_protection_block_string_instead_of_object_rejected ... ok [INFO] [stdout] test config::tests::test_parse_path_access_block_no_ask_field ... ok [INFO] [stdout] test config::tests::test_parse_path_access_block_ask_false_no_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_none_deny ... ok [INFO] [stdout] test config::tests::test_parse_permissions_block_none_allow ... ok [INFO] [stdout] test config::tests::test_parse_permissions_block_rejects_empty_entry ... 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_missing_closing_paren ... ok [INFO] [stdout] test config::tests::test_parse_permissions_block_rejects_unknown_tool ... 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_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_check_custom_deny_rule_blocks_non_protected ... ok [INFO] [stdout] test file_protection::tests::test_check_non_protected_path_returns_allow ... ok [INFO] [stdout] test file_protection::tests::test_check_secrets_key_pem_read_returns_ask ... 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_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_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_file_rules_tool_scoped_no_match ... 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_tool_scoped_matches ... ok [INFO] [stdout] test file_protection::tests::test_nested_custom_rule_matches_subdirectory ... ok [INFO] [stdout] test file_protection::tests::test_nested_deeply_env_local ... ok [INFO] [stdout] test file_protection::tests::test_nested_credentials_in_subdir ... ok [INFO] [stdout] test file_protection::tests::test_default_protected_patterns_count ... ok [INFO] [stdout] test file_protection::tests::test_key_file_in_deep_path_returns_ask ... ok [INFO] [stdout] test file_protection::tests::test_nested_custom_rule_with_globstar ... ok [INFO] [stdout] test file_protection::tests::test_file_rules_deny_matches ... ok [INFO] [stdout] test file_protection::tests::test_nested_key_in_deep_path ... ok [INFO] [stdout] test file_protection::tests::test_nested_not_protected_returns_none ... ok [INFO] [stdout] test file_protection::tests::test_read_env_returns_ask ... ok [INFO] [stdout] test file_protection::tests::test_nested_git_in_inside_hidden_dir ... ok [INFO] [stdout] test file_protection::tests::test_read_ed25519_key_returns_ask ... ok [INFO] [stdout] test file_protection::tests::test_nested_pem_in_deep_path ... ok [INFO] [stdout] test file_protection::tests::test_read_git_config_returns_allow ... ok [INFO] [stdout] test file_protection::tests::test_read_nested_env_returns_ask ... ok [INFO] [stdout] test file_protection::tests::test_read_secrets_in_subdir_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_key_file_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_read_credentials_file_returns_ask ... ok [INFO] [stdout] test file_protection::tests::test_read_rsa_key_returns_ask ... ok [INFO] [stdout] test file_protection::tests::test_same_file_read_asks_write_denies ... ok [INFO] [stdout] test file_protection::tests::test_read_env_local_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_env_returns_deny ... ok [INFO] [stdout] test file_protection::tests::test_write_nested_env_returns_deny ... ok [INFO] [stdout] test file_protection::tests::test_nested_secrets_deeply ... ok [INFO] [stdout] test file_protection::tests::test_write_ed25519_key_returns_deny ... ok [INFO] [stdout] test file_protection::tests::test_write_git_config_returns_deny ... ok [INFO] [stdout] test hot_reload::tests::test_try_reload_no_config_files_ok ... 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_preserves_old_rules_on_invalid_config ... ok [INFO] [stdout] test hot_reload::tests::test_validate_invalid_glob_err ... ok [INFO] [stdout] test hot_reload::tests::test_validate_rejects_empty_command_pattern ... ok [INFO] [stdout] test hot_reload::tests::test_validate_none_path_and_command_ok ... ok [INFO] [stdout] test hot_reload::tests::test_validate_rejects_invalid_glob_with_brackets ... ok [INFO] [stdout] test hot_reload::tests::test_validate_unknown_tool_err ... ok [INFO] [stdout] test hot_reload::tests::test_validate_valid_glob_with_special_chars_ok ... ok [INFO] [stdout] test hot_reload::tests::test_validate_valid_rules_ok ... 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_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_rejects_unknown_tool_name ... ok [INFO] [stdout] test path_guard::tests::test_check_dot_dot_traversal_asks ... ok [INFO] [stdout] test path_guard::tests::test_check_outside_workspace_with_glob_allow_rule ... 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_path_inside_workspace_allows ... 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_with_deny_rule_denies ... ok [INFO] [stdout] test hot_reload::tests::test_try_reload_with_valid_config ... ok [INFO] [stdout] test hot_reload::tests::test_try_reload_preserves_old_rules_on_invalid_json ... ok [INFO] [stdout] test hot_reload::tests::test_try_reload_preserves_old_rules_when_new_config_is_missing_required_fields ... ok [INFO] [stdout] test path_guard::tests::test_check_rules_absolute_path_pattern ... ok [INFO] [stdout] test path_guard::tests::test_check_rules_ask_action_skipped ... ok [INFO] [stdout] test path_guard::tests::test_check_rules_allow_match ... ok [INFO] [stdout] test path_guard::tests::test_check_rules_deny_match ... 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_relative_path_inside_workspace ... ok [INFO] [stdout] test path_guard::tests::test_check_rules_glob_pattern_nested ... 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_skip_command_only_rules ... 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_rules_tool_scoped_matches_correct_tool ... ok [INFO] [stdout] test path_guard::tests::test_check_symlink_inside_workspace_allows ... ok [INFO] [stdout] test hot_reload::tests::test_try_reload_merge_three_configs ... ok [INFO] [stdout] test path_guard::tests::test_check_symlink_to_outside_asks ... 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_dot_dot_traversal ... ok [INFO] [stdout] test path_guard::tests::test_is_outside_workspace_outside ... ok [INFO] [stdout] test path_guard::tests::test_is_outside_workspace_inside ... ok [INFO] [stdout] test path_guard::tests::test_resolve_tool_path_absolute ... ok [INFO] [stdout] test path_guard::tests::test_resolve_tool_path_dot ... ok [INFO] [stdout] test hot_reload::tests::test_try_reload_atomic_swap_visible_immediately ... ok [INFO] [stdout] test path_guard::tests::test_resolve_tool_path_relative ... ok [INFO] [stdout] test path_guard::tests::test_is_outside_workspace_symlink_resolved_to_inside ... ok [INFO] [stdout] test path_guard::tests::test_is_outside_workspace_workspace_root_itself ... ok [INFO] [stdout] test path_guard::tests::test_is_outside_workspace_symlink_inside_workspace ... ok [INFO] [stdout] test file_protection::tests::test_same_file_git_config_read_allow_write_deny ... ok [INFO] [stdout] test path_guard::tests::test_resolve_tool_path_tilde_only ... ok [INFO] [stdout] test path_guard::tests::test_resolve_tool_path_tilde ... ok [INFO] [stdout] test pattern::tests::test_command_matches_case_insensitive ... ok [INFO] [stdout] test pattern::tests::test_command_matches_case_insensitive_reverse ... ok [INFO] [stdout] test pattern::tests::test_command_matches_empty_command ... ok [INFO] [stdout] test pattern::tests::test_command_matches_substring ... ok [INFO] [stdout] test pattern::tests::test_compile_invalid_glob ... ok [INFO] [stdout] test pattern::tests::test_command_matches_empty_pattern ... 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_case_insensitive ... ok [INFO] [stdout] test pattern::tests::test_compile_glob_matches ... ok [INFO] [stdout] test pattern::tests::test_command_matches_no_match ... 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_parse_write_permission ... ok [INFO] [stdout] test pattern::tests::test_path_matches_glob_invalid_pattern ... ok [INFO] [stdout] test pattern::tests::test_parse_empty_string_rejected ... ok [INFO] [stdout] test pattern::tests::test_path_matches_glob_in_workspace ... ok [INFO] [stdout] test pattern::tests::test_path_matches_glob_no_match ... ok [INFO] [stdout] test pattern::tests::test_path_matches_glob_relative_pattern ... ok [INFO] [stdout] test pattern::tests::test_path_matches_glob_absolute ... ok [INFO] [stdout] test pattern::tests::test_resolve_tilde_only ... ok [INFO] [stdout] test pattern::tests::test_resolve_tilde_path ... ok [INFO] [stdout] test pattern::tests::test_resolve_absolute_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_path_rule_applies_to_read_and_write ... ok [INFO] [stdout] test pattern::tests::test_rule_matches_operation_command_only_rule ... ok [INFO] [stdout] test pattern::tests::test_rule_matches_operation_filter_read_only ... ok [INFO] [stdout] test pattern::tests::test_rule_matches_tool_case_insensitive ... ok [INFO] [stdout] test pattern::tests::test_rule_matches_operation_filter_write_only ... ok [INFO] [stdout] test pattern::tests::test_rule_matches_tool_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_preserves_pattern_case ... ok [INFO] [stdout] test pattern::tests::test_session_key_lowercases_tool ... ok [INFO] [stdout] test pattern::tests::test_wildcard_asterisk_in_middle ... ok [INFO] [stdout] test pattern::tests::test_rule_matches_operation_op_param_default_all_ops ... ok [INFO] [stdout] test pattern::tests::test_wildcard_bare_asterisk_matches_everything ... ok [INFO] [stdout] test pattern::tests::test_wildcard_cargo_asterisk_matches_subcommands ... ok [INFO] [stdout] test pattern::tests::test_wildcard_cargo_asterisk_does_not_match_non_cargo ... ok [INFO] [stdout] test pattern::tests::test_wildcard_case_insensitive ... ok [INFO] [stdout] test pattern::tests::test_rule_matches_operation_path_rule ... 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_asterisk_matches_curl_url ... ok [INFO] [stdout] test pattern::tests::test_wildcard_curl_asterisk_no_space ... ok [INFO] [stdout] test pattern::tests::test_resolve_relative_path ... ok [INFO] [stdout] test pattern::tests::test_rule_matches_tool_not_matching ... ok [INFO] [stdout] test pattern::tests::test_wildcard_curl_asterisk_does_not_match_other_commands ... ok [INFO] [stdout] test pattern::tests::test_wildcard_empty_command_no_match_for_non_empty_pattern ... ok [INFO] [stdout] test pattern::tests::test_wildcard_empty_pattern_matches ... ok [INFO] [stdout] test pattern::tests::test_wildcard_curl_piped_to_sh ... 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_word_boundary_case_sensitive ... ok [INFO] [stdout] test pattern::tests::test_wildcard_no_wildcard_falls_back_to_substring ... 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_trailing_segment_must_match_end ... ok [INFO] [stdout] test pattern::tests::test_wildcard_wget_asterisk_matches_wget_url ... ok [INFO] [stdout] test pattern::tests::test_word_boundary_dd_does_not_match_inside_word ... ok [INFO] [stdout] test pattern::tests::test_wildcard_leading_segment_must_match_start ... 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_case_insensitive ... 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_with_space_prefix ... ok [INFO] [stdout] test pattern::tests::test_word_boundary_su_matches_at_start ... ok [INFO] [stdout] test tests::profile_allow_passes_through_to_guardrails ... ok [INFO] [stdout] test tests::profile_ask_escalates_even_when_guardrails_allow ... 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_check_god_mode_bypasses_everything ... ok [INFO] [stdout] test tests::profile_deny_guardrails_deny_both_deny ... ok [INFO] [stdout] test tests::profile_deny_with_loaded_rules_still_short_circuits ... ok [INFO] [stdout] test tests::profile_deny_short_circuits_before_guardrails ... ok [INFO] [stdout] test tests::profile_deny_wins_over_god_mode_false ... ok [INFO] [stdout] test tests::test_allow_git_in_bash_true_allows_gh ... ok [INFO] [stdout] test tests::test_append_to_permissions_duplicate_case_insensitive ... ok [INFO] [stdout] test tests::profile_access_for_unlisted_tool_passes_through ... ok [INFO] [stdout] test tests::profile_none_falls_back_to_normal_check ... ok [INFO] [stdout] test tests::test_append_to_permissions_invalid_json_returns_error ... ok [INFO] [stdout] test tests::test_append_to_permissions_creates_new_file_with_allow ... ok [INFO] [stdout] test tests::test_append_to_permissions_write_failure_returns_error ... ok [INFO] [stdout] test tests::test_allow_git_in_bash_true_bypasses_vcs_deny ... ok [INFO] [stdout] test tests::test_append_to_permissions_appends_to_existing_deny ... ok [INFO] [stdout] test tests::test_bash_ls_still_allowed_with_vcs_patterns ... ok [INFO] [stdout] test tests::test_check_tool_no_cache_entry_runs_normal_checks ... ok [INFO] [stdout] test tests::test_check_tool_allow_rule_bypasses_dangerous_patterns ... ok [INFO] [stdout] test tests::test_check_tool_consults_session_cache_allows ... ok [INFO] [stdout] test tests::test_check_tool_session_cache_allow_bypasses_guards ... 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_duplicate_prevention ... ok [INFO] [stdout] test tests::test_check_tool_session_cache_allow_session_for_path ... ok [INFO] [stdout] test tests::test_check_tool_session_cache_deny_bypasses_guards ... ok [INFO] [stdout] test tests::test_check_tool_with_both_command_and_path_command_wins ... ok [INFO] [stdout] test tests::test_check_tool_session_cache_deny_on_path ... ok [INFO] [stdout] test tests::test_clear_session ... ok [INFO] [stdout] test tests::test_git_write_add_and_commit_allowed ... ok [INFO] [stdout] test tests::test_bash_gh_issue_list_denied_by_default ... ok [INFO] [stdout] test tests::test_check_tool_session_cache_key_consistency ... ok [INFO] [stdout] test tests::test_command_gate_allow_overrides_vcs_deny ... ok [INFO] [stdout] test tests::test_git_write_allow_rule_overrides_destructive ... ok [INFO] [stdout] test tests::test_git_write_branch_delete_asks ... ok [INFO] [stdout] test tests::test_git_write_checkout_asks ... ok [INFO] [stdout] test tests::test_bash_git_status_denied_by_default ... ok [INFO] [stdout] test tests::test_check_tool_non_god_mode_passes_with_no_rules ... ok [INFO] [stdout] test tests::test_god_mode_bypasses_all_checks ... ok [INFO] [stdout] test tests::test_git_write_rebase_asks ... 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_merge_asks ... ok [INFO] [stdout] test tests::test_god_mode_stored_and_accessible ... ok [INFO] [stdout] test tests::test_guard_type_display ... 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_append_to_permissions_invalid_target_array ... ok [INFO] [stdout] test tests::test_permission_rule_no_patterns ... ok [INFO] [stdout] test tests::test_permission_rule_path_only ... ok [INFO] [stdout] test tests::test_non_bash_tool_git_not_blocked ... ok [INFO] [stdout] test tests::test_permission_rule_serde_json_compatible ... ok [INFO] [stdout] test tests::test_session_cache_allow_once_not_cached ... ok [INFO] [stdout] test tests::test_git_write_reset_hard_denied ... ok [INFO] [stdout] test tests::test_persist_decision_always_allow_creates_file ... ok [INFO] [stdout] test tests::test_persist_to_hackpi_config_always_deny ... ok [INFO] [stdout] test tests::test_persist_decision_always_deny_appends_to_deny ... ok [INFO] [stdout] test tests::test_persist_to_hackpi_config_always_allow ... ok [INFO] [stdout] test tests::test_session_cache_deny ... ok [INFO] [stdout] test tests::test_session_cache_allow_session ... ok [INFO] [stdout] test tests::test_settings_paths_new ... ok [INFO] [stdout] test tests::test_try_reload_with_empty_config ... ok [INFO] [stdout] test vcs_operation_gate::tests::test_add_is_allowed ... 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_scoped_to_different_tool_does_not_apply ... 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 tests::test_git_write_stash_pop_asks ... ok [INFO] [stdout] test tests::test_persist_decision_non_persistable_returns_error ... ok [INFO] [stdout] test vcs_operation_gate::tests::test_branch_delete_asks ... ok [INFO] [stderr] error: test failed, to rerun pass `-p hackpi-guardrails --lib` [INFO] [stdout] test vcs_operation_gate::tests::test_checkout_asks ... ok [INFO] [stdout] test vcs_operation_gate::tests::test_commit_is_allowed ... 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_force_param_case_insensitive ... ok [INFO] [stdout] test vcs_operation_gate::tests::test_destructive_patterns_contain_expected_operations ... ok [INFO] [stdout] test vcs_operation_gate::tests::test_force_push_before_push ... ok [INFO] [stdout] test vcs_operation_gate::tests::test_force_push_is_denied ... ok [INFO] [stdout] test vcs_operation_gate::tests::test_pull_is_allowed ... ok [INFO] [stdout] test vcs_operation_gate::tests::test_merge_asks ... ok [INFO] [stdout] test vcs_operation_gate::tests::test_operation_case_insensitive ... ok [INFO] [stdout] test vcs_operation_gate::tests::test_reset_default_mixed_asks ... ok [INFO] [stdout] test vcs_operation_gate::tests::test_push_asks_without_force ... ok [INFO] [stdout] test vcs_operation_gate::tests::test_rebase_asks ... ok [INFO] [stdout] test vcs_operation_gate::tests::test_reset_hard_before_reset ... 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_reset_soft_asks ... 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] test vcs_operation_gate::tests::test_stash_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' (4664) 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: 0x56082639c468 - <::print::DisplayBacktrace as core[8fb95b77d25ab6c8]::fmt::Display>::fmt [INFO] [stdout] 1: 0x5608263b26ba - core[8fb95b77d25ab6c8]::fmt::write [INFO] [stdout] 2: 0x5608263a1072 - as std[10d71ac2c42b111e]::io::Write>::write_fmt [INFO] [stdout] 3: 0x560826378906 - std[10d71ac2c42b111e]::panicking::default_hook::{closure#0} [INFO] [stdout] 4: 0x560826393589 - std[10d71ac2c42b111e]::panicking::default_hook [INFO] [stdout] 5: 0x56082620583c - test[213991da798b1c03]::test_main_inner::::{closure#0} [INFO] [stdout] 6: 0x560826393802 - std[10d71ac2c42b111e]::panicking::panic_with_hook [INFO] [stdout] 7: 0x5608263789f4 - std[10d71ac2c42b111e]::panicking::panic_handler::{closure#0} [INFO] [stdout] 8: 0x56082636d899 - std[10d71ac2c42b111e]::sys::backtrace::__rust_end_short_backtrace:: [INFO] [stdout] 9: 0x56082637985d - __rustc[3be9ba60078d4c86]::rust_begin_unwind [INFO] [stdout] 10: 0x5608263b2e5c - core[8fb95b77d25ab6c8]::panicking::panic_fmt [INFO] [stdout] 11: 0x5608261eda40 - hackpi_guardrails[6b3dfb250d9db171]::path_guard::tests::test_is_outside_workspace_complex_dot_dot_traversal [INFO] [stdout] 12: 0x5608261ac209 - >::call_once [INFO] [stdout] 13: 0x5608261f891b - test[213991da798b1c03]::__rust_begin_short_backtrace::, fn() -> core[8fb95b77d25ab6c8]::result::Result<(), alloc[a7ee25936407c584]::string::String>> [INFO] [stdout] 14: 0x560826206195 - test[213991da798b1c03]::run_test::{closure#0} [INFO] [stdout] 15: 0x5608261ffaa4 - std[10d71ac2c42b111e]::sys::backtrace::__rust_begin_short_backtrace:: [INFO] [stdout] 16: 0x560826209212 - ::{closure#1} as core[8fb95b77d25ab6c8]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} [INFO] [stdout] 17: 0x56082639b87f - ::new::thread_start [INFO] [stdout] 18: 0x79b17dc7407a - [INFO] [stdout] 19: 0x79b17dd07534 - clone [INFO] [stdout] 20: 0x0 - [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.07s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "aaf82120f2e14c4e6dc235808c1de588fc0a5bccbfdae1e0be57c9a65a07ec40", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "aaf82120f2e14c4e6dc235808c1de588fc0a5bccbfdae1e0be57c9a65a07ec40", kill_on_drop: false }` [INFO] [stdout] aaf82120f2e14c4e6dc235808c1de588fc0a5bccbfdae1e0be57c9a65a07ec40