[INFO] fetching crate pw-env 0.3.9... [INFO] testing pw-env-0.3.9 against beta-2026-04-21 for beta-1.96-1 [INFO] extracting crate pw-env 0.3.9 into /workspace/builds/worker-0-tc2/source [INFO] started tweaking crates.io crate pw-env 0.3.9 [INFO] removed 0 missing tests [INFO] finished tweaking crates.io crate pw-env 0.3.9 [INFO] tweaked toml for crates.io crate pw-env 0.3.9 written to /workspace/builds/worker-0-tc2/source/Cargo.toml [INFO] validating manifest of crates.io crate pw-env 0.3.9 on toolchain beta-2026-04-21 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+beta-2026-04-21" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate pw-env 0.3.9 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" "+beta-2026-04-21" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-04-21" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 1c5e110ec7437d9c4f7b994acaa4937b8f296845f8a31a33a15d3aab352166c5 [INFO] running `Command { std: "docker" "start" "-a" "1c5e110ec7437d9c4f7b994acaa4937b8f296845f8a31a33a15d3aab352166c5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "1c5e110ec7437d9c4f7b994acaa4937b8f296845f8a31a33a15d3aab352166c5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "1c5e110ec7437d9c4f7b994acaa4937b8f296845f8a31a33a15d3aab352166c5", kill_on_drop: false }` [INFO] [stdout] 1c5e110ec7437d9c4f7b994acaa4937b8f296845f8a31a33a15d3aab352166c5 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-04-21" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] caf7144a973a2821758a074146c853f8a7fd30606b5d4f4a14c3b4a8295643ad [INFO] running `Command { std: "docker" "start" "-a" "caf7144a973a2821758a074146c853f8a7fd30606b5d4f4a14c3b4a8295643ad", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.185 [INFO] [stderr] Compiling log v0.4.29 [INFO] [stderr] Compiling bitflags v2.11.1 [INFO] [stderr] Compiling zeroize_derive v1.4.3 [INFO] [stderr] Compiling unicode-segmentation v1.13.2 [INFO] [stderr] Compiling rustix v1.1.4 [INFO] [stderr] Compiling cc v1.2.60 [INFO] [stderr] Compiling linux-raw-sys v0.12.1 [INFO] [stderr] Compiling serde_core v1.0.228 [INFO] [stderr] Compiling generic-array v0.14.7 [INFO] [stderr] Compiling thiserror-impl v2.0.18 [INFO] [stderr] Compiling futures-sink v0.3.32 [INFO] [stderr] Compiling hashbrown v0.16.1 [INFO] [stderr] Compiling darling_core v0.23.0 [INFO] [stderr] Compiling tracing-core v0.1.36 [INFO] [stderr] Compiling itertools v0.14.0 [INFO] [stderr] Compiling strum_macros v0.27.2 [INFO] [stderr] Compiling tracing-attributes v0.1.31 [INFO] [stderr] Compiling pkg-config v0.3.33 [INFO] [stderr] Compiling indoc v2.0.7 [INFO] [stderr] Compiling instability v0.3.12 [INFO] [stderr] Compiling futures-util v0.3.32 [INFO] [stderr] Compiling deranged v0.5.8 [INFO] [stderr] Compiling zeroize v1.8.2 [INFO] [stderr] Compiling compact_str v0.9.0 [INFO] [stderr] Compiling lru v0.16.4 [INFO] [stderr] Compiling convert_case v0.10.0 [INFO] [stderr] Compiling rustls-pki-types v1.14.0 [INFO] [stderr] Compiling libdbus-sys v0.2.7 [INFO] [stderr] Compiling num-conv v0.2.1 [INFO] [stderr] Compiling mio v1.2.0 [INFO] [stderr] Compiling crypto-common v0.1.7 [INFO] [stderr] Compiling socket2 v0.6.3 [INFO] [stderr] Compiling block-buffer v0.10.4 [INFO] [stderr] Compiling block-padding v0.3.3 [INFO] [stderr] Compiling getrandom v0.2.17 [INFO] [stderr] Compiling thiserror v2.0.18 [INFO] [stderr] Compiling errno v0.3.14 [INFO] [stderr] Compiling kasuari v0.4.12 [INFO] [stderr] Compiling inout v0.1.4 [INFO] [stderr] Compiling digest v0.10.7 [INFO] [stderr] Compiling tokio v1.52.0 [INFO] [stderr] Compiling fastrand v2.4.1 [INFO] [stderr] Compiling signal-hook-registry v1.4.8 [INFO] [stderr] Compiling rustls v0.23.38 [INFO] [stderr] Compiling signal-hook v0.3.18 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Compiling anstyle-parse v1.0.0 [INFO] [stderr] Compiling cipher v0.4.4 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling derive_more-impl v2.1.1 [INFO] [stderr] Compiling num-bigint v0.4.6 [INFO] [stderr] Compiling tracing v0.1.44 [INFO] [stderr] Compiling time v0.3.47 [INFO] [stderr] Compiling futures-channel v0.3.32 [INFO] [stderr] Compiling simd-adler32 v0.3.9 [INFO] [stderr] Compiling anstyle v1.0.14 [INFO] [stderr] Compiling crossbeam-utils v0.8.21 [INFO] [stderr] Compiling regex-syntax v0.8.10 [INFO] [stderr] Compiling colorchoice v1.0.5 [INFO] [stderr] Compiling unicode-truncate v2.0.1 [INFO] [stderr] Compiling anstream v1.0.0 [INFO] [stderr] Compiling derive_more v2.1.1 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling signal-hook-mio v0.2.5 [INFO] [stderr] Compiling getrandom v0.4.2 [INFO] [stderr] Compiling hmac v0.12.1 [INFO] [stderr] Compiling line-clipping v0.3.7 [INFO] [stderr] Compiling num-iter v0.1.45 [INFO] [stderr] Compiling num-complex v0.4.6 [INFO] [stderr] Compiling clap_lex v1.1.0 [INFO] [stderr] Compiling miniz_oxide v0.8.9 [INFO] [stderr] Compiling hkdf v0.12.4 [INFO] [stderr] Compiling clap_builder v4.6.0 [INFO] [stderr] Compiling sharded-slab v0.1.7 [INFO] [stderr] Compiling dbus v0.9.10 [INFO] [stderr] Compiling strum v0.27.2 [INFO] [stderr] Compiling ratatui-core v0.1.0 [INFO] [stderr] Compiling aes v0.8.4 [INFO] [stderr] Compiling sha2 v0.10.9 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling cbc v0.1.2 [INFO] [stderr] Compiling crossterm v0.29.0 [INFO] [stderr] Compiling tempfile v3.27.0 [INFO] [stderr] Compiling webpki-roots v1.0.6 [INFO] [stderr] Compiling tracing-log v0.2.0 [INFO] [stderr] Compiling darling_macro v0.23.0 [INFO] [stderr] Compiling clap_derive v4.6.0 [INFO] [stderr] Compiling thread_local v1.1.9 [INFO] [stderr] Compiling nu-ansi-term v0.50.3 [INFO] [stderr] Compiling darling v0.23.0 [INFO] [stderr] Compiling regex-automata v0.4.14 [INFO] [stderr] Compiling num-rational v0.4.2 [INFO] [stderr] Compiling const-oid v0.10.2 [INFO] [stderr] Compiling hashbrown v0.17.0 [INFO] [stderr] Compiling ratatui-widgets v0.3.0 [INFO] [stderr] Compiling zlib-rs v0.6.3 [INFO] [stderr] Compiling winnow v1.0.1 [INFO] [stderr] Compiling anyhow v1.0.102 [INFO] [stderr] Compiling num v0.4.3 [INFO] [stderr] Compiling bumpalo v3.20.2 [INFO] [stderr] Compiling dbus-secret-service v4.1.0 [INFO] [stderr] Compiling zopfli v0.8.3 [INFO] [stderr] Compiling indexmap v2.14.0 [INFO] [stderr] Compiling toml_parser v1.1.2+spec-1.1.0 [INFO] [stderr] Compiling digest v0.11.2 [INFO] [stderr] Compiling ratatui-crossterm v0.1.0 [INFO] [stderr] Compiling dirs-sys v0.5.0 [INFO] [stderr] Compiling serde_urlencoded v0.7.1 [INFO] [stderr] Compiling xattr v1.6.1 [INFO] [stderr] Compiling serde_spanned v1.1.1 [INFO] [stderr] Compiling toml_datetime v1.1.1+spec-1.1.0 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling crossbeam-channel v0.5.15 [INFO] [stderr] Compiling console v0.16.3 [INFO] [stderr] Compiling filetime v0.2.27 [INFO] [stderr] Compiling toml_writer v1.1.1+spec-1.1.0 [INFO] [stderr] Compiling shell-words v1.1.1 [INFO] [stderr] Compiling sha2 v0.11.0 [INFO] [stderr] Compiling toml v1.1.2+spec-1.1.0 [INFO] [stderr] Compiling tar v0.4.45 [INFO] [stderr] Compiling keyring v3.6.3 [INFO] [stderr] Compiling ratatui-macros v0.7.0 [INFO] [stderr] Compiling ratatui v0.30.0 [INFO] [stderr] Compiling clap v4.6.0 [INFO] [stderr] Compiling hyper v1.9.0 [INFO] [stderr] Compiling tower v0.5.3 [INFO] [stderr] Compiling clap_complete v4.6.2 [INFO] [stderr] Compiling dialoguer v0.12.0 [INFO] [stderr] Compiling rustls-webpki v0.103.12 [INFO] [stderr] Compiling matchers v0.2.0 [INFO] [stderr] Compiling hyper-util v0.1.20 [INFO] [stderr] Compiling tracing-subscriber v0.3.23 [INFO] [stderr] Compiling tower-http v0.6.8 [INFO] [stderr] Compiling dirs v6.0.0 [INFO] [stderr] Compiling self-replace v1.5.0 [INFO] [stderr] Compiling semver v1.0.28 [INFO] [stderr] Compiling mutants v0.0.4 [INFO] [stderr] Compiling tracing-appender v0.2.4 [INFO] [stderr] Compiling flate2 v1.1.9 [INFO] [stderr] Compiling zip v8.5.1 [INFO] [stderr] Compiling tokio-rustls v0.26.4 [INFO] [stderr] Compiling hyper-rustls v0.27.9 [INFO] [stderr] Compiling reqwest v0.12.28 [INFO] [stderr] Compiling pw-env v0.3.9 (/opt/rustwide/workdir) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 11s [INFO] running `Command { std: "docker" "inspect" "caf7144a973a2821758a074146c853f8a7fd30606b5d4f4a14c3b4a8295643ad", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "caf7144a973a2821758a074146c853f8a7fd30606b5d4f4a14c3b4a8295643ad", kill_on_drop: false }` [INFO] [stdout] caf7144a973a2821758a074146c853f8a7fd30606b5d4f4a14c3b4a8295643ad [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-04-21" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 639c0766b7224322563c94b3d3ad5aefbad9966d56c310316166a0d701ceabc2 [INFO] running `Command { std: "docker" "start" "-a" "639c0766b7224322563c94b3d3ad5aefbad9966d56c310316166a0d701ceabc2", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.185 [INFO] [stderr] Compiling cfg_aliases v0.1.1 [INFO] [stderr] Compiling downcast-rs v1.2.1 [INFO] [stderr] Compiling nix v0.28.0 [INFO] [stderr] Compiling mio v1.2.0 [INFO] [stderr] Compiling socket2 v0.6.3 [INFO] [stderr] Compiling errno v0.3.14 [INFO] [stderr] Compiling getrandom v0.2.17 [INFO] [stderr] Compiling time v0.3.47 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling getrandom v0.4.2 [INFO] [stderr] Compiling dbus v0.9.10 [INFO] [stderr] Compiling filetime v0.2.27 [INFO] [stderr] Compiling console v0.16.3 [INFO] [stderr] Compiling dirs-sys v0.5.0 [INFO] [stderr] Compiling serial2 v0.2.36 [INFO] [stderr] Compiling filedescriptor v0.8.3 [INFO] [stderr] Compiling ring v0.17.14 [INFO] [stderr] Compiling tar v0.4.45 [INFO] [stderr] Compiling tempfile v3.27.0 [INFO] [stderr] Compiling signal-hook-registry v1.4.8 [INFO] [stderr] Compiling dirs v6.0.0 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling signal-hook v0.3.18 [INFO] [stderr] Compiling tokio v1.52.0 [INFO] [stderr] Compiling self-replace v1.5.0 [INFO] [stderr] Compiling dialoguer v0.12.0 [INFO] [stderr] Compiling signal-hook-mio v0.2.5 [INFO] [stderr] Compiling crossterm v0.29.0 [INFO] [stderr] Compiling ratatui-crossterm v0.1.0 [INFO] [stderr] Compiling portable-pty v0.9.0 [INFO] [stderr] Compiling rustls-webpki v0.103.12 [INFO] [stderr] Compiling ratatui-widgets v0.3.0 [INFO] [stderr] Compiling tracing-appender v0.2.4 [INFO] [stderr] Compiling rustls v0.23.38 [INFO] [stderr] Compiling dbus-secret-service v4.1.0 [INFO] [stderr] Compiling keyring v3.6.3 [INFO] [stderr] Compiling ratatui-macros v0.7.0 [INFO] [stderr] Compiling ratatui v0.30.0 [INFO] [stderr] Compiling hyper v1.9.0 [INFO] [stderr] Compiling tower v0.5.3 [INFO] [stderr] Compiling tower-http v0.6.8 [INFO] [stderr] Compiling hyper-util v0.1.20 [INFO] [stderr] Compiling tokio-rustls v0.26.4 [INFO] [stderr] Compiling hyper-rustls v0.27.9 [INFO] [stderr] Compiling reqwest v0.12.28 [INFO] [stderr] Compiling pw-env v0.3.9 (/opt/rustwide/workdir) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 45.01s [INFO] running `Command { std: "docker" "inspect" "639c0766b7224322563c94b3d3ad5aefbad9966d56c310316166a0d701ceabc2", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "639c0766b7224322563c94b3d3ad5aefbad9966d56c310316166a0d701ceabc2", kill_on_drop: false }` [INFO] [stdout] 639c0766b7224322563c94b3d3ad5aefbad9966d56c310316166a0d701ceabc2 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-04-21" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] 0ea9bc3bbe6d5b89b8099568d47fa8e26947dc9f251fdec3e8ccb5255429a419 [INFO] running `Command { std: "docker" "start" "-a" "0ea9bc3bbe6d5b89b8099568d47fa8e26947dc9f251fdec3e8ccb5255429a419", kill_on_drop: false }` [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.57s [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/pw_env-da3dbef97c8609dc) [INFO] [stdout] [INFO] [stdout] running 631 tests [INFO] [stdout] test add::tests::read_secret_value_rejects_empty_value_from_prompt ... ok [INFO] [stdout] test add::tests::read_secret_value_rejects_empty_value_from_stdin ... ok [INFO] [stdout] test add::tests::read_secret_value_rejects_crlf_only_value_from_stdin ... ok [INFO] [stdout] test add::tests::read_secret_value_uses_prompt_when_stdin_is_terminal ... ok [INFO] [stdout] test add::tests::trim_single_trailing_newline_keeps_embedded_newlines ... ok [INFO] [stdout] test add::tests::read_secret_value_reads_stdin_when_not_terminal ... ok [INFO] [stdout] test add::tests::trim_single_trailing_newline_removes_crlf ... ok [INFO] [stdout] test add::tests::trim_single_trailing_newline_removes_lf ... ok [INFO] [stdout] test backend::bw::tests::backend_name_is_bitwarden ... ok [INFO] [stdout] test add::tests::add_entry_rejects_invalid_key_before_backend_interaction ... ok [INFO] [stdout] test add::tests::apply_env_entry_update_writes_url_on_create ... ok [INFO] [stdout] test add::tests::apply_env_entry_update_already_managed_no_url_leaves_file_unchanged ... ok [INFO] [stdout] test add::tests::plan_env_entry_update_creates_new_env_when_missing ... ok [INFO] [stdout] test add::tests::apply_env_entry_update_appends_to_empty_file_without_leading_newline ... ok [INFO] [stdout] test add::tests::plan_env_entry_update_rejects_plaintext_entry ... ok [INFO] [stdout] test add::tests::plan_env_entry_update_marks_existing_empty_entry_as_managed ... ok [INFO] [stdout] test add::tests::add_entry_backend_override_uses_matching_backend_item_config ... ok [INFO] [stdout] test add::tests::apply_env_entry_update_writes_url_on_append ... ok [INFO] [stdout] test add::tests::apply_env_entry_update_updates_empty_entry_with_url_when_already_managed ... ok [INFO] [stdout] test add::tests::apply_env_entry_update_appends_missing_newline ... ok [INFO] [stdout] test backend::bw::tests::backend_has_returns_false_when_resolve_fails ... ok [INFO] [stdout] test backend::bw::tests::configure_sync_throttle_updates_effective_value ... ok [INFO] [stdout] test backend::bw::tests::current_unix_secs_is_close_to_system_time ... ok [INFO] [stdout] test backend::bw::tests::backend_has_returns_true_when_resolve_succeeds ... ok [INFO] [stdout] test backend::bw::tests::backend_resolve_direct_password_lookup ... ok [INFO] [stdout] test backend::bw::tests::backend_resolve_disambiguates_by_project_single_match ... ok [INFO] [stdout] test add::tests::add_entry_stores_secret_and_creates_empty_env_entry_for_gpg_backend ... ok [INFO] [stdout] test backend::bw::tests::backend_resolve_exact_name_match_from_list ... ok [INFO] [stdout] test backend::bw::tests::invalidate_session_clears_cached_value ... ok [INFO] [stdout] test backend::bw::tests::is_stale_session_error_detects_expected_messages ... ok [INFO] [stdout] test backend::bw::tests::log_action_timing_emits_debug_log ... ok [INFO] [stdout] test backend::bw::tests::backend_resolve_retries_after_forced_sync_on_missing_item ... ok [INFO] [stdout] test backend::bw::tests::backend_resolve_returns_err_for_invalid_bw_reference ... ok [INFO] [stdout] test backend::bw::tests::reference_url_with_folder_returns_bw_url ... ok [INFO] [stdout] test backend::bw::tests::reference_url_with_item_uses_item_name ... ok [INFO] [stdout] test backend::bw::tests::reference_url_without_folder_returns_bw_url ... ok [INFO] [stdout] test backend::bw::tests::backend_resolve_with_bw_reference ... ok [INFO] [stdout] test backend::bw::tests::backend_resolve_with_bw_reference_disambiguates_by_repository_before_folder_and_project ... ok [INFO] [stdout] test backend::bw::tests::backend_resolve_with_item_configured ... ok [INFO] [stdout] test backend::bw::tests::backend_store_creates_new_item_when_no_item_config ... ok [INFO] [stdout] test backend::bw::tests::backend_store_edits_existing_item_when_item_configured ... ok [INFO] [stdout] test backend::bw::tests::backend_store_returns_err_when_bw_create_fails ... ok [INFO] [stdout] test backend::bw::tests::clear_folder_cache_removes_persisted_file ... ok [INFO] [stdout] test backend::bw::tests::clear_sync_state_removes_persisted_file ... ok [INFO] [stdout] test backend::bw::tests::disambiguate_items_narrows_by_folder ... ok [INFO] [stdout] test backend::bw::tests::disambiguate_items_narrows_by_project_after_folder ... ok [INFO] [stdout] test backend::bw::tests::disambiguate_items_narrows_by_repository_before_folder ... ok [INFO] [stdout] test backend::bw::tests::disambiguate_items_returns_empty_when_ambiguous ... ok [INFO] [stdout] test backend::bw::tests::select_item_from_list_does_not_log_available_names_for_empty_results ... ok [INFO] [stdout] test backend::bw::tests::select_item_from_list_errors_when_no_exact_name ... ok [INFO] [stdout] test backend::bw::tests::select_item_from_list_returns_single_repository_match ... ok [INFO] [stdout] test backend::bw::tests::set_test_sync_throttle_override_updates_effective_value ... ok [INFO] [stdout] test backend::bw::tests::should_retry_after_sync_matches_expected_patterns ... ok [INFO] [stdout] test backend::bw::tests::should_retry_after_sync_requires_both_field_markers ... ok [INFO] [stdout] test backend::bw::tests::sync_state_store_save_persists_contents ... ok [INFO] [stdout] test backend::bw::tests::ensure_session_uses_bw_session_from_environment ... ok [INFO] [stdout] test backend::bw::tests::prompt_unlock_runs_bw_unlock_and_returns_session ... ok [INFO] [stdout] test backend::bw::tests::resolve_batch_key_lookup_disambiguates_by_repository_before_folder_and_project ... ok [INFO] [stdout] test backend::bw::tests::resolve_batch_reference_disambiguates_by_folder_then_project ... ok [INFO] [stdout] test backend::bw::tests::test_base64_encode_binary_bytes ... ok [INFO] [stdout] test backend::bw::tests::test_base64_encode_empty ... ok [INFO] [stdout] test backend::bw::tests::test_base64_encode_known_value ... ok [INFO] [stdout] test backend::bw::tests::test_base64_encode_one_byte ... ok [INFO] [stdout] test backend::bw::tests::test_base64_encode_single_byte ... ok [INFO] [stdout] test backend::bw::tests::test_base64_encode_six_bytes ... ok [INFO] [stdout] test backend::bw::tests::test_base64_encode_three_bytes ... ok [INFO] [stdout] test backend::bw::tests::test_base64_encode_two_bytes ... ok [INFO] [stdout] test backend::bw::tests::test_extract_field_from_item_invalid_json ... ok [INFO] [stdout] test backend::bw::tests::test_extract_field_from_item_valid_json ... ok [INFO] [stdout] test backend::bw::tests::test_extract_field_from_value_custom_field ... ok [INFO] [stdout] test backend::bw::tests::test_extract_field_from_value_custom_field_second_item_selected ... ok [INFO] [stdout] test backend::bw::tests::resolve_batch_reference_reuses_selected_item_for_multiple_fields ... ok [INFO] [stdout] test backend::bw::tests::test_extract_field_from_value_missing ... ok [INFO] [stdout] test backend::bw::tests::test_extract_field_from_value_password ... ok [INFO] [stdout] test backend::bw::tests::test_extract_field_from_value_notes ... ok [INFO] [stdout] test backend::bw::tests::test_extract_field_from_value_username ... ok [INFO] [stdout] test backend::bw::tests::test_extract_field_from_value_password_prefers_login_over_username ... ok [INFO] [stdout] test backend::bw::tests::test_extract_field_from_value_username_ignores_password ... ok [INFO] [stdout] test backend::bw::tests::test_parse_bw_reference_invalid_only_one_part ... ok [INFO] [stdout] test backend::bw::tests::test_parse_bw_reference_no_prefix ... ok [INFO] [stdout] test backend::bw::tests::test_parse_bw_reference_three_parts ... ok [INFO] [stdout] test backend::bw::tests::test_parse_bw_reference_two_parts ... ok [INFO] [stdout] test backend::bw::tests::test_paths_use_test_overrides ... ok [INFO] [stdout] test backend::bw::tests::test_upsert_custom_field_adds_new_field ... ok [INFO] [stdout] test backend::bw::tests::test_upsert_custom_field_creates_fields_array_when_absent ... ok [INFO] [stdout] test backend::bw::tests::test_upsert_custom_field_replaces_existing_field ... ok [INFO] [stdout] test backend::bw::tests::test_migration_metadata_fields_include_project_and_source_dir ... ok [INFO] [stdout] test backend::gpg::tests::backend_has_returns_err_when_gpg_file_missing ... ok [INFO] [stdout] test backend::bw::tests::resolve_batch_retries_after_forced_sync_on_missing_item ... ok [INFO] [stdout] test backend::bw::tests::resolve_folder_id_logs_when_loading_nonempty_persisted_cache ... ok [INFO] [stdout] test backend::gpg::tests::backend_name_is_gpg ... ok [INFO] [stdout] test backend::bw::tests::resolve_folder_id_persists_cache_to_disk ... ok [INFO] [stdout] test backend::gpg::tests::backend_resolve_returns_err_when_gpg_file_missing ... ok [INFO] [stdout] test backend::bw::tests::resolve_folder_id_skips_loaded_cache_log_for_empty_persisted_cache ... ok [INFO] [stdout] test backend::gpg::tests::gpg_backend_reference_url_returns_none ... ok [INFO] [stdout] test backend::gpg::tests::load_all_returns_err_when_gpg_file_missing ... ok [INFO] [stdout] test backend::bw::tests::run_bw_does_not_inject_empty_bw_session_env ... ok [INFO] [stdout] test backend::bw::tests::resolve_reference_folder_id_prefers_reference_folder ... ok [INFO] [stdout] test backend::gpg::tests::load_all_stored_secrets_returns_err_when_gpg_file_missing ... ok [INFO] [stdout] test backend::bw::tests::run_bw_retries_once_on_stale_session_and_returns_retry_output ... ok [INFO] [stdout] test backend::bw::tests::run_bw_returns_err_on_non_zero_exit ... ok [INFO] [stdout] test backend::bw::tests::run_bw_returns_stdout_on_success ... ok [INFO] [stdout] test backend::gpg::tests::store_returns_err_when_recipient_not_configured ... ok [INFO] [stdout] test backend::gpg::tests::test_gpg_file_path ... ok [INFO] [stdout] test backend::bw::tests::sync_vault_clamps_configured_throttle_to_one_hour_minimum ... ok [INFO] [stdout] test backend::gpg::tests::test_gpg_file_path_allows_safe_pattern ... ok [INFO] [stdout] test backend::gpg::tests::test_gpg_file_path_falls_back_when_existing_path_escapes_project_dir ... ok [INFO] [stdout] test backend::gpg::tests::test_gpg_file_path_keeps_existing_path_within_project_dir ... ok [INFO] [stdout] test backend::gpg::tests::test_gpg_file_path_rejects_traversal ... ok [INFO] [stdout] test backend::gpg::tests::test_metadata_comment_format ... ok [INFO] [stdout] test backend::gpg::tests::test_parse_env_content ... ok [INFO] [stdout] test backend::gpg::tests::test_parse_env_content_empty ... ok [INFO] [stdout] test backend::gpg::tests::test_parse_stored_secrets_reads_metadata_comments ... ok [INFO] [stdout] test backend::bw::tests::sync_vault_skips_recent_syncs_from_persisted_state ... ok [INFO] [stdout] test backend::gpg::tests::test_parse_stored_secrets_unmatched_leading_double_quote_not_stripped ... ok [INFO] [stdout] test backend::gpg::tests::test_parse_stored_secrets_unmatched_leading_single_quote_not_stripped ... ok [INFO] [stdout] test backend::gpg::tests::test_parse_stored_secrets_with_double_quoted_value ... ok [INFO] [stdout] test backend::gpg::tests::test_parse_stored_secrets_with_empty_key_ignored ... ok [INFO] [stdout] test backend::gpg::tests::test_parse_stored_secrets_with_line_without_equals ... ok [INFO] [stdout] test backend::gpg::tests::test_parse_stored_secrets_with_single_quoted_value ... ok [INFO] [stdout] test backend::gpg::tests::test_parse_stored_secrets_with_unknown_metadata_key ... ok [INFO] [stdout] test backend::gpg::tests::test_serialize_stored_secrets_emits_metadata_comments ... ok [INFO] [stdout] test backend::gpg::tests::test_serialize_stored_secrets_empty ... ok [INFO] [stdout] test backend::gpg::tests::test_serialize_stored_secrets_with_no_metadata ... ok [INFO] [stdout] test backend::bw::tests::sync_vault_runs_sync_when_state_is_stale ... ok [INFO] [stdout] test backend::op::tests::backend_name_is_1password ... ok [INFO] [stdout] test backend::bw::tests::sync_vault_runs_sync_when_age_equals_throttle ... ok [INFO] [stdout] test backend::gpg::tests::store_creates_new_file_with_mock_gpg ... ok [INFO] [stdout] test backend::gpg::tests::backend_has_returns_false_with_mock_gpg_when_key_absent ... ok [INFO] [stdout] test backend::gpg::tests::backend_has_returns_true_with_mock_gpg ... ok [INFO] [stdout] test backend::gpg::tests::backend_resolve_returns_err_for_missing_key_with_mock_gpg ... ok [INFO] [stdout] test backend::gpg::tests::backend_resolve_returns_value_with_mock_gpg ... ok [INFO] [stdout] test backend::gpg::tests::load_all_returns_values_with_mock_gpg ... ok [INFO] [stdout] test backend::gpg::tests::load_all_stored_secrets_reads_mocked_gpg_content ... ok [INFO] [stdout] test backend::gpg::tests::store_appends_to_existing_file_with_mock_gpg ... ok [INFO] [stdout] test backend::gpg::tests::with_mock_gpg_executes_callback ... ok [INFO] [stdout] test backend::op::tests::backend_has_returns_false_when_resolve_fails ... ok [INFO] [stdout] test backend::op::tests::backend_has_returns_true_when_resolve_succeeds ... ok [INFO] [stdout] test backend::op::tests::backend_resolve_no_item_no_vault ... ok [INFO] [stdout] test backend::op::tests::backend_resolve_no_vault_disambiguates_on_multiple_items ... ok [INFO] [stdout] test backend::op::tests::backend_resolve_no_vault_disambiguates_when_only_repository_set ... ok [INFO] [stdout] test backend::op::tests::backend_resolve_no_vault_non_multiple_item_error_propagated ... ok [INFO] [stdout] test backend::op::tests::reference_url_with_vault_and_item ... ok [INFO] [stdout] test backend::op::tests::reference_url_with_vault_returns_op_url ... ok [INFO] [stdout] test backend::op::tests::reference_url_without_vault_returns_none ... ok [INFO] [stdout] test backend::op::tests::resolve_by_metadata_narrows_by_repo_then_project ... ok [INFO] [stdout] test backend::op::tests::backend_resolve_with_item_configured ... ok [INFO] [stdout] test backend::op::tests::backend_resolve_with_op_reference ... ok [INFO] [stdout] test backend::op::tests::backend_resolve_with_vault_configured ... ok [INFO] [stdout] test backend::op::tests::test_migration_field_assignments_include_project_and_source_dir ... ok [INFO] [stdout] test backend::op::tests::test_migration_field_assignments_with_project ... ok [INFO] [stdout] test backend::op::tests::test_migration_field_assignments_without_project ... ok [INFO] [stdout] test backend::op::tests::test_text_field_assignment_format ... ok [INFO] [stdout] test backend::op::tests::backend_resolve_with_vault_disambiguates_by_project_single_match ... ok [INFO] [stdout] test backend::tests::test_create_backend_bw ... ok [INFO] [stdout] test backend::tests::test_create_backend_gpg ... ok [INFO] [stdout] test backend::tests::test_create_backend_op ... ok [INFO] [stdout] test backend::tests::test_create_backend_unknown_returns_error ... ok [INFO] [stdout] test backend::tests::test_store_context_created_with ... ok [INFO] [stdout] test backend::tests::test_store_context_migrated_from ... ok [INFO] [stdout] test backend::op::tests::backend_resolve_with_vault_disambiguates_by_repository_before_project ... ok [INFO] [stdout] test cache::tests::clear_secret_cache_counts_keyring_failures_per_entry ... ok [INFO] [stdout] test cache::tests::clear_secret_cache_removes_index_and_keyring_entries ... ok [INFO] [stdout] test cache::tests::now_unix_secs_returns_current_epoch_seconds ... ok [INFO] [stdout] test cache::tests::secret_cache_index_path_returns_configured_test_path ... ok [INFO] [stdout] test cache::tests::secret_cache_key_fingerprint_changes_with_backend_config ... ok [INFO] [stdout] test backend::op::tests::backend_resolve_with_vault_disambiguates_when_only_repository_set ... ok [INFO] [stdout] test cache::tests::secret_value_cache_expired_entry_is_removed_and_persisted ... ok [INFO] [stdout] test cache::tests::secret_value_cache_ignores_unavailable_keyring ... ok [INFO] [stdout] test backend::op::tests::backend_resolve_with_vault_non_multiple_item_error_propagated ... ok [INFO] [stdout] test config::tests::approval_store_path_returns_some_nonempty_path ... ok [INFO] [stdout] test config::tests::approve_hash_evicts_excess_entries_keeping_exactly_max ... ok [INFO] [stdout] test cache::tests::secret_value_cache_round_trips_with_test_keyring ... ok [INFO] [stdout] test config::tests::approval_hashes_are_bounded_per_project ... ok [INFO] [stdout] test config::tests::approved_project_configs_contains_entry_after_approval ... ok [INFO] [stdout] test config::tests::approved_project_configs_revoke_removes_entry ... ok [INFO] [stdout] test cache::tests::secret_value_cache_removes_stale_index_when_keyring_entry_is_missing ... ok [INFO] [stdout] test config::tests::approved_secret_fetches_entries_returns_hash_based_entry ... ok [INFO] [stdout] test config::tests::approved_project_configs_round_trip_via_custom_path ... ok [INFO] [stdout] test config::tests::approved_secret_fetches_entries_returns_project_wide_entry ... ok [INFO] [stdout] test config::tests::approved_secret_fetches_revoke_returns_true_when_hash_removed ... ok [INFO] [stdout] test backend::op::tests::backend_store_creates_new_item_when_no_item_config ... ok [INFO] [stdout] test config::tests::base_dir_from_env_prefers_explicit_env_value ... ok [INFO] [stdout] test config::tests::base_dir_from_env_uses_home_with_fallback_components ... ok [INFO] [stdout] test config::tests::approved_secret_fetches_contains_entry_after_approval ... ok [INFO] [stdout] test config::tests::default_gpg_file_pattern_returns_env_gpg ... ok [INFO] [stdout] test config::tests::default_log_file_returns_some_nonempty_path ... ok [INFO] [stdout] test config::tests::default_log_level_returns_info ... ok [INFO] [stdout] test config::tests::default_update_check_interval_returns_24 ... ok [INFO] [stdout] test config::tests::default_updates_enabled_returns_true ... ok [INFO] [stdout] test config::tests::effective_commands_without_matching_project_returns_empty ... ok [INFO] [stdout] test config::tests::effective_item_with_no_backend_item_returns_none ... ok [INFO] [stdout] test config::tests::effective_commands_with_matching_project_returns_commands ... ok [INFO] [stdout] test config::tests::effective_item_with_bw_backend_returns_bw_item ... ok [INFO] [stdout] test config::tests::ensure_secret_fetch_approved_non_interactive_error_mentions_interactive_session ... ok [INFO] [stdout] test config::tests::ensure_secret_fetch_approved_y_answer_approves_hash ... ok [INFO] [stdout] test config::tests::load_if_approved_non_terminal_ignores_mock_stdin_y ... ok [INFO] [stdout] test backend::op::tests::backend_store_fails_when_op_fails ... ok [INFO] [stdout] test config::tests::ensure_secret_fetch_approved_a_answer_approves_project_wide ... ok [INFO] [stdout] test config::tests::load_if_approved_returns_none_for_unapproved_in_non_terminal ... ok [INFO] [stdout] test config::tests::forget_reviewed_migration_entries_removes_fingerprint ... ok [INFO] [stdout] test config::tests::load_if_approved_returns_some_for_pre_approved_hash ... ok [INFO] [stdout] test backend::bw::tests::resolve_does_not_force_sync_for_non_retryable_errors ... ok [INFO] [stdout] test config::tests::load_if_approved_y_answer_in_terminal_returns_some ... ok [INFO] [stdout] test backend::op::tests::backend_store_with_item_configured_succeeds ... ok [INFO] [stdout] test backend::op::tests::get_item_field_calls_run_op_with_item_args ... ok [INFO] [stdout] test backend::op::tests::get_item_field_with_vault_arg ... ok [INFO] [stdout] test config::tests::load_if_approved_yes_answer_in_terminal_returns_some ... ok [INFO] [stdout] test config::tests::revoke_project_override_approval_returns_false_for_unapproved_entry ... ok [INFO] [stdout] test backend::op::tests::run_op_returns_err_on_non_zero_exit ... ok [INFO] [stdout] test config::tests::project_override_path_returns_some_when_override_file_exists_in_dir ... ok [INFO] [stdout] test config::tests::reviewed_migrations_forget_ignores_unknown_fingerprints ... ok [INFO] [stdout] test config::tests::reviewed_migrations_forget_removes_only_requested_fingerprints ... ok [INFO] [stdout] test config::tests::reviewed_migrations_path_is_some_and_points_to_expected_file ... ok [INFO] [stdout] test config::tests::project_override_path_returns_none_when_no_override_file ... ok [INFO] [stdout] test config::tests::reviewed_migration_entry_fingerprints_returns_empty_for_new_path ... ok [INFO] [stdout] test config::tests::project_override_symlink_is_rejected ... ok [INFO] [stdout] test config::tests::secret_fetch_approval_store_path_returns_some_nonempty_path ... ok [INFO] [stdout] test backend::op::tests::run_op_returns_stdout_on_success ... ok [INFO] [stdout] test config::tests::set_test_reviewed_migrations_path_overrides_and_clears_store_path ... ok [INFO] [stdout] test config::tests::revoke_secret_fetch_approval_returns_false_for_unapproved_entry ... ok [INFO] [stdout] test config::tests::state_dir_path_returns_local_state_location ... ok [INFO] [stdout] test config::tests::state_files_are_written_with_restricted_permissions ... ok [INFO] [stdout] test config::tests::test_approve_hash_keeps_max_hashes_and_evicts_oldest_lexicographic ... ok [INFO] [stdout] test config::tests::test_approval_store_round_trip_and_revoke ... ok [INFO] [stdout] test config::tests::test_approved_project_configs_load_from_missing_path_returns_empty ... ok [INFO] [stdout] test config::tests::test_approved_project_configs_load_returns_invalid_json_error ... ok [INFO] [stdout] test config::tests::test_approved_secret_fetches_load_from_missing_path_returns_empty ... ok [INFO] [stdout] test backend::op::tests::run_op_with_account_argument ... ok [INFO] [stdout] test backend::op::tests::with_mock_op_invokes_closure ... ok [INFO] [stdout] test config::tests::project_override_path_finds_file_in_ancestor_at_git_root ... ok [INFO] [stdout] test backend::op::tests::backend_store_with_item_configured_includes_vault_arg ... ok [INFO] [stdout] test config::tests::remember_and_reviewed_migration_entries_round_trip ... ok [INFO] [stdout] test config::tests::test_bw_config_default_sync_throttle_is_set ... ok [INFO] [stdout] test backend::bw::tests::with_mock_bw_executes_callback ... ok [INFO] [stdout] test config::tests::test_approved_secret_fetches_load_returns_invalid_json_error ... ok [INFO] [stdout] test config::tests::revoke_project_override_approval_returns_true_for_approved_entry ... ok [INFO] [stdout] test config::tests::test_config_approved_project_configs_returns_result ... ok [INFO] [stdout] test config::tests::test_config_path_contains_pw_env_and_toml ... ok [INFO] [stdout] test config::tests::test_config_secret_fetch_approval_store_path_does_not_panic ... ok [INFO] [stdout] test config::tests::test_default_config ... ok [INFO] [stdout] test config::tests::test_config_load_for_dir_with_no_override_returns_config ... ok [INFO] [stdout] test config::tests::test_config_approval_store_path_does_not_panic ... ok [INFO] [stdout] test config::tests::test_cache_config_defaults_are_enabled_for_four_hours ... ok [INFO] [stdout] test config::tests::test_config_project_override_approval_status_with_temp_file ... ok [INFO] [stdout] test config::tests::test_config_approved_secret_fetches_returns_result ... ok [INFO] [stdout] test config::tests::test_config_secret_fetch_approval_status_with_temp_env ... ok [INFO] [stdout] test config::tests::test_effective_item_from_bw_config ... ok [INFO] [stdout] test config::tests::test_effective_item_from_op_config ... ok [INFO] [stdout] test config::tests::test_expand_path_relative_unchanged ... ok [INFO] [stdout] test config::tests::test_expand_path_without_tilde ... ok [INFO] [stdout] test config::tests::test_effective_item_none_when_not_configured ... ok [INFO] [stdout] test config::tests::test_expand_path_with_tilde_prefix ... ok [INFO] [stdout] test config::tests::test_hash_file_known_content ... ok [INFO] [stdout] test config::tests::test_find_git_root_in_config_module ... ok [INFO] [stdout] test config::tests::test_effective_source_all_defaults_to_false ... ok [INFO] [stdout] test config::tests::test_effective_source_all_uses_defaults_when_enabled ... ok [INFO] [stdout] test config::tests::revoke_secret_fetch_approval_returns_true_for_approved_entry ... ok [INFO] [stdout] test config::tests::test_hash_file_matches_sha256_hex_of_content ... ok [INFO] [stdout] test config::tests::test_normalize_path_nonexistent_returns_input ... ok [INFO] [stdout] test config::tests::test_normalize_path_existing_dir ... ok [INFO] [stdout] test config::tests::test_ensure_secret_fetch_approved_bails_when_non_interactive ... ok [INFO] [stdout] test config::tests::test_normalize_path_returns_nonempty_canonical_string ... ok [INFO] [stdout] test config::tests::test_parse_minimal_config ... ok [INFO] [stdout] test config::tests::test_parse_project_directory_override ... ok [INFO] [stdout] test config::tests::test_resolve_secret_fetch_target_with_direct_env_file ... ok [INFO] [stdout] test config::tests::test_resolve_project_override_target_with_directory ... ok [INFO] [stdout] test config::tests::test_reviewed_migrations_load_from_missing_path_returns_empty ... ok [INFO] [stdout] test config::tests::test_resolve_secret_fetch_target_with_directory ... ok [INFO] [stdout] test config::tests::test_reviewed_migrations_remember_and_fingerprints ... ok [INFO] [stdout] test config::tests::test_resolve_secret_fetch_target_prefers_git_root_as_project ... ok [INFO] [stdout] test config::tests::test_reviewed_migrations_round_trip_and_forget ... ok [INFO] [stdout] test config::tests::test_reviewed_migrations_save_and_load ... ok [INFO] [stdout] test config::tests::test_revoke_project_override_approval_returns_false_when_not_approved ... ok [INFO] [stdout] test config::tests::test_revoke_secret_fetch_approval_returns_false_when_not_approved ... ok [INFO] [stdout] test config::tests::test_secret_fetch_is_approved_by_hash ... ok [INFO] [stdout] test config::tests::test_secret_fetch_approval_store_round_trip_and_revoke ... ok [INFO] [stdout] test config::tests::test_secret_fetch_is_approved_project_wide ... ok [INFO] [stdout] test config::tests::test_sha256_hex_empty_string ... ok [INFO] [stdout] test config::tests::test_sha256_hex_produces_64_hex_chars ... ok [INFO] [stdout] test config::tests::test_sha256_hex_produces_correct_digest ... ok [INFO] [stdout] test config::tests::test_source_all_defaults_to_false_when_omitted_from_toml ... ok [INFO] [stdout] test config::tests::test_source_all_parsed_from_toml ... ok [INFO] [stdout] test config::tests::test_validate_project_override ... ok [INFO] [stdout] test config_wizard::tests::apply_edit_rejects_invalid_numbers ... ok [INFO] [stdout] test config_wizard::tests::adjust_toggles_boolean_fields_and_cycles_log_level ... ok [INFO] [stdout] test config_wizard::tests::apply_edit_updates_backend_specific_optional_fields ... ok [INFO] [stdout] test config_wizard::tests::apply_edit_updates_log_file_and_update_interval ... ok [INFO] [stdout] test config_wizard::tests::apply_edit_updates_optional_and_numeric_fields ... ok [INFO] [stdout] test config_wizard::tests::backend_choice_from_value_maps_gpg ... ok [INFO] [stdout] test config_wizard::tests::backend_specific_fields_follow_backend_and_shared_visibility_rules ... ok [INFO] [stdout] test config_wizard::tests::default_state_uses_expected_backend_defaults ... ok [INFO] [stdout] test config_wizard::tests::edit_buffer_returns_bitwarden_folder_value ... ok [INFO] [stdout] test config_wizard::tests::edit_buffer_returns_bitwarden_item_value ... ok [INFO] [stdout] test config_wizard::tests::edit_buffer_returns_bitwarden_organization_value ... ok [INFO] [stdout] test config_wizard::tests::edit_buffer_returns_bitwarden_sync_throttle_value ... ok [INFO] [stdout] test config_wizard::tests::edit_buffer_returns_cache_ttl_value ... ok [INFO] [stdout] test config_wizard::tests::edit_buffer_returns_gpg_file_pattern_value ... ok [INFO] [stdout] test config_wizard::tests::edit_buffer_returns_gpg_recipient_value ... ok [INFO] [stdout] test config_wizard::tests::edit_buffer_returns_log_file_value ... ok [INFO] [stdout] test config_wizard::tests::edit_buffer_returns_op_account_value ... ok [INFO] [stdout] test config_wizard::tests::edit_buffer_returns_op_item_value ... ok [INFO] [stdout] test config_wizard::tests::edit_buffer_returns_update_check_interval_value ... ok [INFO] [stdout] test config_wizard::tests::handle_editing_key_backspace_removes_last_character ... ok [INFO] [stdout] test config_wizard::tests::handle_editing_key_appends_plain_characters ... ok [INFO] [stdout] test config_wizard::tests::handle_editing_key_escape_cancels_current_edit ... ok [INFO] [stdout] test config_wizard::tests::handle_key_delegates_normal_mode_keys ... ok [INFO] [stdout] test config_wizard::tests::handle_editing_key_enter_applies_bitwarden_organization_edit ... ok [INFO] [stdout] test config_wizard::tests::handle_editing_key_ignores_control_characters ... ok [INFO] [stdout] test config_wizard::tests::handle_normal_key_ctrl_c_cancels ... ok [INFO] [stdout] test config_wizard::tests::handle_normal_key_down_at_last_field_keeps_selection_on_last_field ... ok [INFO] [stdout] test config_wizard::tests::field_labels_and_help_text_match_expected_copy ... ok [INFO] [stdout] test config_wizard::tests::handle_normal_key_enter_starts_editing_for_editable_field ... ok [INFO] [stdout] test config_wizard::tests::handle_normal_key_enter_toggles_non_editable_field_without_edit_mode ... ok [INFO] [stdout] test config_wizard::tests::handle_normal_key_down_moves_selection_down ... ok [INFO] [stdout] test config_wizard::tests::handle_normal_key_esc_cancels ... ok [INFO] [stdout] test config_wizard::tests::handle_normal_key_left_cycles_backend_backward ... ok [INFO] [stdout] test config_wizard::tests::handle_normal_key_space_toggles_selected_field ... ok [INFO] [stdout] test config_wizard::tests::handle_normal_key_saves_rendered_config ... ok [INFO] [stdout] test config_wizard::tests::handle_normal_key_up_moves_selection_up ... ok [INFO] [stdout] test config_wizard::tests::highlight_toml_preserves_true_value_text_and_styles_it_green ... ok [INFO] [stdout] test config_wizard::tests::handle_normal_key_right_cycles_backend_forward ... ok [INFO] [stdout] test config::tests::test_effective_op_uses_project_override ... ok [INFO] [stdout] test config::tests::test_effective_cache_uses_project_override ... ok [INFO] [stdout] test config::tests::test_parse_full_config ... ok [INFO] [stdout] test config::tests::test_effective_gpg_uses_project_override ... ok [INFO] [stdout] test config::tests::test_project_backend_sections_attach_to_most_recent_project ... ok [INFO] [stdout] test config::tests::test_effective_fallback_example_env_uses_project_override_and_default ... ok [INFO] [stdout] test config::tests::test_effective_source_all_project_override_takes_precedence ... ok [INFO] [stdout] test config::tests::test_effective_warn_missing_uses_project_override_and_default ... ok [INFO] [stdout] test config::tests::test_project_for_prefers_most_specific_match ... ok [INFO] [stdout] test config::tests::test_effective_item_from_project ... ok [INFO] [stdout] test config_wizard::tests::highlight_toml_styles_bare_values_cyan ... ok [INFO] [stdout] test config::tests::test_effective_bw_uses_project_override ... ok [INFO] [stdout] test config_wizard::tests::handle_normal_key_plain_c_does_not_cancel ... ok [INFO] [stdout] test config::tests::test_effective_commands_for_project ... ok [INFO] [stdout] test config_wizard::tests::highlight_toml_styles_quoted_values_green ... ok [INFO] [stdout] test config_wizard::tests::highlight_toml_styles_false_values_red ... ok [INFO] [stdout] test config_wizard::tests::is_interactive_check_requires_terminal_input_and_output ... ok [INFO] [stdout] test config_wizard::tests::handle_normal_key_up_at_first_field_keeps_selection_at_zero ... ok [INFO] [stdout] test config_wizard::tests::log_level_choice_from_value_maps_trace ... ok [INFO] [stdout] test config_wizard::tests::option_display_formats_some_and_none ... ok [INFO] [stdout] test config_wizard::tests::log_level_choice_from_value_maps_warn_and_error ... ok [INFO] [stdout] test config_wizard::tests::render_config_includes_defaults_op_section_when_only_account_is_set ... ok [INFO] [stdout] test config_wizard::tests::render_config_includes_live_values_and_project_overrides ... ok [INFO] [stdout] test config_wizard::tests::terminal_session_drop_restores_terminal_escape_sequences ... ok [INFO] [stdout] test config_wizard::tests::starts_editing_returns_false_for_toggle_field ... ok [INFO] [stdout] test config_wizard::tests::value_returns_exact_op_account_string ... ok [INFO] [stdout] test config_wizard::tests::state_round_trips_core_values_and_preserves_projects ... ok [INFO] [stdout] test config_wizard::tests::yes_no_formats_true_and_false ... ok [INFO] [stdout] test env_file::tests::comment_has_no_migrate_marker_requires_both_prefix_and_suffix_match ... ok [INFO] [stdout] test env_file::tests::comment_has_no_migrate_marker_returns_false_for_regular_comment ... ok [INFO] [stdout] test env_file::tests::comment_has_no_migrate_marker_returns_true_for_marker ... ok [INFO] [stdout] test env_file::tests::contains_embedded_credentials_both_present_returns_true ... ok [INFO] [stdout] test config_wizard::tests::value_returns_exact_gpg_file_pattern_string ... ok [INFO] [stdout] test config_wizard::tests::save_config_to_path_creates_expected_file ... ok [INFO] [stdout] test env_file::tests::contains_embedded_credentials_empty_password_returns_false ... ok [INFO] [stdout] test env_file::tests::contains_embedded_credentials_empty_username_returns_false ... ok [INFO] [stdout] test env_file::tests::find_example_none_when_missing ... ok [INFO] [stdout] test env_file::tests::find_example_returns_correct_path ... ok [INFO] [stdout] test env_file::tests::find_returns_some_for_plain_env_file ... ok [INFO] [stdout] test env_file::tests::looks_like_high_entropy_secret_exactly_minimum_length_qualifies ... ok [INFO] [stdout] test env_file::tests::looks_like_high_entropy_secret_low_entropy_is_not_secret ... ok [INFO] [stdout] test env_file::tests::looks_like_high_entropy_secret_medium_entropy_long_is_secret ... ok [INFO] [stdout] test env_file::tests::looks_like_high_entropy_secret_medium_entropy_short_is_not_secret ... ok [INFO] [stdout] test env_file::tests::find_with_parents_stops_at_git_root_without_env ... ok [INFO] [stdout] test env_file::tests::looks_like_secret_name_detects_access_key_segment_pair_with_double_dash ... ok [INFO] [stdout] test env_file::tests::find_example_none_when_symlink ... ok [INFO] [stdout] test env_file::tests::find_rejects_symlinked_env_file ... ok [INFO] [stdout] test env_file::tests::find_with_parents_returns_ancestor_env_before_git_root ... ok [INFO] [stdout] test env_file::tests::has_common_secret_prefix_detects_each_known_prefix ... ok [INFO] [stdout] test env_file::tests::has_common_secret_prefix_returns_false_for_plain_value ... ok [INFO] [stdout] test env_file::tests::looks_like_secret_name_detects_api_key_segment_pair_with_double_dash ... ok [INFO] [stdout] test env_file::tests::looks_like_secret_name_detects_auth_key_segment_pair ... ok [INFO] [stdout] test env_file::tests::looks_like_secret_name_detects_private_key_segment_pair_with_double_dash ... ok [INFO] [stdout] test env_file::tests::looks_like_secret_name_does_not_match_non_secret_key_names ... ok [INFO] [stdout] test env_file::tests::find_with_parents_does_not_stop_at_submodule_root ... ok [INFO] [stdout] test env_file::tests::parse_rejects_symlinked_env_file ... ok [INFO] [stdout] test env_file::tests::split_value_and_comment_ignores_double_quote_inside_single_quotes ... ok [INFO] [stdout] test env_file::tests::split_value_and_comment_ignores_single_quote_inside_double_quotes ... ok [INFO] [stdout] test env_file::tests::split_value_and_comment_splits_hash_after_single_quoted_value ... ok [INFO] [stdout] test env_file::tests::split_value_and_comment_keeps_hash_inside_single_quotes ... ok [INFO] [stdout] test env_file::tests::strip_quotes_does_not_strip_mismatched_quotes ... ok [INFO] [stdout] test env_file::tests::test_classify_bw_reference ... ok [INFO] [stdout] test env_file::tests::strip_quotes_handles_multibyte_utf8 ... ok [INFO] [stdout] test env_file::tests::test_classify_empty ... ok [INFO] [stdout] test env_file::tests::test_classify_op_reference ... ok [INFO] [stdout] test env_file::tests::test_classify_plaintext ... ok [INFO] [stdout] test env_file::tests::test_detects_secret_by_name ... ok [INFO] [stdout] test config_wizard::tests::render_draws_visible_sections_into_terminal_buffer ... ok [INFO] [stdout] test env_file::tests::test_detects_secret_by_entropy ... ok [INFO] [stdout] test env_file::tests::test_detects_secret_in_url_credentials ... ok [INFO] [stdout] test env_file::tests::test_filters_likely_secret_entries ... ok [INFO] [stdout] test env_file::tests::test_export_prefix_in_full_parse ... ok [INFO] [stdout] test env_file::tests::test_filters_reviewed_likely_secret_entries ... ok [INFO] [stdout] test env_file::tests::test_blank_line_clears_pending_no_migrate_marker ... ok [INFO] [stdout] test env_file::tests::test_parse_entry_line_keeps_hash_inside_quotes ... ok [INFO] [stdout] test env_file::tests::test_strip_quotes ... ok [INFO] [stdout] test env_file::tests::test_ignores_plaintext_non_secret_setting ... ok [INFO] [stdout] test migrate::tests::config_for_migration_overrides_default_backend ... ok [INFO] [stdout] test env_file::tests::test_parse_entry_line_splits_inline_comment ... ok [INFO] [stdout] test migrate::tests::mask_value_shows_prefix_for_longer_values ... ok [INFO] [stdout] test migrate::tests::mask_value_strips_quotes_before_masking ... ok [INFO] [stdout] test migrate::tests::mask_value_returns_stars_for_short_values ... ok [INFO] [stdout] test env_file::tests::test_preceding_no_migrate_comment_marks_next_entry_only ... ok [INFO] [stdout] test env_file::tests::test_parse_entry_line_strips_export_prefix ... ok [INFO] [stdout] test migrate::tests::mask_value_multibyte_short_returns_stars ... ok [INFO] [stdout] test migrate::tests::is_interactive_check_requires_all_true ... ok [INFO] [stdout] test migrate::tests::migrate_returns_ok_with_no_plaintext_entries ... ok [INFO] [stdout] test migrate::tests::config_for_migration_overrides_project_backend ... ok [INFO] [stdout] test migrate::tests::mask_value_handles_multibyte_utf8 ... ok [INFO] [stdout] test migrate::tests::strip_quotes_leaves_mismatched_quotes ... ok [INFO] [stdout] test migrate::tests::strip_quotes_handles_multibyte_utf8 ... ok [INFO] [stdout] test migrate::tests::strip_quotes_leaves_unquoted_value ... ok [INFO] [stdout] test migrate::tests::strip_quotes_preserves_inner_content_exactly ... ok [INFO] [stdout] test migrate::tests::strip_quotes_removes_double_quotes ... ok [INFO] [stdout] test migrate::tests::strip_quotes_removes_single_quotes ... ok [INFO] [stdout] test migrate::tests::prompt_for_entries_returns_configured_mock_selection ... ok [INFO] [stdout] test migrate::tests::strip_quotes_trims_surrounding_whitespace ... ok [INFO] [stdout] test migrate::tests::test_mask_value_exactly_three_chars ... ok [INFO] [stdout] test migrate::tests::migrate_bails_with_plaintext_and_non_interactive_stdin ... ok [INFO] [stdout] test migrate::tests::test_mask_value_short ... ok [INFO] [stdout] test migrate::tests::test_mask_value_longer_than_three ... ok [INFO] [stdout] test env_file::tests::test_rewrite_preserves_inline_comments ... ok [INFO] [stdout] test migrate::tests::migrate_returns_err_when_no_env_file ... ok [INFO] [stdout] test migrate::tests::test_strip_quotes_double_quoted ... ok [INFO] [stdout] test migrate::tests::test_strip_quotes_mismatched_not_stripped ... ok [INFO] [stdout] test migrate::tests::test_strip_quotes_single_char_between_quotes ... ok [INFO] [stdout] test migrate::tests::test_strip_quotes_single_quoted ... ok [INFO] [stdout] test migrate::tests::test_strip_quotes_trims_surrounding_whitespace ... ok [INFO] [stdout] test migrate::tests::test_strip_quotes_unquoted ... ok [INFO] [stdout] test migrate::tests::test_mask_value_quoted_double ... ok [INFO] [stdout] test output::tests::test_format_command_wrappers_fish ... ok [INFO] [stdout] test output::tests::test_format_command_wrappers_posix ... ok [INFO] [stdout] test output::tests::test_format_command_wrappers_powershell ... ok [INFO] [stdout] test output::tests::test_format_exports_fish ... ok [INFO] [stdout] test output::tests::test_format_exports_powershell ... ok [INFO] [stdout] test output::tests::test_format_exports_posix ... ok [INFO] [stdout] test output::tests::test_format_key_tracking_filters_invalid_keys ... ok [INFO] [stdout] test output::tests::test_format_key_tracking_empty_input_returns_empty ... ok [INFO] [stdout] test output::tests::test_obfuscate_value_long ... ok [INFO] [stdout] test output::tests::test_format_key_tracking_returns_space_separated_keys ... ok [INFO] [stdout] test output::tests::test_obfuscate_value_short ... ok [INFO] [stdout] test migrate::tests::test_mask_value_quoted_single ... ok [INFO] [stdout] test output::tests::test_obfuscate_value_unicode_safe ... ok [INFO] [stdout] test output::tests::test_rejects_injection_key ... ok [INFO] [stdout] test output::tests::test_safe_command_name ... ok [INFO] [stdout] test output::tests::test_shell_escape_simple ... ok [INFO] [stdout] test output::tests::test_shell_escape_with_double_quotes ... ok [INFO] [stdout] test output::tests::test_shell_escape_with_single_quote ... ok [INFO] [stdout] test output::tests::test_shell_escape_with_spaces ... ok [INFO] [stdout] test output::tests::test_valid_env_key ... ok [INFO] [stdout] test progress::tests::clear_status_line_erases_visible_line ... ok [INFO] [stdout] test progress::tests::clear_status_line_skips_empty_line ... ok [INFO] [stdout] test progress::tests::should_pause_progress_output_matches_count ... ok [INFO] [stdout] test progress::tests::spinner_frame_cycles_consistently ... ok [INFO] [stdout] test progress::tests::activity_spinner_set_message_sends_update_command ... ok [INFO] [stdout] test progress::tests::suspend_progress_output_clears_visible_status_line ... ok [INFO] [stdout] test progress::tests::write_status_line_updates_visible_length_and_output ... ok [INFO] [stdout] test progress::tests::progress_output_suspension_drop_noops_when_not_paused ... ok [INFO] [stdout] test release::tests::accepts_release_tags_without_v_prefix ... ok [INFO] [stdout] test release::tests::adds_v_prefix_to_requested_tags ... ok [INFO] [stdout] test release::tests::archive_format_extension_tar_gz ... ok [INFO] [stdout] test release::tests::archive_entry_matches_binary_name_checks_only_the_basename ... ok [INFO] [stdout] test release::tests::detect_release_asset_for_rejects_unsupported_targets ... ok [INFO] [stdout] test release::tests::detect_release_asset_for_supported_targets_returns_expected_assets ... ok [INFO] [stdout] test release::tests::detect_release_asset_returns_asset_for_current_platform ... ok [INFO] [stdout] test progress::tests::progress_output_suspension_drop_notifies_waiters ... ok [INFO] [stdout] test progress::tests::suspend_progress_output_is_reentrant ... ok [INFO] [stdout] test release::tests::detect_release_asset_linux_binary_name_is_pw_env ... ok [INFO] [stdout] test release::tests::is_newer_release_returns_false_for_current_version ... ok [INFO] [stdout] test release::tests::github_release_owner_constant_matches_repo_url ... ok [INFO] [stdout] test release::tests::is_newer_release_returns_false_for_older_version ... ok [INFO] [stdout] test migrate::tests::migrate_selects_and_stores_chosen_entries ... ok [INFO] [stdout] test release::tests::is_newer_release_rejects_invalid_version ... ok [INFO] [stdout] test progress::tests::activity_spinner_drop_sends_clear_command ... ok [INFO] [stdout] test release::tests::is_newer_release_returns_false_for_same_version ... ok [INFO] [stdout] test release::tests::is_newer_release_returns_true_for_higher_major ... ok [INFO] [stdout] test release::tests::is_newer_release_returns_true_for_higher_patch ... ok [INFO] [stdout] test release::tests::is_newer_release_returns_true_for_higher_version ... ok [INFO] [stdout] test release::tests::normalize_tag_handles_whitespace ... ok [INFO] [stdout] test release::tests::download_file_writes_response_body ... ok [INFO] [stdout] test release::tests::keeps_existing_v_prefix_on_requested_tags ... ok [INFO] [stdout] test release::tests::maybe_check_for_update_returns_ok_immediately_when_updates_disabled ... ok [INFO] [stdout] test release::tests::is_newer_release_returns_false_for_lower_version ... ok [INFO] [stdout] test release::tests::extract_binary_from_archive_tar_gz_extracts_expected_binary_entry ... ok [INFO] [stdout] test release::tests::now_unix_timestamp_is_reasonable ... ok [INFO] [stdout] test migrate::tests::migrate_with_empty_selection_does_not_rewrite_env ... ok [INFO] [stdout] test release::tests::rejects_invalid_release_tags ... ok [INFO] [stdout] test release::tests::http_client_builds_successfully_with_short_timeout ... ok [INFO] [stdout] test release::tests::release_archive_name_matches_installer_convention ... ok [INFO] [stdout] test release::tests::release_archive_name_uses_extension_from_asset ... ok [INFO] [stdout] test release::tests::release_check_state_is_due_with_zero_interval ... ok [INFO] [stdout] test release::tests::release_check_state_is_not_due_when_checked_just_now ... ok [INFO] [stdout] test release::tests::release_check_state_load_returns_default_for_missing_path ... ok [INFO] [stdout] test release::tests::release_check_state_load_returns_error_for_invalid_json ... ok [INFO] [stdout] test release::tests::maybe_check_for_update_returns_ok_when_state_is_not_due ... ok [INFO] [stdout] test release::tests::maybe_check_for_update_updates_state_and_notified_version_when_due ... ok [INFO] [stdout] test migrate::tests::migrate_only_clears_entries_selected_by_prompt ... ok [INFO] [stdout] test release::tests::release_check_state_save_and_load_round_trips ... ok [INFO] [stdout] test release::tests::release_download_url_has_expected_format ... ok [INFO] [stdout] test release::tests::resolve_release_latest_uses_latest_selector ... ok [INFO] [stdout] test release::tests::resolve_release_with_explicit_v_prefix ... ok [INFO] [stdout] test release::tests::resolve_release_with_explicit_version_no_network ... ok [INFO] [stdout] test release::tests::release_check_state_save_creates_parent_directory ... ok [INFO] [stdout] test release::tests::should_skip_update_only_for_matching_versions ... ok [INFO] [stdout] test release::tests::state_is_due_when_never_checked ... ok [INFO] [stdout] test release::tests::state_is_not_due_before_interval_elapses ... ok [INFO] [stdout] test release::tests::state_is_due_after_interval_elapses ... ok [INFO] [stdout] test release::tests::state_path_does_not_panic ... ok [INFO] [stdout] test release::tests::state_path_has_expected_location_and_filename ... ok [INFO] [stdout] test release::tests::update_rejects_invalid_requested_version ... ok [INFO] [stdout] test release::tests::update_short_circuits_when_already_on_requested_version ... ok [INFO] [stdout] test release::tests::user_agent_mentions_binary_and_version ... ok [INFO] [stdout] test resolve::tests::cache_entry_kind_returns_expected_labels ... ok [INFO] [stdout] test resolve::tests::build_secret_cache_key_uses_effective_item_only_for_op_and_bw ... ok [INFO] [stdout] test release::tests::strips_v_prefix_from_release_tags ... ok [INFO] [stdout] test resolve::tests::find_git_dir_resolves_absolute_gitdir_file ... ok [INFO] [stdout] test resolve::tests::detect_repository_remote_prefers_origin_when_multiple_remotes_exist ... ok [INFO] [stdout] test resolve::tests::current_git_branch_returns_none_for_non_branch_reference ... ok [INFO] [stdout] test resolve::tests::cache_backend_config_serializes_known_backends_and_defaults_unknown ... ok [INFO] [stdout] test resolve::tests::detect_project_name_uses_folder_name_when_no_git ... ok [INFO] [stdout] test resolve::tests::find_git_dir_returns_none_for_malformed_gitdir_file ... ok [INFO] [stdout] test resolve::tests::formats_audit_log_ignores_empty_project_string_and_uses_dir_name ... ok [INFO] [stdout] test resolve::tests::formats_audit_log_uses_dir_name_when_project_is_empty_string ... ok [INFO] [stdout] test resolve::tests::current_git_branch_returns_none_for_detached_head ... ok [INFO] [stdout] test resolve::tests::detect_project_name_uses_git_root_name ... ok [INFO] [stdout] test resolve::tests::normalize_git_remote_url_accepts_non_alpha_single_char_host_without_slash ... ok [INFO] [stdout] test resolve::tests::normalize_git_remote_url_accepts_scheme_only_url ... ok [INFO] [stdout] test resolve::tests::detect_repository_remote_uses_branch_remote_when_multiple_without_origin ... ok [INFO] [stdout] test resolve::tests::normalize_git_remote_url_accepts_supported_remote_forms ... ok [INFO] [stdout] test resolve::tests::normalize_git_remote_url_rejects_false_windows_drive_from_third_byte_slash ... ok [INFO] [stdout] test resolve::tests::normalize_git_remote_url_rejects_local_prefixes_even_with_protocol_like_content ... ok [INFO] [stdout] test resolve::tests::formats_audit_log_with_folder_and_env_file ... ok [INFO] [stdout] test resolve::tests::detect_repository_remote_returns_none_for_local_path_remote ... ok [INFO] [stdout] test resolve::tests::parse_git_config_ignores_comments_and_malformed_sections ... ok [INFO] [stdout] test resolve::tests::normalize_git_remote_url_rejects_non_alphabetic_windows_drive_prefixes ... ok [INFO] [stdout] test resolve::tests::normalize_git_remote_url_rejects_local_and_windows_paths ... ok [INFO] [stdout] test resolve::tests::formats_audit_log_uses_dir_name_when_project_is_none ... ok [INFO] [stdout] test resolve::tests::normalize_git_remote_url_rejects_invalid_scp_like_hosts ... ok [INFO] [stdout] test resolve::tests::log_credential_fetch_audit_emits_audit_message ... ok [INFO] [stdout] test resolve::tests::resolve_env_file_returns_empty_for_all_plaintext_entries ... ok [INFO] [stdout] test resolve::tests::find_git_root_finds_root_above_subdir ... ok [INFO] [stdout] test resolve::tests::log_credential_fetch_audit_does_not_panic ... ok [INFO] [stdout] test resolve::tests::find_git_dir_resolves_relative_gitdir_file ... ok [INFO] [stdout] test resolve::tests::find_git_root_returns_none_when_no_git_above ... ok [INFO] [stdout] test resolve::tests::resolve_env_file_returns_empty_for_empty_env_file ... ok [INFO] [stdout] test resolve::tests::resolve_env_file_with_source_all_includes_plaintext_entries ... ok [INFO] [stdout] test resolve::tests::select_git_remote_name_handles_empty_and_single_remote_maps ... ok [INFO] [stdout] test shell::tests::test_fish_hook_contains_on_variable ... ok [INFO] [stdout] test shell::tests::test_posix_hooks_keep_state_for_nested_dirs ... ok [INFO] [stdout] test shell::tests::test_unsupported_shell ... ok [INFO] [stdout] test shell::tests::test_powershell_hook_contains_prompt ... ok [INFO] [stdout] test shell::tests::test_bash_hook_contains_cd ... ok [INFO] [stdout] test resolve::tests::resolve_env_file_without_source_all_omits_plaintext_entries ... ok [INFO] [stdout] test shell::tests::test_zsh_hook_contains_chpwd ... ok [INFO] [stdout] test tests::build_hook_output_returns_empty_string_for_dir_without_env_file ... ok [INFO] [stdout] test tests::build_hook_output_with_fish_syntax_and_commands_configured ... ok [INFO] [stdout] test tests::build_hook_output_with_plaintext_env_and_no_commands_returns_empty ... ok [INFO] [stdout] test tests::build_hook_output_uses_wrappers_for_command_patterns ... ok [INFO] [stdout] test tests::config_template_contains_expected_content ... ok [INFO] [stdout] test tests::contains_glob_meta_bracket ... ok [INFO] [stdout] test tests::check_config_with_default_config_and_temp_dir ... ok [INFO] [stdout] test tests::contains_glob_meta_none ... ok [INFO] [stdout] test tests::contains_glob_meta_question ... ok [INFO] [stdout] test tests::contains_glob_meta_star ... ok [INFO] [stdout] test tests::emit_missing_entries_warning_returns_count_of_missing ... ok [INFO] [stdout] test tests::emit_missing_entries_warning_returns_zero_when_all_resolved ... ok [INFO] [stdout] test tests::emit_plaintext_secret_warning_with_likely_secret_entry_outputs_warning ... ok [INFO] [stdout] test tests::handle_approvals_list_fetch_returns_ok ... ok [INFO] [stdout] test tests::handle_approvals_list_returns_ok ... ok [INFO] [stdout] test tests::handle_approvals_revoke_fetch_returns_ok_when_no_approval_exists ... ok [INFO] [stdout] test tests::handle_approvals_revoke_returns_ok_when_no_approval_exists ... ok [INFO] [stdout] test tests::emit_plaintext_secret_warning_with_no_secrets ... ok [INFO] [stdout] test tests::handle_approvals_show_fetch_with_temp_env ... ok [INFO] [stdout] test tests::handle_approvals_show_fetch_with_none_path_returns_ok ... ok [INFO] [stdout] test tests::handle_approvals_show_with_none_path_returns_ok ... ok [INFO] [stdout] test tests::handle_approvals_show_with_valid_override_file ... ok [INFO] [stdout] test resolve::tests::resolve_env_file_batches_default_bitwarden_entries ... ok [INFO] [stdout] test tests::is_executable_file_executable_returns_true ... ok [INFO] [stdout] test tests::is_executable_file_non_executable_regular_file_returns_false ... ok [INFO] [stdout] test tests::is_executable_file_nonexistent_returns_false ... ok [INFO] [stdout] test tests::is_executable_file_on_directory_returns_false ... ok [INFO] [stdout] test tests::keyring_clear_status_message_is_none_when_nothing_happened ... ok [INFO] [stdout] test tests::keyring_clear_status_message_reports_keyring_unavailable ... ok [INFO] [stdout] test tests::keyring_clear_status_message_reports_multiple_delete_failures ... ok [INFO] [stdout] test tests::keyring_clear_status_message_reports_multiple_deleted_credentials ... ok [INFO] [stdout] test tests::keyring_clear_status_message_reports_single_delete_failure ... ok [INFO] [stdout] test resolve::tests::resolve_env_file_passes_bw_reference_to_backend ... ok [INFO] [stdout] test tests::keyring_clear_status_message_reports_single_deleted_credential ... ok [INFO] [stdout] test tests::keyring_clear_status_message_zero_deleted_credentials_returns_none ... ok [INFO] [stdout] test tests::list_path_executables_with_no_path_returns_empty ... ok [INFO] [stdout] test tests::list_path_executables_with_real_dir_returns_executables ... ok [INFO] [stdout] test resolve::tests::resolve_env_file_passes_op_reference_to_backend ... ok [INFO] [stdout] test tests::load_config_for_command_uses_defaults_for_config_wizard_on_parse_error ... ok [INFO] [stdout] test tests::maybe_check_for_release_update_does_not_panic ... ok [INFO] [stdout] test tests::missing_resolvable_keys_returns_only_unresolved_keys ... ok [INFO] [stdout] test tests::pending_migration_entries_with_no_secrets_returns_empty ... ok [INFO] [stdout] test tests::missing_resolvable_keys_returns_empty_when_all_resolved ... ok [INFO] [stdout] test tests::pending_migration_entries_with_secret_returns_nonempty ... ok [INFO] [stdout] test tests::resolve_dir_existing_path ... ok [INFO] [stdout] test tests::resolve_dir_none_returns_current_dir ... ok [INFO] [stdout] test tests::resolve_dir_nonexistent_path_returns_error ... ok [INFO] [stdout] test tests::resolve_dir_with_none_returns_current_dir ... ok [INFO] [stdout] test tests::resolve_dir_with_some_existing_dir_returns_canonical ... ok [INFO] [stdout] test resolve::tests::resolve_env_file_resolves_default_entries_with_non_gpg_backend ... ok [INFO] [stdout] test tests::resolve_wrapped_commands_keeps_exact_safe_names ... ok [INFO] [stdout] test tests::resolve_wrapped_commands_deduplicates_matches ... ok [INFO] [stdout] test tests::resolve_wrapped_commands_skips_invalid_glob ... ok [INFO] [stdout] test tests::resolve_wrapped_commands_skips_unsafe_command_names ... ok [INFO] [stdout] test tests::should_warn_missing_truth_table ... ok [INFO] [stdout] test tests::summarize_entry_keys_empty ... ok [INFO] [stdout] test tests::summarize_entry_keys_four_shows_plus_more ... ok [INFO] [stdout] test tests::summarize_entry_keys_single ... ok [INFO] [stdout] test tests::resolve_wrapped_commands_expands_globs_from_path ... ok [INFO] [stdout] test tests::summarize_entry_keys_truncates_beyond_three ... ok [INFO] [stdout] test tests::summarize_entry_keys_two ... ok [INFO] [stdout] test tests::summarize_entry_keys_three ... ok [INFO] [stdout] test resolve::tests::resolve_env_file_falls_back_when_keyring_is_unavailable ... ok [INFO] [stdout] test tests::check_backends_reports_not_found_when_backends_missing ... ok [INFO] [stdout] test tests::check_config_when_config_file_exists_with_vault_and_folder ... ok [INFO] [stdout] test tests::load_config_for_command_returns_error_for_non_wizard_parse_error ... ok [INFO] [stdout] test resolve::tests::resolve_env_file_uses_secret_cache_for_bitwarden_entries ... ok [INFO] [stdout] test resolve::tests::resolve_env_file_uses_secret_cache_for_gpg_entries ... ok [INFO] [stdout] test tests::handle_cache_clear_removes_folder_cache_file ... ok [INFO] [stdout] test resolve::tests::resolve_env_file_uses_secret_cache_for_op_entries ... ok [INFO] [stdout] test tests::handle_cache_clear_returns_ok_when_cache_file_is_absent ... ok [INFO] [stdout] test tests::check_backends_does_not_panic ... ok [INFO] [stderr] [|] loading [/] loading [ok] done [INFO] [stdout] test progress::tests::activity_spinner_enabled_path_runs_spinner_loop ... ok [INFO] [stdout] test progress::tests::activity_spinner_finish_sends_finish_command_and_stops ... ok [INFO] [stdout] test release::tests::http_client_applies_timeout_to_requests ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 631 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.09s [INFO] [stdout] [INFO] [stderr] Running tests/command_scoped.rs (/opt/rustwide/target/debug/deps/command_scoped-64e9ca95ad8b1b60) [INFO] [stdout] [INFO] [stdout] running 34 tests [INFO] [stdout] test approvals_revoke_project_override ... ok [INFO] [stdout] test check_outputs_backend_not_found_markers ... ok [INFO] [stdout] test approvals_show_reports_approved_status_when_hash_matches ... ok [INFO] [stdout] test check_outputs_configuration_section ... ok [INFO] [stdout] test approvals_approve_and_show_project_override ... ok [INFO] [stdout] test approvals_revoke_fetch ... ok [INFO] [stdout] test approvals_show_reports_changed_status_when_file_modified ... ok [INFO] [stdout] test check_succeeds_even_without_backends ... ok [INFO] [stdout] test export_emits_warning_for_likely_plaintext_secrets ... ok [INFO] [stdout] test hook_outputs_empty_for_dir_without_env_file ... ok [INFO] [stdout] test approvals_list_fetch_shows_empty_when_no_approvals ... ok [INFO] [stdout] test hook_expands_globbed_command_wrappers_from_path ... ok [INFO] [stdout] test approvals_list_shows_empty_when_no_approvals ... ok [INFO] [stdout] test check_outputs_backend_found_marker_when_op_succeeds ... ok [INFO] [stdout] test approvals_approve_fetch_and_show ... ok [INFO] [stdout] test hook_respects_search_parent_env_false ... ok [INFO] [stdout] test init_outputs_bash_hook ... ok [INFO] [stdout] test config_template_prints_defaults ... ok [INFO] [stdout] test init_outputs_fish_hook ... ok [INFO] [stdout] test export_uses_fish_shell_syntax ... ok [INFO] [stdout] test export_uses_powershell_shell_syntax ... ok [INFO] [stdout] test export_does_not_emit_warning_for_non_secret_plaintext ... ok [INFO] [stdout] test migrate_help_lists_backend_override ... ok [INFO] [stdout] test check_shows_backend_failure_when_exits_nonzero ... ok [INFO] [stdout] test load_shows_no_warning_and_plaintext_label_for_non_secret_entries ... ok [INFO] [stdout] test load_shows_no_migrate_label_for_annotated_entries ... ok [INFO] [stdout] test exec_removes_managed_keys_from_child_environment ... ok [INFO] [stdout] test load_shows_plaintext_secret_label_and_warning_for_likely_secrets ... ok [INFO] [stdout] test init_outputs_zsh_hook ... ok [INFO] [stdout] test setup_logging_creates_debug_log_when_file_configured ... ok [INFO] [stdout] test hook_finds_parent_env_by_default ... ok [INFO] [stdout] test hook_outputs_exact_command_wrapper_without_path_match ... ok [INFO] [stdout] test hook_outputs_fish_wrappers_and_tracking ... ok [INFO] [stdout] test hook_outputs_powershell_wrappers_and_tracking ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 34 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.34s [INFO] [stdout] [INFO] [stderr] Running tests/config_wizard.rs (/opt/rustwide/target/debug/deps/config_wizard-3f1d8b3a4a4f037e) [INFO] [stdout] [INFO] [stdout] running 2 tests [INFO] [stdout] test config_wizard_requires_interactive_terminal ... ok [INFO] [stdout] test config_wizard_runs_interactively_and_renders_initial_screen ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.12s [INFO] [stdout] [INFO] [stderr] Running tests/migrate_cli.rs (/opt/rustwide/target/debug/deps/migrate_cli-6e899c9624299a99) [INFO] [stdout] [INFO] [stdout] running 2 tests [INFO] [stdout] test migrate_omits_likely_secret_count_when_none_are_detected ... ok [INFO] [stdout] test migrate_reports_likely_secret_count_when_present ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "0ea9bc3bbe6d5b89b8099568d47fa8e26947dc9f251fdec3e8ccb5255429a419", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "0ea9bc3bbe6d5b89b8099568d47fa8e26947dc9f251fdec3e8ccb5255429a419", kill_on_drop: false }` [INFO] [stdout] 0ea9bc3bbe6d5b89b8099568d47fa8e26947dc9f251fdec3e8ccb5255429a419