[INFO] cloning repository https://github.com/morgaesis/ssh-guard
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/morgaesis/ssh-guard" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmorgaesis%2Fssh-guard", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmorgaesis%2Fssh-guard'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] d73f0ab166c4c0186cdb6eeb4566348edd439096
[INFO] testing morgaesis/ssh-guard against 1.98.0-beta.1 for beta-1.98-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmorgaesis%2Fssh-guard" "/workspace/builds/worker-4-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/morgaesis/ssh-guard
[INFO] finished tweaking git repo https://github.com/morgaesis/ssh-guard
[INFO] tweaked toml for git repo https://github.com/morgaesis/ssh-guard written to /workspace/builds/worker-4-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/morgaesis/ssh-guard on toolchain 1.98.0-beta.1
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.98.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/morgaesis/ssh-guard 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.1" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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:3d5ced03c013a94a2f102a4510f48a6e9184255caf5fd8244f58017bde7f5210" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 053f28ada7551af323b5d95ba51139aed5f0da771eb9235593d214796a86987f
[INFO] running `Command { std: "docker" "start" "053f28ada7551af323b5d95ba51139aed5f0da771eb9235593d214796a86987f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "053f28ada7551af323b5d95ba51139aed5f0da771eb9235593d214796a86987f", 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" "053f28ada7551af323b5d95ba51139aed5f0da771eb9235593d214796a86987f" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "053f28ada7551af323b5d95ba51139aed5f0da771eb9235593d214796a86987f", 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" "053f28ada7551af323b5d95ba51139aed5f0da771eb9235593d214796a86987f" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.186
[INFO] [stderr]    Compiling pin-project-lite v0.2.17
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling stable_deref_trait v1.2.1
[INFO] [stderr]    Compiling futures-core v0.3.32
[INFO] [stderr]    Compiling bytes v1.11.1
[INFO] [stderr]    Compiling futures-sink v0.3.32
[INFO] [stderr]    Compiling itoa v1.0.17
[INFO] [stderr]    Compiling once_cell v1.21.4
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling cc v1.2.56
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling litemap v0.8.1
[INFO] [stderr]    Compiling futures-io v0.3.32
[INFO] [stderr]    Compiling writeable v0.6.2
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling futures-task v0.3.32
[INFO] [stderr]    Compiling zeroize v1.8.2
[INFO] [stderr]    Compiling hashbrown v0.16.1
[INFO] [stderr]    Compiling icu_properties_data v2.1.2
[INFO] [stderr]    Compiling futures-channel v0.3.32
[INFO] [stderr]    Compiling log v0.4.29
[INFO] [stderr]    Compiling icu_normalizer_data v2.1.1
[INFO] [stderr]    Compiling untrusted v0.9.0
[INFO] [stderr]    Compiling percent-encoding v2.3.2
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling http v1.4.0
[INFO] [stderr]    Compiling rustls-pki-types v1.14.0
[INFO] [stderr]    Compiling atomic-waker v1.1.2
[INFO] [stderr]    Compiling bitflags v2.11.0
[INFO] [stderr]    Compiling try-lock v0.2.5
[INFO] [stderr]    Compiling rustls v0.23.38
[INFO] [stderr]    Compiling base64 v0.22.1
[INFO] [stderr]    Compiling tower-service v0.3.3
[INFO] [stderr]    Compiling typenum v1.20.1
[INFO] [stderr]    Compiling want v0.3.1
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling rand_core v0.10.0
[INFO] [stderr]    Compiling subtle v2.6.1
[INFO] [stderr]    Compiling vcpkg v0.2.15
[INFO] [stderr]    Compiling zmij v1.0.21
[INFO] [stderr]    Compiling httpdate v1.0.3
[INFO] [stderr]    Compiling regex-syntax v0.8.10
[INFO] [stderr]    Compiling pkg-config v0.3.33
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling sync_wrapper v1.0.2
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling powerfmt v0.2.0
[INFO] [stderr]    Compiling indexmap v2.13.0
[INFO] [stderr]    Compiling tower-layer v0.3.3
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling cpufeatures v0.3.0
[INFO] [stderr]    Compiling deranged v0.5.8
[INFO] [stderr]    Compiling utf8_iter v1.0.4
[INFO] [stderr]    Compiling anstyle v1.0.13
[INFO] [stderr]    Compiling num-conv v0.2.2
[INFO] [stderr]    Compiling ipnet v2.12.0
[INFO] [stderr]    Compiling time-core v0.1.9
[INFO] [stderr]    Compiling hybrid-array v0.4.12
[INFO] [stderr]    Compiling ryu v1.0.23
[INFO] [stderr]    Compiling serde_json v1.0.150
[INFO] [stderr]    Compiling colorchoice v1.0.4
[INFO] [stderr]    Compiling hashbrown v0.17.1
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling anstream v1.0.0
[INFO] [stderr]    Compiling webpki-roots v1.0.7
[INFO] [stderr]    Compiling option-ext v0.2.0
[INFO] [stderr]    Compiling iri-string v0.7.12
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling socket2 v0.6.3
[INFO] [stderr]    Compiling mio v1.2.0
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling crypto-common v0.2.2
[INFO] [stderr]    Compiling block-buffer v0.12.1
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling clap_lex v1.0.0
[INFO] [stderr]    Compiling anyhow v1.0.103
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling const-oid v0.10.2
[INFO] [stderr]    Compiling lazy_static v1.5.0
[INFO] [stderr]    Compiling clap_builder v4.6.0
[INFO] [stderr]    Compiling hashlink v0.12.0
[INFO] [stderr]    Compiling sharded-slab v0.1.7
[INFO] [stderr]    Compiling dirs-sys v0.5.0
[INFO] [stderr]    Compiling time v0.3.51
[INFO] [stderr]    Compiling rtoolbox v0.0.3
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling pem v3.0.6
[INFO] [stderr]    Compiling chacha20 v0.10.0
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling thread_local v1.1.9
[INFO] [stderr]    Compiling unsafe-libyaml v0.2.11
[INFO] [stderr]    Compiling nu-ansi-term v0.50.3
[INFO] [stderr]    Compiling fastrand v2.3.0
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]    Compiling libsqlite3-sys v0.38.1
[INFO] [stderr]    Compiling fallible-iterator v0.3.0
[INFO] [stderr]    Compiling guard v0.4.0 (/opt/rustwide/workdir)
[INFO] [stderr]    Compiling yasna v0.6.0
[INFO] [stderr]    Compiling fallible-streaming-iterator v0.1.9
[INFO] [stderr]    Compiling rand v0.10.1
[INFO] [stderr]    Compiling rpassword v7.5.3
[INFO] [stderr]    Compiling dirs v6.0.0
[INFO] [stderr]    Compiling uzers v0.12.2
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling digest v0.11.3
[INFO] [stderr]    Compiling sha2 v0.11.0
[INFO] [stderr]    Compiling dotenvy v0.15.7
[INFO] [stderr]    Compiling shell-words v1.1.1
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling tokio-macros v2.7.0
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling clap_derive v4.6.1
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling tokio v1.52.3
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling zerofrom v0.1.6
[INFO] [stderr]    Compiling yoke v0.8.1
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling zerovec v0.11.5
[INFO] [stderr]    Compiling zerotrie v0.2.3
[INFO] [stderr]    Compiling clap v4.6.1
[INFO] [stderr]    Compiling matchers v0.2.0
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling tinystr v0.8.2
[INFO] [stderr]    Compiling potential_utf v0.1.4
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling icu_collections v2.1.1
[INFO] [stderr]    Compiling rustls-webpki v0.103.13
[INFO] [stderr]    Compiling rcgen v0.14.8
[INFO] [stderr]    Compiling icu_locale_core v2.1.1
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling icu_provider v2.1.1
[INFO] [stderr]    Compiling icu_properties v2.1.2
[INFO] [stderr]    Compiling icu_normalizer v2.1.1
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling serde_yaml v0.9.34+deprecated
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling tower-http v0.6.8
[INFO] [stderr]    Compiling h2 v0.4.15
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling hyper v1.10.1
[INFO] [stderr]    Compiling rusqlite v0.40.1
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling reqwest v0.12.28
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 50s
[INFO] running `Command { std: "docker" "inspect" "053f28ada7551af323b5d95ba51139aed5f0da771eb9235593d214796a86987f", 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" "053f28ada7551af323b5d95ba51139aed5f0da771eb9235593d214796a86987f" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling guard v0.4.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 36.46s
[INFO] running `Command { std: "docker" "inspect" "053f28ada7551af323b5d95ba51139aed5f0da771eb9235593d214796a86987f", 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" "053f28ada7551af323b5d95ba51139aed5f0da771eb9235593d214796a86987f" "/opt/rustwide/cargo-home/bin/cargo" "+1.98.0-beta.1" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.38s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/guard-ed1b977e71f616c2)
[INFO] [stdout] 
[INFO] [stdout] running 346 tests
[INFO] [stdout] test evaluate::tests::cache_miss_returns_none ... ok
[INFO] [stdout] test evaluate::tests::decision_parses_reversibility_when_present ... ok
[INFO] [stdout] test evaluate::tests::cache_hit_returns_cached_allow ... ok
[INFO] [stdout] test evaluate::tests::cache_caches_both_allow_and_deny ... ok
[INFO] [stdout] test evaluate::tests::cache_evicts_oldest_when_full ... ok
[INFO] [stdout] test evaluate::tests::test_chat_bodies_use_reasoning_compatible_token_budget ... ok
[INFO] [stdout] test evaluate::tests::schema_requires_reversibility_only_when_gating ... ok
[INFO] [stdout] test evaluate::tests::test_decision_from_value_missing_risk ... ok
[INFO] [stdout] test evaluate::tests::test_direct_openai_chat_body_uses_native_reasoning_effort ... ok
[INFO] [stdout] test evaluate::tests::test_decision_from_value_case_insensitive ... ok
[INFO] [stdout] test evaluate::tests::test_eval_config_builder ... ok
[INFO] [stdout] test evaluate::tests::test_eval_result_display ... ok
[INFO] [stdout] test evaluate::tests::test_eval_result_helpers ... ok
[INFO] [stdout] test evaluate::tests::test_decision_from_value_rejects_garbage ... ok
[INFO] [stdout] test evaluate::tests::test_lax_extract_json_direct ... ok
[INFO] [stdout] test evaluate::tests::test_lax_extract_json_invalid_errors ... ok
[INFO] [stdout] test evaluate::tests::gating_off_prompt_excludes_appendix ... ok
[INFO] [stdout] test evaluate::tests::evaluate_with_context_session_prompt_does_not_seed_cache ... ok
[INFO] [stdout] test evaluate::tests::allow_only_policy_falls_through_to_llm_on_no_match ... ok
[INFO] [stdout] test evaluate::tests::allow_promotion_observation_without_store_is_noop ... ok
[INFO] [stdout] test evaluate::tests::gating_on_prompt_includes_appendix ... ok
[INFO] [stdout] test evaluate::tests::test_lax_extract_json_nested_object_balanced ... ok
[INFO] [stdout] test evaluate::tests::mark_allow_promotion_resolved_without_store_is_noop ... ok
[INFO] [stdout] test evaluate::tests::test_lax_extract_json_markdown_wrapped ... ok
[INFO] [stdout] test evaluate::tests::deny_shape_observation_without_llm_key_does_not_error ... ok
[INFO] [stdout] test evaluate::tests::deny_only_policy_falls_through_to_llm_on_no_match ... ok
[INFO] [stdout] test evaluate::tests::test_lax_extract_json_plain_fence ... ok
[INFO] [stdout] test evaluate::tests::learned_rule_observation_does_not_bypass_llm ... ok
[INFO] [stdout] test evaluate::tests::test_llm_config_builder ... ok
[INFO] [stdout] test evaluate::tests::test_llm_config_effective_retries_capped ... ok
[INFO] [stdout] test evaluate::tests::test_lax_extract_json_with_prose ... ok
[INFO] [stdout] test evaluate::tests::test_llm_config_defaults ... ok
[INFO] [stdout] test evaluate::tests::test_llm_config_model_chain_default_single ... ok
[INFO] [stdout] test evaluate::tests::test_llm_config_model_chain_uses_models_when_set ... ok
[INFO] [stdout] test evaluate::tests::test_parse_decision_response_accepts_tool_call_when_content_expected ... ok
[INFO] [stdout] test evaluate::tests::test_parse_json_content_accepts_text_parts ... ok
[INFO] [stdout] test evaluate::tests::reevaluate_flag_skips_only_the_learned_deny_store ... ok
[INFO] [stdout] test evaluate::tests::test_parse_tool_call_success ... ok
[INFO] [stdout] test evaluate::tests::test_parse_decision_response_accepts_content_when_tool_call_expected ... ok
[INFO] [stdout] test evaluate::tests::test_parse_tool_call_no_tool_calls ... ok
[INFO] [stdout] test evaluate::tests::test_parse_json_content_empty ... ok
[INFO] [stdout] test evaluate::tests::test_parse_json_content_markdown_wrapped ... ok
[INFO] [stdout] test evaluate::tests::test_parse_tool_call_wrong_function_name ... ok
[INFO] [stdout] test evaluate::tests::test_provider_error_summary_is_bounded ... ok
[INFO] [stdout] test evaluate::tests::learned_deny_shape_fast_rejects_without_llm ... ok
[INFO] [stdout] test evaluate::tests::mark_allow_promotion_resolved_permanently_excludes_the_bucket ... ok
[INFO] [stdout] test evaluate::tests::test_parse_json_content_success ... ok
[INFO] [stdout] test evaluate::tests::cache_ttl_expires_entry ... ok
[INFO] [stdout] test evaluate::tests::test_lax_extract_json_trailing_comma ... ok
[INFO] [stdout] test evaluate::tests::test_lax_extract_json_unquoted_keys ... ok
[INFO] [stdout] test evaluate::tests::test_redact_for_llm_anthropic_key ... ok
[INFO] [stdout] test evaluate::tests::test_redact_for_llm_aws_access_key_id ... ok
[INFO] [stdout] test evaluate::tests::test_redact_for_llm_aws_secret_with_context ... ok
[INFO] [stdout] test evaluate::tests::test_redact_for_llm_leaves_benign_text_alone ... ok
[INFO] [stdout] test evaluate::tests::test_response_shape_summary_is_structural ... ok
[INFO] [stdout] test evaluate::tests::test_redact_for_llm_env_pair ... ok
[INFO] [stdout] test evaluate::tests::test_redact_for_llm_pem_block ... ok
[INFO] [stdout] test evaluate::tests::test_redact_for_llm_openai_key ... ok
[INFO] [stdout] test evaluate::tests::test_redact_for_llm_json_apikey ... ok
[INFO] [stdout] test evaluate::tests::test_redact_for_llm_openrouter_key ... ok
[INFO] [stdout] test evaluate::tests::test_redact_for_llm_bearer_standalone ... ok
[INFO] [stdout] test evaluate::tests::test_redact_for_llm_hex_value_catchall ... ok
[INFO] [stdout] test evaluate::tests::try_confirm_verb_promotion_parameterized_without_llm_key_declines ... ok
[INFO] [stdout] test evaluate::tests::try_confirm_verb_promotion_literal_shape_needs_no_llm ... ok
[INFO] [stdout] test evaluate::tests::try_confirm_verb_promotion_recoverable_literal_without_revert_is_rejected ... ok
[INFO] [stdout] test evaluate::tests::test_redact_for_llm_idempotent ... ok
[INFO] [stdout] test evaluate::tests::test_redact_for_llm_jwt ... ok
[INFO] [stdout] test gating::allow_promotion::tests::choose_verb_name_prefers_valid_model_proposal ... ok
[INFO] [stdout] test gating::allow_promotion::tests::derive_template_finds_varying_and_constant_positions ... ok
[INFO] [stdout] test gating::allow_promotion::tests::dangerous_command_is_never_recorded ... ok
[INFO] [stdout] test gating::allow_promotion::tests::deterministic_name_is_kebab_case ... ok
[INFO] [stdout] test gating::allow_promotion::tests::irreversible_is_never_recorded ... ok
[INFO] [stdout] test gating::allow_promotion::tests::degenerate_min_approvals_does_not_fire_on_the_first_approval ... ok
[INFO] [stdout] test gating::allow_promotion::tests::derive_template_all_constant_is_fully_literal ... ok
[INFO] [stdout] test gating::allow_promotion::tests::build_args_and_params_escapes_regex_metacharacters_in_values ... ok
[INFO] [stdout] test gating::allow_promotion::tests::build_args_and_params_pins_exact_observed_values ... ok
[INFO] [stdout] test gating::allow_promotion::tests::build_args_and_params_disambiguates_colliding_names ... ok
[INFO] [stdout] test evaluate::tests::test_embedded_provider_error_is_client_error_not_parse_noise ... ok
[INFO] [stdout] test gating::approval::tests::approve_executes_from_snapshot_only ... ok
[INFO] [stdout] test gating::approval::tests::cannot_approve_twice ... ok
[INFO] [stdout] test gating::allow_promotion::tests::mark_resolved_on_missing_bucket_is_a_harmless_noop ... ok
[INFO] [stdout] test gating::approval::tests::caps_count_pending_and_approving ... ok
[INFO] [stdout] test gating::approval::tests::deny_is_terminal ... ok
[INFO] [stdout] test gating::allow_promotion::tests::missing_reversibility_is_never_recorded ... ok
[INFO] [stdout] test gating::approval::tests::expiry_is_fail_closed_on_timer ... ok
[INFO] [stdout] test gating::approval::tests::fingerprint_changes_when_inputs_change ... ok
[INFO] [stdout] test gating::approval::tests::none_owner_never_shares_quota_with_none_caller ... ok
[INFO] [stdout] test gating::approval::tests::startup_recovery_marks_interrupted_exec_failed ... ok
[INFO] [stdout] test gating::deny_shape::tests::deny_shape_store_never_exposes_an_allow_path ... ok
[INFO] [stdout] test gating::deny_shape::tests::disabled_store_records_nothing ... ok
[INFO] [stdout] test gating::allow_promotion::tests::param_name_falls_back_to_positional_with_no_preceding_flag ... ok
[INFO] [stdout] test gating::deny_shape::tests::promote_shape_rejects_degenerate_short_wildcard_pattern ... ok
[INFO] [stdout] test gating::allow_promotion::tests::repeated_reversible_approvals_become_ready_once ... ok
[INFO] [stdout] test gating::deny_shape::tests::matches_rejects_path_qualified_spoof_like_binary_allowed_does ... ok
[INFO] [stdout] test gating::deny_shape::tests::promote_shape_rejects_unanchored_pattern ... ok
[INFO] [stdout] test gating::deny_shape::tests::promote_shape_rejects_overbroad_pattern ... ok
[INFO] [stdout] test gating::allow_promotion::tests::risk_at_or_above_ceiling_is_not_recorded ... ok
[INFO] [stdout] test gating::deny_shape::tests::split_command_line_handles_no_args ... ok
[INFO] [stdout] test gating::provisional::tests::caps_count_outstanding_only ... ok
[INFO] [stdout] test gating::provisional::tests::confirm_cancels_timer ... ok
[INFO] [stdout] test gating::deny_shape::tests::promote_shape_rejects_pattern_that_does_not_match_its_own_evidence ... ok
[INFO] [stdout] test gating::provisional::tests::confirm_unknown_handle_errs ... ok
[INFO] [stdout] test gating::provisional::tests::none_owner_never_shares_quota_with_none_caller ... ok
[INFO] [stdout] test gating::provisional::tests::prune_terminal_drops_old_confirmed ... ok
[INFO] [stdout] test gating::provisional::tests::revert_outcomes_recorded ... ok
[INFO] [stdout] test gating::allow_promotion::tests::mixed_classification_permanently_disqualifies_the_bucket ... ok
[INFO] [stdout] test gating::provisional::tests::take_due_only_claims_armed_past_deadline ... ok
[INFO] [stdout] test gating::provisional::tests::startup_recovery_never_auto_fires ... ok
[INFO] [stdout] test gating::deny_shape::tests::repeated_denials_become_ready_to_synthesize_once ... ok
[INFO] [stdout] test gating::read_grant::tests::clamp_ttl_bounds_range ... ok
[INFO] [stdout] test gating::read_grant::tests::ancestor_dirs_reject_target_outside_boundary ... ok
[INFO] [stdout] test gating::read_grant::tests::deny_list_blocks_cloud_and_db_credential_files ... ok
[INFO] [stdout] test gating::read_grant::tests::deny_list_blocks_credential_dirs_and_files ... ok
[INFO] [stdout] test gating::read_grant::tests::deny_list_blocks_kubeconfig ... ok
[INFO] [stdout] test gating::read_grant::tests::deny_list_blocks_dotenv_and_variants ... ok
[INFO] [stdout] test gating::read_grant::tests::ancestor_dirs_walk_up_to_boundary_inclusive ... ok
[INFO] [stdout] test gating::read_grant::tests::deny_list_blocks_terraform_state ... ok
[INFO] [stdout] test gating::read_grant::tests::deny_list_blocks_unknown_ssh_files_fail_closed ... ok
[INFO] [stdout] test gating::read_grant::tests::deny_list_blocks_vault_pass_anywhere ... ok
[INFO] [stdout] test gating::read_grant::tests::deny_list_rejects_relative_paths ... ok
[INFO] [stdout] test gating::read_grant::tests::from_rows_returns_interrupted_reverts_to_active ... ok
[INFO] [stdout] test gating::read_grant::tests::ordinary_config_files_pass_the_deny_list ... ok
[INFO] [stdout] test gating::read_grant::tests::deny_list_blocks_private_keys_but_allows_pub_siblings ... ok
[INFO] [stdout] test gating::deny_shape::tests::promoted_shape_matches_binary_and_args ... ok
[INFO] [stdout] test gating::read_grant::tests::take_due_claims_only_expired_active_grants ... ok
[INFO] [stdout] test gating::tests::force_hold_overrides_everything ... ok
[INFO] [stdout] test gating::tests::gate_mode_parse ... ok
[INFO] [stdout] test gating::tests::coverage_states_negatives ... ok
[INFO] [stdout] test gating::tests::high_risk_always_holds_even_if_labeled_reversible ... ok
[INFO] [stdout] test gating::tests::missing_class_fails_safe_to_hold ... ok
[INFO] [stdout] test gating::tests::missing_risk_fails_safe_to_hold ... ok
[INFO] [stdout] test gating::tests::irreversible_always_holds ... ok
[INFO] [stdout] test gating::tests::recoverable_needs_a_revert_else_holds ... ok
[INFO] [stdout] test gating::tests::reversibility_parse_roundtrip ... ok
[INFO] [stdout] test gating::tests::reversible_low_risk_executes_now ... ok
[INFO] [stdout] test gating::tests::reversible_mid_risk_is_raised_not_executed ... ok
[INFO] [stdout] test gating::verb::tests::append_verb_rejects_duplicate_and_invalid_without_writing ... ok
[INFO] [stdout] test gating::allow_promotion::tests::resolved_bucket_never_becomes_ready_again ... ok
[INFO] [stdout] test gating::verb::tests::append_tolerates_bom_and_keeps_one_verbs_key ... ok
[INFO] [stdout] test gating::verb::tests::append_verb_persists_provenance_and_pins ... ok
[INFO] [stdout] test gating::verb::tests::duplicate_names_rejected ... ok
[INFO] [stdout] test gating::verb::tests::match_args_template_declines_a_token_with_multiple_placeholders ... ok
[INFO] [stdout] test gating::verb::tests::match_args_template_extracts_single_placeholder_with_prefix_and_suffix ... ok
[INFO] [stdout] test gating::verb::tests::match_args_template_requires_consistent_value_for_a_repeated_name ... ok
[INFO] [stdout] test gating::verb::tests::match_args_template_requires_exact_arity ... ok
[INFO] [stdout] test gating::verb::tests::match_command_rejects_path_qualified_spoof_like_binary_matching_does ... ok
[INFO] [stdout] test gating::verb::tests::flag_injection_is_rejected ... ok
[INFO] [stdout] test gating::verb::tests::match_command_tries_verbs_in_name_order_and_skips_non_matching_ones ... ok
[INFO] [stdout] test gating::verb::tests::loads_and_renders_a_verb ... ok
[INFO] [stdout] test gating::verb::tests::match_command_reverse_matches_a_raw_command_against_a_template ... ok
[INFO] [stdout] test gating::verb::tests::non_ascii_literal_template_renders_intact ... ok
[INFO] [stdout] test gating::verb::tests::synthesis_safety_gate_blocks_dangerous_shapes ... ok
[INFO] [stdout] test gating::verb::tests::unanchored_pattern_is_rejected_at_load ... ok
[INFO] [stdout] test gating::verb::tests::undeclared_placeholder_is_rejected ... ok
[INFO] [stdout] test gating::verb::tests::shell_metacharacters_are_inert_single_argv ... ok
[INFO] [stdout] test gating::verb::tests::unknown_param_rejected_at_render ... ok
[INFO] [stdout] test learned_rules::tests::high_risk_approval_is_not_learned ... ok
[INFO] [stdout] test learned_rules::tests::leading_privileged_command_is_not_learned ... ok
[INFO] [stdout] test gating::verb::tests::missing_required_param_rejected ... ok
[INFO] [stdout] test learned_rules::tests::opnsense_ssh_candidate_promotes_service_shim ... ok
[INFO] [stdout] test learned_rules::tests::repeated_low_risk_approval_becomes_a_candidate_not_a_bypass ... ok
[INFO] [stdout] test learned_rules::tests::shell_control_without_spaces_is_not_learned ... ok
[INFO] [stdout] test policy::tests::test_allow_glob_pattern ... ok
[INFO] [stdout] test policy::tests::test_allow_pattern ... ok
[INFO] [stdout] test policy::tests::test_builtin_modes_are_empty ... ok
[INFO] [stdout] test policy::tests::test_check_command_with_args ... ok
[INFO] [stdout] test policy::tests::test_decision_serialization ... ok
[INFO] [stdout] test policy::tests::test_default_deny ... ok
[INFO] [stdout] test policy::tests::test_deny_before_allow ... ok
[INFO] [stdout] test policy::tests::test_deny_pattern ... ok
[INFO] [stdout] test policy::tests::test_empty_args ... ok
[INFO] [stdout] test policy::tests::test_glob_character_class ... ok
[INFO] [stdout] test policy::tests::test_glob_complex_patterns ... ok
[INFO] [stdout] test policy::tests::test_glob_exact_match ... ok
[INFO] [stdout] test policy::tests::test_glob_question_mark ... ok
[INFO] [stdout] test policy::tests::test_glob_star_both ... ok
[INFO] [stdout] test policy::tests::test_glob_star_prefix ... ok
[INFO] [stdout] test policy::tests::test_glob_star_suffix ... ok
[INFO] [stdout] test gating::approval::tests::waiter_is_woken_on_decision ... ok
[INFO] [stdout] test policy::tests::test_group_rule_non_glob_pattern_matches_like_top_level ... ok
[INFO] [stdout] test policy::tests::test_multiple_allow_patterns ... ok
[INFO] [stdout] test policy::tests::test_multiple_deny_patterns ... ok
[INFO] [stdout] test policy::tests::test_parse_command_destructive ... ok
[INFO] [stdout] test policy::tests::test_parse_command_empty ... ok
[INFO] [stdout] test policy::tests::test_parse_command_multiple_args ... ok
[INFO] [stdout] test policy::tests::test_parse_command_simple ... ok
[INFO] [stdout] test policy::tests::test_parse_command_with_escaped ... ok
[INFO] [stdout] test policy::tests::test_parse_command_with_quotes ... ok
[INFO] [stdout] test policy::tests::test_parse_command_with_single_quotes ... ok
[INFO] [stdout] test policy::tests::test_partial_pattern_match ... ok
[INFO] [stdout] test policy::tests::test_policy_engine_builder_pattern ... ok
[INFO] [stdout] test policy::tests::test_policy_mode_parse ... ok
[INFO] [stdout] test policy::tests::test_policy_group_priority ... ok
[INFO] [stdout] test policy::tests::test_policy_result_helpers ... ok
[INFO] [stdout] test policy::tests::test_policy_result_serialization ... ok
[INFO] [stdout] test policy::tests::test_real_world_scenarios ... ok
[INFO] [stdout] test policy::tests::test_wildcard_allow_allows_unsafe ... ok
[INFO] [stdout] test policy::tests::test_yaml_loading ... ok
[INFO] [stdout] test policy::tests::test_yaml_syntax_error ... ok
[INFO] [stdout] test principal::tests::legacy_numeric_caller_uid_deserializes ... ok
[INFO] [stdout] test principal::tests::scope_eq_treats_absence_as_never_equal ... ok
[INFO] [stdout] test policy::tests::test_yaml_with_groups ... ok
[INFO] [stdout] test principal::tests::sid_is_case_insensitive ... ok
[INFO] [stdout] test principal::tests::sid_segment_is_safe_and_injective ... ok
[INFO] [stdout] test principal::tests::uid_segment_preserves_legacy_layout ... ok
[INFO] [stdout] test proxy::github_protocol::tests::case_varied_routes_still_classify ... ok
[INFO] [stdout] test gating::verb::tests::version_changes_with_content ... ok
[INFO] [stdout] test proxy::github_protocol::tests::contents_path_is_one_object_name ... ok
[INFO] [stdout] test proxy::github_protocol::tests::no_write_is_tracked_and_no_revert_is_constructible ... ok
[INFO] [stdout] test proxy::github_protocol::tests::secret_stores_collapse_to_secrets_resource ... ok
[INFO] [stdout] test proxy::github_protocol::tests::secrets_reads_redact_value_fields ... ok
[INFO] [stdout] test proxy::github_protocol::tests::secrets_writes_and_archives_deny_outright ... ok
[INFO] [stdout] test proxy::github_protocol::tests::unmodeled_roots_are_none ... ok
[INFO] [stdout] test proxy::k8s::tests::all_namespaces_list ... ok
[INFO] [stdout] test proxy::k8s::tests::cluster_scoped_node ... ok
[INFO] [stdout] test proxy::k8s::tests::core_namespaced_collection_is_list ... ok
[INFO] [stdout] test proxy::github_protocol::tests::repo_scoped_collections_parse ... ok
[INFO] [stdout] test proxy::k8s::tests::core_namespaced_named_is_get ... ok
[INFO] [stdout] test proxy::k8s::tests::named_group_deployment ... ok
[INFO] [stdout] test proxy::k8s::tests::dry_run_write_is_reversible ... ok
[INFO] [stdout] test proxy::k8s::tests::namespaces_collection_and_instance ... ok
[INFO] [stdout] test proxy::k8s::tests::non_resource_paths_are_none ... ok
[INFO] [stdout] test proxy::k8s::tests::redact_helm_release_secret_is_opaque_by_default ... ok
[INFO] [stdout] test proxy::k8s::tests::redact_secret_list ... ok
[INFO] [stdout] test proxy::k8s::tests::secrets_detection ... ok
[INFO] [stdout] test proxy::k8s::tests::subresource_is_parsed ... ok
[INFO] [stdout] test proxy::k8s::tests::verbs_by_method ... ok
[INFO] [stdout] test proxy::k8s::tests::redact_single_secret ... ok
[INFO] [stdout] test proxy::k8s::tests::watch_query_is_watch_verb ... ok
[INFO] [stdout] test gating::verb::tests::alternation_cannot_escape_anchors ... ok
[INFO] [stdout] test proxy::k8s_protocol::tests::plan_revert_deletes_created_object_and_records_identity ... ok
[INFO] [stdout] test proxy::k8s_protocol::tests::plan_revert_fails_without_a_usable_response ... ok
[INFO] [stdout] test proxy::k8s_protocol::tests::plan_revert_falls_back_to_delete_when_prior_is_unparsable ... ok
[INFO] [stdout] test proxy::k8s_protocol::tests::plan_revert_restores_sanitized_prior_object ... ok
[INFO] [stdout] test proxy::k8s_protocol::tests::interactive_subresources_and_secret_watch_are_denied_outright ... ok
[INFO] [stdout] test proxy::k8s_protocol::tests::only_secret_reads_are_redactable ... ok
[INFO] [stdout] test proxy::k8s_protocol::tests::prior_snapshot_only_for_named_update_or_patch ... ok
[INFO] [stdout] test proxy::k8s_protocol::tests::tracked_writes_are_bare_recoverable_mutations ... ok
[INFO] [stdout] test proxy::kubeconfig::tests::malformed_yaml_is_parse_error ... ok
[INFO] [stdout] test proxy::k8s::tests::reversibility_classes ... ok
[INFO] [stdout] test proxy::kubeconfig::tests::empty_user_is_ok ... ok
[INFO] [stdout] test proxy::kubeconfig::tests::rejects_client_cert_and_key ... ok
[INFO] [stdout] test proxy::kubeconfig::tests::rejects_exec_plugin ... ok
[INFO] [stdout] test proxy::kubeconfig::tests::rejects_token ... ok
[INFO] [stdout] test proxy::policy::tests::first_match_wins ... ok
[INFO] [stdout] test proxy::policy::tests::namespace_scoping ... ok
[INFO] [stdout] test proxy::policy::tests::read_subresource_covered_by_resource_read_rule ... ok
[INFO] [stdout] test proxy::policy::tests::default_is_deny ... ok
[INFO] [stdout] test proxy::policy::tests::secret_reads_force_redaction_even_without_flag ... ok
[INFO] [stdout] test proxy::kubeconfig::tests::generated_config_is_valid_and_credential_free ... ok
[INFO] [stdout] test proxy::policy::tests::write_subresource_not_covered_by_bare_resource_rule ... ok
[INFO] [stdout] test proxy::policy::tests::write_subresource_allowed_when_named ... ok
[INFO] [stdout] test proxy::server::tests::hostile_paths_are_rejected_before_forwarding ... ok
[INFO] [stdout] test proxy::server::tests::provenance_is_dropped_when_its_revert_resolves ... ok
[INFO] [stdout] test proxy::server::tests::provenance_is_scoped_to_the_creating_connection ... ok
[INFO] [stdout] test proxy::server::tests::rarity_tracker_disabled_never_escalates ... ok
[INFO] [stdout] test proxy::server::tests::rarity_tracker_escalates_until_threshold_then_stops ... ok
[INFO] [stdout] test proxy::policy::tests::shipped_example_policy_parses_and_behaves ... ok
[INFO] [stdout] test proxy::policy::tests::description_surfaces_in_reason ... ok
[INFO] [stdout] test learned_rules::tests::ssh_parser_keeps_prefix_through_host ... ok
[INFO] [stdout] test gating::verb::tests::append_handles_empty_inline_and_trailing_key_catalogs ... ok
[INFO] [stdout] test proxy::server::tests::forget_created_by_handle_clears_public_provenance ... ok
[INFO] [stdout] test proxy::server::tests::take_created_provenance_matches_only_the_creating_connection ... ok
[INFO] [stdout] test proxy::tls::tests::generates_ca_and_server_config ... ok
[INFO] [stdout] test proxy::server::tests::shape_key_ignores_object_name ... ok
[INFO] [stdout] test proxy::upstream::tests::explicit_context_overrides_current ... ok
[INFO] [stdout] test proxy::upstream::tests::basic_auth_without_token_is_used ... ok
[INFO] [stdout] test proxy::tls::tests::brokered_config_uses_generated_ca ... ok
[INFO] [stdout] test proxy::upstream::tests::rejects_exec_plugin ... ok
[INFO] [stdout] test proxy::upstream::tests::parses_token_context ... ok
[INFO] [stdout] test proxy::upstream::tests::client_cert_takes_precedence_over_basic_auth ... ok
[INFO] [stdout] test proxy::upstream::tests::token_replaces_basic_auth ... ok
[INFO] [stdout] test proxy::vercel_protocol::tests::case_varied_routes_still_classify ... ok
[INFO] [stdout] test proxy::vercel_protocol::tests::deployment_streams_deny_outright ... ok
[INFO] [stdout] test proxy::vercel_protocol::tests::unversioned_paths_are_none ... ok
[INFO] [stdout] test proxy::vercel_protocol::tests::env_reads_redact_values ... ok
[INFO] [stdout] test proxy::vercel_protocol::tests::versioned_collections_parse ... ok
[INFO] [stdout] test proxy::upstream::tests::missing_context_errors ... ok
[INFO] [stdout] test proxy::upstream::tests::token_takes_precedence_over_client_cert ... ok
[INFO] [stdout] test proxy::vercel_protocol::tests::no_write_is_tracked_and_no_revert_is_constructible ... ok
[INFO] [stdout] test redact::tests::test_flow_gap_allows_empty_scalar_sibling ... ok
[INFO] [stdout] test redact::tests::test_do_not_redact_kubernetes_yaml_url_value ... ok
[INFO] [stdout] test redact::tests::test_do_not_redact_kubernetes_yaml_uuid_value ... ok
[INFO] [stdout] test redact::tests::test_flow_reversed_not_anchored_inside_hyphenated_key ... ok
[INFO] [stdout] test redact::tests::test_do_not_redact_kubernetes_yaml_git_sha_value ... ok
[INFO] [stdout] test redact::tests::test_no_false_positive_short_values ... ok
[INFO] [stdout] test redact::tests::test_flow_gap_not_hijacked_by_value_in_string_literal ... ok
[INFO] [stdout] test redact::tests::test_no_false_positive_numeric_values ... ok
[INFO] [stdout] test redact::tests::test_flow_gap_not_hijacked_by_hyphenated_sibling_key ... ok
[INFO] [stdout] test redact::tests::test_no_redact_ansible_status_line ... ok
[INFO] [stdout] test redact::tests::test_no_redact_bare_key_field_kubernetes_selector ... ok
[INFO] [stdout] test redact::tests::test_no_redact_bare_pass_field ... ok
[INFO] [stdout] test redact::tests::test_no_redact_bare_key_field_docker_json ... ok
[INFO] [stdout] test redact::tests::test_no_redact_flow_style_intervening_non_secret ... ok
[INFO] [stdout] test redact::tests::test_no_redact_flow_style_non_secret_pair ... ok
[INFO] [stdout] test redact::tests::test_no_redact_json_git_sha ... ok
[INFO] [stdout] test redact::tests::test_no_redaction_needed ... ok
[INFO] [stdout] test redact::tests::test_redact_authorization_bearer_header ... ok
[INFO] [stdout] test redact::tests::test_redact_api_secret ... ok
[INFO] [stdout] test redact::tests::test_redact_base64_env_value ... ok
[INFO] [stdout] test redact::tests::test_no_redact_long_lowercase_digest ... ok
[INFO] [stdout] test redact::tests::test_redact_aws_access_key_id ... ok
[INFO] [stdout] test redact::tests::test_redact_bearer_token ... ok
[INFO] [stdout] test redact::tests::test_redact_cloudstack_json_apikey ... ok
[INFO] [stdout] test redact::tests::test_redact_cloudstack_json_secretkey ... ok
[INFO] [stdout] test redact::tests::test_redact_catchall_json_trailing_comma ... ok
[INFO] [stdout] test redact::tests::test_redact_flow_style_intervening_member ... ok
[INFO] [stdout] test redact::tests::test_redact_flow_style_json_env_pair ... ok
[INFO] [stdout] test redact::tests::test_redact_flow_style_yaml_env_pair ... ok
[INFO] [stdout] test redact::tests::test_redact_flow_style_reversed_order ... ok
[INFO] [stdout] test redact::tests::test_redact_hex_cookie_value ... ok
[INFO] [stdout] test redact::tests::test_redact_basic_auth_header ... ok
[INFO] [stdout] test redact::tests::test_redact_hex_cookie_value_no_trailing_whitespace ... ok
[INFO] [stdout] test redact::tests::test_redact_output_text_line_with_no_trailing_padding ... ok
[INFO] [stdout] test gating::verb::tests::example_verb_catalogs_parse_and_validate ... ok
[INFO] [stdout] test redact::tests::test_redact_json_quoted_token_short_value ... ok
[INFO] [stdout] test redact::tests::test_redact_password ... ok
[INFO] [stdout] test redact::tests::test_redact_kubernetes_yaml_value_token ... ok
[INFO] [stdout] test redact::tests::test_redact_private_key ... ok
[INFO] [stdout] test redact::tests::test_redact_quoted_value_with_escaped_quote ... ok
[INFO] [stdout] test redact::tests::test_redact_session_id_hex ... ok
[INFO] [stdout] test redact::tests::test_redact_jwt ... ok
[INFO] [stdout] test redact::tests::test_redact_quoted_value_with_spaces_no_tail_leak ... ok
[INFO] [stdout] test redact::tests::test_redact_short_header_jwt ... ok
[INFO] [stdout] test redact::tests::test_redact_sk_key ... ok
[INFO] [stdout] test redact::tests::test_redact_standalone_base64_line ... ok
[INFO] [stdout] test redact::tests::test_redact_bare_long_urlsafe_token ... ok
[INFO] [stdout] test redact::tests::test_redact_streaming_kubernetes_yaml_value_token ... ok
[INFO] [stdout] test redact::tests::test_redact_yaml_doubled_single_quote_value ... ok
[INFO] [stdout] test redact::tests::test_redact_unterminated_quoted_value ... ok
[INFO] [stdout] test redact::tests::test_redact_token_env_var ... ok
[INFO] [stdout] test redact::tests::test_redacted_json_stays_quoted ... ok
[INFO] [stdout] test redact::tests::test_redact_unquoted_compound_apikey ... ok
[INFO] [stdout] test redact::tests::test_no_redact_long_kebab_slug ... ok
[INFO] [stdout] test redact::tests::test_redact_url_encoded_separator ... ok
[INFO] [stdout] test redact::tests::test_stoplist_names_not_redacted ... ok
[INFO] [stdout] test redact::tests::test_redaction_is_idempotent ... ok
[INFO] [stdout] test gating::allow_promotion::tests::observation_buckets_are_capped_by_evicting_the_oldest ... ok
[INFO] [stdout] test gating::deny_shape::tests::observation_buckets_are_capped_by_evicting_the_oldest ... ok
[INFO] [stdout] test evaluate::tests::test_parse_error_switches_to_json_format_and_succeeds ... ok
[INFO] [stdout] test evaluate::tests::test_retry_on_500_then_success ... ok
[INFO] [stdout] test evaluate::tests::test_tool_choice_client_error_switches_to_json_format ... ok
[INFO] [stdout] test evaluate::tests::test_retry_on_429_with_non_numeric_retry_after ... ok
[INFO] [stdout] test evaluate::tests::test_retry_on_429_then_success ... ok
[INFO] [stdout] test evaluate::tests::test_retry_exhausted_returns_error ... ok
[INFO] [stdout] test evaluate::tests::test_fallback_chain_primary_fails_secondary_succeeds ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 346 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.35s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/guard-e82e0e809335c668)
[INFO] [stdout] 
[INFO] [stdout] running 259 tests
[INFO] [stdout] test cli_client::tests::endpoint_config_port_beats_config_socket ... ok
[INFO] [stdout] test cli_client::tests::endpoint_flag_override_beats_env_config_and_default ... ok
[INFO] [stdout] test cli_client::tests::endpoint_default_prefers_system_socket_when_present ... ok
[INFO] [stdout] test cli_client::tests::endpoint_unparsable_env_tcp_port_falls_through_to_env_socket ... ok
[INFO] [stdout] test cli_client::tests::set_server_keeps_absolute_socket_path ... ok
[INFO] [stdout] test cli_client::tests::set_server_absolutizes_relative_socket_path ... ok
[INFO] [stdout] test cli_client::tests::set_server_passes_tcp_endpoint_through ... ok
[INFO] [stdout] test client_config::tests::absolute_xdg_config_home_is_accepted ... ok
[INFO] [stdout] test cli_client::tests::endpoint_empty_env_socket_falls_through_to_config ... ok
[INFO] [stdout] test client_config::tests::relative_xdg_config_home_errors ... ok
[INFO] [stdout] test client_config::tests::unset_xdg_config_home_is_accepted ... ok
[INFO] [stdout] test grant_profile::tests::rejects_empty_profile ... ok
[INFO] [stdout] test grant_profile::tests::empty_catalog_is_empty ... ok
[INFO] [stdout] test grant_profile::tests::rejects_duplicate_names ... ok
[INFO] [stdout] test mcp::tests::constant_time_eq_matches_only_on_equal_bytes ... ok
[INFO] [stdout] test mcp::tests::guard_tool_args_accepts_hostkey_mode ... ok
[INFO] [stdout] test mcp::tests::denied_tool_results_are_not_transport_errors ... ok
[INFO] [stdout] test mcp::tests::guard_tool_secret_map_derives_and_dedupes_secret_env_names ... ok
[INFO] [stdout] test mcp::tests::approval_list_tool_proxies_daemon_approvals ... ok
[INFO] [stdout] test cli_client::tests::endpoint_default_falls_back_to_home_socket_when_system_socket_missing ... ok
[INFO] [stdout] test mcp::tests::guard_tool_secret_map_rejects_conflicting_secret_mappings ... ok
[INFO] [stdout] test mcp::tests::http_config_requires_token ... ok
[INFO] [stdout] test mcp::tests::request_missing_method_gets_invalid_request_error ... ok
[INFO] [stdout] test mcp::tests::initialize_advertises_tools_capability ... ok
[INFO] [stdout] test grant_profile::tests::parses_named_profiles ... ok
[INFO] [stdout] test mcp::tests::verb_list_tool_proxies_daemon_catalog ... ok
[INFO] [stdout] test mcp::tests::tools_list_includes_catalog_and_approval_tools ... ok
[INFO] [stdout] test secrets::tests::backend_type_vault_infisical_round_trip ... ok
[INFO] [stdout] test secrets::tests::concurrent_delete_during_get_does_not_resurrect_into_cache ... ok
[INFO] [stdout] test mcp::tests::tools_list_returns_guard_tool ... ok
[INFO] [stdout] test secrets::tests::backend_type_unknown_lists_all_five ... ok
[INFO] [stdout] test secrets::tests::env_backend_surfaces_legacy_flat_keys_only_via_admin_view ... ok
[INFO] [stdout] test secrets::tests::env_backend_namespaces_by_uid ... ok
[INFO] [stdout] test secrets::tests::parse_store_variant_detects_legacy_flat_shape ... ok
[INFO] [stdout] test secrets::tests::infisical_principal_path_namespaces_by_uid ... ok
[INFO] [stdout] test mcp::tests::tool_call_returns_structured_output ... ok
[INFO] [stdout] test secrets::tests::local_store_yaml_key_normalizes_integer_uid_to_principal_string ... ok
[INFO] [stdout] test secrets::tests::secret_fd_creation ... ok
[INFO] [stdout] test mcp::tests::tool_call_reports_backend_errors_as_tool_errors ... ok
[INFO] [stdout] test secrets::tests::env_backend_set_uses_legacy_uppercase_uid_layout ... ok
[INFO] [stdout] test secrets::tests::backend_type_parsing ... ok
[INFO] [stdout] test secrets::tests::secret_manager_cache_is_principal_keyed ... ok
[INFO] [stdout] test secrets::tests::secret_manager_per_user_basic ... ok
[INFO] [stdout] test secrets::tests::secret_manager_per_principal_isolates_sid_from_uid ... ok
[INFO] [stdout] test secrets::tests::vault_principal_path_namespaces_by_uid ... ok
[INFO] [stdout] test server::tests::accept_all_hostkey_forfeits_fast_path ... ok
[INFO] [stdout] test server::tests::accept_new_hostkey_keeps_fixed_diagnostic_on_fast_path ... ok
[INFO] [stdout] test server::tests::apply_ssh_hostkey_injects_options_by_mode ... ok
[INFO] [stdout] test server::tests::apply_ssh_hostkey_is_noop_for_non_ssh ... ok
[INFO] [stdout] test mcp::tests::http_transport_enforces_bearer_and_serves_tools_list ... ok
[INFO] [stdout] test server::tests::approve_passes_binding_when_secret_value_unchanged ... ok
[INFO] [stdout] test server::tests::approval_note_operator_and_owner_post_others_refused ... ok
[INFO] [stdout] test server::tests::approve_rejected_when_bound_secret_value_changed ... ok
[INFO] [stdout] test server::tests::approve_rejected_when_unresolved_secret_appears_after_hold ... ok
[INFO] [stdout] test server::tests::approve_voided_when_verb_catalog_version_changed ... ok
[INFO] [stdout] test server::tests::audit_token_truncates_and_is_char_safe ... ok
[INFO] [stdout] test server::tests::binary_allowlist_none_allows_everything ... ok
[INFO] [stdout] test server::tests::binary_allowlist_rejects_path_qualified_spoof ... ok
[INFO] [stdout] test server::tests::binary_allowlist_empty_denies_everything ... ok
[INFO] [stdout] test server::tests::binary_allowlist_matches_bare_name_case_insensitively ... ok
[INFO] [stdout] test server::tests::binary_exists_on_path_rejects_natural_language_token ... ok
[INFO] [stdout] test server::tests::apply_read_grant_adds_traverse_only_where_missing_and_only_x ... ok
[INFO] [stdout] test grant_rules::tests::dangerous_backtick_examples_are_not_allowed ... ok
[INFO] [stdout] test grant_rules::tests::safe_backtick_examples_become_exact_allows ... ok
[INFO] [stdout] test server::tests::credential_preflight_allows_basic_kubectl_inspection ... ok
[INFO] [stdout] test grant_rules::tests::generic_cluster_language_does_not_trigger_kubernetes_rules ... ok
[INFO] [stdout] test server::tests::credential_preflight_denies_private_key_path ... ok
[INFO] [stdout] test server::tests::credential_preflight_denies_kubectl_raw_config_through_shell ... ok
[INFO] [stdout] test server::tests::containment_dropped_when_forward_fails_to_spawn ... ok
[INFO] [stdout] test server::tests::exec_failed_constructors_set_started_flag ... ok
[INFO] [stdout] test server::tests::dangerous_env_name_blocks_code_injection_vectors ... ok
[INFO] [stdout] test server::tests::execute_result_completed_has_allowed_policy_and_completed_exec ... ok
[INFO] [stdout] test server::tests::env_and_secret_injections_cannot_target_same_env_var ... ok
[INFO] [stdout] test server::tests::execute_result_denied_has_denied_policy_and_not_attempted_exec ... ok
[INFO] [stdout] test server::tests::execute_result_exec_failed_has_allowed_policy_and_failed_exec ... ok
[INFO] [stdout] test server::tests::grant_envelope_routes_to_its_own_variant ... ok
[INFO] [stdout] test server::tests::expired_read_grant_is_auto_revoked ... ok
[INFO] [stdout] test server::tests::audit_policy_denied_emits_only_policy_event ... ok
[INFO] [stdout] test server::tests::exec_secret_injection_is_isolated_per_uid ... ok
[INFO] [stdout] test server::tests::audit_allowed_and_completed_emits_only_policy_event ... ok
[INFO] [stdout] test server::tests::grant_revoke_is_not_scoped_to_the_requesting_caller ... ok
[INFO] [stdout] test server::tests::grant_read_denies_kubeconfig ... ok
[INFO] [stdout] test server::tests::grant_wire_shape_parses_to_grant_variant ... ok
[INFO] [stdout] test server::tests::audit_allowed_then_exec_failed_emits_both_events ... ok
[INFO] [stdout] test server::tests::contain_then_deadline_triggers_sweeper_autorevert ... ok
[INFO] [stdout] test server::tests::grant_read_deny_list_short_circuits_before_evaluator ... ok
[INFO] [stdout] test server::tests::audit_command_line_masks_inline_credentials ... ok
[INFO] [stdout] test server::tests::extra_child_env_forwards_named_var_to_child ... ok
[INFO] [stdout] test server::tests::hash_secret_value_is_salted_and_value_sensitive ... ok
[INFO] [stdout] test cli_client::tests::endpoint_env_tcp_port_beats_env_socket_and_config ... ok
[INFO] [stdout] test server::tests::into_response_for_completed_carries_exit_and_streams ... ok
[INFO] [stdout] test server::tests::into_response_for_denied_sets_allowed_false ... ok
[INFO] [stdout] test server::tests::into_response_for_dry_run_sets_allowed_true_without_child_output ... ok
[INFO] [stdout] test server::tests::into_response_for_exec_failed_sets_allowed_false_with_exec_error ... ok
[INFO] [stdout] test server::tests::is_local_peer_excludes_tcp_and_unknown ... ok
[INFO] [stdout] test server::tests::injection_refuses_non_local_tcp_caller ... ok
[INFO] [stdout] test server::tests::parse_admin_response_line_accepts_admin_response ... ok
[INFO] [stdout] test server::tests::parse_admin_response_line_surfaces_malformed_admin_payloads_as_restart_errors ... ok
[INFO] [stdout] test server::tests::parse_admin_response_line_maps_execute_invalid_request_to_actionable_error ... ok
[INFO] [stdout] test server::tests::missing_requested_secret_denies_before_policy_evaluation ... ok
[INFO] [stdout] test server::tests::invalid_secret_shell_reference_denies_before_policy_evaluation ... ok
[INFO] [stdout] test server::tests::is_fixed_readonly_diagnostic_is_narrow ... ok
[INFO] [stdout] test server::tests::invalid_shell_secret_reference_points_to_injected_env ... ok
[INFO] [stdout] test server::tests::hold_then_ttl_expiry_denies_fail_closed ... ok
[INFO] [stdout] test server::tests::provisional_result_carries_contain_coverage ... ok
[INFO] [stdout] test server::tests::recoverable_with_unaffirmable_revert_is_held_for_review ... ok
[INFO] [stdout] test server::tests::permission_denied_path_understands_common_error_shapes ... ok
[INFO] [stdout] test server::tests::revert_context_merges_only_when_supplied ... ok
[INFO] [stdout] test server::tests::profile_grant_still_deny_short_circuits_and_falls_through ... ok
[INFO] [stdout] test server::tests::safe_allow_accepts_fixed_local_identity ... ok
[INFO] [stdout] test server::tests::safe_allow_accepts_fixed_ssh_diagnostic ... ok
[INFO] [stdout] test server::tests::safe_allow_rejects_ssh_arbitrary_remote_command ... ok
[INFO] [stdout] test server::tests::safe_allow_rejects_ssh_chained_remote_command ... ok
[INFO] [stdout] test server::tests::safe_allow_rejects_ssh_forwarding_and_proxy ... ok
[INFO] [stdout] test server::tests::secret_key_validation_allows_namespaced_keys ... ok
[INFO] [stdout] test server::tests::safe_allow_disabled_in_paranoid_mode ... ok
[INFO] [stdout] test server::tests::nonstreaming_wait_approval_returns_promptly_on_decision ... ok
[INFO] [stdout] test server::tests::session_auto_amend_deny_candidates_are_high_risk_exact_rules ... ok
[INFO] [stdout] test server::tests::secret_list_is_per_user_namespaced ... ok
[INFO] [stdout] test server::tests::session_auto_amend_allow_candidates_are_low_risk_and_simple ... ok
[INFO] [stdout] test server::tests::raw_command_reverse_matches_trusted_verb_and_executes_now ... ok
[INFO] [stdout] test server::tests::session_list_is_user_visible_but_prompt_is_hidden ... ok
[INFO] [stdout] test server::tests::session_new_from_profile_mints_expected_grant ... ok
[INFO] [stdout] test server::tests::session_new_unknown_profile_fails_clearly ... ok
[INFO] [stdout] test server::tests::session_show_other_token_denied_for_non_admin ... ok
[INFO] [stdout] test server::tests::session_show_reports_recent_stats ... ok
[INFO] [stdout] test server::tests::session_show_self_token_sees_full_grant ... ok
[INFO] [stdout] test server::tests::ssh_o_directive_rejects_newline_smuggled_second_directive ... ok
[INFO] [stdout] test server::tests::read_grant_retry_returns_original_failure_when_grant_denied ... ok
[INFO] [stdout] test server::tests::ssh_options_reject_dangerous_option_between_host_and_command ... ok
[INFO] [stdout] test server::tests::stale_auto_promoted_verb_is_not_trusted ... ok
[INFO] [stdout] test server::tests::session_source_reports_cache_separately_from_static_policy ... ok
[INFO] [stdout] test server::tests::ssh_o_stricthostkeychecking_permits_only_secure_values ... ok
[INFO] [stdout] test secrets::tests::pass_store_listing_walks_principal_namespaces ... FAILED
[INFO] [stdout] test server::tests::containment_stays_armed_when_client_stream_drops_after_launch ... ok
[INFO] [stdout] test server::tests::ssh_options_allow_list_permits_only_vetted_options ... ok
[INFO] [stdout] test server::tests::static_only_session_miss_denies_before_evaluator ... ok
[INFO] [stdout] test session::tests::allow_pattern_matches ... ok
[INFO] [stdout] test server::tests::verb_list_reports_staleness_corrected_trust_and_provenance ... ok
[INFO] [stdout] test server::tests::trusted_verb_irreversible_still_holds_for_approval ... ok
[INFO] [stdout] test session::tests::exact_rules_do_not_treat_glob_characters_as_wildcards ... ok
[INFO] [stdout] test session::tests::exact_deny_wins_and_amend_dedupes_without_history ... ok
[INFO] [stdout] test session::tests::deny_wins_over_allow ... ok
[INFO] [stdout] test session::tests::has_returns_true_only_for_live_grants ... ok
[INFO] [stdout] test session::tests::list_history_since_filters_by_ended_at ... ok
[INFO] [stdout] test session::tests::expired_grant_is_ignored ... ok
[INFO] [stdout] test server::tests::contain_then_operator_confirm_keeps_change_nonoperator_refused ... ok
[INFO] [stdout] test server::tests::tcp_admin_token_validation_is_separate_from_exec_token ... ok
[INFO] [stdout] test session::tests::list_returns_non_expired ... ok
[INFO] [stdout] test session::tests::revoke_moves_grant_into_history ... ok
[INFO] [stdout] test server::tests::read_grant_denies_multi_hardlink_target ... ok
[INFO] [stdout] test server::tests::trusted_verb_reversible_executes_now ... ok
[INFO] [stdout] test session::tests::prompt_append_suppressed_for_expired_grant ... ok
[INFO] [stdout] test session::tests::show_aggregates_recent_interactions_and_risk_histogram ... ok
[INFO] [stdout] test session::tests::revoke_removes_grant ... ok
[INFO] [stdout] test session::tests::no_match_returns_none_even_with_grants ... ok
[INFO] [stdout] test session::tests::unknown_token_returns_none ... ok
[INFO] [stdout] test session::tests::static_only_is_reported_for_live_grant ... ok
[INFO] [stdout] test shim::tests::test_available_tools ... ok
[INFO] [stdout] test shim::tests::test_escape_for_shell ... ok
[INFO] [stdout] test shim::tests::test_escape_path_for_shell ... ok
[INFO] [stdout] test shim::tests::test_generate_multiple_tools ... ok
[INFO] [stdout] test session::tests::prompt_append_returned_for_live_grant ... ok
[INFO] [stdout] test shim::tests::test_is_valid_tool_name ... ok
[INFO] [stdout] test shim::tests::test_generate_single_shim ... ok
[INFO] [stdout] test server::tests::hold_then_operator_approve_executes_snapshot_nonoperator_refused ... ok
[INFO] [stdout] test shim::tests::test_list_installed ... ok
[INFO] [stdout] test shim::tests::test_generate_invalid_tool_name ... ok
[INFO] [stdout] test shim::tests::test_list_installed_empty ... ok
[INFO] [stdout] test shim::tests::test_path_instruction_escapes_path ... ok
[INFO] [stdout] test shim::tests::test_remove_nonexistent_shim ... ok
[INFO] [stdout] test shim::tests::test_list_installed_ignores_non_tools ... ok
[INFO] [stdout] test shim::tests::test_render_alias_shim_content ... ok
[INFO] [stdout] test shim::tests::test_remove_multiple_tools ... ok
[INFO] [stdout] test server::tests::read_grant_apply_aborts_when_target_swapped_after_plan ... ok
[INFO] [stdout] test shim::tests::test_shim_content_with_single_quote_in_path ... ok
[INFO] [stdout] test shim::tests::test_generate_all_tools ... ok
[INFO] [stdout] test shim::tests::test_shim_generator_path_instruction ... ok
[INFO] [stdout] test shim::tests::test_generate_creates_directory ... ok
[INFO] [stdout] test session::tests::purge_moves_expired_to_history ... ok
[INFO] [stdout] test shim::tests::test_shim_generator_new ... ok
[INFO] [stdout] test shim::tests::test_shim_tool_new ... ok
[INFO] [stdout] test ssh::tests::test_extract_command_separate_args ... ok
[INFO] [stdout] test ssh::tests::test_extract_command_simple ... ok
[INFO] [stdout] test ssh::tests::test_extract_command_with_concatenated_option ... ok
[INFO] [stdout] test ssh::tests::test_extract_command_with_flags ... ok
[INFO] [stdout] test ssh::tests::test_extract_command_no_command ... ok
[INFO] [stdout] test ssh::tests::test_extract_command_with_identity_file ... ok
[INFO] [stdout] test ssh::tests::test_extract_command_with_options ... ok
[INFO] [stdout] test server::tests::kube_proxy_hold_routes_through_approval_queue ... ok
[INFO] [stdout] test shim::tests::test_render_shim_content ... ok
[INFO] [stdout] test ssh::tests::test_extract_destination_none ... ok
[INFO] [stdout] test ssh::tests::test_extract_destination_with_options ... ok
[INFO] [stdout] test ssh::tests::test_extract_destination_simple ... ok
[INFO] [stdout] test ssh::tests::test_is_passthrough_empty ... ok
[INFO] [stdout] test ssh::tests::test_is_passthrough_no_match ... ok
[INFO] [stdout] test tests::cli_command_path_avoids_unknown_positional_values ... ok
[INFO] [stdout] test tests::env_pairs_to_map_rejects_conflicting_duplicate_values ... ok
[INFO] [stdout] test tests::guard_mode_env_resolution ... ok
[INFO] [stdout] test tests::passthrough_help_requested_only_for_bare_command_help ... ok
[INFO] [stdout] test ssh::tests::test_is_passthrough_match ... ok
[INFO] [stdout] test shim::tests::test_remove_single_shim ... ok
[INFO] [stdout] test tests::secret_mapping_rejects_invalid_env_name ... ok
[INFO] [stdout] test shim::tests::test_remove_all ... ok
[INFO] [stdout] test tests::secret_pairs_to_map_allows_idempotent_repeats ... ok
[INFO] [stdout] test tests::run_forwards_long_help_flag_to_child ... ok
[INFO] [stdout] test tests::session_appeal_forwards_hyphen_args ... ok
[INFO] [stdout] test tests::help_run_shows_subcommand_help ... ok
[INFO] [stdout] test tests::session_grant_parses_prose_and_static_only_alias ... ok
[INFO] [stdout] test tests::run_forwards_multiple_trailing_flags ... ok
[INFO] [stdout] test tests::run_accepts_transient_secret_injection ... ok
[INFO] [stdout] test server::tests::read_grant_retry_grants_and_reruns_after_permission_denied ... ok
[INFO] [stdout] test tests::run_forwards_short_help_flag_to_child ... ok
[INFO] [stdout] test tests::run_accepts_comma_separated_bare_secret_names ... ok
[INFO] [stdout] test tests::session_grant_parses_auto_amend_flags ... ok
[INFO] [stdout] test tests::server_connect_accepts_command_args_without_separator ... ok
[INFO] [stdout] test tests::test_resolve_bool_flag ... ok
[INFO] [stdout] test tests::singular_secret_alias_parses_as_secrets_subcommand ... ok
[INFO] [stdout] test tests::test_server_start_exec_as_caller_flag ... ok
[INFO] [stdout] test tests::bare_secret_name_derives_shell_safe_env_name ... ok
[INFO] [stdout] test tests::test_server_start_learn_allow_can_be_disabled ... ok
[INFO] [stdout] test tests::test_llm_model_env_resolution_chain ... ok
[INFO] [stdout] test tests::test_server_start_admin_token_flag ... ok
[INFO] [stdout] test tests::test_server_start_learn_allow_min_approvals_flag ... ok
[INFO] [stdout] test tests::test_server_start_learn_deny_min_denials_flag ... ok
[INFO] [stdout] test tests::test_server_start_learn_deny_can_be_disabled ... ok
[INFO] [stdout] test tests::test_server_start_learn_deny_defaults_true ... ok
[INFO] [stdout] test tests::test_server_start_llm_defaults_true ... ok
[INFO] [stdout] test tests::test_run_reevaluate_flag ... ok
[INFO] [stdout] test tests::test_server_start_learn_allow_state_flag ... ok
[INFO] [stdout] test tests::test_server_start_learn_allow_defaults_true ... ok
[INFO] [stdout] test tests::top_level_grant_plain_word_is_prose_not_token ... ok
[INFO] [stdout] test tests::top_level_grant_token_shaped_word_keeps_token_path ... ok
[INFO] [stdout] test tests::top_level_appeal_parses_session_and_command ... ok
[INFO] [stdout] test tests::top_level_version_requested_matches_first_arg_only ... ok
[INFO] [stdout] test tests::test_server_start_llm_retries_flag ... ok
[INFO] [stdout] test tests::server_connect_forwards_hyphen_args_without_separator ... ok
[INFO] [stdout] test tests::test_server_start_state_db_flag ... ok
[INFO] [stdout] test tests::test_server_start_llm_models_flag ... ok
[INFO] [stdout] test tests::top_level_help_still_triggers_clap_display_help ... ok
[INFO] [stdout] test tool_config::tests::isolated_for_tests_never_watches_the_real_config_path ... ok
[INFO] [stdout] test tests::test_server_start_llm_positive_forms ... ok
[INFO] [stdout] test tests::test_server_start_llm_negative_forms ... ok
[INFO] [stdout] test tests::top_level_grant_bare_prose_mints_session ... ok
[INFO] [stdout] test session_store::tests::session_store_round_trips_registry ... ok
[INFO] [stdout] test grant_rules::tests::kubernetes_without_namespace_stays_conservative ... ok
[INFO] [stdout] test tests::unknown_top_level_command_does_not_execute_implicitly ... ok
[INFO] [stdout] test tool_config::tests::list_tools ... ok
[INFO] [stdout] test tool_config::tests::set_and_get ... ok
[INFO] [stdout] test tool_config::tests::remove_tool ... ok
[INFO] [stdout] test tool_config::tests::load_missing_file ... ok
[INFO] [stdout] test tool_config::tests::parse_yaml_with_env_and_secrets ... ok
[INFO] [stdout] test tool_config::tests::load_empty_file ... ok
[INFO] [stdout] test server::tests::revoke_removes_exactly_added_entries_and_nothing_else ... ok
[INFO] [stdout] test tests::top_level_grant_parses_prose_and_static_only ... ok
[INFO] [stdout] test session_store::tests::stale_snapshot_does_not_overwrite_newer_persisted_state ... ok
[INFO] [stdout] test server::tests::session_list_shows_current_session_details_without_raw_token_for_user ... ok
[INFO] [stdout] test tool_config::tests::reload_if_stale_detects_change ... ok
[INFO] [stdout] test grant_rules::tests::grafana_kubernetes_grant_generates_narrow_static_rules ... ok
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- secrets::tests::pass_store_listing_walks_principal_namespaces stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'secrets::tests::pass_store_listing_walks_principal_namespaces' (3153) panicked at src/secrets.rs:2031:54:
[INFO] [stdout] called `Result::unwrap()` on an `Err` value: Os { code: 30, kind: ReadOnlyFilesystem, message: "Read-only file system" }
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x57c4aecd6a41 - std[73adb7dc35730857]::backtrace_rs::backtrace::libunwind::trace
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x57c4aecd6a41 - std[73adb7dc35730857]::backtrace_rs::backtrace::trace_unsynchronized::<std[73adb7dc35730857]::sys::backtrace::_print_fmt::{closure#1}>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x57c4aecd6a41 - std[73adb7dc35730857]::sys::backtrace::_print_fmt
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x57c4aecd6a41 - <<std[73adb7dc35730857]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[6883ba1bc0fe4ed1]::fmt::Display>::fmt
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x57c4aecf0c6a - <core[6883ba1bc0fe4ed1]::fmt::rt::Argument>::fmt
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x57c4aecf0c6a - core[6883ba1bc0fe4ed1]::fmt::write
[INFO] [stdout]    6:     0x57c4aecdd02c - std[73adb7dc35730857]::io::default_write_fmt::<alloc[55a36b64bcbf2c0d]::vec::Vec<u8>>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/io/mod.rs:626:11
[INFO] [stdout]    7:     0x57c4aecdd02c - <alloc[55a36b64bcbf2c0d]::vec::Vec<u8> as std[73adb7dc35730857]::io::Write>::write_fmt
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/io/mod.rs:1730:13
[INFO] [stdout]    8:     0x57c4aecafab6 - <std[73adb7dc35730857]::sys::backtrace::BacktraceLock>::print
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x57c4aecafab6 - std[73adb7dc35730857]::panicking::default_hook::{closure#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:292:27
[INFO] [stdout]   10:     0x57c4aecccba9 - std[73adb7dc35730857]::panicking::default_hook
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:316:9
[INFO] [stdout]   11:     0x57c4aded5370 - <alloc[55a36b64bcbf2c0d]::boxed::Box<dyn for<'a, 'b> core[6883ba1bc0fe4ed1]::ops::function::Fn<(&'a std[73adb7dc35730857]::panic::PanicHookInfo<'b>,), Output = ()> + core[6883ba1bc0fe4ed1]::marker::Send + core[6883ba1bc0fe4ed1]::marker::Sync> as core[6883ba1bc0fe4ed1]::ops::function::Fn<(&std[73adb7dc35730857]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/alloc/src/boxed.rs:2333:9
[INFO] [stdout]   12:     0x57c4aded5370 - test[980ffaebd391d06d]::test_main_inner::<test[980ffaebd391d06d]::test_main_static::{closure#0}>::{closure#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/test/src/lib.rs:155:21
[INFO] [stdout]   13:     0x57c4aeccced2 - <alloc[55a36b64bcbf2c0d]::boxed::Box<dyn for<'a, 'b> core[6883ba1bc0fe4ed1]::ops::function::Fn<(&'a std[73adb7dc35730857]::panic::PanicHookInfo<'b>,), Output = ()> + core[6883ba1bc0fe4ed1]::marker::Send + core[6883ba1bc0fe4ed1]::marker::Sync> as core[6883ba1bc0fe4ed1]::ops::function::Fn<(&std[73adb7dc35730857]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/alloc/src/boxed.rs:2333:9
[INFO] [stdout]   14:     0x57c4aeccced2 - std[73adb7dc35730857]::panicking::panic_with_hook
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:823:13
[INFO] [stdout]   15:     0x57c4aecafb62 - std[73adb7dc35730857]::panicking::panic_handler::{closure#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:688:13
[INFO] [stdout]   16:     0x57c4aeca6839 - std[73adb7dc35730857]::sys::backtrace::__rust_end_short_backtrace::<std[73adb7dc35730857]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x57c4aecb100d - __rustc[a7b7b02e776dd976]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:679:5
[INFO] [stdout]   18:     0x57c4aecf151c - core[6883ba1bc0fe4ed1]::panicking::panic_fmt
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x57c4aecf1262 - core[6883ba1bc0fe4ed1]::result::unwrap_failed
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/result.rs:1870:5
[INFO] [stdout]   20:     0x57c4add46d94 - <core[6883ba1bc0fe4ed1]::result::Result<(), core[6883ba1bc0fe4ed1]::io::error::Error>>::unwrap
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/result.rs:1231:23
[INFO] [stdout]   21:     0x57c4add46d94 - guard[fbdc244b6e56ade8]::secrets::tests::pass_store_listing_walks_principal_namespaces
[INFO] [stdout]                                at /opt/rustwide/workdir/src/secrets.rs:2031:54
[INFO] [stdout]   22:     0x57c4add28b47 - guard[fbdc244b6e56ade8]::secrets::tests::pass_store_listing_walks_principal_namespaces::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/workdir/src/secrets.rs:2026:55
[INFO] [stdout]   23:     0x57c4ada667c6 - <guard[fbdc244b6e56ade8]::secrets::tests::pass_store_listing_walks_principal_namespaces::{closure#0} as core[6883ba1bc0fe4ed1]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x57c4adec86ab - <fn() -> core[6883ba1bc0fe4ed1]::result::Result<(), alloc[55a36b64bcbf2c0d]::string::String> as core[6883ba1bc0fe4ed1]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   25:     0x57c4adec86ab - test[980ffaebd391d06d]::__rust_begin_short_backtrace::<core[6883ba1bc0fe4ed1]::result::Result<(), alloc[55a36b64bcbf2c0d]::string::String>, fn() -> core[6883ba1bc0fe4ed1]::result::Result<(), alloc[55a36b64bcbf2c0d]::string::String>>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/test/src/lib.rs:724:18
[INFO] [stdout]   26:     0x57c4aded5cf5 - test[980ffaebd391d06d]::run_test_in_process::{closure#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/test/src/lib.rs:747:74
[INFO] [stdout]   27:     0x57c4aded5cf5 - <core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<test[980ffaebd391d06d]::run_test_in_process::{closure#0}> as core[6883ba1bc0fe4ed1]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   28:     0x57c4aded5cf5 - std[73adb7dc35730857]::panicking::catch_unwind::do_call::<core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<test[980ffaebd391d06d]::run_test_in_process::{closure#0}>, core[6883ba1bc0fe4ed1]::result::Result<(), alloc[55a36b64bcbf2c0d]::string::String>>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:576:43
[INFO] [stdout]   29:     0x57c4aded5cf5 - std[73adb7dc35730857]::panicking::catch_unwind::<core[6883ba1bc0fe4ed1]::result::Result<(), alloc[55a36b64bcbf2c0d]::string::String>, core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<test[980ffaebd391d06d]::run_test_in_process::{closure#0}>>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:544:19
[INFO] [stdout]   30:     0x57c4aded5cf5 - std[73adb7dc35730857]::panic::catch_unwind::<core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<test[980ffaebd391d06d]::run_test_in_process::{closure#0}>, core[6883ba1bc0fe4ed1]::result::Result<(), alloc[55a36b64bcbf2c0d]::string::String>>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panic.rs:359:14
[INFO] [stdout]   31:     0x57c4aded5cf5 - test[980ffaebd391d06d]::run_test_in_process
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/test/src/lib.rs:747:27
[INFO] [stdout]   32:     0x57c4aded5cf5 - test[980ffaebd391d06d]::run_test::{closure#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/test/src/lib.rs:668:43
[INFO] [stdout]   33:     0x57c4aded07a4 - test[980ffaebd391d06d]::run_test::{closure#1}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/test/src/lib.rs:698:41
[INFO] [stdout]   34:     0x57c4aded07a4 - std[73adb7dc35730857]::sys::backtrace::__rust_begin_short_backtrace::<test[980ffaebd391d06d]::run_test::{closure#1}, ()>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   35:     0x57c4aded8e42 - std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked::<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/thread/lifecycle.rs:70:13
[INFO] [stdout]   36:     0x57c4aded8e42 - <core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}> as core[6883ba1bc0fe4ed1]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   37:     0x57c4aded8e42 - std[73adb7dc35730857]::panicking::catch_unwind::do_call::<core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:576:43
[INFO] [stdout]   38:     0x57c4aded8e42 - std[73adb7dc35730857]::panicking::catch_unwind::<(), core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panicking.rs:544:19
[INFO] [stdout]   39:     0x57c4aded8e42 - std[73adb7dc35730857]::panic::catch_unwind::<core[6883ba1bc0fe4ed1]::panic::unwind_safe::AssertUnwindSafe<std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/panic.rs:359:14
[INFO] [stdout]   40:     0x57c4aded8e42 - std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked::<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/thread/lifecycle.rs:68:26
[INFO] [stdout]   41:     0x57c4aded8e42 - <std[73adb7dc35730857]::thread::lifecycle::spawn_unchecked<test[980ffaebd391d06d]::run_test::{closure#1}, ()>::{closure#1} as core[6883ba1bc0fe4ed1]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   42:     0x57c4aecd59af - <alloc[55a36b64bcbf2c0d]::boxed::Box<dyn core[6883ba1bc0fe4ed1]::ops::function::FnOnce<(), Output = ()> + core[6883ba1bc0fe4ed1]::marker::Send> as core[6883ba1bc0fe4ed1]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/alloc/src/boxed.rs:2319:9
[INFO] [stdout]   43:     0x57c4aecd59af - <std[73adb7dc35730857]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]                                at /rustc/6b3fa26749ab40e159b2dd5cf577acaaf5902772/library/std/src/sys/thread/unix.rs:123:17
[INFO] [stdout]   44:     0x7aad5188eaa4 - <unknown>
[INFO] [stdout]   45:     0x7aad5191ba64 - clone
[INFO] [stdout]   46:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     secrets::tests::pass_store_listing_walks_principal_namespaces
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 258 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.37s
[INFO] [stdout] 
[INFO] [stderr] error: test failed, to rerun pass `--bin guard`
[INFO] running `Command { std: "docker" "inspect" "053f28ada7551af323b5d95ba51139aed5f0da771eb9235593d214796a86987f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "053f28ada7551af323b5d95ba51139aed5f0da771eb9235593d214796a86987f", kill_on_drop: false }`
[INFO] [stdout] 053f28ada7551af323b5d95ba51139aed5f0da771eb9235593d214796a86987f
